updates 17.11.3 → 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 +7 -7
- package/package.json +1 -1
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,7 +1,7 @@
|
|
|
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.3`,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
|
|
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
5
|
`),rn(`object-format=sha1
|
|
6
6
|
`),`0001`,rn(`peel
|
|
7
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...]
|
|
@@ -9,8 +9,11 @@ import{cwd as e,env as t,exit as n,platform as r,stderr as i,stdout as a,version
|
|
|
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
|