updates 17.11.2 → 17.11.4
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 +8 -8
- package/dist/index.js +11 -11
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
`updates` is a CLI tool which checks for dependency updates. It is typically able to complete in less than a second.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## Supported files
|
|
9
9
|
|
|
10
10
|
- `package.json` - npm dependencies
|
|
11
11
|
- `pyproject.toml` - `uv` dependencies
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
- `.{github,gitea,forgejo}/workflows` - Actions and Docker images
|
|
15
15
|
- `Dockerfile*`, `docker-*.{yml,yaml}` - Docker images
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
## Usage
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
# check for updates
|
|
@@ -30,8 +30,11 @@ npx updates -u && npm i
|
|
|
30
30
|
|:-|:-|
|
|
31
31
|
|`-u, --update`|Update versions and write dependency file|
|
|
32
32
|
|`-f, --file <path,...>`|File or directory to use, defaults to current directory|
|
|
33
|
+
|`-M, --modes <mode,...>`|Which modes to enable. Either `npm`, `pypi`, `go`, `cargo`, `actions`, `docker`. Default: `npm,pypi,go,cargo,actions,docker`|
|
|
33
34
|
|`-i, --include <dep,...>`|Include only given dependencies|
|
|
34
35
|
|`-e, --exclude <dep,...>`|Exclude given dependencies|
|
|
36
|
+
|`-l, --pin <dep=range>`|Pin dependency to given semver range|
|
|
37
|
+
|`-C, --cooldown <duration>`|Minimum dependency age, e.g. `7`, `1w`, `2d`, `6h`|
|
|
35
38
|
|`-p, --prerelease [<dep,...>]`|Consider prerelease versions|
|
|
36
39
|
|`-R, --release [<dep,...>]`|Only use release versions, may downgrade|
|
|
37
40
|
|`-g, --greatest [<dep,...>]`|Prefer greatest over latest version|
|
|
@@ -39,15 +42,12 @@ npx updates -u && npm i
|
|
|
39
42
|
|`-P, --patch [<dep,...>]`|Consider only up to semver-patch|
|
|
40
43
|
|`-m, --minor [<dep,...>]`|Consider only up to semver-minor|
|
|
41
44
|
|`-d, --allow-downgrade [<dep,...>]`|Allow version downgrades when using latest version|
|
|
42
|
-
|`-C, --cooldown <days>`|Minimum dependency age in days|
|
|
43
|
-
|`-l, --pin <dep=range>`|Pin dependency to given semver range|
|
|
44
|
-
|`-E, --error-on-outdated`|Exit with code 2 when updates are available and 0 when not|
|
|
45
|
-
|`-U, --error-on-unchanged`|Exit with code 0 when updates are available and 2 when not|
|
|
46
|
-
|`-r, --registry <url>`|Override npm registry URL|
|
|
47
45
|
|`-S, --sockets <num>`|Maximum number of parallel HTTP sockets opened. Default: 96|
|
|
48
46
|
|`-T, --timeout <ms>`|Network request timeout in ms (go probes use half). Default: 5000|
|
|
49
|
-
|`-
|
|
47
|
+
|`-r, --registry <url>`|Override npm registry URL|
|
|
50
48
|
|`-I, --indirect`|Include indirect Go dependencies|
|
|
49
|
+
|`-E, --error-on-outdated`|Exit with code 2 when updates are available and 0 when not|
|
|
50
|
+
|`-U, --error-on-unchanged`|Exit with code 0 when updates are available and 2 when not|
|
|
51
51
|
|`-j, --json`|Output a JSON object|
|
|
52
52
|
|`-n, --no-color`|Disable color output|
|
|
53
53
|
|`-v, --version`|Print the version|
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
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,readFileSync as h,readdirSync as g,statSync as _,truncateSync as v,writeFileSync as y}from"node:fs";import{parseArgs as b,promisify as ee,stripVTControlCharacters as x,styleText as te}from"node:util";import S from"node:dns";import{execFile as ne}from"node:child_process";async function re(e,t,{concurrency:n=1/0,stopOnError:r=!0,signal:i}={}){return new Promise((a,o)=>{if(e[Symbol.iterator]===void 0&&e[Symbol.asyncIterator]===void 0)throw TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof e})`);if(typeof t!=`function`)throw TypeError(`Mapper function is required`);if(!(Number.isSafeInteger(n)&&n>=1||n===1/0))throw TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${n}\` (${typeof n})`);let s=[],c=[],l=new Map,u=!1,d=!1,f=!1,p=0,m=0,h=e[Symbol.iterator]===void 0?e[Symbol.asyncIterator]():e[Symbol.iterator](),g=()=>{y(i.reason)},_=()=>{i?.removeEventListener(`abort`,g)},v=e=>{a(e),_()},y=e=>{u=!0,d=!0,o(e),_()};i&&(i.aborted&&y(i.reason),i.addEventListener(`abort`,g,{once:!0}));let b=async()=>{if(d)return;let e=await h.next(),n=m;if(m++,e.done){if(f=!0,p===0&&!d){if(!r&&c.length>0){y(AggregateError(c));return}if(d=!0,l.size===0){v(s);return}let e=[];for(let[t,n]of s.entries())l.get(t)!==ie&&e.push(n);v(e)}return}p++,(async()=>{try{let r=await e.value;if(d)return;let i=await t(r,n);i===ie&&l.set(n,i),s[n]=i,p--,await b()}catch(e){if(r)y(e);else{c.push(e),p--;try{await b()}catch(e){y(e)}}}})()};(async()=>{for(let e=0;e<n;e++){try{await b()}catch(e){y(e);break}if(f||u)break}})()})}const ie=Symbol(`skip`);function ae(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 ue(a[1]))(!(e in n)||typeof n[e]!=`object`||Array.isArray(n[e]))&&(n[e]={}),n=n[e];continue}let o=de(i);if(o<0)continue;let s=i.slice(0,o).trim(),c=i.slice(o+1).trim(),l=ue(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]=oe(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:w(i[3]))??i[4]??i[5];e!==void 0&&e!==``&&t.push(se(e))}}function oe(e){if(e.startsWith(`[`)){let t=[];return C(e.slice(1,e.lastIndexOf(`]`)),t),t}return e.startsWith(`{`)?ce(e):e.startsWith(`"""`)?w(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?w(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]=oe(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 ue(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 de(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 w(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
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 fe=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,T=new Map;function E(e){if(typeof e!=`string`)return null;let t=T.get(e);if(t!==void 0)return t;let n=fe.exec(e.trim());if(!n)return T.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 T.set(e,s),s}function D(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:n?-1:r?1:e<t?-1:e>t?1:0}function O(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function k(e,t){let n=O(e,t);if(n!==0)return n;if(!e.prerelease.length&&!t.prerelease.length)return 0;if(e.prerelease.length&&!t.prerelease.length)return-1;if(!e.prerelease.length&&t.prerelease.length)return 1;let r=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<r;n++){if(e.prerelease[n]===void 0)return-1;if(t.prerelease[n]===void 0)return 1;let r=D(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function A(e){return E(e)?.version??null}function pe(e){return E(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 j(e,t){let n=E(e),r=E(t);if(!n||!r||n.version===r.version)return null;let i=k(n,r),a=i>0?n:r,o=i>0?r:n,s=a.prerelease.length>0;if(o.prerelease.length>0&&!s){if(!o.patch&&!o.minor)return`major`;if(O(o,a)===0)return o.minor&&!o.patch?`minor`:`patch`}let c=s?`pre`:``;return n.major===r.major?n.minor===r.minor?n.patch===r.patch?`prerelease`:`${c}patch`:`${c}minor`:`${c}major`}function _e(e,t){let n=E(e),r=E(t);return!n||!r?!1:k(n,r)>0}function ve(e,t){let n=E(e),r=E(t);return!n||!r?!1:k(n,r)>=0}function ye(e,t){let n=E(e),r=E(t);return!n||!r?!1:k(n,r)<0}function be(e,t){let n=E(e),r=E(t);return!n||!r?!0:k(n,r)!==0}function xe(e){let t=/^(>=|<=|>|<|=)?\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)$/.exec(e.trim());if(!t)return null;let n=t[2],r=E(`${n}.${t[3]??`0`}.${t[4]??`0`}${t[5]||``}`);return r?{op:t[1]||`=`,semver:r}:null}function Se(e,t){let n=k(e,t.semver);switch(t.op){case`>=`:return n>=0;case`<=`:return n<=0;case`>`:return n>0;case`<`:return n<0;case`=`:return n===0;default:return n===0}}function M(e,t,n){return`${e}.${t}.${n}-0`}function Ce(e){return e.replace(/~\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t);if(n===void 0)return`>=${a}.0.0 <${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 we(e){return e.replace(/\^\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t),o=i||``;if(n===void 0)return`>=${a}.0.0 <${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 Te(e){return e.replace(/v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)\s+-\s+v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i,a,o,s,c)=>{let l=Number(t),u=n===void 0?0:Number(n),d=r===void 0?0:Number(r),f=i||``,p=Number(a),m;return m=s===void 0?o===void 0?`<${M(p+1,0,0)}`:`<${M(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function Ee(e){return/^\s*[*xX]\s*$/.test(e)?`>=0.0.0`:(e=e.replace(/v?(\d+)\.[xX*](?:\.[xX*])?/g,(e,t)=>{let n=Number(t);return`>=${n}.0.0 <${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 De=new Map;function Oe(e){let t=De.get(e);if(t!==void 0)return t;let n=e.split(`||`).map(e=>e.trim()),r=[];for(let t of n){if(!t){r.push([]);continue}t=Te(t),t=we(t),t=Ce(t),t=Ee(t),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t)=>/[<>=]/.test(t)?e:`${t}=${e.trim()}`),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=xe(t);if(!n)return De.set(e,null),null;i.push(n)}if(i.length===0)return De.set(e,null),null;r.push(i)}let i=r.length?r:null;return De.set(e,i),i}function ke(e,t){for(let n of t)if(!Se(e,n))return!1;if(e.prerelease.length>0){for(let n of t)if(n.semver.prerelease.length>0&&n.semver.major===e.major&&n.semver.minor===e.minor&&n.semver.patch===e.patch)return!0;return!1}return!0}function Ae(e,t){let n=E(e);if(!n)return!1;let r=Oe(t);if(!r)return!1;for(let e of r)if(e.length===0||ke(n,e))return!0;return!1}function je(e){if(typeof e!=`string`)return null;try{return Oe(e)?e:null}catch{return null}}const Me=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],Ne={"1 day ago":`yesterday`,"1 week ago":`last week`,"1 month ago":`last month`,"1 year ago":`last year`,"in 1 day":`tomorrow`,"in 1 week":`next week`,"in 1 month":`next month`,"in 1 year":`next year`},Pe={sec:`second`,min:`minute`};function Fe(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function Ie(e,{now:t,noAffix:n=!1,times:r=Me,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=Ne,longUnits:l=!1}={}){let u=Fe(e),d=t===void 0?Date.now():Fe(t);if(u!==u)return o||String(e);let f=d-u,p=f<0;if(p&&(f=-f),f<i)return a;let m=0,h=``;for(let e=0,t=r.length;e<t;e++){let t=r[e];if(!(f>=t[1])){m=f/t[0]|0,h=(l&&Pe[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Le(e,t,n){if(e===t)return e;let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;if(r>0&&e[r-1]!==`.`&&e[r-1]!==`-`){let t=r-1;for(;t>=0&&e[t]!==`.`&&e[t]!==`-`;)t--;if(t>=0)r=t+1;else{let t=0;for(;t<r&&!/\d/.test(e[t]);)t++;r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Re(e){let t=[];for(let n of e){let[e,r]=n.replaceAll(/\s+/g,``).split(/[<>=~]+/);e&&/^[0-9.a-z]+$/.test(r)&&t.push({name:e,version:r})}return t}const ze=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Be=[`node`,`deno`,`bun`],Ve=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],He=[`deps`,`indirect`,`replace`,`tool`],Ue=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function N(e,t){for(let n of t instanceof Set?t:[])if(n.test(e))return!0;return!1}function We(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Ge(e){return e.split(`,`).filter(Boolean)}function Ke(e,t,n){return!e||!t?!0:(n-Date.parse(e))/(24*3600*1e3)>=t}function qe(){let e=new Date;return[e.getFullYear(),`-`,String(e.getMonth()+1).padStart(2,`0`),`-`,String(e.getDate()).padStart(2,`0`),` `,String(e.getHours()).padStart(2,`0`),`:`,String(e.getMinutes()).padStart(2,`0`),`:`,String(e.getSeconds()).padStart(2,`0`)].join(``)}function Je(e,t,n=` `){let r=``,i=Array(e[0].length).fill(0);for(let n of e)for(let[e,r]of n.entries()){let n=t(r);n>i[e]&&(i[e]=n)}for(let[a,o]of e.entries()){for(let[e,a]of o.entries()){e>0&&(r+=n);let s=` `.repeat(i[e]-t(a));r+=a+(e===o.length-1?``:s)}a<e.length-1&&(r+=`
|
|
4
|
-
`)}return r}const Ye={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function Xe(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Ye[n.toLowerCase()];if(r)return Number(e)*r}let n=Number(e);if(!Number.isFinite(n))throw Error(`Invalid cooldown value: ${e}`);return n}function Ze(){let e=new Map,t=new Map,n=S.lookup;S.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(S,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 Qe=`17.11.2`,P=e=>e.replace(/^v/,``),F=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`),I=e=>e.endsWith(`/`)?e.substring(0,e.length-1):e;function $e(e,t){return{headers:{"user-agent":`updates/${Qe}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function et(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 tt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}function nt(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=R(e),s=R(t);if(!o||!s)return!0;let c=tt(e)||L(e),l=L(t);return c&&!l?_e(s,o)||n:!l&&ye(s,o)?r===!0||a(i,r):!0}function R(e){try{return ge(e)?.version??``}catch{return``}}function rt(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s}){let c=R(n);if(!c)return c;i=tt(n)||i,i&&(r.add(`prerelease`),r.has(`patch`)&&r.add(`prepatch`),r.has(`minor`)&&r.add(`preminor`),r.has(`major`)&&r.add(`premajor`));let l=0,u=c;for(let n of t){let t=pe(n);if(!t?.version||t.prerelease.length&&(!i||a))continue;let c=t.version;if(s&&!Ae(c,s))continue;let d=j(u,c);if(!(!d||!r.has(d)))if(o||!(`time`in e))ve(R(c),u)&&(u=c);else{let t=Date.parse(e.time[n]);t>=0&&t>l&&(u=c,l=t)}}return u||null}function it(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s},{allowDowngrade:c,matchesAny:l,isGoPseudoVersion:u}){if(n===`*`||n.includes(`||`))return null;let d=[];if(t===`pypi`)d=Object.keys(e.releases).filter(e=>A(e));else if(t===`npm`||t===`cargo`)d=Object.keys(e.versions).filter(e=>A(e));else if(t===`go`){let t=R(n);if(!t)return null;let r=a||tt(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=j(t,p);if(n&&o.has(n)&&nt(f,e.new,d))return e.new}let m=R(e.sameMajorNew);if(m&&!u(e.sameMajorNew)&&!s(e.sameMajorNew)){let n=j(t,m);if(n&&o.has(n)&&nt(f,e.sameMajorNew,d))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}return null}let f=rt(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=tt(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 nt(n,f,g)?f:null;let _=j(d,r);return _&&_!==`prerelease`&&!o.has(_.replace(/^pre/,``))||i&&L(r)?f:ye(r,d)&&!h?nt(n,r,g)?r:null:!p&&h&&!a||s&&!Ae(r,s)?f:u||r}}const at=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&at.set(e.substring(0,t),e.substring(t+1))}function ot(e){try{let t=at.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 st(e,t){let n={signal:AbortSignal.timeout(t.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}},r=ot(e);return r&&(n.headers={...n.headers,Authorization:`Bearer ${r}`}),t.doFetch(e,n)}function ct(e,t,n){let r=P(t);if(!A(r))return null;if(n){let n=t,i=P(t);for(let t of e){let e=P(t);A(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=P(t);if(!A(n))return null;if(be(r,n))return t}return null}function lt(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 ut=/^[0-9a-f]{7,}$/i;function dt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function ft(e,t,n,r){try{let i=await st(`${e}/repos/${t}/${n}/tags?per_page=100`,r);if(!i?.ok)return[];let a=dt(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)=>st(`${e}/repos/${t}/${n}/tags?per_page=100&page=${a+2}`,r)));for(let e of o)e?.ok&&a.push(...dt(await e.json()))}return a}catch{return[]}}function pt(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 mt(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 ht(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function gt({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=lt(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${ht(a)}/${e.directory}`)),a||t||``)}function _t(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 _t(h(e,`utf-8`))}catch{return}}function yt(t){let n=e();for(;;){let e=l(n,t);try{return _(e),e}catch{}let r=c(n);if(r===n)break;n=r}}function bt(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 xt(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=vt(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(yt(`.${e}rc`));let u=bt(`${e}_`);return u.config&&c(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const St=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Ct=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,wt=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,Tt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,Et=`https://registry.npmjs.org`;let z=null;const Dt=new Map;function Ot(){return z||xt(`npm`,{registry:Et})}function kt(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function At(e,t){let n=t[`${e}:_authToken`]||t[`${e}/:_authToken`];if(n)return{token:kt(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(kt(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:kt(a),type:`Basic`}}function B(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=At(`//${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:kt(i),type:`Basic`}}function jt(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function Mt(e,t){z||=Ot();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=Dt.get(r);if(i)return i;let a;if(!e.startsWith(`@`))a={auth:B(t,z),registry:t};else{let e=I(jt(n,z));if(e!==t)try{let n=B(e,z);a=n?.token?{auth:n,registry:e}:{auth:B(t,z),registry:t}}catch{a={auth:B(t,z),registry:t}}else a={auth:B(t,z),registry:t}}return Dt.set(r,a),a}async function Nt(e,t,n,r,i){z||=Ot();let{auth:a,registry:o}=Mt(e,I((typeof r.registry==`string`?r.registry:!1)||n.registry||z.registry||Et)),c=`${o}/${(t===`resolutions`?s(e):e).replace(/\//g,`%2f`)}`,l=await i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...$e(a?.type,a?.token)});if(l?.ok)return[await l.json(),t,o,e];pt(l,c,e,o)}function V(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function Pt(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function Ft(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 It(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]}pt(s,o,e,`JSR`)}function Lt(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 Rt(e,t,n){let r=e.replace(Tt,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(wt);return t?.length===1?e.replace(wt,R(t[0])):e}async function Bt(e,t,n){try{let r=await st(`${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 Vt(e,t,n){return(await ft(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Ht(e,t,n,r){let i=t.old.replace(St,``),[a,o,s,c]=Ct.exec(i)||[];if(!o||!s||!c)return null;if(ut.test(c)){let{hash:n,commit:i}=await Bt(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=ct(await Vt(o,s,r),c,n);if(t)return{key:e,newRange:t,user:o,repo:s,oldRef:c,newRef:t}}return null}async function Ut(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];pt(i,r,e,n.pypiApiUrl)}function Wt(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 Gt=ee(ne);function Kt(){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 qt(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function Jt(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function Yt(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}function Xt(e){let t=/\/v(\d+)$/.exec(e);return t?Number.parseInt(t[1]):1}function Zt(e,t){return t<=1?e.replace(/\/v\d+$/,``):`${e.replace(/\/v\d+$/,``)}/v${t}`}function Qt(e,t){return t===`indirect`||e.startsWith(`golang.org/x/`)}function $t(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function en(e){return`${(e.length+4).toString(16).padStart(4,`0`)}${e}`}function tn(e){let t=[en(`command=ls-refs
|
|
5
|
-
`),
|
|
6
|
-
`),`0001`,
|
|
7
|
-
`),en(`ref-prefix refs/tags/${e}v\n`),`0000`];return new Blob([t.join(``)])}function nn(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 rn(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 an(e){return e?`${e.substring(1)}/`:``}function on(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:an(t[3])};let n=/^golang\.org\/x\/([^/]+)(\/.*)?$/.exec(e);if(n)return{repoUrl:`https://go.googlesource.com/${n[1]}`,tagPrefix:an(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:an(r[3])}:null}async function sn(e,t){let n=on(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 cn=new Map;function ln(e,t){let n=cn.get(e);if(n)return n;let r=(async()=>{try{let n=await sn(e,t);if(!n)return null;let{repoUrl:r,tagPrefix:i}=n,a=tn(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?nn(await o.arrayBuffer(),i):null}catch{return null}})();return cn.set(e,r),r}async function un(e,t,n){let r=await ln(e.replace(/\/v\d+$/,``),n);return r?rn(r,t):null}function dn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function fn(e,t,n){if(!t)return null;let r=t,i=e+1,a=1,o=null;for(;o===null;){let t=i+a;if(t>e+100){o=e+101;break}let s=await n(t);s?(r=s,i=t,a*=2):o=t}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 pn(e,t,n,r,i,a){let o=r?.Version??i,s=r?.Time??a,c=r?.path??e;return[{name:e,old:n,new:P(o),Time:s,...c===e?{}:{newPath:c},sameMajorNew:P(i),sameMajorTime:a},t,null,e]}function mn(e){let t={},n={},r={},i={},a=new Set,o=[],s=e.split(/\r?\n/),c=!1,l=!1,u=!1;for(let e of s){let i=e.trim();if(/^require\s*\(/.test(i)){c=!0;continue}if(/^replace\s*\(/.test(i)){l=!0;continue}if(/^tool\s*\(/.test(i)){u=!0;continue}if(i===`)`){c=!1,l=!1,u=!1;continue}if(u){i&&!i.startsWith(`//`)&&o.push(i);continue}let s=/^tool\s+(\S+)/.exec(i);if(s){o.push(s[1]);continue}let d=i.includes(`// indirect`);if(l||/^replace\s+/.test(i)){let e=l?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(i);if(e){let[,t,n,i]=e;!n.startsWith(`./`)&&!n.startsWith(`/`)&&!n.startsWith(`../`)&&(r[n]=i,a.add(t))}continue}let f=c?/^(\S+)\s+(v\S+)/.exec(i):/^require\s+(\S+)\s+(v\S+)/.exec(i);f&&((d?n:t)[f[1]]=f[2])}for(let e of a)delete t[e],delete n[e];if(o.length){let e=[...Object.keys(n),...Object.keys(t)];for(let r of o){let a=``;for(let t of e)(r===t||r.startsWith(`${t}/`))&&t.length>a.length&&(a=t);let o=a?n[a]?n:t[a]?t:null:null;o&&(i[a]=o[a],delete o[a])}}return{deps:t,indirect:n,replace:r,tool:i}}async function hn(e,n,r,i,a){let o=Xt(e),s=async(e,n)=>{try{let{stdout:r}=await Gt(`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=Qt(e,n),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(Zt(e,o+1),a.goProbeTimeout)]);return l?pn(e,n,r,c?null:await fn(o,u,t=>s(Zt(e,t),a.goProbeTimeout)),l.Version,l.Time):dn(e,r,n)}async function gn(e,t,n,r,i,a){if(Jt(e,a))return hn(e,t,n,r,i);let o=Yt(e),s=Xt(e),c=async t=>{let n=Zt(e,t);return i.doFetch(`${i.goProxyUrl}/${Yt(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout)}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=Qt(e,t),[u,d,f]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout)}),l?null:un(e,s,i),l?null:c(s+1)]);if(!u.ok)return dn(e,n,t);let p,m;try{let e=await u.json();p=e.Version,m=e.Time}catch{return dn(e,n,t)}let h=null;return l||(d!==null&&d>s?d===s+1&&f?h=f:(h=await c(d),h||=await fn(s,f,c)):d===null&&f!==null&&(h=await fn(s,f,c))),pn(e,t,n,h,p,m)}function _n(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 vn(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${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=Xt(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=Zt(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=_n(n,s))}return[n,r]}function yn(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=h(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 bn(e){let t=`https://${xn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[e,i,a,...o]=r;return n.pathname=`/${i}/${a}/${ht(t)}/${o.join(`/`)}`,n.toString()}else return t}function xn(e){return/\/v[0-9]$/.test(e)?c(e):e}function Sn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const Cn=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function wn(e){if(e.startsWith(`docker://`)||e.startsWith(`./`))return null;let t=/^https?:\/\/([^/]+)\/(.+)$/.exec(e),n=t?.[1]??null,r=t?.[2]??e,i=r.indexOf(`@`);if(i===-1)return null;let a=r.substring(0,i),o=r.substring(i+1);if(!o)return null;let s=a.split(`/`);if(s.length<2)return null;let c=n?`${n}/${a}`:a;return{host:n,owner:s[0],repo:s[1],ref:o,name:c,isHash:ut.test(o)}}function Tn(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function En(e,t,n,r,i){try{let a=await st(`${e}/repos/${t}/${n}/git/commits/${r}`,i);if(!a?.ok)return``;let o=await a.json();return o?.committer?.date||o?.author?.date||``}catch{return``}}function Dn(e,t){return mt(pe(P(e))?.version??P(e),t)}function On(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 kn(e){let t=e.replace(/\\/g,`/`);return/\.github\/workflows\/[^/]+\.(ya?ml)$/.test(t)}function An(e){try{return g(e).filter(e=>/\.(ya?ml)$/.test(e)).map(t=>u(l(e,t)))}catch{return[]}}const jn=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Mn=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,Nn=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,Pn=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,Fn=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function In(e){let t=e.split(`/`);return t.length===1?{registry:null,namespace:`library`,repo:t[0]}:t.length===2&&!t[0].includes(`.`)&&!t[0].includes(`:`)?{registry:null,namespace:t[0],repo:t[1]}:{registry:t[0],namespace:t.slice(1,-1).join(`/`)||t[1],repo:t[t.length-1]}}function Ln(e){if(e=e.replace(/^docker:\/\//,``),e.includes(`@`))return null;let t=e.lastIndexOf(`:`),n,r;if(t===-1||e.lastIndexOf(`/`)>t||(n=e.substring(0,t),r=e.substring(t+1),!r||!jn.test(r)))return null;let{registry:i,namespace:a,repo:o}=In(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Rn(e){let t=jn.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function zn(e,t){let n=Rn(t);return n?mt(e,n.version,n.suffix):t}function Bn(e,t){let n=[];for(let r of e.matchAll(t)){let e=Ln(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function Vn(e,t,n){let r={},i=`${n.dockerApiUrl}/v2/repositories/${e}/${t}/tags`,a=e=>`${i}?page_size=100&ordering=last_updated&page=${e}`,o=e=>{for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``},s=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 Hn(e,t,n){let{registry:r,namespace:i,repo:a}=In(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Vn(i,a,n),name:e},t,null,e]}function Un(e,t,n){let r=Rn(t);if(!r)return null;let i=ge(P(r.version))?.version;if(!i)return null;let a=i,o=``,s=``;for(let[t,i]of Object.entries(e)){let e=Rn(t);if(!e||e.suffix!==r.suffix)continue;let c=ge(P(e.version))?.version;if(!c||!A(c))continue;let l=j(a,c);!l||!n.has(l)||ve(c,a)&&(a=c,o=t,s=i)}if(!o||a===i)return null;let c=zn(a,t);return c===t?null:{newTag:c,date:s}}function Wn(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let[t,a]=e.split(`\0`),o=i.oldOrig||i.old;for(let e of n)r=r.replace(e(F(a),F(o)),`$1${a}:${i.new}`)}return r}function Gn(e,t){return Wn(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function Kn(e,t){return Wn(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function qn(e,t){return Wn(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const Jn=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Yn(e){return/^docker-.+\.ya?ml$/.test(e)}function Xn(e){return/^Dockerfile(\..+)?$/.test(e)}function Zn(e){return Xn(e)||Yn(e)}function Qn(e){return Xn(e)?Mn:Nn}function $n(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}async function er(e,t,n){let r=`${I(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=await n.doFetch(r,{signal:AbortSignal.timeout(n.fetchTimeout),...$e()});i?.ok||pt(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 tr=Ue.map(e=>F(e)).join(`|`);function nr(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(`(\\[(?:${tr})\\.${s}\\][^\\[]*?version\\s*=\\s*["'])${c}(["'])`,`g`),`$1${o}$2`)}return n}const rr={"package.json":`npm`,"pyproject.toml":`pypi`,"go.mod":`go`,"Cargo.toml":`cargo`},ir={"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-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 H(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 ar(e){for(let[t,{short:n}]of Object.entries(ir))if(t===e||n===e)return t;return``}const U=b({strict:!1,allowPositionals:!0,tokens:!0,options:ir}),W=U.values;for(let[e,t]of U.tokens.entries())if(t.kind===`option`&&t.value?.startsWith(`-`)){let n=ar(t.value.substring(1)),r=U.tokens[e+1];W[t.name]=[!0],W[n]||(W[n]=[]),r?.kind===`positional`&&r.value?W[n].push(r.value):W[n].push(!0)}const G=U.values,or=U.positionals,[sr,cr,K]=[`magenta`,`red`,`green`].map(e=>G[`no-color`]?String:t=>te(e,String(t))),q=Q(H(G.greatest)),lr=Q(H(G.prerelease)),ur=Q(H(G.release)),dr=Q(H(G.patch)),fr=Q(H(G.minor)),pr=Q(H(G[`allow-downgrade`])),mr=H(G.modes)||new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),hr=typeof G.forgeapi==`string`?I(G.forgeapi):`https://api.github.com`,gr=typeof G.pypiapi==`string`?I(G.pypiapi):`https://pypi.org`,_r=typeof G.jsrapi==`string`?I(G.jsrapi):`https://jsr.io`,vr=typeof G.goproxy==`string`?I(G.goproxy):Kt(),yr=typeof G.cargoapi==`string`?I(G.cargoapi):`https://crates.io`,br=typeof G.dockerapi==`string`?I(G.dockerapi):`https://hub.docker.com`,xr=qt();function Sr(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 Cr(e,t){let n=l(t,e);try{return f(n),n}catch{}let r=c(t);return r===t?null:Cr(e,r)}function wr(e){try{return h(e,`utf8`)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}}function J(e,t){t&&(e.date=t,e.age=Ie(t,{noAffix:!0}))}function Tr(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 Er(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function Dr(e){console.error(`${qe()} ${e}`)}const Or=typeof G.timeout==`string`?Number(G.timeout):0,Y={fetchTimeout:Or||5e3,goProbeTimeout:Or?Or/2:2500,forgeApiUrl:hr,pypiApiUrl:gr,jsrApiUrl:_r,goProxyUrl:vr,cratesIoUrl:yr,dockerApiUrl:br,doFetch:(e,t)=>et(e,t,!!G.verbose,Dr,sr,K,cr),verbose:!!G.verbose};async function kr(e){console.info(G.json?JSON.stringify({message:e}):e),await X()}async function X(e,t){if(e){let t=e.message??String(e);G.json?console.info(JSON.stringify({error:t})):console.info(cr(t))}r===`win32`&&Number(o?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),n(t||e?1:0)}function Ar(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`&&!V(n.oldOrig)&&(n.old=t===`go`?Sn(n.oldOrig):n.oldOrig),t===`go`&&(n.new=Sn(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=Er(e);if(G.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(Mr(e));return G[`error-on-outdated`]?t?2:0:G[`error-on-unchanged`]?t?0:2:0}function Z(e,t){r===`win32`&&v(e,0),y(e,t,r===`win32`?{flag:`r+`}:void 0)}const jr=e=>x(e).length;function Mr(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`?xn(s):s),n&&l.push(a),l.push(Le(o.old,o.new,cr)),l.push(Le(o.new,o.old,K)),l.push(o.age||``),l.push(o.info||``),r.push(l)}return Je(r,jr)}function Nr(e,t){return RegExp(`^${F(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Pr(e,t,n){return t&&typeof e==`string`?/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Nr(e,n):e instanceof RegExp?e:Nr(e,n)}function Q(e){if(e instanceof Set){let t=new Set;for(let n of e)t.add(Pr(n,!0,!1));return t}return e}function Fr(e,t){let n=new Set;for(let t of e||[])n.add(Pr(t,!0,!0));for(let e of t||[])n.add(Pr(e,!1,!0));return n}function Ir(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Ge(e)):[]}function Lr(e){return dr===!0||N(e,dr)?new Set([`patch`]):fr===!0||N(e,fr)?new Set([`patch`,`minor`]):new Set([`patch`,`minor`,`major`])}function Rr(e){return{useGreatest:typeof q==`boolean`?q:N(e,q),usePre:typeof lr==`boolean`?lr:N(e,lr),useRel:typeof ur==`boolean`?ur:N(e,ur),semvers:Lr(e)}}function zr(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 Br(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(rr)){let r=l(e,t),i=null;try{i=m(r)}catch{}i?.isFile()&&n.add(u(r))}try{for(let t of g(e))if(Zn(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 An(r))n.add(e)}else throw Error(`${e} is neither a file nor directory`)}else{for(let t of Object.keys(rr)){let r=Cr(t,e());r&&n.add(u(r))}for(let t of Jn){let r=Cr(t,e());r&&n.add(u(r))}try{for(let t of g(e()))if(Zn(t)&&!Jn.includes(t)){let r=l(e(),t);try{m(r).isFile()&&n.add(u(r))}catch{}}}catch{}let t=Cr(l(`.github`,`workflows`),e());if(t)for(let e of An(t))n.add(e)}return n}async function Vr(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 Hr(){for(let e of[a,i])e?._handle?.setBlocking?.(!0);Ze();let e=typeof G.sockets==`number`?G.sockets:96,{help:t,version:n,file:r,types:o,update:l,indirect:d,include:f,exclude:p,pin:m,cooldown:g}=G;t&&(a.write(`usage: updates [options] [files...]
|
|
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}function Ze(){let e=new Map,t=new Map,n=S.lookup;S.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(S,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 Qe=`17.11.4`,P=e=>e.replace(/^v/,``),F=e=>e.replace(/[|\\{}()[\]^$+*?.-]/g,`\\$&`),I=e=>e.endsWith(`/`)?e.substring(0,e.length-1):e;function $e(e,t){return{headers:{"user-agent":`updates/${Qe}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}async function et(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 tt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}function nt(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=R(e),s=R(t);if(!o||!s)return!0;let c=tt(e)||L(e),l=L(t);return c&&!l?_e(s,o)||n:!l&&ye(s,o)?r===!0||a(i,r):!0}function R(e){try{return ge(e)?.version??``}catch{return``}}function rt(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s}){let c=R(n);if(!c)return c;i=tt(n)||i,i&&(r.add(`prerelease`),r.has(`patch`)&&r.add(`prepatch`),r.has(`minor`)&&r.add(`preminor`),r.has(`major`)&&r.add(`premajor`));let l=0,u=c;for(let n of t){let t=pe(n);if(!t?.version||t.prerelease.length&&(!i||a))continue;let c=t.version;if(s&&!Ae(c,s))continue;let d=j(u,c);if(!(!d||!r.has(d)))if(o||!(`time`in e))ve(R(c),u)&&(u=c);else{let t=Date.parse(e.time[n]);t>=0&&t>l&&(u=c,l=t)}}return u||null}function it(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s},{allowDowngrade:c,matchesAny:l,isGoPseudoVersion:u}){if(n===`*`||n.includes(`||`))return null;let d=[];if(t===`pypi`)d=Object.keys(e.releases).filter(e=>A(e));else if(t===`npm`||t===`cargo`)d=Object.keys(e.versions).filter(e=>A(e));else if(t===`go`){let t=R(n);if(!t)return null;let r=a||tt(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=j(t,p);if(n&&o.has(n)&&nt(f,e.new,d))return e.new}let m=R(e.sameMajorNew);if(m&&!u(e.sameMajorNew)&&!s(e.sameMajorNew)){let n=j(t,m);if(n&&o.has(n)&&nt(f,e.sameMajorNew,d))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}return null}let f=rt(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=tt(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 nt(n,f,g)?f:null;let _=j(d,r);return _&&_!==`prerelease`&&!o.has(_.replace(/^pre/,``))||i&&L(r)?f:ye(r,d)&&!h?nt(n,r,g)?r:null:!p&&h&&!a||s&&!Ae(r,s)?f:u||r}}const at=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&at.set(e.substring(0,t),e.substring(t+1))}function ot(e){try{let t=at.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 st(e,t){let n={signal:AbortSignal.timeout(t.fetchTimeout),headers:{"accept-encoding":`gzip, deflate, br`}},r=ot(e);return r&&(n.headers={...n.headers,Authorization:`Bearer ${r}`}),t.doFetch(e,n)}function ct(e,t,n){let r=P(t);if(!A(r))return null;if(n){let n=t,i=P(t);for(let t of e){let e=P(t);A(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=P(t);if(!A(n))return null;if(be(r,n))return t}return null}function lt(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 ut=/^[0-9a-f]{7,}$/i;function dt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function ft(e,t,n,r){try{let i=await st(`${e}/repos/${t}/${n}/tags?per_page=100`,r);if(!i?.ok)return[];let a=dt(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)=>st(`${e}/repos/${t}/${n}/tags?per_page=100&page=${a+2}`,r)));for(let e of o)e?.ok&&a.push(...dt(await e.json()))}return a}catch{return[]}}function pt(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 mt(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 ht(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function gt({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=lt(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a=`${a}/${ht(a)}/${e.directory}`)),a||t||``)}function _t(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 _t(h(e,`utf-8`))}catch{return}}function yt(t){let n=e();for(;;){let e=l(n,t);try{return _(e),e}catch{}let r=c(n);if(r===n)break;n=r}}function bt(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 xt(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=vt(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(yt(`.${e}rc`));let u=bt(`${e}_`);return u.config&&c(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const St=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,Ct=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,wt=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,Tt=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,Et=`https://registry.npmjs.org`;let z=null;const Dt=new Map;function Ot(){return z||xt(`npm`,{registry:Et})}function kt(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function At(e,t){let n=t[`${e}:_authToken`]||t[`${e}/:_authToken`];if(n)return{token:kt(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(kt(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:kt(a),type:`Basic`}}function B(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=At(`//${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:kt(i),type:`Basic`}}function jt(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function Mt(e,t){z||=Ot();let n=e.startsWith(`@`)?(/@[a-z0-9][\w.-]+/.exec(e)||[``])[0]:``,r=`${n}:${t}`,i=Dt.get(r);if(i)return i;let a;if(!e.startsWith(`@`))a={auth:B(t,z),registry:t};else{let e=I(jt(n,z));if(e!==t)try{let n=B(e,z);a=n?.token?{auth:n,registry:e}:{auth:B(t,z),registry:t}}catch{a={auth:B(t,z),registry:t}}else a={auth:B(t,z),registry:t}}return Dt.set(r,a),a}function Nt(e,t,n){z||=Ot();let r=I((typeof n.registry==`string`?n.registry:!1)||t.registry||z.registry||Et);return{...Mt(e,r),originalRegistry:r}}function Pt(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}async function Ft(e,t,n,r,i){let{auth:a,registry:o}=Nt(e,n,r),c=Pt(o,t===`resolutions`?s(e):e),l=$e(a?.type,a?.token);l.headers={...l.headers,accept:`application/vnd.npm.install-v1+json`};let u=await i.doFetch(c,{signal:AbortSignal.timeout(i.fetchTimeout),...l});if(u?.ok)return[await u.json(),t,o,e];pt(u,c,e,o)}async function It(e,t,n,r,i){let{auth:a,registry:o}=Nt(e,n,r),s=Pt(o,e,t);try{let e=await i.doFetch(s,{signal:AbortSignal.timeout(i.fetchTimeout),...$e(a?.type,a?.token)});if(!e?.ok)return{};let t=await e.json(),n=``,r=t?._npmOperationalInternal?.tmp;if(r){let e=/(\d{13})/.exec(r);e&&(n=new Date(Number(e[1])).toISOString())}return{repository:t.repository,homepage:t.homepage,date:n}}catch{return{}}}function V(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function Lt(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function Rt(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 zt(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]}pt(s,o,e,`JSR`)}function Bt(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 Vt(e,t,n){let r=e.replace(Tt,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 Ht(e){let t=e.match(wt);return t?.length===1?e.replace(wt,R(t[0])):e}async function Ut(e,t,n){try{let r=await st(`${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 Wt(e,t,n){return(await ft(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Gt(e,t,n,r){let i=t.old.replace(St,``),[a,o,s,c]=Ct.exec(i)||[];if(!o||!s||!c)return null;if(ut.test(c)){let{hash:n,commit:i}=await Ut(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=ct(await Wt(o,s,r),c,n);if(t)return{key:e,newRange:t,user:o,repo:s,oldRef:c,newRef:t}}return null}async function Kt(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];pt(i,r,e,n.pypiApiUrl)}function qt(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let[a,o]=e.split(`\0`),s=i||r;n=n.replace(RegExp(`("${F(o)} *[<>=~]+ *)${F(s)}(")`,`g`),(n,r,i)=>`${r}${t[e].new}${i}`)}return n}const Jt=ee(ne);function Yt(){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 Xt(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function Zt(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function Qt(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}function $t(e){let t=/\/v(\d+)$/.exec(e);return t?Number.parseInt(t[1]):1}function en(e,t){return t<=1?e.replace(/\/v\d+$/,``):`${e.replace(/\/v\d+$/,``)}/v${t}`}function tn(e,t){return t===`indirect`||e.startsWith(`golang.org/x/`)}function nn(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function rn(e){return`${(e.length+4).toString(16).padStart(4,`0`)}${e}`}function an(e){let t=[rn(`command=ls-refs
|
|
5
|
+
`),rn(`object-format=sha1
|
|
6
|
+
`),`0001`,rn(`peel
|
|
7
|
+
`),rn(`ref-prefix refs/tags/${e}v\n`),`0000`];return new Blob([t.join(``)])}function on(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 sn(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 cn(e){return e?`${e.substring(1)}/`:``}function ln(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:cn(t[3])};let n=/^golang\.org\/x\/([^/]+)(\/.*)?$/.exec(e);if(n)return{repoUrl:`https://go.googlesource.com/${n[1]}`,tagPrefix:cn(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:cn(r[3])}:null}async function un(e,t){let n=ln(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 dn=new Map;function fn(e,t){let n=dn.get(e);if(n)return n;let r=(async()=>{try{let n=await un(e,t);if(!n)return null;let{repoUrl:r,tagPrefix:i}=n,a=an(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?on(await o.arrayBuffer(),i):null}catch{return null}})();return dn.set(e,r),r}async function pn(e,t,n){let r=await fn(e.replace(/\/v\d+$/,``),n);return r?sn(r,t):null}function mn(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function hn(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 gn(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 _n(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 vn(e,n,r,i,a){let o=$t(e),s=async(e,n)=>{try{let{stdout:r}=await Jt(`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=tn(e,n),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(en(e,o+1),a.goProbeTimeout)]);return l?gn(e,n,r,c?null:await hn(o,u,t=>s(en(e,t),a.goProbeTimeout)),l.Version,l.Time):mn(e,r,n)}async function yn(e,t,n,r,i,a){if(Zt(e,a))return vn(e,t,n,r,i);let o=Qt(e),s=$t(e),c=async t=>{let n=en(e,t);return i.doFetch(`${i.goProxyUrl}/${Qt(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout)}).then(async e=>e.ok?{...await e.json(),path:n}:null).catch(()=>null)},l=tn(e,t),[u,d,f]=await Promise.all([i.doFetch(`${i.goProxyUrl}/${o}/@latest`,{signal:AbortSignal.timeout(i.fetchTimeout)}),l?null:pn(e,s,i),l?null:c(s+1)]);if(!u.ok)return mn(e,n,t);let p,m;try{let e=await u.json();p=e.Version,m=e.Time}catch{return mn(e,n,t)}let h=null;return l||(d!==null&&d>s?d===s+1&&f?h=f:(h=await c(d),h||=await hn(s,f,c)):d===null&&f!==null&&(h=await hn(s,f,c))),gn(e,t,n,h,p,m)}function bn(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 xn(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=$t(s),d=Number.parseInt(l.split(`.`)[0]);if(u!==d&&d>1){let e=en(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=bn(n,s))}return[n,r]}function Sn(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=h(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 Cn(e){let t=`https://${wn(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[e,i,a,...o]=r;return n.pathname=`/${i}/${a}/${ht(t)}/${o.join(`/`)}`,n.toString()}else return t}function wn(e){return/\/v[0-9]$/.test(e)?c(e):e}function Tn(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const En=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function Dn(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:ut.test(o)}}function On(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function kn(e,t,n,r,i){try{let a=await st(`${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 An(e,t){return mt(pe(P(e))?.version??P(e),t)}function jn(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 Mn(e){let t=e.replace(/\\/g,`/`);return/\.github\/workflows\/[^/]+\.(ya?ml)$/.test(t)}function Nn(e){try{return g(e).filter(e=>/\.(ya?ml)$/.test(e)).map(t=>u(l(e,t)))}catch{return[]}}const Pn=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Fn=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,In=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,Ln=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,Rn=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function zn(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 Bn(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||!Pn.test(r)))return null;let{registry:i,namespace:a,repo:o}=zn(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Vn(e){let t=Pn.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function Hn(e,t){let n=Vn(t);return n?mt(e,n.version,n.suffix):t}function Un(e,t){let n=[];for(let r of e.matchAll(t)){let e=Bn(r[1]);e&&n.push({ref:e,match:r[1]})}return n}async function Wn(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 Gn(e,t,n){let{registry:r,namespace:i,repo:a}=zn(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Wn(i,a,n),name:e},t,null,e]}function Kn(e,t,n){let r=Vn(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=Vn(t);if(!e||e.suffix!==r.suffix)continue;let c=ge(P(e.version))?.version;if(!c||!A(c))continue;let l=j(a,c);!l||!n.has(l)||ve(c,a)&&(a=c,o=t,s=i)}if(!o||a===i)return null;let c=Hn(a,t);return c===t?null:{newTag:c,date:s}}function qn(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 Jn(e,t){return qn(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}`,`g`)])}function Yn(e,t){return qn(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}`,`g`)])}function Xn(e,t){return qn(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}`,`g`)])}const Zn=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Qn(e){return/^docker-.+\.ya?ml$/.test(e)}function $n(e){return/^Dockerfile(\..+)?$/.test(e)}function er(e){return $n(e)||Qn(e)}function tr(e){return $n(e)?Fn:In}function nr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}async function rr(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),...$e()});i?.ok||pt(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 ir=Ue.map(e=>F(e)).join(`|`);function ar(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(`(\\[(?:${ir})\\.${s}\\][^\\[]*?version\\s*=\\s*["'])${c}(["'])`,`g`),`$1${o}$2`)}return n}const or={"package.json":`npm`,"pyproject.toml":`pypi`,"go.mod":`go`,"Cargo.toml":`cargo`},sr={"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-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 H(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 cr(e){for(let[t,{short:n}]of Object.entries(sr))if(t===e||n===e)return t;return``}const U=b({strict:!1,allowPositionals:!0,tokens:!0,options:sr}),W=U.values;for(let[e,t]of U.tokens.entries())if(t.kind===`option`&&t.value?.startsWith(`-`)){let n=cr(t.value.substring(1)),r=U.tokens[e+1];W[t.name]=[!0],W[n]||(W[n]=[]),r?.kind===`positional`&&r.value?W[n].push(r.value):W[n].push(!0)}const G=U.values,lr=U.positionals,[ur,dr,K]=[`magenta`,`red`,`green`].map(e=>G[`no-color`]?String:t=>te(e,String(t))),q=Q(H(G.greatest)),fr=Q(H(G.prerelease)),pr=Q(H(G.release)),mr=Q(H(G.patch)),hr=Q(H(G.minor)),gr=Q(H(G[`allow-downgrade`])),_r=H(G.modes)||new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`]),vr=typeof G.forgeapi==`string`?I(G.forgeapi):`https://api.github.com`,yr=typeof G.pypiapi==`string`?I(G.pypiapi):`https://pypi.org`,br=typeof G.jsrapi==`string`?I(G.jsrapi):`https://jsr.io`,xr=typeof G.goproxy==`string`?I(G.goproxy):Yt(),Sr=typeof G.cargoapi==`string`?I(G.cargoapi):`https://crates.io`,Cr=typeof G.dockerapi==`string`?I(G.dockerapi):`https://hub.docker.com`,wr=Xt();function Tr(e){let t={};if(Array.isArray(e)){for(let n of e)if(typeof n==`string`){let[e,r]=n.split(`=`,2);e&&r&&je(r)&&(t[e]=r)}}else if(typeof e==`string`){let[n,r]=e.split(`=`,2);n&&r&&je(r)&&(t[n]=r)}return t}function Er(e,t){let n=l(t,e);try{return f(n),n}catch{}let r=c(t);return r===t?null:Er(e,r)}function Dr(e){try{return h(e,`utf8`)}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}}function J(e,t){t&&(e.date=t,e.age=Ie(t,{noAffix:!0}))}function Or(e,t,n){let r=Xe(String(t));for(let[t,{date:i}]of Object.entries(e))Ke(i,r,n)||delete e[t]}function kr(e){let t=0;for(let n of Object.keys(e))t+=Object.keys(e[n]).length;return t}function Ar(e){console.error(`${qe()} ${e}`)}const jr=typeof G.timeout==`string`?Number(G.timeout):0,Y={fetchTimeout:jr||5e3,goProbeTimeout:jr?jr/2:2500,forgeApiUrl:vr,pypiApiUrl:yr,jsrApiUrl:br,goProxyUrl:xr,cratesIoUrl:Sr,dockerApiUrl:Cr,doFetch:(e,t)=>et(e,t,!!G.verbose,Ar,ur,K,dr),verbose:!!G.verbose};async function Mr(e){console.info(G.json?JSON.stringify({message:e}):e),await X()}async function X(e,t){if(e){let t=e.message??String(e);G.json?console.info(JSON.stringify({error:t})):console.info(dr(t))}r===`win32`&&Number(o?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),n(t||e?1:0)}function 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`&&!V(n.oldOrig)&&(n.old=t===`go`?Tn(n.oldOrig):n.oldOrig),t===`go`&&(n.new=Tn(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=kr(e);if(G.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 G[`error-on-outdated`]?t?2:0:G[`error-on-unchanged`]?t?0:2:0}function Z(e,t){r===`win32`&&v(e,0),y(e,t,r===`win32`?{flag:`r+`}:void 0)}const Pr=e=>x(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`?wn(s):s),n&&l.push(a),l.push(Le(o.old,o.new,dr)),l.push(Le(o.new,o.old,K)),l.push(o.age||``),l.push(o.info||``),r.push(l)}return Je(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=>Ge(e)):[]}function Br(e){return mr===!0||N(e,mr)?new Set([`patch`]):hr===!0||N(e,hr)?new Set([`patch`,`minor`]):new Set([`patch`,`minor`,`major`])}function Vr(e){return{useGreatest:typeof q==`boolean`?q:N(e,q),usePre:typeof fr==`boolean`?fr:N(e,fr),useRel:typeof pr==`boolean`?pr:N(e,pr),semvers:Br(e)}}function Hr(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 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(or)){let r=l(e,t),i=null;try{i=m(r)}catch{}i?.isFile()&&n.add(u(r))}try{for(let t of g(e))if(er(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 Nn(r))n.add(e)}else throw Error(`${e} is neither a file nor directory`)}else{for(let t of Object.keys(or)){let r=Er(t,e());r&&n.add(u(r))}for(let t of Zn){let r=Er(t,e());r&&n.add(u(r))}try{for(let t of g(e()))if(er(t)&&!Zn.includes(t)){let r=l(e(),t);try{m(r).isFile()&&n.add(u(r))}catch{}}}catch{}let t=Er(l(`.github`,`workflows`),e());if(t)for(let e of Nn(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);Ze();let e=typeof G.sockets==`number`?G.sockets:96,{help:t,version:n,file:r,types:o,update:l,indirect:d,include:f,exclude:p,pin:m,cooldown:g}=G;t&&(a.write(`usage: updates [options] [files...]
|
|
8
8
|
|
|
9
9
|
Options:
|
|
10
10
|
-u, --update Update versions and write dependency file
|
|
11
11
|
-f, --file <path,...> File or directory to use, defaults to current directory
|
|
12
|
+
-M, --modes <mode,...> Which modes to enable. Default: npm,pypi,go,cargo,actions,docker
|
|
12
13
|
-i, --include <dep,...> Include only given dependencies
|
|
13
14
|
-e, --exclude <dep,...> Exclude given dependencies
|
|
15
|
+
-l, --pin <dep=range> Pin dependency to given semver range
|
|
16
|
+
-C, --cooldown <duration> Minimum dependency age, e.g. 7, 1w, 2d, 6h
|
|
14
17
|
-p, --prerelease [<dep,...>] Consider prerelease versions
|
|
15
18
|
-R, --release [<dep,...>] Only use release versions, may downgrade
|
|
16
19
|
-g, --greatest [<dep,...>] Prefer greatest over latest version
|
|
@@ -18,15 +21,12 @@ import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,version
|
|
|
18
21
|
-P, --patch [<dep,...>] Consider only up to semver-patch
|
|
19
22
|
-m, --minor [<dep,...>] Consider only up to semver-minor
|
|
20
23
|
-d, --allow-downgrade [<dep,...>] Allow version downgrades when using latest version
|
|
21
|
-
-C, --cooldown <duration> Minimum dependency age, e.g. 7, 1w, 2d, 6h
|
|
22
|
-
-l, --pin <dep=range> Pin dependency to given semver range
|
|
23
|
-
-E, --error-on-outdated Exit with code 2 when updates are available and 0 when not
|
|
24
|
-
-U, --error-on-unchanged Exit with code 0 when updates are available and 2 when not
|
|
25
|
-
-r, --registry <url> Override npm registry URL
|
|
26
24
|
-S, --sockets <num> Maximum number of parallel HTTP sockets opened. Default: 96
|
|
27
25
|
-T, --timeout <ms> Network request timeout in ms (go probes use half). Default: 5000
|
|
28
|
-
-
|
|
26
|
+
-r, --registry <url> Override npm registry URL
|
|
29
27
|
-I, --indirect Include indirect Go dependencies
|
|
28
|
+
-E, --error-on-outdated Exit with code 2 when updates are available and 0 when not
|
|
29
|
+
-U, --error-on-unchanged Exit with code 0 when updates are available and 2 when not
|
|
30
30
|
-j, --json Output a JSON object
|
|
31
31
|
-n, --no-color Disable color output
|
|
32
32
|
-v, --version Print the version
|
|
@@ -46,4 +46,4 @@ import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,version
|
|
|
46
46
|
$ updates -f .github
|
|
47
47
|
$ updates -f Dockerfile
|
|
48
48
|
$ updates -f docker-compose.yml
|
|
49
|
-
`),await X()),n&&(console.info(Qe),await X());let _={},v={},y={},b={},ee=Date.now(),x=0,te=H(r),S=te instanceof Set?te:
|
|
49
|
+
`),await X()),n&&(console.info(Qe),await X());let _={},v={},y={},b={},ee=Date.now(),x=0,te=H(r),S=te instanceof Set?te:lr.length?new Set:!1;if(S instanceof Set)for(let e of lr)S.add(e);let ne=Ur(S),ie={},C={},oe=zr(f),se=zr(p),ce=Tr(m),le=Rr(oe,[]),ue=Rr(se,[]),de=[],w=[],fe={};function T(e,t,n){_.docker||={};for(let r of n)for(let{ref:n}of Un(e,r)){if(!$(n.fullImage,`docker`,le,ue,`docker`))continue;let e=`${t}${n.fullImage}`;if(_.docker[e])continue;let r=Vn(n.tag);r&&(_.docker[e]={old:r.version,oldOrig:n.tag},w.push({key:e,fullImage:n.fullImage,ref:n}))}}for(let e of ne){if(Mn(e)){let t=_r.has(`actions`),n=_r.has(`docker`);if(!t&&!n)continue;let r=Dr(e),i=Hr(e);if(ie[i]={absPath:e,content:r},t){_.actions||={};let e=Array.from(r.matchAll(En),e=>Dn(e[1])).filter(e=>e!==null);for(let t of e){if(!$(t.name,`actions`,le,ue,`actions`))continue;let e=`${i}${t.name}`;_.actions[e]||(_.actions[e]={old:t.ref},de.push({...t,key:e,apiUrl:On(t.host,vr)}))}}n&&(C[i]={absPath:e,content:r,fileType:`workflow`},T(r,i,[In,Ln,Rn]));continue}let t=s(e);if(er(t)){if(!_r.has(`docker`))continue;let n=Dr(e),r=Hr(e);C[r]={absPath:e,content:n,fileType:$n(t)?`dockerfile`:`compose`},T(n,r,[tr(t)]);continue}let n=or[t];if(!_r.has(n))continue;b[n]=e,_[n]||(_[n]={});let r=c(u(e)),i=await Wr(r),a=Rr(oe,i?.include??[]),l=Rr(se,i?.exclude??[]),f={...i?.pin,...ce},p=[];Array.isArray(o)?p=o.filter(e=>typeof e==`string`):`types`in i&&Array.isArray(i.types)?p=i.types:n===`npm`?p=ze:n===`pypi`?p=Array.from(Ve):n===`go`?p=d?Array.from(He):He.filter(e=>e!==`indirect`):n===`cargo`&&(p=Array.from(Ue));let m={};y[n]=Dr(e);try{if(n===`npm`)m=JSON.parse(y[n]);else if(n===`pypi`||n===`cargo`)m=ae(y[n]);else if(n===`go`){let e=_n(y[n]);m.deps=e.deps,m.indirect=e.indirect,m.replace=e.replace,m.tool=e.tool}}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}for(let e of p){let t;if(t=n===`npm`||n===`go`?m[e]||{}:We(m,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Re(t))$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:Ht(i),oldOrig:i});else if(typeof t==`string`){let[r,i]=t.split(`@`);$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:Ht(i),oldOrig:i})}else for(let[r,i]of Object.entries(t))if(n===`cargo`&&typeof i==`object`&&i&&`version`in i&&!(`git`in i)&&!(`path`in i)&&$(r,n,a,l,e)){let t=String(i.version);je(t)&&(_[n][`${e}${r}`]={old:Ht(t),oldOrig:t})}else if(n===`npm`&&V(i)&&$(r,n,a,l,e)){let t=Rt(i,r);_[n][`${e}${r}`]={old:t.version,oldOrig:i}}else n!==`go`&&je(i)&&$(r,n,a,l,e)?_[n][`${e}${r}`]={old:Ht(i),oldOrig:i}:n===`npm`&&Lt(i)&&$(r,n,a,l,e)?_[n][`${e}${r}`]={old:`0.0.0`,oldOrig:i}:n===`npm`&&!V(i)&&$(r,n,a,l,e)?v[`${e}${r}`]={old:i}:n===`go`&&$(r,n,a,l,e)&&(_[n][`${e}${r}`]={old:Tn(i),oldOrig:P(i)})}x+=Object.keys(_[n]).length+Object.keys(v).length,fe[n]={config:i,projectDir:r,pin:f}}if(_.actions&&(x+=Object.keys(_.actions).length),_.docker&&(x+=Object.keys(_.docker).length),x===0)return Mr(`No dependencies found, nothing to do.`);let E=[];for(let t of Object.keys(fe)){if(!_[t]||!Object.keys(_[t]).length&&!Object.keys(v).length)continue;let{config:n,projectDir:r,pin:i}=fe[t];E.push((async()=>{let a=(await re(Object.keys(_[t]),async e=>{let[i,a]=e.split(`\0`);if(t===`npm`){let{oldOrig:r}=_[t][e];if(r&&V(r))return zt(a,i,Y);if(r&&Lt(r))try{return await Ft(a,i,n,G,Y)}catch{return delete _[t][e],null}return Ft(a,i,n,G,Y)}else if(t===`go`)return yn(a,i,_[t][e].oldOrig||_[t][e].old,r,Y,wr);else if(t===`cargo`)return rr(a,i,Y);else return Kt(a,i,Y)},{concurrency:e})).filter(Boolean),o=new Map;for(let[e,r,s,c]of a){if(e?.error)throw Error(e.error);let{useGreatest:a,usePre:l,useRel:u,semvers:d}=Vr(e.name),f=`${r}${c}`,p=_[t][f].old,m=_[t][f].oldOrig,h=i[c],g=it(e,{usePre:l,useRel:u,useGreatest:a,semvers:d,range:p,mode:t,pinnedRange:h},{allowDowngrade:gr,matchesAny:N,isGoPseudoVersion:nn}),v=``;if([`go`,`pypi`,`cargo`].includes(t)&&g)v=g;else if(g)if(m&&Lt(m))v=String(Ot()[`save-exact`])===`true`?g:`^${g}`;else if(m&&V(m))if(m.startsWith(`npm:@jsr/`)){let e=/^(npm:@jsr\/[^@]+@)(.+)$/.exec(m);e&&(v=`${e[1]}${g}`)}else if(m.startsWith(`jsr:@`)){let e=/^(jsr:@[^@]+@)(.+)$/.exec(m);e&&(v=`${e[1]}${g}`)}else m.startsWith(`jsr:`)&&(v=`jsr:${g}`);else v=Vt(p,g,m);if(!g||g===p||m&&m===v){delete _[t][f];continue}let y=``;if(t===`pypi`&&e.releases?.[g]?.[0]?.upload_time_iso_8601?y=e.releases[g][0].upload_time_iso_8601:t===`go`&&e.Time?y=e.Time:t===`cargo`&&e.time?.[g]&&(y=e.time[g]),_[t][f].new=v,m&&V(m)&&(_[t][f].newPrint=g),t===`npm`)o.set(f,It(e.name,g,n,G,Y));else if(t===`pypi`)_[t][f].info=gt(e,s,e.info.name);else if(t===`go`){let n=e.newPath||c;_[t][f].info=Cn(n)}else t===`cargo`&&(_[t][f].info=`https://crates.io/crates/${c}`);y&&J(_[t][f],y)}for(let[e,n]of o){let r=await n;_[t][e]&&(_[t][e].info=gt({repository:r.repository,homepage:r.homepage},null,e.split(`\0`)[1]),r.date&&J(_[t][e],r.date))}if(Object.keys(v).length){let n=(await re(Object.entries(v),([e,t])=>{let n=e.split(`\0`)[1];return Gt(e,t,typeof q==`boolean`?q:N(n,q),Y)},{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:ut.test(o)?o.substring(0,7):o,newPrint:ut.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&J(_[t][n],c)}}let s=g??n.cooldown;s&&Or(_[t],String(s),ee)})())}if(de.length&&E.push((async()=>{let t=new Map;for(let e of de){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 re(t.values(),async({apiUrl:e,owner:t,repo:n,infos:r})=>{let i=await ft(e,t,n,Y),a=i.map(e=>e.name),o=a.map(e=>P(e)).filter(e=>A(e)),s=new Map;for(let e of i)e.commitSha&&s.set(e.commitSha,e.name);let c=new Map;async function l(r){if(c.has(r))return c.get(r);let i=await kn(e,t,n,r,Y);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=rt({},o,{range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:ce[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,J(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=rt({},o,{range:t,semvers:d,usePre:s,useRel:u,useGreatest:n||!0,pinnedRange:ce[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=An(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&&J(r,await l(h.commitSha))}}},{concurrency:e}),g&&Or(_.actions,String(g),ee),Object.keys(_.actions).length||delete _.actions})()),w.length&&E.push((async()=>{let t=new Map;for(let e of w)t.has(e.fullImage)||t.set(e.fullImage,[]),t.get(e.fullImage).push(e);await re(t.entries(),async([e,t])=>{let n;try{let[t]=await Gn(e,`docker`,Y);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=Kn(n.tags,r,i);if(!a){delete _.docker[e.key];continue}t.new=a.newTag,t.info=nr(e.ref),J(t,a.date)}},{concurrency:e}),g&&Or(_.docker,String(g),ee),Object.keys(_.docker).length||delete _.docker})()),await Promise.all(E),!kr(_))return Mr(`All dependencies are up to date.`);let D=new Map;if(_.actions)for(let[e,t]of Object.entries(_.actions)){let[n,r]=e.split(`\0`);D.has(n)||D.set(n,[]),D.get(n).push({name:r,oldRef:t.old,newRef:t.new})}let O=new Map;if(_.docker)for(let[e,t]of Object.entries(_.docker)){let[n]=e.split(`\0`);O.has(n)||O.set(n,{}),O.get(n)[e]=t}let k=Nr(_);if(l){for(let e of Object.keys(_))if(Object.keys(_[e]).length){if(e===`actions`){for(let[e,t]of D){let{absPath:n,content:r}=ie[e]||{};if(n){try{Z(n,jn(r,t))}catch(e){throw Error(`Error writing ${s(n)}: ${e.message}`)}console.info(K(`✨ ${e} updated`))}}continue}if(e===`docker`){for(let[e,t]of O){let n=C[e];if(!n)continue;let{absPath:r,fileType:i}=n,a;try{a=h(r,`utf8`)}catch{continue}try{Z(r,(i===`dockerfile`?Jn:i===`compose`?Yn:Xn)(a,t))}catch(e){throw Error(`Error writing ${s(r)}: ${e.message}`)}console.info(K(`✨ ${e} updated`))}continue}try{let t=y[e];if(e===`go`){let[n,r]=xn(t,_[e]);Z(b[e],n),Sn(c(u(b[e])),r,Z)}else if(e===`cargo`)Z(b[e],ar(t,_[e]));else{let n=e===`npm`?Bt:qt;Z(b[e],n(t,_[e]))}}catch(t){throw Error(`Error writing ${s(b[e])}: ${t.message}`)}console.info(K(`✨ ${s(b[e])} updated`))}}await X(void 0,k)}try{await Gr()}catch(e){await X(e)}export{};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "updates",
|
|
3
|
-
"version": "17.11.
|
|
3
|
+
"version": "17.11.4",
|
|
4
4
|
"description": "CLI dependency update tool for npm, uv, cargo, go and actions",
|
|
5
5
|
"author": "silverwind",
|
|
6
6
|
"repository": "silverwind/updates",
|
|
@@ -17,18 +17,18 @@
|
|
|
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.20260325.1",
|
|
21
21
|
"eslint": "10.1.0",
|
|
22
22
|
"eslint-config-silverwind": "127.1.4",
|
|
23
23
|
"p-map": "7.0.4",
|
|
24
24
|
"timerel": "5.8.6",
|
|
25
|
-
"tsdown": "0.21.
|
|
25
|
+
"tsdown": "0.21.5",
|
|
26
26
|
"tsdown-config-silverwind": "2.0.2",
|
|
27
27
|
"typescript": "5.9.3",
|
|
28
|
-
"typescript-config-silverwind": "16.
|
|
29
|
-
"updates-config-silverwind": "2.0.
|
|
30
|
-
"versions": "14.2.
|
|
28
|
+
"typescript-config-silverwind": "16.1.0",
|
|
29
|
+
"updates-config-silverwind": "2.0.1",
|
|
30
|
+
"versions": "14.2.5",
|
|
31
31
|
"vitest": "4.1.1",
|
|
32
|
-
"vitest-config-silverwind": "
|
|
32
|
+
"vitest-config-silverwind": "11.0.2"
|
|
33
33
|
}
|
|
34
34
|
}
|