updates 17.18.2 → 17.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/api.d.ts CHANGED
@@ -1,47 +1,84 @@
1
1
  //#region config.d.ts
2
2
  type Config = {
3
- /** Array of dependencies to include */include?: Array<string | RegExp>; /** Array of dependencies to exclude */
4
- exclude?: Array<string | RegExp>; /** Array of package types to use */
5
- types?: Array<string>; /** URL to npm registry */
6
- registry?: string; /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h" */
7
- cooldown?: number | string; /** Pin dependencies to semver ranges */
8
- pin?: Record<string, string>; /** File or directory paths to use */
9
- files?: Array<string>; /** Which modes to enable */
10
- modes?: Array<string>; /** Update versions and write dependency files */
11
- update?: boolean; /** Include indirect Go dependencies */
12
- indirect?: boolean; /** Output a JSON object */
13
- json?: boolean; /** Print verbose output to stderr */
14
- verbose?: boolean; /** Exit with code 2 when updates are available */
15
- errorOnOutdated?: boolean; /** Exit with code 0 when updates are available and 2 when not */
16
- errorOnUnchanged?: boolean; /** Force color output */
17
- color?: boolean; /** Disable color output */
18
- noColor?: boolean; /** Disable HTTP cache */
19
- noCache?: boolean; /** Network request timeout in ms */
20
- timeout?: number; /** Maximum number of parallel HTTP sockets */
21
- sockets?: number; /** Prefer greatest over latest version */
22
- greatest?: boolean | Array<string | RegExp>; /** Consider prerelease versions */
23
- prerelease?: boolean | Array<string | RegExp>; /** Only use release versions, may downgrade */
24
- release?: boolean | Array<string | RegExp>; /** Consider only up to semver-patch */
25
- patch?: boolean | Array<string | RegExp>; /** Consider only up to semver-minor */
26
- minor?: boolean | Array<string | RegExp>; /** Allow version downgrades when using latest version */
27
- allowDowngrade?: boolean | Array<string | RegExp>; /** Per-package option overrides, matched by name; last matching override wins */
28
- overrides?: Array<Override>; /** Opt-in to inheriting select fields from other tools' configs */
3
+ /** Array of dependencies to include */
4
+ include?: Array<string | RegExp>;
5
+ /** Array of dependencies to exclude */
6
+ exclude?: Array<string | RegExp>;
7
+ /** Array of package types to use */
8
+ types?: Array<string>;
9
+ /** URL to npm registry */
10
+ registry?: string;
11
+ /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h" */
12
+ cooldown?: number | string;
13
+ /** Pin dependencies to semver ranges */
14
+ pin?: Record<string, string>;
15
+ /** File or directory paths to use */
16
+ files?: Array<string>;
17
+ /** Which modes to enable */
18
+ modes?: Array<string>;
19
+ /** Update versions and write dependency files */
20
+ update?: boolean;
21
+ /** Include indirect Go dependencies */
22
+ indirect?: boolean;
23
+ /** Output a JSON object */
24
+ json?: boolean;
25
+ /** Print verbose output to stderr */
26
+ verbose?: boolean;
27
+ /** Exit with code 2 when updates are available */
28
+ errorOnOutdated?: boolean;
29
+ /** Exit with code 0 when updates are available and 2 when not */
30
+ errorOnUnchanged?: boolean;
31
+ /** Force color output */
32
+ color?: boolean;
33
+ /** Disable color output */
34
+ noColor?: boolean;
35
+ /** Disable HTTP cache */
36
+ noCache?: boolean;
37
+ /** Network request timeout in ms */
38
+ timeout?: number;
39
+ /** Maximum number of parallel HTTP sockets */
40
+ sockets?: number;
41
+ /** Prefer greatest over latest version */
42
+ greatest?: boolean | Array<string | RegExp>;
43
+ /** Consider prerelease versions */
44
+ prerelease?: boolean | Array<string | RegExp>;
45
+ /** Only use release versions, may downgrade */
46
+ release?: boolean | Array<string | RegExp>;
47
+ /** Consider only up to semver-patch */
48
+ patch?: boolean | Array<string | RegExp>;
49
+ /** Consider only up to semver-minor */
50
+ minor?: boolean | Array<string | RegExp>;
51
+ /** Allow version downgrades when using latest version */
52
+ allowDowngrade?: boolean | Array<string | RegExp>;
53
+ /** Per-package option overrides, matched by name; last matching override wins */
54
+ overrides?: Array<Override>;
55
+ /** Opt-in to inheriting select fields from other tools' configs */
29
56
  inherit?: {
30
57
  renovate?: {
31
- /** Inherit minimumReleaseAge as cooldown. Off by default. */cooldown?: boolean;
58
+ /** Inherit minimumReleaseAge as cooldown. Off by default. */
59
+ cooldown?: boolean;
32
60
  };
33
61
  };
34
62
  };
35
63
  /** Options applied to dependencies whose name matches an override's patterns. */
36
64
  type Override = {
37
- /** Name patterns this override applies to (glob or RegExp). Omit to match all. */include?: Array<string | RegExp>; /** Name patterns excluded from this override */
38
- exclude?: Array<string | RegExp>; /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h"; 0 disables a global cooldown */
39
- cooldown?: number | string; /** Prefer greatest over latest version */
40
- greatest?: boolean; /** Consider prerelease versions */
41
- prerelease?: boolean; /** Only use release versions, may downgrade */
42
- release?: boolean; /** Consider only up to semver-patch */
43
- patch?: boolean; /** Consider only up to semver-minor */
44
- minor?: boolean; /** Allow version downgrades when using latest version */
65
+ /** Name patterns this override applies to (glob or RegExp). Omit to match all. */
66
+ include?: Array<string | RegExp>;
67
+ /** Name patterns excluded from this override */
68
+ exclude?: Array<string | RegExp>;
69
+ /** Minimum dependency age, e.g. 7 (days), "1w", "2d", "6h"; 0 disables a global cooldown */
70
+ cooldown?: number | string;
71
+ /** Prefer greatest over latest version */
72
+ greatest?: boolean;
73
+ /** Consider prerelease versions */
74
+ prerelease?: boolean;
75
+ /** Only use release versions, may downgrade */
76
+ release?: boolean;
77
+ /** Consider only up to semver-patch */
78
+ patch?: boolean;
79
+ /** Consider only up to semver-minor */
80
+ minor?: boolean;
81
+ /** Allow version downgrades when using latest version */
45
82
  allowDowngrade?: boolean;
46
83
  };
47
84
  //#endregion
@@ -73,11 +110,17 @@ type Output = {
73
110
  //#endregion
74
111
  //#region api.d.ts
75
112
  type UpdatesOptions = Config & {
76
- /** Override GitHub/Gitea API URL (for testing) */forgeapi?: string; /** Override PyPI API URL (for testing) */
77
- pypiapi?: string; /** Override JSR API URL (for testing) */
78
- jsrapi?: string; /** Override Go proxy URL (for testing) */
79
- goproxy?: string; /** Override crates.io API URL (for testing) */
80
- cargoapi?: string; /** Override Docker Hub API URL (for testing) */
113
+ /** Override GitHub/Gitea API URL (for testing) */
114
+ forgeapi?: string;
115
+ /** Override PyPI API URL (for testing) */
116
+ pypiapi?: string;
117
+ /** Override JSR API URL (for testing) */
118
+ jsrapi?: string;
119
+ /** Override Go proxy URL (for testing) */
120
+ goproxy?: string;
121
+ /** Override crates.io API URL (for testing) */
122
+ cargoapi?: string;
123
+ /** Override Docker Hub API URL (for testing) */
81
124
  dockerapi?: string;
82
125
  };
83
126
  declare function updates(opts?: UpdatesOptions): Promise<Output>;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,n as s,o as c,p as l,r as u,s as d,u as f}from"./shared.js";import{cwd as p,exit as m,platform as h,stderr as g,stdout as _,versions as v}from"node:process";import{parseArgs as y,stripVTControlCharacters as b,styleText as x}from"node:util";import{dirname as S,isAbsolute as C,resolve as w}from"node:path";import{statSync as T}from"node:fs";const E=y({strict:!1,allowPositionals:!0,tokens:!0,options:d}),D=E.values;for(let[t,n]of E.tokens.entries()){if(n.kind!==`option`||!n.value?.startsWith(`-`))continue;let r=n.value.startsWith(`--`)?2:1,i=e(n.value.substring(r));if(!i)continue;let a=E.tokens[t+1],o=D[n.name];if(Array.isArray(o)){let e=o.indexOf(n.value);e!==-1&&o.splice(e,1)}else D[n.name]=!0;let s=a?.kind===`positional`&&a.value?a.value:!0;d[i]?.multiple?(D[i]??=[]).push(s):D[i]=s}const O=E.values,k=E.positionals,A=o(O.file),j=[...A instanceof Set?A:[],...k],M=R(j[0]);if(!O.help&&!O.version)for(let e of s(M,O))(async()=>{try{await fetch(e,{method:`HEAD`})}catch{}})();function N(e){return/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):e}function P(e){let t=o(e);if(t!==!1)return t===!0?!0:Array.from(t).map(N)}let F=String,I=String,L=!1;function R(e){if(!e)return p();let t=C(e)?e:w(p(),e),n=!1;try{n=T(t).isDirectory()}catch{}return n?t:S(t)}function z(e){return O[`no-color`]===!0?!1:O.color===!0?!0:e.noColor===!0?!1:e.color===!0?!0:_.isTTY}async function B(e,t){if(e){let t=e.message??String(e);console.info(L?JSON.stringify({error:t}):F(t))}h===`win32`&&Number(v?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),m(t??+!!e)}async function V(){for(let e of[_,g])e?._handle?.setBlocking?.(!0);O.help&&(_.write(`usage: updates [options] [files...]
2
+ import{H as e,N as t,W as n,a as r,c as i,g as a,i as o,l as s,n as c,o as l,r as u,s as d,u as f}from"./shared.js";import{cwd as p,exit as m,platform as h,stderr as g,stdout as _,versions as v}from"node:process";import{parseArgs as y,stripVTControlCharacters as b,styleText as x}from"node:util";import{dirname as S,isAbsolute as C,resolve as w}from"node:path";import{statSync as T}from"node:fs";const E=y({strict:!1,allowPositionals:!0,tokens:!0,options:d}),D=E.values;for(let[e,t]of E.tokens.entries()){if(t.kind!==`option`||!t.value?.startsWith(`-`))continue;let n=t.value.startsWith(`--`)?2:1,i=r(t.value.substring(n));if(!i)continue;let a=E.tokens[e+1],o=D[t.name];if(Array.isArray(o)){let e=o.indexOf(t.value);e!==-1&&o.splice(e,1)}else D[t.name]=!0;let s=a?.kind===`positional`&&a.value?a.value:!0;d[i]?.multiple?(D[i]??=[]).push(s):D[i]=s}const O=E.values,k=E.positionals,A=s(O.file),j=[...A instanceof Set?A:[],...k],M=R(j[0]);if(!O.help&&!O.version)for(let e of c(M,O))(async()=>{try{await fetch(e,{method:`HEAD`})}catch{}})();function N(e){return/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):e}function P(e){let t=s(e);if(t!==!1)return t===!0||Array.from(t).map(N)}let F=String,I=String,L=!1;function R(e){if(!e)return p();let t=C(e)?e:w(p(),e),n=!1;try{n=T(t).isDirectory()}catch{}return n?t:S(t)}function z(e){return O[`no-color`]===!0?!1:O.color===!0?!0:e.noColor===!0?!1:e.color===!0||_.isTTY}async function B(e,t){if(e){let t=e.message??String(e);console.info(L?JSON.stringify({error:t}):F(t))}h===`win32`&&Number(v?.node?.split(`.`)[0])>=23&&await new Promise(e=>setTimeout(e,50)),m(t??+!!e)}async function V(){for(let e of[_,g])e?._handle?.setBlocking?.(!0);O.help&&(_.write(`usage: updates [options] [files...]
3
3
 
4
4
  Options:
5
5
  -u, --update Update versions and write dependency file
@@ -17,7 +17,7 @@ import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,n as s,o as c,p as l,r a
17
17
  -m, --minor [<dep,...>] Consider only up to semver-minor
18
18
  -d, --allow-downgrade [<dep,...>] Allow version downgrades when using latest version
19
19
  -s, --sockets <num> Maximum number of parallel HTTP sockets opened. Default: 25
20
- -T, --timeout <ms> Network request timeout in ms (go probes use half). Default: ${n}
20
+ -T, --timeout <ms> Network request timeout in ms (go probes use half). Default: ${a}
21
21
  -r, --registry <url> Override npm registry URL
22
22
  -I, --indirect Include indirect Go dependencies
23
23
  -E, --error-on-outdated Exit with code 2 when updates are available and 0 when not
@@ -44,4 +44,4 @@ import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,n as s,o as c,p as l,r a
44
44
  $ updates -f Dockerfile
45
45
  $ updates -f docker-compose.yml
46
46
  $ updates -f Makefile
47
- `),await B()),O.version&&(console.info(r),await B());let e=await c(M);z(e)&&(F=e=>x(`red`,String(e)),I=e=>x(`green`,String(e)));let i={...e};i.pin=void 0,O.json&&(i.json=!0),L=!!i.json,O.verbose&&(i.verbose=!0),O[`no-cache`]&&(i.noCache=!0),O.update&&(i.update=!0),O.indirect&&(i.indirect=!0),O[`error-on-outdated`]&&(i.errorOnOutdated=!0),O[`error-on-unchanged`]&&(i.errorOnUnchanged=!0),typeof O.timeout==`string`&&(i.timeout=Number(O.timeout)||void 0),typeof O.sockets==`string`&&(i.sockets=Number(O.sockets)||void 0),typeof O.registry==`string`&&(i.registry=O.registry),typeof O.cooldown==`string`&&(i.cooldown=Number(O.cooldown)||O.cooldown);let a=t(O.include).map(N),s=t(O.exclude).map(N);a.length&&(i.include=a),s.length&&(i.exclude=s);let l=t(O.types);l.length&&(i.types=l);let d=f(O.pin);Object.keys(d).length&&(i.pin=d);let p=o(O.modes);p instanceof Set&&(i.modes=Array.from(p));for(let e of[`greatest`,`prerelease`,`release`,`patch`,`minor`]){let t=P(O[e]);t!==void 0&&(i[e]=t)}let m=P(O[`allow-downgrade`]);m!==void 0&&(i.allowDowngrade=m),j.length&&(i.files=j);for(let e of[`forgeapi`,`pypiapi`,`jsrapi`,`goproxy`,`cargoapi`,`dockerapi`])typeof O[e]==`string`&&(i[e]=O[e]);let h=await u(i),v=Object.keys(h.results).length>0;if(h.message)console.info(i.json?JSON.stringify({message:h.message}):h.message);else if(v&&(i.json?console.info(JSON.stringify({results:h.results})):console.info(U(h)),i.update))for(let[e,t]of Object.entries(h.results))Object.values(t).some(e=>Object.keys(e).length)&&console.info(I(`✨ ${e} updated`));i.errorOnOutdated?await B(void 0,v?2:0):i.errorOnUnchanged?await B(void 0,v?0:2):await B()}const H=e=>b(e).length;function U(e){let t=Object.keys(e.results),n=t.length>1,r=[n?[`NAME`,`MODE`,`OLD`,`NEW`,`AGE`,`INFO`]:[`NAME`,`OLD`,`NEW`,`AGE`,`INFO`]],o=new Set;for(let i of t)for(let t of Object.values(e.results[i]))for(let[e,s]of Object.entries(t)){let t=`${i}|${e}|${s.old}|${s.new}`;o.has(t)||(o.add(t),r.push([i===`go`?a(e):e,...n?[i]:[],l(s.old,s.new,F),l(s.new,s.old,I),s.age||``,s.info||``]))}return i(r,H)}try{await V()}catch(e){await B(e)}export{};
47
+ `),await B()),O.version&&(console.info(t),await B());let e=await l(M,{noCache:!!O[`no-cache`],timeout:typeof O.timeout==`string`&&Number(O.timeout)||5e3});z(e)&&(F=e=>x(`red`,String(e)),I=e=>x(`green`,String(e)));let n={...e};n.pin=void 0,O.json&&(n.json=!0),L=!!n.json,O.verbose&&(n.verbose=!0),O[`no-cache`]&&(n.noCache=!0),O.update&&(n.update=!0),O.indirect&&(n.indirect=!0),O[`error-on-outdated`]&&(n.errorOnOutdated=!0),O[`error-on-unchanged`]&&(n.errorOnUnchanged=!0),typeof O.timeout==`string`&&(n.timeout=Number(O.timeout)||void 0),typeof O.sockets==`string`&&(n.sockets=Number(O.sockets)||void 0),typeof O.registry==`string`&&(n.registry=O.registry),typeof O.cooldown==`string`&&(n.cooldown=Number(O.cooldown)||O.cooldown);let r=i(O.include).map(N),o=i(O.exclude).map(N);r.length&&(n.include=r),o.length&&(n.exclude=o);let c=i(O.types);c.length&&(n.types=c);let d=f(O.pin);Object.keys(d).length&&(n.pin=d);let p=s(O.modes);p instanceof Set&&(n.modes=Array.from(p));for(let e of[`greatest`,`prerelease`,`release`,`patch`,`minor`]){let t=P(O[e]);t!==void 0&&(n[e]=t)}let m=P(O[`allow-downgrade`]);m!==void 0&&(n.allowDowngrade=m),j.length&&(n.files=j);for(let e of[`forgeapi`,`pypiapi`,`jsrapi`,`goproxy`,`cargoapi`,`dockerapi`])typeof O[e]==`string`&&(n[e]=O[e]);let h=await u(n),v=Object.keys(h.results).length>0;if(h.message)console.info(n.json?JSON.stringify({message:h.message}):h.message);else if(v&&(n.json?console.info(JSON.stringify({results:h.results})):console.info(U(h)),n.update))for(let[e,t]of Object.entries(h.results))Object.values(t).some(e=>Object.keys(e).length)&&console.info(I(`✨ ${e} updated`));n.errorOnOutdated?await B(void 0,v?2:0):n.errorOnUnchanged?await B(void 0,v?0:2):await B()}const H=e=>b(e).length;function U(t){let r=Object.keys(t.results),i=r.length>1,a=[i?[`NAME`,`MODE`,`OLD`,`NEW`,`AGE`,`INFO`]:[`NAME`,`OLD`,`NEW`,`AGE`,`INFO`]],s=new Set;for(let n of r)for(let r of Object.values(t.results[n]))for(let[t,c]of Object.entries(r)){let r=`${n}|${t}|${c.old}|${c.new}`;s.has(r)||(s.add(r),a.push([n===`go`?o(t):t,...i?[n]:[],e(c.old,c.new,F),e(c.new,c.old,I),c.age||``,c.info||``]))}return n(a,H)}try{await V()}catch(e){await B(e)}export{};
package/dist/renovate.js CHANGED
@@ -1 +1 @@
1
- import{_ as e,g as t,m as n,t as r}from"./shared.js";import{join as i}from"node:path";import{readFile as a}from"node:fs/promises";const o=[`renovate.json`,`renovate.json5`,...[`.github`,`.gitea`,`.forgejo`,`.gitlab`].flatMap(e=>[`${e}/renovate.json`,`${e}/renovate.json5`]),`.renovaterc`,`.renovaterc.json`,`.renovaterc.json5`],s={y:365,year:365,years:365,mo:30,month:30,months:30,w:7,week:7,weeks:7,d:1,day:1,days:1,h:1/24,hour:1/24,hours:1/24,min:1/1440,minute:1/1440,minutes:1/1440,s:1/86400,second:1/86400,seconds:1/86400};function c(e){let t=0,n=!1,r=/(\d+(?:\.\d+)?)\s*([a-z]+)/gi,i;for(;(i=r.exec(e))!==null;){let e=s[i[2].toLowerCase()];if(e===void 0)return;t+=Number(i[1])*e,n=!0}return n?t:void 0}function l(e){return!Array.isArray(e.matchPackageNames)||!e.matchPackageNames.length?!1:Object.keys(e).every(e=>!e.startsWith(`match`)||e===`matchPackageNames`)}async function u(e){for(let t of o){let n=i(e,...t.split(`/`));try{return{path:n,text:await a(n,`utf8`)}}catch{}}try{let t=await a(i(e,`package.json`),`utf8`),n=JSON.parse(t);if(n&&typeof n==`object`&&n.renovate&&typeof n.renovate==`object`)return{path:`package.json`,text:JSON.stringify(n.renovate)}}catch{}}function d(e){let t=/^\/(.+)\/([a-z]*)$/.exec(e);if(!t)return e;try{return new RegExp(t[1],t[2])}catch{return e}}function f(e){return/[*?[\]{}!()|+]/.test(e)}function p(t,n){let r={};if(n.cooldown&&typeof t.minimumReleaseAge==`string`){let e=c(t.minimumReleaseAge);e!==void 0&&e>0&&(r.cooldown=e)}let i=[],a={};if(Array.isArray(t.ignoreDeps))for(let e of t.ignoreDeps)typeof e==`string`&&e&&i.push(e);if(Array.isArray(t.packageRules))for(let n of t.packageRules){if(!n||typeof n!=`object`||!l(n))continue;let t=n.matchPackageNames.filter(e=>typeof e==`string`&&!!e);if(n.enabled===!1)for(let e of t)i.push(d(e));if(typeof n.allowedVersions==`string`&&e(n.allowedVersions))for(let e of t)!f(e)&&typeof d(e)==`string`&&(a[e]=n.allowedVersions)}return i.length&&(r.exclude=i),Object.keys(a).length&&(r.pin=a),r}const m=n(e=>t(e,async e=>{let t=await u(e);if(!t)return null;let n;try{n=r(t.text)}catch(e){throw Error(`Unable to parse renovate config ${t.path}: ${e.message}`)}return!n||typeof n!=`object`?null:{parsed:n,path:t.path}}));async function h(e,t={}){let n=await m(e);return n?p(n.parsed,t):{}}export{h as loadRenovateConfig};
1
+ import{B as e,G as t,K as n,U as r,V as i,t as a}from"./shared.js";import{join as o}from"node:path";import{readFile as s}from"node:fs/promises";const c=[`renovate.json`,`renovate.json5`,...[`.github`,`.gitea`,`.forgejo`,`.gitlab`].flatMap(e=>[`${e}/renovate.json`,`${e}/renovate.json5`]),`.renovaterc`,`.renovaterc.json`,`.renovaterc.json5`],l={y:365,year:365,years:365,mo:30,month:30,months:30,w:7,week:7,weeks:7,d:1,day:1,days:1,h:1/24,hour:1/24,hours:1/24,min:1/1440,minute:1/1440,minutes:1/1440,s:1/86400,second:1/86400,seconds:1/86400};function u(e){let t=0,n=!1,r=/(\d+(?:\.\d+)?)\s*([a-z]+)/gi,i;for(;(i=r.exec(e))!==null;){let e=l[i[2].toLowerCase()];if(e===void 0)return;t+=Number(i[1])*e,n=!0}return n?t:void 0}function d(e){return!Array.isArray(e.matchPackageNames)||!e.matchPackageNames.length?!1:Object.keys(e).every(e=>!e.startsWith(`match`)||e===`matchPackageNames`)}async function f(e){for(let t of c){let n=o(e,...t.split(`/`));try{return{path:n,text:await s(n,`utf8`)}}catch{}}try{let t=o(e,`package.json`),n=JSON.parse(await s(t,`utf8`));if(n&&typeof n==`object`&&n.renovate&&typeof n.renovate==`object`)return{path:t,text:JSON.stringify(n.renovate)}}catch{}}function p(e){let t=/^\/(.+)\/([a-z]*)$/.exec(e);if(!t)return e;try{return new RegExp(t[1],t[2])}catch{return e}}function m(e){return/[*?[\]{}!()|+]/.test(e)}function h(e,t){let r={};if(t.cooldown&&typeof e.minimumReleaseAge==`string`){let t=u(e.minimumReleaseAge);t!==void 0&&t>0&&(r.cooldown=t)}let i=[],a={};if(Array.isArray(e.ignoreDeps))for(let t of e.ignoreDeps)typeof t==`string`&&t&&i.push(t);if(Array.isArray(e.packageRules))for(let t of e.packageRules){if(!t||typeof t!=`object`||!d(t))continue;let e=t.matchPackageNames.filter(e=>typeof e==`string`&&!!e);if(t.enabled===!1)for(let t of e)i.push(p(t));if(typeof t.allowedVersions==`string`&&n(t.allowedVersions))for(let n of e)!m(n)&&typeof p(n)==`string`&&(a[n]=t.allowedVersions)}return i.length&&(r.exclude=i),Object.keys(a).length&&(r.pin=a),r}const g={github:(e,t,n)=>`https://raw.githubusercontent.com/${e}/${t}/${n}`,gitlab:(e,t,n)=>`https://gitlab.com/${e}/-/raw/${t}/${n}`,gitea:(e,t,n)=>`https://gitea.com/api/v1/repos/${e}/raw/${n}?ref=${t}`,forgejo:(e,t,n)=>`https://code.forgejo.org/api/v1/repos/${e}/raw/${n}?ref=${t}`};function _(e){if(/^https?:\/\//i.test(e))return{kind:`http`,url:e};let t=e.indexOf(`>`);if(t===-1)return null;let n=e.slice(0,t);if(!Object.hasOwn(g,n))return null;let r=e.slice(t+1).replace(/\([^)]*\)\s*$/,``),i=`HEAD`,a=r.indexOf(`#`);a!==-1&&(i=r.slice(a+1)||`HEAD`,r=r.slice(0,a));let o,s,c=r.indexOf(`//`);if(c!==-1)o=r.slice(c+2),r=r.slice(0,c);else{let e=r.indexOf(`:`);e!==-1&&(s=r.slice(e+1),r=r.slice(0,e))}let l=r.replace(/\/+$/,``);return l.includes(`/`)?{kind:`forge`,forge:n,slug:l,ref:i,name:s,subpath:o}:null}const v=[`default.json`,`default.json5`,`renovate.json`,`renovate.json5`,`.renovaterc.json`,`.renovaterc`];function y(e){return/\.json5?$/.test(e)?[e]:[`${e}.json`,`${e}.json5`]}function b(e){if(e===null)return null;try{let t=a(e);return t&&typeof t==`object`?t:null}catch{return null}}async function x(e,t){if(e.kind===`http`)return b(await t(e.url));let n=g[e.forge],r=async r=>b(await t(n(e.slug,e.ref,r)));if(e.subpath){for(let t of y(e.subpath)){let e=await r(t);if(e)return e}return null}let i=e.name??`default`;for(let t of v){let n=await r(t);if(!n)continue;let a=n.presets?.[i];return a&&typeof a==`object`?a:e.name?null:n}return null}function S(e,t){let n={...e};for(let[e,r]of Object.entries(t)){let t=n[e];n[e]=Array.isArray(r)&&Array.isArray(t)?[...t,...r]:r}return n}async function C(e,t,n,r){let i={},a=Array.isArray(e.extends)?e.extends:[];for(let e of a){if(typeof e!=`string`||r>=10||n.has(e))continue;let a=_(e);if(!a)continue;let o=await x(a,t);o&&(i=S(i,await C(o,t,new Set(n).add(e),r+1)))}let{extends:o,...s}=e;return S(i,s)}async function w(e,t){let n=``;try{n=new URL(e).hostname}catch{}let{getForgeTokens:r,getFetchOpts:i}=await import(`./shared2.js`),[a]=n?await r(n,`https://api.github.com`):[],o={...i(`Bearer`,a).headers};return t&&(o[`if-none-match`]=t),o}function T({noCache:t=!1,timeout:n=1e4}={}){return async r=>{let a=t?null:await e(r),o=await w(r,a?.etag),s;try{s=await fetch(r,{headers:o,signal:AbortSignal.timeout(n)})}catch{return a?.body??null}if(s.status===304&&a)return a.body;if(!s.ok)return a?.body??null;let c;try{c=await s.text()}catch{return a?.body??null}let l=s.headers.get(`etag`);return l&&!t&&i(r,l,c),c}}const E=r(e=>t(e,async e=>{let t=await f(e);if(!t)return null;let n;try{n=a(t.text)}catch(e){throw Error(`Unable to parse renovate config ${t.path}: ${e.message}`)}return!n||typeof n!=`object`?null:{parsed:n,path:t.path}})),D=new Map;async function O(e,t={},n=T()){let r=await E(e);if(!r)return{};let i=D.get(r.path);return i||(i=C(r.parsed,n,new Set,0),D.set(r.path,i)),h(await i,t)}export{O as loadRenovateConfig,T as makePresetFetcher};
package/dist/shared.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import{cwd as e,env as t,pid as n,platform as r,stderr as i}from"node:process";import{styleText as a}from"node:util";import{basename as o,dirname as s,join as c,relative as l,resolve as u}from"node:path";import{accessSync as d,existsSync 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{access as b,mkdir as x,readFile as S,rename as C,writeFile as w}from"node:fs/promises";import{createHash as ee}from"node:crypto";import{homedir as te}from"node:os";import{pathToFileURL as T}from"node:url";function E(e){let t={},n=t,r=e.split(/\r?\n/);for(let e=0;e<r.length;e++){let i=r[e],a=O(i).trim();if(!a)continue;let o=/^\[\[([^\]]+)\]\]$/.exec(a);if(o){let e=t,r=ce(o[1]);for(let t=0;t<r.length-1;t++){let n=e[r[t]];Array.isArray(n)?e=n[n.length-1]:((!n||typeof n!=`object`)&&(e[r[t]]={}),e=e[r[t]])}let i=r[r.length-1];Array.isArray(e[i])||(e[i]=[]);let a={};e[i].push(a),n=a;continue}let s=/^\[([^[\]]+)\]$/.exec(a);if(s){n=k(t,ce(s[1]));continue}let c=ue(a,`=`);if(c<0)continue;let l=a.slice(0,c).trim(),u=a.slice(c+1).trim(),d=ce(l),f=k(n,d.slice(0,-1)),p=d[d.length-1],m=re(u);if(u.startsWith(`[`)&&!oe(u)){let t=u,n=e+1;for(;n<r.length&&(t+=`\n${O(r[n])}`,!oe(t));n++);e=n,f[p]=ie(t)}else if(u.startsWith(`{`)&&!oe(u)){let t=u,n=e+1;for(;n<r.length&&(t+=`\n${O(r[n])}`,!oe(t));n++);e=n,f[p]=ae(t)}else if(m){let t=u.slice(3),n=e+1;for(;n<r.length;n++){let e=r[n].indexOf(m);if(e>=0){t+=(t?`
2
2
  `:``)+r[n].slice(0,e);break}t+=(t?`
3
3
  `:``)+r[n]}e=n,f[p]=ie(m+t+m)}else f[p]=ie(u)}return t}function ne(e,t){let n=e.trim();if(n)for(let e of se(n)){let n=e.trim();n&&t.push(ie(n))}}function re(e){let t=e.slice(0,3);return t!==`"""`&&t!==`'''`||e.includes(t,3)?``:t}function ie(e){if(e.startsWith(`[`)){let t=[],n=de(e,`]`);return ne(e.slice(1,n<0?e.length:n),t),t}return e.startsWith(`{`)?ae(e):e.startsWith(`"""`)?A(e.slice(3,e.lastIndexOf(`"""`))):e.startsWith(`'''`)?e.slice(3,e.lastIndexOf(`'''`)):e.startsWith(`"`)?A(e.slice(1,e.lastIndexOf(`"`))):e.startsWith(`'`)?e.slice(1,e.lastIndexOf(`'`)):D(e)}function D(e){return e===`true`?!0:e===`false`?!1:/^[+-]?\d+(\.\d+)?$/.test(e)?Number(e):e}function ae(e){let t={},n=e.slice(1,e.lastIndexOf(`}`)).trim();if(!n)return t;for(let e of se(n)){let n=e.indexOf(`=`);if(n<0)continue;let r=e.slice(0,n).trim().replace(/^["']|["']$/g,``);t[r]=ie(e.slice(n+1).trim())}return t}function oe(e){let t=0,n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){if(i===`\\`&&n===`"`){r++;continue}i===n&&(n=null)}else if(i===`"`||i===`'`)n=i;else if(i===`{`||i===`[`)t++;else if((i===`}`||i===`]`)&&(t--,t===0))return!0}return!1}function se(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 ce(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 O(e){let t=ue(e,`#`);return t<0?e:e.slice(0,t)}function*le(e,t){let n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n){if(i===`\\`&&n===`"`){r++;continue}i===n&&(n=null)}else i===`"`||i===`'`?n=i:i===t&&(yield r)}}function ue(e,t){return le(e,t).next().value??-1}function de(e,t){let n=-1;for(let r of le(e,t))n=r;return n}function k(e,t){for(let n of t)(!(n in e)||typeof e[n]!=`object`||Array.isArray(e[n]))&&(e[n]={}),e=e[n];return e}function A(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`
4
- `;case`r`:return`\r`;case`t`:return` `;case`u`:case`U`:return String.fromCodePoint(Number.parseInt(t.slice(1),16));default:return t}})}const j=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,M=new Map;function N(e){if(typeof e!=`string`)return null;let t=M.get(e);if(t!==void 0)return t;let n=j.exec(e.trim());if(!n)return M.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 M.set(e,s),s}function fe(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:n?-1:r?1:e<t?-1:+(e>t)}function P(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function F(e,t){let n=P(e,t);if(n!==0)return n;let r=e.prerelease.length>0,i=t.prerelease.length>0;if(!r&&!i)return 0;if(r&&!i)return-1;if(!r&&i)return 1;let a=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<a;n++){if(e.prerelease[n]===void 0)return-1;if(t.prerelease[n]===void 0)return 1;let r=fe(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function pe(e){return N(e)?.version??null}function I(e){return N(e)}const me=new Map,L=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function he(e){if(typeof e!=`string`)return null;let t=me.get(e);if(t!==void 0)return t;let n=L.exec(e);if(!n)return me.set(e,null),null;let r={version:`${n[1]}.${n[2]||`0`}.${n[3]||`0`}`};return me.set(e,r),r}function R(e,t){let n=N(e),r=N(t);return!n||!r?null:ge(n,r)}function ge(e,t){if(e.version===t.version)return null;let n=F(e,t),r=n>0?e:t,i=n>0?t:e,a=r.prerelease.length>0;if(i.prerelease.length>0&&!a){if(!i.patch&&!i.minor)return`major`;if(P(i,r)===0)return i.minor&&!i.patch?`minor`:`patch`}let o=a?`pre`:``;return e.major===t.major?e.minor===t.minor?e.patch===t.patch?`prerelease`:`${o}patch`:`${o}minor`:`${o}major`}function _e(e,t){let n=N(e),r=N(t);return n&&r?F(n,r):null}function z(e,t){return(_e(e,t)??-1)>0}function ve(e,t){return(_e(e,t)??-1)>=0}function ye(e,t){return(_e(e,t)??1)<0}function be(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=N(`${n}.${t[3]??`0`}.${t[4]??`0`}${t[5]||``}`);return r?{op:t[1]||`=`,semver:r}:null}function xe(e,t){let n=F(e,t.semver);switch(t.op){case`>=`:return n>=0;case`<=`:return n<=0;case`>`:return n>0;case`<`:return n<0;case`=`:return n===0;default:return n===0}}function B(e,t,n){return`${e}.${t}.${n}-0`}function Se(e){return e.replace(/~\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.[xX*])*((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t);if(n===void 0)return`>=${a}.0.0 <${B(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${B(a,o+1,0)}`})}function Ce(e){return e.replace(/\^\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.[xX*])*((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t),o=i||``;if(n===void 0)return`>=${a}.0.0 <${B(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${B(a,s+1,0)}`:`>=${a}.${s}.0 <${B(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${B(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${B(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${B(a+1,0,0)}`})}function we(e){return e.replace(/v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)\s+-\s+v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i,a,o,s,c)=>{let l=Number(t),u=n===void 0?0:Number(n),d=r===void 0?0:Number(r),f=i||``,p=Number(a),m;return m=s===void 0?o===void 0?`<${B(p+1,0,0)}`:`<${B(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function V(e,t,n,r){return!e||e===`=`?r?`>=${t}.0.0 <${B(t+1,0,0)}`:`>=${t}.${n}.0 <${B(t,n+1,0)}`:e===`>`?r?`>=${t+1}.0.0`:`>=${t}.${n+1}.0`:e===`<=`?r?`<${B(t+1,0,0)}`:`<${B(t,n+1,0)}`:e===`<`?r?`<${t}.0.0-0`:`<${t}.${n}.0-0`:r?`>=${t}.0.0`:`>=${t}.${n}.0`}function Te(e){return/^\s*[*xX]\s*$/.test(e)?`>=0.0.0`:(e=e.replace(/(>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)\.[xX*]/g,(e,t,n,r)=>V(t,Number(n),Number(r),!1)),e=e.replace(/(>=|<=|>|<|=)?\s*v?(\d+)\.[xX*](?:\.[xX*])?/g,(e,t,n)=>V(t,Number(n),0,!0)),e=e.replace(/(^|[\s|])(>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)(?=\s|$)/g,(e,t,n,r,i)=>`${t}${V(n,Number(r),Number(i),!1)}`),e=e.replace(/(^|[\s|])(>=|<=|>|<|=)?\s*v?(\d+)(?=\s|$)/g,(e,t,n,r)=>`${t}${V(n,Number(r),0,!0)}`),e)}const Ee=new Map;function De(e){let t=Ee.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=we(t),t=Ce(t),t=Se(t),t=Te(t),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t,n)=>`${t}=${n}`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=be(t);if(!n)return Ee.set(e,null),null;i.push(n)}if(i.length===0)return Ee.set(e,null),null;r.push(i)}let i=r.length?r:null;return Ee.set(e,i),i}function Oe(e,t){return t.some(t=>!xe(e,t))?!1:e.prerelease.length>0?t.some(t=>t.semver.prerelease.length>0&&t.semver.major===e.major&&t.semver.minor===e.minor&&t.semver.patch===e.patch):!0}function H(e,t){let n=N(e);if(!n)return!1;let r=De(t);if(!r)return!1;for(let e of r)if(e.length===0||Oe(n,e))return!0;return!1}function ke(e){return typeof e==`string`&&De(e)?e:null}const Ae=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],je={"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`},Me={sec:`second`,min:`minute`};function Ne(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function Pe(e,{now:t,noAffix:n=!1,times:r=Ae,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=je,longUnits:l=!1}={}){let u=Ne(e),d=t===void 0?Date.now():Ne(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&&Me[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Fe(e,t,n){if(e===t)return e;let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;if(r>0&&e[r-1]!==`.`&&e[r-1]!==`-`){let t=r-1;for(;t>=0&&e[t]!==`.`&&e[t]!==`-`;)t--;if(t>=0)r=t+1;else{let t=0;for(;t<r;){let n=e.charCodeAt(t);if(n>=48&&n<=57)break;t++}r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Ie(e){let t=[];for(let n of e){let e=/^([^<>=~!]+)(?:==|>=?|<=?|~=)([0-9.a-z]+)$/.exec(n.replaceAll(/\s+/g,``));if(!e)continue;let r=e[1].replace(/\[.*?\]$/,``);r&&t.push({name:r,version:e[2]})}return t}const Le=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Re=[`node`,`deno`,`bun`],ze=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],Be=[`deps`,`indirect`,`replace`,`tool`],Ve=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function U(e,t){if(t===!0)return!0;if(!(t instanceof Set))return!1;for(let n of t)if(n.test(e))return!0;return!1}function He(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Ue(e){return e.split(`,`).filter(Boolean)}function We(){let e=new Date,t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`),r=String(e.getHours()).padStart(2,`0`),i=String(e.getMinutes()).padStart(2,`0`),a=String(e.getSeconds()).padStart(2,`0`),o=String(e.getMilliseconds()).padStart(3,`0`);return`${e.getFullYear()}-${t}-${n} ${r}:${i}:${a}.${o}`}function Ge(e,t,n=` `){let r=Array(e[0].length).fill(0),i=Array(e.length);for(let n=0;n<e.length;n++){let a=e[n],o=Array(a.length);for(let e=0;e<a.length;e++){let n=t(a[e]);o[e]=n,n>r[e]&&(r[e]=n)}i[n]=o}let a=``;for(let t=0;t<e.length;t++){let o=e[t],s=o.length-1;for(let e=0;e<=s;e++)if(e>0&&(a+=n),a+=o[e],e!==s){let n=r[e]-i[t][e];n>0&&(a+=` `.repeat(n))}t<e.length-1&&(a+=`
4
+ `;case`r`:return`\r`;case`t`:return` `;case`u`:case`U`:return String.fromCodePoint(Number.parseInt(t.slice(1),16));default:return t}})}const j=/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*))?(?:\+[a-zA-Z0-9._-]+)?$/,M=new Map;function N(e){if(typeof e!=`string`)return null;let t=M.get(e);if(t!==void 0)return t;let n=j.exec(e.trim());if(!n)return M.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 M.set(e,s),s}function fe(e,t){let n=typeof e==`number`,r=typeof t==`number`;return n&&r?e-t:n?-1:r?1:e<t?-1:+(e>t)}function P(e,t){return e.major-t.major||e.minor-t.minor||e.patch-t.patch}function F(e,t){let n=P(e,t);if(n!==0)return n;let r=e.prerelease.length>0,i=t.prerelease.length>0;if(!r&&!i)return 0;if(r&&!i)return-1;if(!r&&i)return 1;let a=Math.max(e.prerelease.length,t.prerelease.length);for(let n=0;n<a;n++){if(e.prerelease[n]===void 0)return-1;if(t.prerelease[n]===void 0)return 1;let r=fe(e.prerelease[n],t.prerelease[n]);if(r!==0)return r}return 0}function pe(e){return N(e)?.version??null}function I(e){return N(e)}const me=new Map,L=/(?:^|[^.\d])(\d+)(?:\.(\d+))?(?:\.(\d+))?/;function he(e){if(typeof e!=`string`)return null;let t=me.get(e);if(t!==void 0)return t;let n=L.exec(e);if(!n)return me.set(e,null),null;let r={version:`${n[1]}.${n[2]||`0`}.${n[3]||`0`}`};return me.set(e,r),r}function R(e,t){let n=N(e),r=N(t);return!n||!r?null:ge(n,r)}function ge(e,t){if(e.version===t.version)return null;let n=F(e,t),r=n>0?e:t,i=n>0?t:e,a=r.prerelease.length>0;if(i.prerelease.length>0&&!a){if(!i.patch&&!i.minor)return`major`;if(P(i,r)===0)return i.minor&&!i.patch?`minor`:`patch`}let o=a?`pre`:``;return e.major===t.major?e.minor===t.minor?e.patch===t.patch?`prerelease`:`${o}patch`:`${o}minor`:`${o}major`}function _e(e,t){let n=N(e),r=N(t);return n&&r?F(n,r):null}function z(e,t){return(_e(e,t)??-1)>0}function ve(e,t){return(_e(e,t)??-1)>=0}function ye(e,t){return(_e(e,t)??1)<0}function be(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=N(`${n}.${t[3]??`0`}.${t[4]??`0`}${t[5]||``}`);return r?{op:t[1]||`=`,semver:r}:null}function xe(e,t){let n=F(e,t.semver);switch(t.op){case`>=`:return n>=0;case`<=`:return n<=0;case`>`:return n>0;case`<`:return n<0;case`=`:return n===0;default:return n===0}}function B(e,t,n){return`${e}.${t}.${n}-0`}function Se(e){return e.replace(/~\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.[xX*])*((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t);if(n===void 0)return`>=${a}.0.0 <${B(a+1,0,0)}`;let o=Number(n);return`>=${a}.${o}.${r===void 0?0:Number(r)}${i||``} <${B(a,o+1,0)}`})}function Ce(e){return e.replace(/\^\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.[xX*])*((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i)=>{let a=Number(t),o=i||``;if(n===void 0)return`>=${a}.0.0 <${B(a+1,0,0)}`;let s=Number(n);if(r===void 0)return a===0?`>=${a}.${s}.0 <${B(a,s+1,0)}`:`>=${a}.${s}.0 <${B(a+1,0,0)}`;let c=Number(r);return a===0?s===0?`>=${a}.${s}.${c}${o} <${B(a,s,c+1)}`:`>=${a}.${s}.${c}${o} <${B(a,s+1,0)}`:`>=${a}.${s}.${c}${o} <${B(a+1,0,0)}`})}function we(e){return e.replace(/v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)\s+-\s+v?(\d+)(?:\.(\d+))?(?:\.(\d+))?((?:-[a-zA-Z0-9._-]+)?)/g,(e,t,n,r,i,a,o,s,c)=>{let l=Number(t),u=n===void 0?0:Number(n),d=r===void 0?0:Number(r),f=i||``,p=Number(a),m;return m=s===void 0?o===void 0?`<${B(p+1,0,0)}`:`<${B(p,Number(o)+1,0)}`:`<=${p}.${Number(o)}.${Number(s)}${c||``}`,`>=${l}.${u}.${d}${f} ${m}`})}function Te(e,t,n,r){return!e||e===`=`?r?`>=${t}.0.0 <${B(t+1,0,0)}`:`>=${t}.${n}.0 <${B(t,n+1,0)}`:e===`>`?r?`>=${t+1}.0.0`:`>=${t}.${n+1}.0`:e===`<=`?r?`<${B(t+1,0,0)}`:`<${B(t,n+1,0)}`:e===`<`?r?`<${t}.0.0-0`:`<${t}.${n}.0-0`:r?`>=${t}.0.0`:`>=${t}.${n}.0`}function Ee(e){return/^\s*[*xX]\s*$/.test(e)?`>=0.0.0`:(e=e.replace(/(>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)\.[xX*]/g,(e,t,n,r)=>Te(t,Number(n),Number(r),!1)),e=e.replace(/(>=|<=|>|<|=)?\s*v?(\d+)\.[xX*](?:\.[xX*])?/g,(e,t,n)=>Te(t,Number(n),0,!0)),e=e.replace(/(^|[\s|])(>=|<=|>|<|=)?\s*v?(\d+)\.(\d+)(?=\s|$)/g,(e,t,n,r,i)=>`${t}${Te(n,Number(r),Number(i),!1)}`),e=e.replace(/(^|[\s|])(>=|<=|>|<|=)?\s*v?(\d+)(?=\s|$)/g,(e,t,n,r)=>`${t}${Te(n,Number(r),0,!0)}`),e)}const V=new Map;function De(e){let t=V.get(e);if(t!==void 0)return t;let n=e.split(`||`).map(e=>e.trim()),r=[];for(let t of n){if(!t){r.push([]);continue}t=we(t),t=Ce(t),t=Se(t),t=Ee(t),t=t.replace(/(>=|<=|>|<|=)\s+/g,`$1`),t=t.replace(/(^|[\s])v?(\d+\.\d+\.\d+(?:-[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)?)\b/g,(e,t,n)=>`${t}=${n}`);let n=t.split(/\s+/).filter(Boolean),i=[];for(let t of n){let n=be(t);if(!n)return V.set(e,null),null;i.push(n)}if(i.length===0)return V.set(e,null),null;r.push(i)}let i=r.length?r:null;return V.set(e,i),i}function Oe(e,t){return t.some(t=>!xe(e,t))?!1:e.prerelease.length>0?t.some(t=>t.semver.prerelease.length>0&&t.semver.major===e.major&&t.semver.minor===e.minor&&t.semver.patch===e.patch):!0}function H(e,t){let n=N(e);if(!n)return!1;let r=De(t);if(!r)return!1;for(let e of r)if(e.length===0||Oe(n,e))return!0;return!1}function ke(e){return typeof e==`string`&&De(e)?e:null}const Ae=[[1e3,6e4,`sec`],[6e4,36e5,`min`],[36e5,864e5,`hour`],[864e5,6048e5,`day`],[6048e5,2628e6,`week`],[2628e6,31536e6,`month`],[31536e6,1/0,`year`]],je={"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`},Me={sec:`second`,min:`minute`};function Ne(e){return e instanceof Date?e.getTime():typeof e==`string`?Date.parse(e):e}function Pe(e,{now:t,noAffix:n=!1,times:r=Ae,nowThreshold:i=2e3,nowString:a=`now`,unknownString:o=``,aliases:s=!1,aliasesMap:c=je,longUnits:l=!1}={}){let u=Ne(e),d=t===void 0?Date.now():Ne(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&&Me[t[2]]||t[2])+(m>1?`s`:``);break}}let g=`${m} ${h}`,_;return _=n?g:p?`in ${g}`:`${g} ago`,s?c[_]??_:_}function Fe(e,t,n){if(e===t)return e;let r=0;for(;r<e.length&&r<t.length&&e[r]===t[r];)r++;if(r>0&&e[r-1]!==`.`&&e[r-1]!==`-`){let t=r-1;for(;t>=0&&e[t]!==`.`&&e[t]!==`-`;)t--;if(t>=0)r=t+1;else{let t=0;for(;t<r;){let n=e.charCodeAt(t);if(n>=48&&n<=57)break;t++}r=t}}let i=e.substring(r);return i?e.substring(0,r)+n(i):e}function Ie(e){let t=[];for(let n of e){let e=/^([^<>=~!]+)(?:==|>=?|<=?|~=)([0-9.a-z]+)$/.exec(n.replaceAll(/\s+/g,``));if(!e)continue;let r=e[1].replace(/\[.*?\]$/,``);r&&t.push({name:r,version:e[2]})}return t}const Le=[`dependencies`,`devDependencies`,`peerDependencies`,`optionalDependencies`,`resolutions`,`packageManager`],Re=[`node`,`deno`,`bun`],ze=[`project.dependencies`,`project.optional-dependencies`,`dependency-groups.dev`,`dependency-groups.lint`,`dependency-groups.test`],Be=[`deps`,`indirect`,`replace`,`tool`],Ve=[`dependencies`,`dev-dependencies`,`build-dependencies`,`workspace.dependencies`];function U(e,t){if(t===!0)return!0;if(!(t instanceof Set))return!1;for(let n of t)if(n.test(e))return!0;return!1}function He(e,t){return t.split(`.`).reduce((e,t)=>e?.[t]??null,e)}function Ue(e){return e.split(`,`).filter(Boolean)}function We(){let e=new Date,t=String(e.getMonth()+1).padStart(2,`0`),n=String(e.getDate()).padStart(2,`0`),r=String(e.getHours()).padStart(2,`0`),i=String(e.getMinutes()).padStart(2,`0`),a=String(e.getSeconds()).padStart(2,`0`),o=String(e.getMilliseconds()).padStart(3,`0`);return`${e.getFullYear()}-${t}-${n} ${r}:${i}:${a}.${o}`}function Ge(e,t,n=` `){let r=Array(e[0].length).fill(0),i=Array(e.length);for(let n=0;n<e.length;n++){let a=e[n],o=Array(a.length);for(let e=0;e<a.length;e++){let n=t(a[e]);o[e]=n,n>r[e]&&(r[e]=n)}i[n]=o}let a=``;for(let t=0;t<e.length;t++){let o=e[t],s=o.length-1;for(let e=0;e<=s;e++)if(e>0&&(a+=n),a+=o[e],e!==s){let n=r[e]-i[t][e];n>0&&(a+=` `.repeat(n))}t<e.length-1&&(a+=`
5
5
  `)}return a}const Ke={y:365,m:30,w:7,d:1,h:1/24,s:1/86400};function qe(e){let t=/^(\d+(?:\.\d+)?)\s*([a-z])$/i.exec(e);if(t){let[,e,n]=t,r=Ke[n.toLowerCase()];if(r)return Number(e)*r}if(!/^\d+(?:\.\d+)?$/.test(e))throw Error(`Invalid cooldown value: ${e}`);return Number(e)}async function W(e,t,{concurrency:n=1/0}={}){let r=Array.from(e);if(!Number.isFinite(n))return Promise.all(r.map(t));let i=Array(r.length),a=0;return await Promise.all(Array.from({length:Math.min(Math.max(n,1),r.length)},async()=>{for(;a<r.length;){let e=a++;i[e]=await t(r[e])}})),i}async function Je(e){try{return await e}catch{return null}}const G=e=>RegExp.escape?RegExp.escape(e):e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);async function Ye(e,t){let n=e;for(;;){let e=await t(n);if(e)return e;let r=s(n);if(r===n)return null;n=r}}function Xe(e){let t=new Map;return n=>{let r=t.get(n);return r||(r=e(n),t.set(n,r)),r}}const Ze=c(r===`win32`?t.LOCALAPPDATA||c(te(),`AppData`,`Local`):t.XDG_CACHE_HOME||c(te(),`.cache`),`updates`);let Qe=null;const $e=new Map;function et(e){let t=$e.get(e);return t===void 0&&(t=ee(`sha256`).update(e).digest(`hex`).substring(0,16),$e.set(e,t)),t}async function tt(e){try{let t=await S(c(Ze,`${et(e)}.cache`),`utf8`),n=t.indexOf(`
6
- `);if(n===-1)return null;let r=t.substring(0,n),i=t.substring(n+1);return r&&i?{etag:r,body:i}:null}catch{return null}}const nt=new Set;let rt=0;function it(e,t,r){let i=(async()=>{try{await(Qe??=x(Ze,{recursive:!0}))}catch{Qe=null;return}try{let i=c(Ze,`${et(e)}.cache`),a=`${i}.${n}-${rt++}.tmp`;await w(a,`${t}\n${r}`),await C(a,i)}catch{}})();nt.add(i),(async()=>{await i,nt.delete(i)})()}async function at(){for(;nt.size;)await Promise.all(nt)}var ot=`17.18.2`;function st(e,t,n){if(!t||!n||!e)return!0;let r=Date.parse(e);return Number.isNaN(r)?!0:(n-r)/(24*3600*1e3)>=t}const ct=ot,lt=5e3,K=e=>e[0]===`v`?e.substring(1):e,ut=e=>e.endsWith(`/`)?e.slice(0,-1):e;function dt(e,t){return{headers:{"user-agent":`updates/${ct}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}const ft=new Set([`ECONNRESET`,`ECONNREFUSED`,`ETIMEDOUT`,`EAI_AGAIN`,`EPIPE`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`,`UND_ERR_HEADERS_TIMEOUT`,`UND_ERR_BODY_TIMEOUT`]);function pt(e){if(e?.name===`TimeoutError`||e?.name===`AbortError`)return!0;let t=e?.code??e?.cause?.code;return typeof t==`string`&&ft.has(t)}async function mt(e,t){try{return await fetch(e,t)}catch(t){let n=Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`,{cause:t});throw n.transient=pt(t),n}}async function q(e,t,n={}){for(let r=0;;r++)try{return await e.doFetch(t,{...n,signal:AbortSignal.timeout(e.fetchTimeout)})}catch(e){if(r>=2||!e?.transient)throw e}}async function ht(e){return typeof e.text==`function`?e.text():JSON.stringify(await e.json())}function gt(e,t){if(!t||e.length<16384)return e;try{return JSON.stringify(t(JSON.parse(e)))}catch{return e}}async function _t(e,t,n={},r){let i=t.noCache?null:await tt(e),a=n.headers,o=i?{...a,"if-none-match":i.etag}:a,s=await q(t,e,{...n,headers:o});if(!s)return{res:void 0};if(s.status===304&&i)return{body:i.body,res:s};if(!s.ok)return{res:s};let c=gt(await ht(s),r),l=s.headers?.get?.(`etag`);return l&&!t.noCache&&it(e,l,c),{body:c,res:s}}async function vt(e,t,n={},r){if(!t.noCache){let t=await tt(e);if(t)return{body:t.body}}let i=await q(t,e,n);if(!i)return{res:void 0};if(!i.ok)return{res:i};let a=gt(await ht(i),r);return t.noCache||it(e,`immutable`,a),{body:a,res:i}}function yt(e){return(I(e)?.prerelease.length??0)>0}function bt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}const xt=new WeakMap;function St(e){let t=xt.get(e);if(t)return t;let n=new Set(e);return n.add(`prerelease`),e.has(`patch`)&&n.add(`prepatch`),e.has(`minor`)&&n.add(`preminor`),e.has(`major`)&&n.add(`premajor`),xt.set(e,n),n}function Ct(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=J(e),s=J(t);if(!o||!s)return!0;let c=bt(e)||yt(e),l=yt(t);return c&&!l?ve(s,o)||n:!l&&ye(s,o)?a(i,r):!0}function J(e){return he(e)?.version??``}function wt(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:u}){let d=J(n);if(!d)return d;let f=bt(n)||i,p=f?St(r):r,m=e?.time,h=!!m,g=o||!h,_=!!(c&&l),v=0,y=!1,b=d,x=I(d);for(let e of t){let t=I(e);if(!t?.version||t.prerelease.length&&(!f||a))continue;let n=t.version;if(s&&!H(n,s))continue;let r;if(_&&(r=u?u(e):h?m[e]:void 0,!st(r,c,l)))continue;let i=ge(x,t);if(!(!i||!p.has(i)))if(g)((y?F(t,x)>0:P(t,x)>=0)||s&&!H(b,s))&&(b=n,x=t,y=!0);else{let i=Date.parse(r??m[e]);i>=0&&i>v&&(b=n,x=t,v=i)}}return b||null}function Tt(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s,cooldownDays:c,now:l},{allowDowngrade:u,matchesAny:d,isGoPseudoVersion:f}){if(n===`*`||n.includes(`||`)||/\d\s/.test(n))return null;let p=[],m;if(t===`pypi`){let t=e.releases;p=Object.keys(t),m=e=>t?.[e]?.[0]?.upload_time_iso_8601}else if(t===`npm`||t===`cargo`)p=Object.keys(e.versions);else if(t===`go`){let t=J(n);if(!t)return null;let r=a||bt(n),p=e=>yt(e)&&(!r||i),m={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d},h=e.old||n,g=J(e.new);if(g&&!f(e.new)&&!p(e.new)){let n=R(t,g);if(n&&o.has(n)&&Ct(h,e.new,m)&&st(e.Time,c,l)&&(!s||H(g,s)))return e.new}let _=J(e.sameMajorNew);if(_&&!f(e.sameMajorNew)&&!p(e.sameMajorNew)){let n=R(t,_);if(n&&o.has(n)&&Ct(h,e.sameMajorNew,m)&&st(e.sameMajorTime,c,l)&&(!s||H(_,s)))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}if(c&&l&&e.olderEligible&&!p(e.olderEligible.version)){let n=J(e.olderEligible.version);if(n){let r=R(t,n);if(r&&o.has(r)&&Ct(h,e.olderEligible.version,m)&&(!s||H(n,s)))return e.Time=e.olderEligible.time,delete e.newPath,e.olderEligible.version}}return null}let h=wt(e,p,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:m});if(!h)return null;if(r)return h;{let r=``,f=``,p=!1;t===`pypi`?(f=e.info.version,r=J(e.info.version),p=yt(f)):(r=e[`dist-tags`].latest,p=yt(r));let m=J(n),g=bt(n),_=yt(h),v={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d};if(!i&&a||g&&_)return h;if(g&&!_)return Ct(n,h,v)?h:null;let y=R(m,r);return y&&y!==`prerelease`&&!o.has(y.replace(/^pre/,``))||i&&p?h:ye(r,m)&&!p?Ct(n,r,v)?r:z(h,m)?h:null:!g&&p&&!a||s&&!H(r,s)||c&&l&&!st(t===`pypi`?e.releases?.[f||r]?.[0]?.upload_time_iso_8601:e.time?.[r],c,l)?h:f||r}}const Et=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&Et.set(e.substring(0,t),e.substring(t+1))}const Dt=[`UPDATES_GITHUB_API_TOKEN`,`GITHUB_API_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`HOMEBREW_GITHUB_API_TOKEN`];function Ot(){return Array.from(new Set(Dt.map(e=>t[e]).filter(Boolean)))}let kt;function At(){let e=Ot();return e.length?Promise.resolve(e):kt??=(async()=>{try{let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]),{stdout:n}=await t(e)(`gh`,[`auth`,`token`],{encoding:`utf8`,timeout:5e3}),r=n.trim();return r?[r]:[]}catch{return[]}})()}const jt=new Map;async function Mt(e,t){if(!e)return[];let n=Et.get(e);if(n)return[n];let r=``;try{r=new URL(t).hostname}catch{}return e===`api.github.com`||e===`github.com`||e===r?At():[]}async function Nt(e,t,n){let r;try{r=new URL(e).hostname}catch{r=``}let i=await Mt(r,t.forgeApiUrl),a=e=>{let t=dt(`Bearer`,e);return n&&(t.headers={...t.headers,...n}),t};if(!i.length)return q(t,e,a());let o=r?jt.get(r):void 0;if(o)return q(t,e,a(o));for(let n of i){let i=await q(t,e,a(n));if(i.status!==401&&i.status!==403)return r&&jt.set(r,n),i}return q(t,e,a())}function Pt(e,t){let n=K(t);if(!pe(n))return null;let r=``,i=``;for(let t of e){let e=K(t);pe(e)&&(!r||z(e,i))&&(r=t,i=e)}return r&&z(i,n)?r:null}function Ft(e){let t=e.replace(`git@`,``).replace(/.+?\/\//,`https://`).replace(/\.git$/,``);return/^[a-z]+:[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?t.replace(/^(.+?):/,(e,t)=>`https://${t}.com/`):/^[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?`https://github.com/${t}`:t}const It=/^[0-9a-f]{7,}$/i;function Lt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function Rt(e,t){let n=t.noCache?null:await tt(e),r=await Nt(e,t,n?{"if-none-match":n.etag}:void 0);if(r?.status===304&&n)try{let e=JSON.parse(n.body);return{tags:e.tags||[],link:e.link||``}}catch{return null}if(!r?.ok)return null;let i=Lt(await r.json()),a=r.headers.get(`link`)||``,o=r.headers.get(`etag`);return o&&!t.noCache&&it(e,o,JSON.stringify({link:a,tags:i})),{tags:i,link:a}}async function zt(e,t,n,r){let i=r=>`${e}/repos/${t}/${n}/tags?per_page=100&page=${r}`;try{let e=await Rt(i(1),r);if(!e)return[];let t=e.tags,n=/<([^>]+)>;\s*rel="last"/.exec(e.link);if(!n)return t;let a=Math.min(Number(new URL(n[1]).searchParams.get(`page`)),10);if(a<2)return t;let o=await Promise.all(Array.from({length:a-1},(e,t)=>Rt(i(t+2),r)));for(let e of o)e&&t.push(...e.tags);return t}catch{return[]}}function Bt(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 Vt(e,t,n=``){let r=t.startsWith(`v`),i=K(e),a=K(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 Ut({repository:e,homepage:t,info:n},r,i){if(n){let t=n.project_urls;for(let n of[`repository`,`Repository`,`repo`,`Repo`,`source`,`Source`,`source code`,`Source code`,`Source Code`,`homepage`,`Homepage`])if(t?.[n]){e=t[n];break}e??=`https://pypi.org/project/${i}/`}let a=``;return r===`https://npm.pkg.github.com`?`https://github.com/${i.replace(/^@/,``)}`:(e&&(a=Ft(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a+=`/${Ht(a)}/${e.directory}`)),a||t||``)}const Wt={"allow-downgrade":{short:`d`,type:`string`,multiple:!0},"error-on-outdated":{short:`E`,type:`boolean`},"error-on-unchanged":{short:`U`,type:`boolean`},exclude:{short:`e`,type:`string`,multiple:!0},file:{short:`f`,type:`string`,multiple:!0},forgeapi:{type:`string`},goproxy:{type:`string`},cargoapi:{type:`string`},dockerapi:{type:`string`},greatest:{short:`g`,type:`string`,multiple:!0},help:{short:`h`,type:`boolean`},include:{short:`i`,type:`string`,multiple:!0},indirect:{short:`I`,type:`boolean`},json:{short:`j`,type:`boolean`},jsrapi:{type:`string`},cooldown:{short:`C`,type:`string`},minor:{short:`m`,type:`string`,multiple:!0},modes:{short:`M`,type:`string`,multiple:!0},color:{short:`c`,type:`boolean`},"no-cache":{short:`x`,type:`boolean`},"no-color":{short:`n`,type:`boolean`},patch:{short:`P`,type:`string`,multiple:!0},pin:{short:`l`,type:`string`,multiple:!0},prerelease:{short:`p`,type:`string`,multiple:!0},pypiapi:{type:`string`},registry:{short:`r`,type:`string`},release:{short:`R`,type:`string`,multiple:!0},sockets:{short:`s`,type:`string`},timeout:{short:`T`,type:`string`},types:{short:`t`,type:`string`,multiple:!0},update:{short:`u`,type:`boolean`},verbose:{short:`V`,type:`boolean`},version:{short:`v`,type:`boolean`}};function Gt(e,t){return RegExp(`^${G(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Kt(e,t,n){if(t&&typeof e==`string`)return/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Gt(e,n);{let t=e instanceof RegExp?e:Gt(e,n);return/[gy]/.test(t.flags)?new RegExp(t.source,t.flags.replace(/[gy]/g,``)):t}}function qt(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.filter(e=>typeof e==`string`).flatMap(Ue)):typeof e==`string`?new Set([e]):typeof e==`boolean`?e:!1}function Jt(e){for(let[t,{short:n}]of Object.entries(Wt))if(t===e||n===e)return t;return``}function Y(e){return new Set(e.map(e=>Kt(e,!1,!0)))}function Yt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Ue(e)):[]}function Xt(e){let t={},n=Array.isArray(e)?e:[e];for(let e of n){if(typeof e!=`string`)continue;let n=e.indexOf(`=`);if(n===-1)continue;let r=e.slice(0,n),i=e.slice(n+1);r&&i&&ke(i)&&(t[r]=i)}return t}function Zt(e){return typeof e==`boolean`?e:!Array.isArray(e)||!e.length?!1:Y(e)}async function Qt(e){let t=await Promise.all([`js`,`ts`,`mjs`,`mts`].map(async t=>{let n=`updates.config.${t}`,r=c(e,n);try{await b(r)}catch{return null}try{return{configDir:e,filename:n,default:(await import(T(r).href)).default??{}}}catch(e){return Error(`Unable to parse config file ${n}: ${e?.message??e}`)}}));for(let e of t)if(e&&!(e instanceof Error))return e;for(let e of t)if(e instanceof Error)throw e;return null}const $t=Xe(e=>Ye(e,Qt));async function en(e){let t=await $t(e),n=t?.default??{},{loadRenovateConfig:r}=await import(`./renovate.js`);return{...await r(t?.configDir??e,n.inherit?.renovate),...n}}function tn(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 nn(e){try{return tn(h(e,`utf-8`))}catch{return}}function rn(t){let n=e();for(;;){let e=c(n,t);try{if(_(e).isFile())return e}catch{}let r=s(n);if(r===n)break;n=r}}function an(e){let n={},r=e.toLowerCase();for(let[i,a]of Object.entries(t)){if(!i.toLowerCase().startsWith(r))continue;let t=i.substring(e.length).split(`__`).filter(Boolean);if(t.length===0)continue;let o=n;for(let e=0;e<t.length;e++){let n=t[e];if(e===t.length-1)o[n]=a;else if(o[n]===void 0&&(o[n]={}),typeof o[n]==`object`)o=o[n];else break}}return n}function on(e,n={}){let i=r===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...n}],s=[];function l(e){if(!e||s.includes(e))return;let t=nn(e);t&&(o.push(t),s.push(e))}i||(l(c(`/etc`,e,`config`)),l(c(`/etc`,`${e}rc`))),a&&(l(c(a,`.config`,e,`config`)),l(c(a,`.config`,e)),l(c(a,`.${e}`,`config`)),l(c(a,`.${e}rc`))),l(rn(`.${e}rc`));let u=an(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const sn=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,cn=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,ln=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,un=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,dn=/(@[^/]+\/)?([^/]+)/g;function fn(e){let t=e.match(dn);return t?t[t.length-1]:e}const pn=`https://registry.npmjs.org`;let mn=null;const hn=new Map;function gn(){return mn??=on(`npm`,{registry:pn})}function _n(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function vn(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:_n(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(_n(a),`base64`).toString(`utf8`);return{token:Buffer.from(`${i}:${e}`).toString(`base64`),type:`Basic`,username:i,password:e}}let o=n(`_auth`);if(o)return{token:_n(o),type:`Basic`}}function yn(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=vn(`//${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:_n(i),type:`Basic`}}function bn(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function xn(e,t){mn||=gn();let n=e.startsWith(`@`)?e.split(`/`)[0]:``,r=`${n}:${t}`,i=hn.get(r);if(i)return i;let a=()=>({auth:yn(t,mn),registry:t}),o;if(!e.startsWith(`@`))o=a();else{let e=ut(bn(n,mn));if(e!==t)try{let t=yn(e,mn);o=t?.token?{auth:t,registry:e}:a()}catch{o=a()}else o=a()}return hn.set(r,o),o}function Sn(e,t,n){mn||=gn();let r=ut((typeof n.registry==`string`?n.registry:!1)||t.registry||mn.registry||pn);return{...xn(e,r),originalRegistry:r}}function Cn(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const wn=new Map,Tn=new Map,En=new Map;function Dn(e){let t={};for(let n of Object.keys(e.versions??{}))t[n]={};return{name:e.name,"dist-tags":e[`dist-tags`],versions:t,time:e.time,error:e.error}}async function On(e,t,n,r,i){let{auth:a,registry:o}=Sn(e,n,r),s=Cn(o,t===`resolutions`?fn(e):e),c=wn.get(s);if(!c){let t=dt(a?.type,a?.token);t.headers={...t.headers,accept:`application/vnd.npm.install-v1+json`},c=(async()=>{try{let n=await _t(s,i,t,Dn);return`body`in n||Bt(n.res,s,e,o),JSON.parse(n.body)}catch(e){throw wn.delete(s),e}})(),wn.set(s,c)}return[await c,t,o,e]}async function kn(e,t,n,r,i){let{auth:a,registry:o}=Sn(e,n,r),s=Cn(o,e,t),c=Tn.get(s);if(c)return c;let l=(async()=>{try{let n=dt(a?.type,a?.token),r=await vt(s,i,n,e=>({repository:e.repository,homepage:e.homepage,_npmOperationalInternal:e._npmOperationalInternal?.tmp?{tmp:e._npmOperationalInternal.tmp}:void 0}));if(!(`body`in r))return{};let c=JSON.parse(r.body),l=``,u=c?._npmOperationalInternal?.tmp;if(u){let e=/(\d{13})/.exec(u);e&&(l=new Date(Number(e[1])).toISOString())}if(!l){let r=Cn(o,e),a=En.get(r);a||(a=(async()=>{try{let e=await q(i,r,n);return e?.ok?await e.json():null}catch{return En.delete(r),null}})(),En.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return Tn.set(s,l),l}function An(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function jn(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function Mn(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 Nn(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 _t(o,n,{headers:{"accept-encoding":`gzip, deflate, br`}},e=>({latest:e.latest,versions:Object.fromEntries(Object.entries(e.versions??{}).map(([e,t])=>[e,{createdAt:t?.createdAt}]))}));if(`body`in s){let r=JSON.parse(s.body),i={},a={};for(let[e,t]of Object.entries(r.versions??{}))i[e]={version:e,time:t.createdAt},a[e]=t.createdAt;return[{name:e,"dist-tags":{latest:r.latest},versions:i,time:a},t,n.jsrApiUrl,e]}Bt(s.res,o,e,`JSR`)}function Pn(e,t){let n=new Map;for(let[e,{old:r,oldOrig:i,new:a}]of Object.entries(t)){let[t,o]=e.split(`\0`),s=i||r;t===`packageManager`?n.set(`${t}\0${o}@${s}`,`"${t}": "${o}@${a}"`):n.set(`${o}\0${s}`,`"${o}": "${a}"`)}return n.size?e.replace(/"((?:[^"\\]|\\.)*)": *"((?:[^"\\]|\\.)*)"/g,(e,t,r)=>n.get(`${t}\0${r}`)??e):e}function Fn(e,t,n){let r=e.replace(un,t);if(!n||n===e)return r;let i=/^([\^~]|>=\s*)([\d.]+)$/.exec(n);if(!i)return r;let[,a,o]=i,s=t.split(/[-+]/)[0];if(s!==t)return r;let c=o.split(`.`).length,l=s.split(`.`);return l.length===c?r:`${a}${l.slice(0,c).join(`.`)}`}function X(e){if(/[xX*]/.test(e))return e;let t=e.match(ln);return t?.length===1?e.replace(ln,J(t[0])):e}async function In(e,t,n){let r=`${n.forgeApiUrl}/repos/${e}/${t}/commits`;try{let e=n.noCache?null:await tt(r),t=await Nt(r,n,e?{"if-none-match":e.etag}:void 0),i;if(t?.status===304&&e)i=e.body;else if(t?.ok){let{sha:e,commit:a}=JSON.parse(await t.text())[0];i=JSON.stringify([{sha:e,commit:{committer:a?.committer,author:a?.author}}]);let o=t.headers.get(`etag`);o&&!n.noCache&&it(r,o,i)}else return{hash:``,commit:{}};let{sha:a,commit:o}=JSON.parse(i)[0];return{hash:a,commit:o}}catch{return{hash:``,commit:{}}}}async function Ln(e,t,n){return(await zt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Rn(e,t,n){let r=t.old.replace(sn,``),[,i,a,o]=cn.exec(r)||[];if(!i||!a||!o)return null;let s=e=>{let n=t.old.lastIndexOf(o);return t.old.slice(0,n)+e+t.old.slice(n+o.length)};if(It.test(o)){let{hash:t,commit:r}=await In(i,a,n);if(!t)return null;let c=r?.committer?.date??r?.author?.date,l=t.substring(0,o.length);if(o.toLowerCase()!==l.toLowerCase())return{key:e,newRange:s(l),user:i,repo:a,oldRef:o,newRef:l,newDate:c}}else{let t=Pt(await Ln(i,a,n),o);if(t)return{key:e,newRange:s(t),user:i,repo:a,oldRef:o,newRef:t}}return null}function zn(e){let t={};for(let[n,r]of Object.entries(e.releases??{}))t[n]=(r??[]).slice(0,1).map(e=>e.upload_time_iso_8601?{upload_time_iso_8601:e.upload_time_iso_8601}:{});let{name:n,version:r,project_urls:i}=e.info??{};return{info:{name:n,version:r,project_urls:i},releases:t}}async function Bn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await _t(r,n,{headers:{"accept-encoding":`gzip, deflate, br`}},zn);if(`body`in i)return[JSON.parse(i.body),t,null,e];Bt(i.res,r,e,n.pypiApiUrl)}function Vn(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let a=e.split(`\0`)[1],o=i||r;n=n.replace(RegExp(`(['"])(${G(a)} *(?:\\[[^\\]]+\\])? *[<>=~]+ *)${G(o)}\\1`,`g`),(n,r,i)=>`${r}${i}${t[e].new}${r}`)}return n}let Hn;async function Un(){let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]);return t(e)}function Wn(){return Hn??=Un()}function Gn(){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 ut(e)}return`https://proxy.golang.org`}function Kn(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function qn(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function Jn(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}const Yn=/\/v(\d+)$/;function Xn(e){let t=Yn.exec(e);return t?Number.parseInt(t[1]):1}function Zn(e,t){let n=e.replace(Yn,``);return t<=1?n:`${n}/v${t}`}function Qn(e,t){if(t.includes(`+incompatible`))return e;let n=Number.parseInt(K(t).split(`.`)[0]);return Number.isNaN(n)||n<=1||n===Xn(e)?e:Zn(e,n)}function $n(e,t){let n=t?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e);if(!n)return null;let[,r,i,a]=n;return i.startsWith(`./`)||i.startsWith(`/`)||i.startsWith(`../`)?null:{origModule:r,targetModule:i,targetVersion:a}}function er(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||tr(n)}function tr(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function nr(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function rr(e,t,n){if(!t)return null;let r=t,i=e+101,a=e+2,o=7;for(;a<=i;){let e=Math.min(a+o-1,i),t=await Promise.all(Array.from({length:e-a+1},(e,t)=>n(a+t))),s=t.indexOf(null),c=s===-1?t:t.slice(0,s);if(c.length&&(r=c.at(-1)),s!==-1)break;a=e+1,o*=2}return r}function ir(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:K(o),Time:s,...c!==e&&{newPath:c},sameMajorNew:K(i),sameMajorTime:a},t,null,e]}function ar(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(i.startsWith(`//`))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=$n(i,l);e&&(r[e.targetModule]=e.targetVersion,a.add(e.origModule));continue}let f=c?/^(\S+)\s+(v\S+)/.exec(i):/^require\s+(\S+)\s+(v\S+)/.exec(i);f&&((d?n:t)[f[1]]=f[2])}for(let e of a)delete t[e],delete n[e];if(o.length){let e=[...Object.keys(n),...Object.keys(t)];for(let r of o){let a=``;for(let t of e)(r===t||r.startsWith(`${t}/`))&&t.length>a.length&&(a=t);let o=n[a]?n:t[a]?t:null;o&&(i[a]=o[a],delete o[a])}}return{deps:t,indirect:n,replace:r,tool:i}}async function or(e,n,r,i,a){let o=Xn(e),s=async(e,n)=>{try{let{stdout:r}=await(await Wn())(`go`,[`list`,`-m`,`-json`,`${e}@latest`],{timeout:n,cwd:i,env:t}),a=JSON.parse(r);return{Version:a.Version,Time:a.Time||``,path:e}}catch{return null}},c=er(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(Zn(e,o+1),a.goProbeTimeout)]);return l?ir(e,n,r,await rr(o,u,t=>s(Zn(e,t),a.goProbeTimeout)),l.Version,l.Time):nr(e,r,n)}async function sr(e,t,n,r,i,a){if(qn(e,a))return or(e,t,n,r,i);let o=Jn(e),s=Xn(e),c=async t=>{let n=Zn(e,t);try{let e=await i.doFetch(`${i.goProxyUrl}/${Jn(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});return e.ok?{...await e.json(),path:n}:null}catch{return null}},l=er(e,t,n),[u,d]=await Promise.all([q(i,`${i.goProxyUrl}/${o}/@latest`,{headers:{"accept-encoding":`gzip, deflate, br`}}),l?null:c(s+1)]);if(!u.ok)return nr(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return nr(e,n,t)}return ir(e,t,n,await rr(s,d,c),f,p)}function cr(e,t){if(!e.includes(`replace`))return e;let n=G(t);return e=e.replace(RegExp(`^replace\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(RegExp(`^\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(/^replace\s*\(\s*\)\s*\n/gm,``),e}function lr(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${G(s)}\\s+)v${G(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);continue}let u=Qn(s,l);u===s?n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`):(n=n.replace(RegExp(`${G(s)} +v${G(c)}`,`g`),`${u} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${G(s)}(/\\S+)?\\s*$`,`gm`),`$1${u}$2`)),r[s]=u),o!==`tool`&&(n=cr(n,s))}return[n,r]}function ur(e,t,n){let r=Object.entries(t);if(!r.length)return;let i=new Map(r),a=r.map(([e])=>e).sort((e,t)=>t.length-e.length),o=RegExp(`"(${a.map(G).join(`|`)})(/|")`,`g`),s=p(`**/*.go`,{cwd:e});for(let t of s){let r=c(e,t),a=h(r,`utf8`),s=a.replace(o,(e,t,n)=>`"${i.get(t)}${n}`);s!==a&&n(r,s)}}function dr(e){let t=[],n={},r=e.split(/\r?\n/),i=!1,a=!1;for(let e of r){let r=e.trim();if(/^use\s*\(/.test(r)){i=!0;continue}if(/^replace\s*\(/.test(r)){a=!0;continue}if(r===`)`){i=!1,a=!1;continue}if(i){let e=/^(\S+)/.exec(r);e&&!r.startsWith(`//`)&&t.push(e[1]);continue}let o=/^use\s+(\S+)/.exec(r);if(o){t.push(o[1]);continue}if(a||/^replace\s+/.test(r)){let e=$n(r,a);e&&(n[e.targetModule]=e.targetVersion)}}return{use:t,replace:n}}function fr(e){let t=`https://${pr(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[,e,i,...a]=r;return n.pathname=`/${e}/${i}/${Ht(t)}/${a.join(`/`)}`,n.href}else return t}function pr(e){return Yn.test(e)?s(e):e}function mr(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const hr=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function gr(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:It.test(o)}}function _r(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function vr(e,t,n,r,i){let a=`${e}/repos/${t}/${n}/git/commits/${r}`;if(!i.noCache){let e=await tt(a);if(e)return e.body}try{let e=await Nt(a,i);if(!e.ok)return``;let t=await e.json(),n=t?.committer?.date||t?.author?.date||``;return n&&!i.noCache&&it(a,`immutable`,n),n}catch{return``}}function yr(e,t){return Vt(I(K(e))?.version??K(e),t)}function br(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?(?:https?:\\/\\/)?)${G(e)}@${G(r)}(?![\\w.-])`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}const xr=[`.github`,`.gitea`,`.forgejo`],Sr=RegExp(`(?:^|/)(?:${xr.map(G).join(`|`)})\\/(?:workflows\\/[^/]+|(?:[^/]+\\/)*action)\\.ya?ml$`);function Cr(e){return Sr.test(e.replace(/\\/g,`/`))}function wr(e){let t=new Set;try{for(let n of g(c(e,`workflows`)))/\.ya?ml$/.test(n)&&t.add(u(c(e,`workflows`,n)))}catch{}try{for(let n of g(e,{recursive:!0,withFileTypes:!0}))!n.isFile()||!/^action\.ya?ml$/.test(n.name)||t.add(u(c(n.parentPath,n.name)))}catch{}return Array.from(t)}const Tr=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Er=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,Dr=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,Or=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,kr=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function Ar(e){let t=e.split(`/`);return t.length===1?{registry:null,namespace:`library`,repo:t[0]}:t.length===2&&!t[0].includes(`.`)&&!t[0].includes(`:`)?{registry:null,namespace:t[0],repo:t[1]}:{registry:t[0],namespace:t.slice(1,-1).join(`/`),repo:t[t.length-1]}}function jr(e){if(e=e.replace(/^docker:\/\//,``),e.includes(`@`))return null;let t=e.lastIndexOf(`:`);if(t===-1||e.lastIndexOf(`/`)>t)return null;let n=e.substring(0,t),r=e.substring(t+1);if(!r||!Tr.test(r))return null;let{registry:i,namespace:a,repo:o}=Ar(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Mr(e){let t=Tr.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function Nr(e,t){let n=Mr(t);return n?Vt(e,n.version,n.suffix):t}function Pr(e,t){let n=[];for(let r of e.matchAll(t)){let e=jr(r[1]);e&&n.push({ref:e,match:r[1]})}return n}const Fr=new WeakMap;function Ir(e,t,n){let r=Fr.get(n);r||Fr.set(n,r=new Map);let i=`${e}/${t}`,a=r.get(i);return a||r.set(i,a=Lr(e,t,n)),a}async function Lr(e,t,n){let r={},i=`${n.dockerApiUrl}/v2/repositories/${e}/${t}/tags`,a=e=>`${i}?page_size=100&ordering=last_updated&page=${e}`,o={headers:{"accept-encoding":`gzip, deflate, br`}},s=e=>({count:e.count,results:(e.results||[]).map(e=>({name:e.name,tag_last_pushed:e.tag_last_pushed,last_updated:e.last_updated}))}),c=async e=>{try{let t=await _t(a(e),n,o,s);return`body`in t?JSON.parse(t.body):null}catch{return null}},l=await c(1);if(!l)return r;for(let e of l.results||[])r[e.name]=e.tag_last_pushed||e.last_updated||``;let u=Math.min(Math.ceil((l.count||0)/100),10);if(u<2)return r;let d=await Promise.all(Array.from({length:u-1},(e,t)=>c(t+2)));for(let e of d)if(e)for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``;return r}async function Rr(e,t,n,r){let i=`${r.dockerApiUrl}/v2/repositories/${e}/${t}/tags/${n}`;try{let e=await _t(i,r,{headers:{"accept-encoding":`gzip, deflate, br`}},e=>({digest:e.digest}));if(!(`body`in e))return null;let t=JSON.parse(e.body).digest;return typeof t==`string`?t:null}catch{return null}}async function zr(e,t,n){let{registry:r,namespace:i,repo:a}=Ar(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Ir(i,a,n),name:e},t,null,e]}function Br(e,t,n,r,i,a){let o=Mr(t);if(!o)return null;let s=he(K(o.version))?.version;if(!s)return null;let c=s,l=``,u=``;for(let[t,s]of Object.entries(e)){let e=Mr(t);if(!e||e.suffix!==o.suffix)continue;let d=he(K(e.version))?.version;if(!d||a&&!H(d,a)||!st(s,r,i))continue;if(d===c){l&&Date.parse(s)>Date.parse(u)&&(l=t,u=s);continue}let f=R(c,d);!f||!n.has(f)||z(d,c)&&(c=d,l=t,u=s)}if(!l||c===s)return null;let d=Nr(c,t);return d===t?null:{newTag:d,hubTag:l,date:u}}function Vr(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let t=e.split(`\0`)[1],a=i.oldOrig||i.old;for(let e of n)r=r.replace(e(G(t),G(a)),`$1${t}:${i.new}`)}return r}function Hr(e,t){return Vr(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}(?![\\w.-])`,`g`)])}function Ur(e,t){return Vr(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}(?![\\w.-])`,`g`)])}function Wr(e,t){return Vr(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}(?![\\w.-])`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}(?![\\w.-])`,`g`)])}const Gr=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Kr(e){return/^docker-.+\.ya?ml$/.test(e)}function qr(e){return/^Dockerfile(\..+)?$/.test(e)}function Jr(e){return qr(e)||Kr(e)}function Yr(e){return qr(e)?Er:Dr}function Xr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}const Zr=[`Makefile`,`makefile`,`GNUmakefile`];function Qr(e){return Zr.includes(e)||e.endsWith(`.mk`)}const $r=String.raw`^\s*[A-Za-z_][\w.]*\s*(?:::=|:=|\?=|\+=|=)\s*`,ei=RegExp(`${$r}${String.raw`(\S+)@(v\d\S*)\s*$`}`),ti=/^[^/\s]+\.[^/\s]+\//;function ni(e){let t=e.indexOf(`#`);return t===-1?e:e.slice(0,t)}function ri(e){let t=[];for(let n of e.split(/\r?\n/)){let e=ni(n),r=ei.exec(e);if(!r)continue;let[,i,a]=r;ti.test(i)&&t.push({installPath:i,version:a})}return t}const ii=RegExp(`${$r}${String.raw`(\S+)\s*$`}`),ai=/@(sha256:[0-9a-f]{64})$/;function oi(e,t,n){return`${e}:${t}${n?`@${n}`:``}`}function si(e){let t=null,n=e,r=ai.exec(e);r&&(t=r[1],n=e.slice(0,r.index));let i=jr(n.replace(/^docker\.io\//,``));return!i||i.registry||i.namespace===`library`?null:{writtenImage:n.slice(0,n.lastIndexOf(`:`)),ref:i,digest:t}}function ci(e){let t=[];for(let n of e.split(/\r?\n/)){let e=ii.exec(ni(n));if(!e)continue;let r=si(e[1]);r&&t.push(r)}return t}const li=/\/v(?:[2-9]|[1-9]\d+)(?=\/|$)/;function ui(e){let t=li.exec(e);return t?e.slice(0,t.index+t[0].length):null}function di(e){let t=e.split(`/`),n=[];for(let e=t.length;e>=2;e--)n.push(t.slice(0,e).join(`/`));return n}async function fi(e,t){let n=ui(e);if(n)return n;let r=di(e);return(await Promise.all(r.map(async e=>{try{return(await t.doFetch(`${t.goProxyUrl}/${Jn(e)}/@latest`,{signal:AbortSignal.timeout(t.goProbeTimeout)})).ok?e:null}catch{return null}}))).find(Boolean)??null}async function pi(e,t,n,r,i,a){let o=await fi(e,r);if(!o)return null;let[s]=await sr(o,`tool`,K(t),n,r,i),c=Tt(s,{mode:`go`,range:K(t),semvers:a.semvers,useGreatest:a.useGreatest,usePre:a.usePre,useRel:a.useRel,pinnedRange:a.pinnedRange,cooldownDays:a.cooldownDays,now:a.now},{allowDowngrade:a.allowDowngrade,matchesAny:U,isGoPseudoVersion:tr});if(!c)return null;let l=s.newPath??Qn(o,c),u=`${l}${e.slice(o.length)}`,d=Vt(c,t);return u===e&&d===t?null:{newInstallPath:u,newVersion:d,date:s.Time??``,info:fr(l)}}async function mi(e,t,n){let{namespace:r,repo:i,fullImage:a,tag:o}=e.ref,[s]=await zr(a,`docker`,t),c=Br(s.tags,o,n.semvers,n.cooldownDays,n.now,n.pinnedRange);if(!c)return null;let l=null;return e.digest&&(l=await Rr(r,i,c.hubTag,t),!l)?null:{newTag:c.newTag,newDigest:l,date:c.date,info:Xr(e.ref)}}function hi(e,t){for(let{oldSpec:n,newSpec:r}of t){let t=RegExp(`^([^#\\n]*?)${G(n)}(?=[\\s#]|$)`,`gm`);e=e.replace(t,`$1${r}`)}return e}const gi=new Map,_i=e=>({versions:(e.versions||[]).filter(e=>!e.yanked).map(e=>({num:e.num,created_at:e.created_at}))});async function vi(e,t,n){let r=`${ut(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=gi.get(r);return i||(i=(async()=>{try{let t=await _t(r,n,dt(),_i);`body`in t||Bt(t.res,r,e,n.cratesIoUrl);let i;try{i=JSON.parse(t.body)}catch{throw Error(`Invalid JSON from ${r}`)}let a=(i.versions||[]).filter(e=>!e.yanked),o={},s={};for(let e of a)e.num&&(o[e.num]={},s[e.num]=e.created_at||``);return{name:e,versions:o,time:s,"dist-tags":{latest:a[0]?.num??``}}}catch(e){throw gi.delete(r),e}})(),gi.set(r,i)),[await i,t,null,e]}function yi(e){let t=new Map;for(let n of e.split(`[[package]]`)){let e=/\bname\s*=\s*"([^"]+)"/.exec(n),r=/\bversion\s*=\s*"([^"]+)"/.exec(n);if(!e||!r)continue;let i=e[1],a=r[1];if(!pe(a))continue;let o=t.get(i);o||t.set(i,o=[]),o.push(a)}return t}const bi=/^\d/;function xi(e,t){return bi.test(e)?Fn(X(`^${e}`),t,`^${e}`).replace(/^\^/,``):Fn(X(e),t,e)}function Si(e,t,n){let r=e.get(t);if(!r)return;let i=bi.test(n)?`^${n}`:n,a;for(let e of r)H(e,i)&&(!a||z(e,a))&&(a=e);return a}const Ci=Ve.map(G).join(`|`);function wi(e,t){let n=e;for(let[e,r]of Object.entries(t)){let[,t]=e.split(`\0`),i=r.oldOrig||r.old,a=r.new,o=G(t),s=G(i);n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*["'])${s}(["'].*)$`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*\\{(?:"[^"]*"|'[^']*'|[^}\\n])*?\\bversion\\s*=\\s*["'])${s}(["'])`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`(\\[(?:${Ci})\\.${o}\\](?:(?!\\n\\[)[\\s\\S])*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}function Ti(e){return e.split(`|`)[0]}function Ei(e,t){let n=t===`.`?``:`|${t}`,r={};for(let[t,i]of Object.entries(e)){let[e,a]=t.split(`\0`),o=Ti(e);e===`${o}${n}`&&(r[`${o}${a}`]=i)}return r}const Di=/[*?{[]/;async function Oi(e,t,n,r=32){let i=e.filter(e=>!e.startsWith(`!`)),a=e.filter(e=>e.startsWith(`!`)).map(e=>e.slice(1)),o=new Set(a.flatMap(e=>p(e,{cwd:t})).map(e=>e.replace(/\\/g,`/`))),s=new Set,d=[];for(let e of i){let r=Di.test(e)?p(e,{cwd:t}).map(e=>u(c(t,e))):[u(c(t,e))];for(let e of r){let r=l(t,e).replace(/\\/g,`/`);if(o.has(r))continue;let i=c(e,n);s.has(i)||(s.add(i),d.push({absPath:i,memberPath:`./${r}`}))}}return(await W(d,async({absPath:e,memberPath:t})=>{try{return{absPath:e,content:await S(e,`utf8`),memberPath:t}}catch{return null}},{concurrency:r})).filter(e=>e!==null)}function ki(e){let t=[],n=e.split(/\r?\n/),r=!1;for(let e of n){if(/^packages\s*:/.test(e)){r=!0;continue}if(r){let n=e.trim();if(!n||n.startsWith(`#`))continue;if(!n.startsWith(`-`))break;let r=/^\s*-\s+['"]?([^'"#\s]+)['"]?/.exec(e);r&&t.push(r[1])}}return t}const Ai={"pnpm-workspace.yaml":`npm`,"package.json":`npm`,"pyproject.toml":`pypi`,"go.work":`go`,"go.mod":`go`,"Cargo.toml":`cargo`},ji=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`,`make`]),Mi=(e,t)=>typeof e==`string`?ut(e):typeof t==`function`?t():t;function Ni(e,t){let n=new Map,r=new Set(e),i=t;for(;r.size;){for(let e of r){let t=c(i,e);try{d(t),n.set(e,t),r.delete(e)}catch{}}let e=s(i);if(e===i)break;i=e}return n}async function Pi(e,t){let n=await W(e,async e=>{try{return[e,await S(e,`utf8`)]}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}},{concurrency:t});return new Map(n)}function Z(e,t){t&&(e.date=t,e.age=Pe(t,{noAffix:!0}))}function Fi(e){let t=0;for(let n of Object.values(e))t+=Object.keys(n).length;return t}function Ii(e){console.error(`${We()} ${e}`)}function Q(e,t,n,r,i){if(i===`engines`&&Re.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?pr(e):e;for(let t of r)if(t.test(e)||t.test(a))return!1;for(let t of n)if(t.test(e)||t.test(a))return!0;return!n.size}function Li(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(Ai)){let r=c(e,t),i=null;try{i=m(r)}catch{}i?.isFile()&&n.add(u(r))}try{for(let t of g(e,{withFileTypes:!0}))t.isFile()&&(Jr(t.name)||Qr(t.name))&&n.add(u(c(e,t.name)))}catch{}let t=u(e).replace(/\\/g,`/`),r=xr.some(e=>t.endsWith(`/${e}/workflows`)),i=!r&&xr.some(e=>t.endsWith(`/${e}`)),a=r?[s(t)]:i?[t]:xr.map(e=>c(t,e));for(let e of a)for(let t of wr(e))n.add(t)}else throw Error(`${e} is neither a file nor directory`)}else{let t=new Set(xr),r=[...Object.keys(Ai),...Gr,...Zr,...xr];for(let[i,a]of Ni(r,e()))if(t.has(i))for(let e of wr(a))n.add(e);else n.add(u(a));try{for(let t of g(e(),{withFileTypes:!0})){let r=Jr(t.name)&&!Gr.includes(t.name),i=Qr(t.name)&&!Zr.includes(t.name);t.isFile()&&(r||i)&&n.add(u(c(e(),t.name)))}}catch{}}for(let e of Array.from(n))o(e)===`go.work`&&n.delete(c(s(e),`go.mod`));for(let e of Array.from(n))o(e)===`pnpm-workspace.yaml`&&n.delete(c(s(e),`package.json`));return n}function $(e,t){r===`win32`&&v(e,0),y(e,t,r===`win32`?{flag:`r+`}:void 0)}function Ri(e){let t={results:{}};for(let[n,r]of Object.entries(e))for(let[e,i]of Object.entries(r)){typeof i.oldPrint==`string`&&(i.old=i.oldPrint),typeof i.newPrint==`string`&&(i.new=i.newPrint),typeof i.oldOrig==`string`&&!An(i.oldOrig)&&(i.old=n===`go`?mr(i.oldOrig):i.oldOrig),n===`go`?i.new=mr(i.new):n===`actions`&&(i.old=K(i.old),i.new=K(i.new)),delete i.oldPrint,delete i.newPrint,delete i.oldOrig,delete i.date;let[r,a]=e.split(`\0`),o=t.results[n]??={};(o[r]??={})[a]=i}return t}let zi=!1;async function Bi(t={}){if(!zi){let{enableDnsCache:e}=await import(`./dns.js`);e(),zi=!0}let n={...t},r=n.sockets??25,l=n.timeout??0,d=Mi(t.forgeapi,`https://api.github.com`),f=Mi(t.pypiapi,`https://pypi.org`),p=Mi(t.jsrapi,`https://jsr.io`),m=Mi(t.goproxy,Gn),h=Mi(t.cargoapi,`https://crates.io`),g=Mi(t.dockerapi,`https://hub.docker.com`),_=Kn(),v=n.color||!n.noColor&&i.isTTY,y=e=>v?t=>a(e,String(t)):String,b=y(`magenta`),x=y(`green`),C=y(`red`),w={fetchTimeout:l||5e3,goProbeTimeout:l?l/2:2500,forgeApiUrl:d,pypiApiUrl:f,jsrApiUrl:p,goProxyUrl:m,cratesIoUrl:h,dockerApiUrl:g,doFetch:async(e,t)=>{n.verbose&&Ii(`${b(t?.method||`GET`)} ${e}`);let r=await mt(e,t);return n.verbose&&Ii(`${r.ok?x(r.status):C(r.status)} ${e}`),r},noCache:!!n.noCache},ee=Zt(n.greatest),te=Zt(n.prerelease),T=Zt(n.release),ne=Zt(n.patch),re=Zt(n.minor),ie=Zt(n.allowDowngrade),D=n.modes?.length?new Set(n.modes):ji,ae=(n.overrides??[]).map(e=>({include:e.include?.length?Y(e.include):void 0,exclude:e.exclude?.length?Y(e.exclude):void 0,greatest:e.greatest,prerelease:e.prerelease,release:e.release,patch:e.patch,minor:e.minor,allowDowngrade:e.allowDowngrade,cooldownDays:e.cooldown===void 0?void 0:qe(String(e.cooldown))})),oe=(e,t)=>e.include&&!U(t,e.include)?!1:!e.exclude||!U(t,e.exclude),se=ae.some(e=>e.cooldownDays);D.has(`actions`)&&At();let ce=new Map;function O(e){let t=ce.get(e);if(!t){let n=U(e,ee),r=U(e,te),i=U(e,T),a=U(e,ne),o=U(e,re),s=U(e,ie),c;for(let t of ae)oe(t,e)&&(t.greatest!==void 0&&(n=t.greatest),t.prerelease!==void 0&&(r=t.prerelease),t.release!==void 0&&(i=t.release),t.patch!==void 0&&(a=t.patch),t.minor!==void 0&&(o=t.minor),t.allowDowngrade!==void 0&&(s=t.allowDowngrade),t.cooldownDays!==void 0&&(c=t.cooldownDays));let l=new Set(a?[`patch`]:o?[`patch`,`minor`]:[`patch`,`minor`,`major`]);t={useGreatest:n,usePre:r,useRel:i,semvers:l,allowDowngrade:s,cooldownOverride:c},ce.set(e,t)}return t}let le=Y(n.include??[]),ue=Y(n.exclude??[]),de=n.pin??{},k={},A={},j={},M=Date.now(),N=e=>{let t=n.cooldown??e;return t?qe(String(t)):0},fe=e(),P=e=>e.replace(`${fe}/`,``).replace(`${fe}\\`,``),F=0,I=(e,t,n,r,i,a)=>{k[e][`${t}${n}${r}`]={old:i,oldOrig:a}},me=Li(n.files?.length?new Set(n.files):!1),L=await Pi(Array.from(me).filter(e=>{if(Cr(e))return D.has(`actions`)||D.has(`docker`);let t=o(e);if(Jr(t))return D.has(`docker`);if(Qr(t))return D.has(`make`);let n=Ai[t];return!!n&&D.has(n)}),r),he={},R={},ge={},_e=[],z=null,ve=[],ye=!1,be=[],xe=!1,B=[],Se=[],Ce=[],we={};async function V(e){let t=await en(e);return{modeConfig:t,modeInclude:t.include?.length?Y([...n.include??[],...t.include]):le,modeExclude:t.exclude?.length?Y([...n.exclude??[],...t.exclude]):ue,pin:{...t.pin,...de}}}function Te(e,t){return n.types?.length?n.types:t?.types?.length?t.types:e===`npm`?Le:e===`pypi`?ze:e===`go`?n.indirect?Be:Be.filter(e=>e!==`indirect`):e===`cargo`?Ve:[]}function Ee(e,t,n,r){k.docker??={};for(let i of n)for(let{ref:n}of Pr(e,i)){if(!Q(n.fullImage,`docker`,r.include,r.exclude,`docker`))continue;let e=`${t}${n.fullImage}`;if(k.docker[e])continue;let i=Mr(n.tag);i&&(k.docker[e]={old:i.version,oldOrig:n.tag},Se.push({key:e,fullImage:n.fullImage,ref:n,filePin:r.pin,fileCooldownDays:r.cooldownDays}))}}async function De(e){let t=await en(e);return{include:t.include?.length?Y([...n.include??[],...t.include]):le,exclude:t.exclude?.length?Y([...n.exclude??[],...t.exclude]):ue,pin:t.pin??{},cooldownDays:N(t.cooldown)}}let Oe=new Set,H=new Map;for(let e of me){let t=o(e);if(t===`go.work`)Oe.add(`go`);else if(t===`pnpm-workspace.yaml`)Oe.add(`npm`);else if(t===`Cargo.toml`){let t=L.get(e);if(!t)continue;try{let n=E(t);H.set(e,n);let r=n.workspace?.members;Array.isArray(r)&&r.length&&Oe.add(`cargo`)}catch{}}}for(let e of me){if(Cr(e)){let t=D.has(`actions`),n=D.has(`docker`);if(!t&&!n)continue;let r=L.get(e),i=P(e),a=await De(s(e));if(he[i]={absPath:e,content:r},t){k.actions??={};let e=Array.from(r.matchAll(hr),e=>gr(e[1])).filter(e=>e!==null);for(let t of e){if(!Q(t.name,`actions`,a.include,a.exclude,`actions`))continue;let e=`${i}${t.name}`;k.actions[e]||(k.actions[e]={old:t.ref},B.push({...t,key:e,apiUrl:_r(t.host,d),filePin:a.pin,fileCooldownDays:a.cooldownDays}))}}n&&(R[i]={absPath:e,content:r,fileType:`workflow`},Ee(r,i,[Dr,Or,kr],a));continue}let t=o(e);if(Jr(t)){if(!D.has(`docker`))continue;let n=L.get(e),r=P(e),i=qr(t)?`dockerfile`:`compose`,a=await De(s(e));R[r]={absPath:e,content:n,fileType:i},Ee(n,r,[Yr(t)],a);continue}if(Qr(t)){if(!D.has(`make`))continue;let t=L.get(e),n=P(e),r=await De(s(e));ge[n]={absPath:e,content:t},k.make??={};let i={projectDir:s(e),filePin:r.pin,fileCooldownDays:r.cooldownDays};for(let{installPath:e,version:a}of ri(t)){if(!Q(e,`make`,r.include,r.exclude,`make`))continue;let t=`${n}${e}`;k.make[t]||(k.make[t]={old:K(a),oldOrig:a},Ce.push({kind:`go`,key:t,name:e,oldSpec:`${e}@${a}`,installPath:e,version:a,...i}))}for(let e of ci(t)){if(!Q(e.writtenImage,`make`,r.include,r.exclude,`make`))continue;let t=`${n}${e.writtenImage}`;if(k.make[t])continue;let a=Mr(e.ref.tag);if(!a)continue;let o=oi(e.writtenImage,e.ref.tag,e.digest);k.make[t]={old:a.version,oldOrig:e.ref.tag},Ce.push({kind:`docker`,key:t,name:e.writtenImage,oldSpec:o,image:e,...i})}continue}let n=Ai[t];if(!D.has(n))continue;if(t===`go.work`){k[n]??={};let t=s(u(e)),i=L.get(e);z={file:e,content:i};let a=dr(i),[o,l]=await Promise.all([V(t),W(a.use,async e=>{let n=u(c(t,e,`go.mod`));try{return{usePath:e,modPath:n,content:await S(n,`utf8`)}}catch{return null}},{concurrency:r})]),{modeConfig:d,modeInclude:f,modeExclude:p,pin:m}=o,h=Te(n,d);we[n]={modeConfig:d,projectDir:t,pin:m};for(let e of l){if(!e)continue;let{usePath:t,modPath:r,content:i}=e,a=ar(i),o=s(r);_e.push({absPath:r,content:i,projectDir:o,usePath:t});let c=t===`.`?``:`|${t}`;for(let e of h){let t=a[e]||{};for(let[r,i]of Object.entries(t))Q(r,n,f,p,e)&&I(n,e,c,r,mr(i),K(i))}}for(let[e,t]of Object.entries(a.replace))Q(e,n,f,p,`replace`)&&I(n,`replace`,``,e,mr(t),K(t));F+=Object.keys(k[n]).length;continue}if(t===`go.mod`&&_e.some(t=>t.absPath===u(e))||t===`package.json`&&be.some(t=>t.absPath===u(e)))continue;if(t===`Cargo.toml`){k[n]??={};let t=Object.keys(k[n]).length,i=L.get(e),a=H.get(e)??E(i),o=s(u(e)),c=Ni([`Cargo.lock`],o).get(`Cargo.lock`),l=a.workspace?.members,d=Array.isArray(l)&&l.length,[f,p,m]=await Promise.all([V(o),c?S(c,`utf8`):Promise.resolve(null),d?Oi(l,o,`Cargo.toml`,r):Promise.resolve([])]),{modeConfig:h,modeInclude:g,modeExclude:_,pin:v}=f,y=Te(n,h),b=p?yi(p):new Map,x=(e,t)=>{for(let r of y){let i=He(e,r)||{};if(!(typeof i!=`object`||Array.isArray(i))){for(let[e,a]of Object.entries(i))if(Q(e,n,g,_,r))if(typeof a==`object`&&a&&`version`in a&&!(`git`in a)&&!(`path`in a)){let i=a.version;ke(i)&&I(n,r,t,e,Si(b,e,i)??X(i),i)}else typeof a==`string`&&ke(a)&&I(n,r,t,e,Si(b,e,a)??X(a),a)}}};if(d){ye=!0,we[n]={modeConfig:h,projectDir:o,pin:v},x(a,``),ve.push({absPath:u(e),content:i,memberPath:`.`});for(let e of m){ve.push(e);try{x(E(e.content),`|${e.memberPath}`)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}}}else{let t=j[n]??=[],r=!t.length&&!Oe.has(n),s=r?`.`:P(e);t.push({absPath:u(e),content:i,memberPath:s,projectDir:o,modeConfig:h,pin:v,modeCooldownDays:N(h.cooldown)}),r&&(we[n]={modeConfig:h,projectDir:o,pin:v}),x(a,s===`.`?``:`|${s}`)}F+=Object.keys(k[n]).length-t;continue}if(t===`pnpm-workspace.yaml`){k[n]??={};let t=s(u(e)),i=L.get(e);xe=!0;let a=ki(i),o=c(t,`package.json`),[l,d,f]=await Promise.all([V(t),Je(S(o,`utf8`)),Oi(a,t,`package.json`,r)]),{modeConfig:p,modeInclude:m,modeExclude:h,pin:g}=l,_=Te(n,p);we[n]={modeConfig:p,projectDir:t,pin:g};let v=(e,t)=>{for(let r of _){let i=e[r]||{};if(typeof i==`string`){let[e,a]=i.split(`@`);Q(e,n,m,h,r)&&I(n,r,t,e,X(a),a)}else if(typeof i==`object`&&!Array.isArray(i))for(let[e,a]of Object.entries(i))Q(e,n,m,h,r)&&(An(a)?I(n,r,t,e,Mn(a,e).version,a):ke(a)?I(n,r,t,e,X(a),a):jn(a)?I(n,r,t,e,`0.0.0`,a):A[`${r}${t}${e}`]={old:a})}};if(d!==null){let e;try{e=JSON.parse(d)}catch(e){throw Error(`Error parsing ${o}: ${e.message}`)}be.push({absPath:u(o),content:d,memberPath:`.`}),v(e,``)}for(let e of f){let t;try{t=JSON.parse(e.content)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}be.push(e),v(t,`|${e.memberPath}`)}F+=Object.keys(k[n]).length+Object.keys(A).length;continue}k[n]??={};let i=s(u(e)),{modeConfig:a,modeInclude:l,modeExclude:f,pin:p}=await V(i),m=Te(n,a),h=j[n]??=[],g=!h.length&&!Oe.has(n),_=g?`.`:P(e),v=_===`.`?``:`|${_}`,y=L.get(e);h.push({absPath:u(e),content:y,memberPath:_,projectDir:i,modeConfig:a,pin:p,modeCooldownDays:N(a.cooldown)});let b={};try{n===`npm`?b=JSON.parse(y):n===`pypi`?b=E(y):n===`go`&&(b=ar(y))}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}let x=Object.keys(k[n]).length,C=Object.keys(A).length;for(let e of m){let t;if(t=n===`npm`||n===`go`?b[e]||{}:He(b,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Ie(t))Q(r,n,l,f,e)&&I(n,e,v,r,X(i),i);else if(typeof t==`string`){let[r,i]=t.split(`@`);Q(r,n,l,f,e)&&I(n,e,v,r,X(i),i)}else for(let[r,i]of Object.entries(t))Q(r,n,l,f,e)&&(n===`npm`&&An(i)?I(n,e,v,r,Mn(i,r).version,i):n!==`go`&&ke(i)?I(n,e,v,r,X(i),i):n===`npm`&&jn(i)?I(n,e,v,r,`0.0.0`,i):n===`npm`?A[`${e}${v}${r}`]={old:i}:n===`go`&&I(n,e,v,r,mr(i),K(i)))}F+=Object.keys(k[n]).length-x+(Object.keys(A).length-C),g&&(we[n]={modeConfig:a,projectDir:i,pin:p})}if(k.actions&&(F+=Object.keys(k.actions).length),k.docker&&(F+=Object.keys(k.docker).length),k.make&&(F+=Object.keys(k.make).length),F===0)return{results:{},message:`No dependencies found, nothing to do.`};let Ae=[],je={registry:n.registry};for(let[e,t]of Object.entries(we)){let n=k[e]&&Object.keys(k[e]).length>0,i=e===`npm`&&Object.keys(A).length>0;if(!n&&!i)continue;let{modeConfig:a,projectDir:o,pin:s}=t,c=N(a.cooldown);Ae.push((async()=>{let t=new Map;for(let n of j[e]??[])n.memberPath!==`.`&&t.set(`|${n.memberPath}`,n);let n={modeConfig:a,projectDir:o,pin:s,modeCooldownDays:c},i=e=>{let r=e.slice(Ti(e).length);return r&&t.get(r)||n},l=new Map,u=e=>{for(let[t,{date:n}]of Object.entries(e)){if(!n)continue;let{modeCooldownDays:r}=i(t.split(`\0`)[0]);if(!r&&!se)continue;let[,a]=t.split(`\0`),o=O(a).cooldownOverride??r;o&&!st(n,o,M)&&delete e[t]}};if(await W(Object.keys(k[e]),async t=>{let[n,r]=t.split(`\0`),a=Ti(n),{modeConfig:o,projectDir:s,pin:c,modeCooldownDays:u}=i(n),d=k[e][t],f=null;if(e===`npm`){let{oldOrig:n}=d;if(n&&An(n))f=await Nn(r,a,w);else if(n&&jn(n))try{f=await On(r,a,o,je,w)}catch{delete k[e][t];return}else f=await On(r,a,o,je,w)}else f=e===`go`?await sr(r,a,d.oldOrig||d.old,s,w,_):e===`cargo`?await vi(r,a,w):await Bn(r,a,w);if(!f)return;let[p,,m]=f;if(p.error)throw Error(p.error);let{useGreatest:h,usePre:g,useRel:v,semvers:y,allowDowngrade:b,cooldownOverride:x}=O(p.name),S=d.old,C=d.oldOrig,ee=c[r],te=x??u,T=Tt(p,{usePre:g,useRel:v,useGreatest:h,semvers:y,range:S,mode:e,pinnedRange:ee,cooldownDays:te||void 0,now:te?M:void 0},{allowDowngrade:b,matchesAny:U,isGoPseudoVersion:tr}),E=``;if([`go`,`pypi`].includes(e)&&T)E=T;else if(e===`cargo`&&T&&C)E=xi(C,T);else if(T)if(C&&jn(C))E=String(gn()[`save-exact`])===`true`?T:`^${T}`;else if(C&&An(C)){let e=/^(npm:@jsr\/[^@]+@|jsr:@[^@]+@)(.+)$/.exec(C);e?E=`${e[1]}${T}`:C.startsWith(`jsr:`)&&(E=`jsr:${T}`)}else E=Fn(S,T,C);if(!T||T===S||C&&C===E){delete k[e][t];return}let ne=``;e===`pypi`&&p.releases?.[T]?.[0]?.upload_time_iso_8601?ne=p.releases[T][0].upload_time_iso_8601:e===`go`&&p.Time?ne=p.Time:e===`cargo`&&p.time?.[T]&&(ne=p.time[T]),d.new=E,C&&An(C)&&(d.newPrint=T),e===`npm`?l.set(t,{name:r,promise:kn(p.name,T,o,je,w)}):e===`pypi`?d.info=Ut(p,m,p.info.name):e===`go`?d.info=fr(p.newPath||r):e===`cargo`&&(d.info=`https://crates.io/crates/${r}`),ne&&Z(d,ne)},{concurrency:r}),await Promise.all(Array.from(l,async([t,{name:n,promise:r}])=>{let i=await r,a=k[e][t];a&&(a.info=Ut({repository:i.repository,homepage:i.homepage},null,n),i.date&&Z(a,i.date))})),e===`npm`&&Object.keys(A).length){let t=(await W(Object.entries(A),([e,t])=>Rn(e,t,w),{concurrency:r})).filter(e=>e!==null);for(let n of t){let{key:t,newRange:r,user:i,repo:a,oldRef:o,newRef:s,newDate:c}=n;k[e][t]={old:A[t].old,new:r,oldPrint:It.test(o)?o.substring(0,7):o,newPrint:It.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Z(k[e][t],c)}}u(k[e])})())}B.length&&Ae.push((async()=>{let e=new Map;for(let t of B){let n=`${t.apiUrl}/${t.owner}/${t.repo}`,r=e.get(n);r||e.set(n,r={apiUrl:t.apiUrl,owner:t.owner,repo:t.repo,infos:[]}),r.infos.push(t)}await W(e.values(),async({apiUrl:e,owner:t,repo:n,infos:i})=>{let a=await zt(e,t,n,w),o=[],s=new Map,c=new Map,l=new Map;for(let e of a){c.set(e.name,e);let t=K(e.name);pe(t)&&(o.push(t),s.has(t)||s.set(t,e.name)),e.commitSha&&l.set(e.commitSha,e.name)}let u=new Map;async function d(r){if(u.has(r))return u.get(r);let i=await vr(e,t,n,r,w);return u.set(r,i),i}async function f(e){let t=new Set;for(let n=0;n<20;n++){let n=wt({},t.size?o.filter(e=>!t.has(e)):o,e);if(!n||n===e.range)return null;let r=s.get(n);if(!r){t.add(n);continue}let i=c.get(r)?.commitSha||``;if(!e.cooldownDays)return{version:n,tag:r,commitSha:i,date:``};let a=i?await d(i):``;if(st(a,e.cooldownDays,e.now))return{version:n,tag:r,commitSha:i,date:a};t.add(n)}return null}await W(i,async({key:e,host:r,ref:i,name:a,isHash:o,filePin:s,fileCooldownDays:u})=>{let p=k.actions[e],m=`https://${r||`github.com`}/${t}/${n}`,h=de[a]??s[a];if(o){let{usePre:t,useRel:n,cooldownOverride:r}=O(a),o=r??u,s=await f({range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:h,cooldownDays:o||void 0,now:o?M:void 0});if(!s){delete k.actions[e];return}let{tag:c,commitSha:d,date:g}=s;if(!d||d===i||d.startsWith(i)||i.startsWith(d)){delete k.actions[e];return}let _=l.get(i);if(!_){for(let[e,t]of l)if(e.startsWith(i)){_=t;break}}p.old=i,p.new=d.substring(0,i.length),p.oldPrint=_||i.substring(0,7),p.newPrint=c,p.info=m,g&&Z(p,g)}else{let t=J(K(i));if(!t){delete k.actions[e];return}let{usePre:n,useRel:r,semvers:o,cooldownOverride:s}=O(a),l=s??u,g=await f({range:t,semvers:o,usePre:n,useRel:r,useGreatest:!0,pinnedRange:h,cooldownDays:l||void 0,now:l?M:void 0});if(!g){delete k.actions[e];return}let{tag:_,commitSha:v,date:y}=g,b=yr(_,i);if(b===i){delete k.actions[e];return}if(p.new=c.has(b)?b:_,p.info=m,v&&y)Z(p,y);else if(v){let e=await d(v);e&&Z(p,e)}}},{concurrency:r})},{concurrency:r}),Object.keys(k.actions).length||delete k.actions})()),Se.length&&Ae.push((async()=>{let e=new Map;for(let t of Se){let n=e.get(t.fullImage);n||e.set(t.fullImage,n=[]),n.push(t)}await W(e.entries(),async([e,t])=>{let n;try{let[t]=await zr(e,`docker`,w);n=t}catch{for(let e of t)delete k.docker[e.key];return}for(let e of t){let t=k.docker[e.key],r=t.oldOrig||t.old,{semvers:i,cooldownOverride:a}=O(e.fullImage),o=de[e.fullImage]??e.filePin[e.fullImage],s=a??e.fileCooldownDays,c=Br(n.tags,r,i,s||void 0,s?M:void 0,o);if(!c){delete k.docker[e.key];continue}t.new=c.newTag,t.info=Xr(e.ref),Z(t,c.date)}},{concurrency:r}),Object.keys(k.docker).length||delete k.docker})()),Ce.length&&Ae.push((async()=>{await W(Ce,async e=>{let{useGreatest:t,usePre:n,useRel:r,semvers:i,allowDowngrade:a,cooldownOverride:o}=O(e.name),s=de[e.name]??e.filePin[e.name],c=o??e.fileCooldownDays,l={semvers:i,useGreatest:t,usePre:n,useRel:r,allowDowngrade:a,pinnedRange:s,cooldownDays:c||void 0,now:c?M:void 0},u=k.make[e.key],d;if(e.kind===`go`){let t=await Je(pi(e.installPath,e.version,e.projectDir,w,_,l));if(!t){delete k.make[e.key];return}e.newSpec=`${t.newInstallPath}@${t.newVersion}`,u.new=t.newVersion,d=t}else{let t=await Je(mi(e.image,w,l));if(!t){delete k.make[e.key];return}e.newSpec=oi(e.image.writtenImage,t.newTag,e.image.digest?t.newDigest:null),u.new=t.newTag,d=t}u.info=d.info,d.date&&Z(u,d.date)},{concurrency:r}),Object.keys(k.make).length||delete k.make})());try{await Promise.all(Ae)}finally{await at()}if(!Fi(k))return{results:{},message:`All dependencies are up to date.`};if(n.update){let e=(e,t,n)=>{for(let r of t){let t=Ei(k[e],r.memberPath);Object.keys(t).length&&$(r.absPath,n(r.content,t))}},t=new Map;if(k.actions)for(let[e,n]of Object.entries(k.actions)){let[r,i]=e.split(`\0`),a=t.get(r);a||t.set(r,a=[]),a.push({name:i,oldRef:n.old,newRef:n.new})}let n=new Map;if(k.docker)for(let[e,t]of Object.entries(k.docker)){let[r]=e.split(`\0`),i=n.get(r);i||n.set(r,i={}),i[e]=t}let r=new Map;if(k.make)for(let e of Ce){if(!e.newSpec||!k.make[e.key])continue;let t=e.key.split(`\0`)[0],n=r.get(t);n||r.set(t,n=[]),n.push({oldSpec:e.oldSpec,newSpec:e.newSpec})}let i=Object.keys(k).sort((e,t)=>(e===`docker`)-+(t===`docker`));for(let a of i)if(Object.keys(k[a]).length){if(a===`actions`){for(let[e,n]of t){let{absPath:t,content:r}=he[e]||{};if(!t)continue;let i=br(r,n);$(t,i),R[e]&&(R[e].content=i)}continue}if(a===`docker`){for(let[e,t]of n){let n=R[e];if(!n)continue;let{absPath:r,content:i,fileType:a}=n;$(r,(a===`dockerfile`?Hr:a===`compose`?Ur:Wr)(i,t))}continue}if(a===`make`){for(let[e,t]of r){let n=ge[e];n&&$(n.absPath,hi(n.content,t))}continue}if(a===`go`){if(z){for(let e of _e){let t=Ei(k[a],e.usePath);if(!Object.keys(t).length)continue;let[n,r]=lr(e.content,t);n!==e.content&&$(e.absPath,n),ur(e.projectDir,r,$)}let e={};for(let[t,n]of Object.entries(k[a]))t.split(`\0`)[0]===`replace`&&(e[t]=n);if(Object.keys(e).length){let[t]=lr(z.content,e);t!==z.content&&$(z.file,t)}}for(let e of j.go??[]){let t=Ei(k[a],e.memberPath);if(!Object.keys(t).length)continue;let[n,r]=lr(e.content,t);$(e.absPath,n),ur(e.projectDir,r,$)}}else a===`cargo`?(ye&&e(a,ve,wi),e(a,j.cargo??[],wi)):a===`npm`?(xe&&e(a,be,Pn),e(a,j.npm??[],Pn)):e(a,j[a]??[],Vn)}}return Ri(k)}function Vi(e){try{return tn(h(c(e,`.npmrc`),`utf8`)).registry}catch{return}}function Hi(e,t){if(typeof e!=`string`||!e)return t;try{return`${new URL(e).origin}/`}catch{return null}}function Ui(e,t){let n=(...t)=>t.some(t=>f(c(e,t))),r=new Set,i=e=>{e&&r.add(e)},a=Hi(t.forgeapi,`https://api.github.com/`),o=Hi(t.dockerapi,`https://hub.docker.com/`);return n(`package.json`,`pnpm-workspace.yaml`)&&(i(Hi(typeof t.registry==`string`?t.registry:Vi(e),`https://registry.npmjs.org/`)),i(Hi(t.jsrapi,`https://jsr.io/`)),i(a)),n(`pyproject.toml`)&&i(Hi(t.pypiapi,`https://pypi.org/`)),n(`Cargo.toml`)&&i(Hi(t.cargoapi,`https://crates.io/`)),n(`go.mod`,`go.work`)&&i(Hi(t.goproxy,`https://proxy.golang.org/`)),n(...Gr)&&i(o),n(`.github/workflows`)&&(i(a),i(o)),Array.from(r)}function Wi(e){let t=``,n=0,r=e.length,i=-1;for(;n<r;){let a=e[n];if(a===`"`){for(i=-1,t+=a,n++;n<r;){let i=e[n];if(t+=i,n++,i===`\\`&&n<r){t+=e[n],n++;continue}if(i===`"`)break}continue}if(a===`/`&&n+1<r&&e[n+1]===`/`){for(n+=2;n<r&&e[n]!==`
7
- `;)n++;continue}if(a===`/`&&n+1<r&&e[n+1]===`*`){for(n+=2;n<r&&(e[n]!==`*`||e[n+1]!==`/`);)n++;n+=2;continue}if(a===`,`){i=t.length,t+=a,n++;continue}if(a===`}`||a===`]`){i>=0&&(t=t.slice(0,i)+t.slice(i+1)),i=-1,t+=a,n++;continue}/\s/.test(a)||(i=-1),t+=a,n++}return JSON.parse(t)}export{ke as _,Jt as a,Yt as c,lt as d,ct as f,Ye as g,Ge as h,pr as i,qt as l,Xe as m,Ui as n,en as o,Fe as p,Bi as r,Wt as s,Wi as t,Xt as u};
6
+ `);if(n===-1)return null;let r=t.substring(0,n),i=t.substring(n+1);return r&&i?{etag:r,body:i}:null}catch{return null}}const nt=new Set;let rt=0;function it(e,t,r){let i=(async()=>{try{await(Qe??=x(Ze,{recursive:!0}))}catch{Qe=null;return}try{let i=c(Ze,`${et(e)}.cache`),a=`${i}.${n}-${rt++}.tmp`;await w(a,`${t}\n${r}`),await C(a,i)}catch{}})();nt.add(i),(async()=>{await i,nt.delete(i)})()}async function at(){for(;nt.size;)await Promise.all(nt)}var ot=`17.19.0`;function K(e,t,n){if(!t||!n||!e)return!0;let r=Date.parse(e);return Number.isNaN(r)?!0:(n-r)/(24*3600*1e3)>=t}const st=ot,ct=5e3,lt=2500,q=e=>e[0]===`v`?e.substring(1):e,ut=e=>e.endsWith(`/`)?e.slice(0,-1):e;function dt(e,t){return{headers:{"user-agent":`updates/${st}`,"accept-encoding":`gzip, deflate, br`,...t&&{Authorization:`${e} ${t}`}}}}const ft=new Set([`ECONNRESET`,`ECONNREFUSED`,`ETIMEDOUT`,`EAI_AGAIN`,`EPIPE`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`,`UND_ERR_HEADERS_TIMEOUT`,`UND_ERR_BODY_TIMEOUT`]);function pt(e){if(e?.name===`TimeoutError`||e?.name===`AbortError`)return!0;let t=e?.code??e?.cause?.code;return typeof t==`string`&&ft.has(t)}async function mt(e,t){try{return await fetch(e,t)}catch(t){let n=Error(`Failed to fetch ${e}${t?.message?`: ${t.message}`:``}`,{cause:t});throw n.transient=pt(t),n}}async function J(e,t,n={}){for(let r=0;;r++)try{return await e.doFetch(t,{...n,signal:AbortSignal.timeout(e.fetchTimeout)})}catch(e){if(r>=2||!e?.transient)throw e}}async function ht(e){return typeof e.text==`function`?e.text():JSON.stringify(await e.json())}function gt(e,t){if(!t||e.length<16384)return e;try{return JSON.stringify(t(JSON.parse(e)))}catch{return e}}async function _t(e,t,n={},r){let i=t.noCache?null:await tt(e),a=n.headers,o=i?{...a,"if-none-match":i.etag}:a,s=await J(t,e,{...n,headers:o});if(!s)return{res:void 0};if(s.status===304&&i)return{body:i.body,res:s};if(!s.ok)return{res:s};let c=gt(await ht(s),r),l=s.headers?.get?.(`etag`);return l&&!t.noCache&&it(e,l,c),{body:c,res:s}}async function vt(e,t,n={},r){if(!t.noCache){let t=await tt(e);if(t)return{body:t.body}}let i=await J(t,e,n);if(!i)return{res:void 0};if(!i.ok)return{res:i};let a=gt(await ht(i),r);return t.noCache||it(e,`immutable`,a),{body:a,res:i}}function yt(e){return(I(e)?.prerelease.length??0)>0}function bt(e){return/[0-9]+\.[0-9]+\.[0-9]+-.+/.test(e)}const xt=new WeakMap;function St(e){let t=xt.get(e);if(t)return t;let n=new Set(e);return n.add(`prerelease`),e.has(`patch`)&&n.add(`prepatch`),e.has(`minor`)&&n.add(`preminor`),e.has(`major`)&&n.add(`premajor`),xt.set(e,n),n}function Ct(e,t,{useRel:n,allowDowngrade:r,name:i,matchesAny:a}){let o=Y(e),s=Y(t);if(!o||!s)return!0;let c=bt(e)||yt(e),l=yt(t);return c&&!l?ve(s,o)||n:!l&&ye(s,o)?a(i,r):!0}function Y(e){return he(e)?.version??``}function wt(e,t,{range:n,semvers:r,usePre:i,useRel:a,useGreatest:o,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:u}){let d=Y(n);if(!d)return d;let f=bt(n)||i,p=f?St(r):r,m=e?.time,h=!!m,g=o||!h,_=!!(c&&l),v=0,y=!1,b=d,x=I(d);for(let e of t){let t=I(e);if(!t?.version||t.prerelease.length&&(!f||a))continue;let n=t.version;if(s&&!H(n,s))continue;let r;if(_&&(r=u?u(e):h?m[e]:void 0,!K(r,c,l)))continue;let i=ge(x,t);if(!(!i||!p.has(i)))if(g)((y?F(t,x)>0:P(t,x)>=0)||s&&!H(b,s))&&(b=n,x=t,y=!0);else{let i=Date.parse(r??m[e]);i>=0&&i>v&&(b=n,x=t,v=i)}}return b||null}function Tt(e,{mode:t,range:n,useGreatest:r,useRel:i,usePre:a,semvers:o,pinnedRange:s,cooldownDays:c,now:l},{allowDowngrade:u,matchesAny:d,isGoPseudoVersion:f}){if(n===`*`||n.includes(`||`)||/\d\s/.test(n))return null;let p=[],m;if(t===`pypi`){let t=e.releases;p=Object.keys(t),m=e=>t?.[e]?.[0]?.upload_time_iso_8601}else if(t===`npm`||t===`cargo`)p=Object.keys(e.versions);else if(t===`go`){let t=Y(n);if(!t)return null;let r=a||bt(n),p=e=>yt(e)&&(!r||i),m={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d},h=e.old||n,g=Y(e.new);if(g&&!f(e.new)&&!p(e.new)){let n=R(t,g);if(n&&o.has(n)&&Ct(h,e.new,m)&&K(e.Time,c,l)&&(!s||H(g,s)))return e.new}let _=Y(e.sameMajorNew);if(_&&!f(e.sameMajorNew)&&!p(e.sameMajorNew)){let n=R(t,_);if(n&&o.has(n)&&Ct(h,e.sameMajorNew,m)&&K(e.sameMajorTime,c,l)&&(!s||H(_,s)))return e.Time=e.sameMajorTime,delete e.newPath,e.sameMajorNew}if(c&&l&&e.olderEligible&&!p(e.olderEligible.version)){let n=Y(e.olderEligible.version);if(n){let r=R(t,n);if(r&&o.has(r)&&Ct(h,e.olderEligible.version,m)&&(!s||H(n,s)))return e.Time=e.olderEligible.time,delete e.newPath,e.olderEligible.version}}return null}let h=wt(e,p,{range:n,semvers:o,usePre:a,useRel:i,useGreatest:r,pinnedRange:s,cooldownDays:c,now:l,getVersionDate:m});if(!h)return null;if(r)return h;{let r=``,f=``,p=!1;t===`pypi`?(f=e.info.version,r=Y(e.info.version),p=yt(f)):(r=e[`dist-tags`].latest,p=yt(r));let m=Y(n),g=bt(n),_=yt(h),v={useRel:i,allowDowngrade:u,name:e.name,matchesAny:d};if(!i&&a||g&&_)return h;if(g&&!_)return Ct(n,h,v)?h:null;let y=R(m,r);return y&&y!==`prerelease`&&!o.has(y.replace(/^pre/,``))||i&&p?h:ye(r,m)&&!p?Ct(n,r,v)?r:z(h,m)?h:null:!g&&p&&!a||s&&!H(r,s)||c&&l&&!K(t===`pypi`?e.releases?.[f||r]?.[0]?.upload_time_iso_8601:e.time?.[r],c,l)?h:f||r}}const Et=new Map;if(t.UPDATES_FORGE_TOKENS)for(let e of t.UPDATES_FORGE_TOKENS.split(`,`)){let t=e.indexOf(`:`);t>0&&Et.set(e.substring(0,t),e.substring(t+1))}const Dt=[`UPDATES_GITHUB_API_TOKEN`,`GITHUB_API_TOKEN`,`GH_TOKEN`,`GITHUB_TOKEN`,`HOMEBREW_GITHUB_API_TOKEN`];function Ot(){return Array.from(new Set(Dt.map(e=>t[e]).filter(Boolean)))}let kt;function At(){let e=Ot();return e.length?Promise.resolve(e):kt??=(async()=>{try{let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]),{stdout:n}=await t(e)(`gh`,[`auth`,`token`],{encoding:`utf8`,timeout:5e3}),r=n.trim();return r?[r]:[]}catch{return[]}})()}const jt=new Map;async function Mt(e,t){if(!e)return[];let n=Et.get(e);if(n)return[n];let r=``;try{r=new URL(t).hostname}catch{}return e===`api.github.com`||e===`github.com`||e===r?At():[]}async function Nt(e,t,n){let r;try{r=new URL(e).hostname}catch{r=``}let i=await Mt(r,t.forgeApiUrl),a=e=>{let t=dt(`Bearer`,e);return n&&(t.headers={...t.headers,...n}),t};if(!i.length)return J(t,e,a());let o=r?jt.get(r):void 0;if(o)return J(t,e,a(o));for(let n of i){let i=await J(t,e,a(n));if(i.status!==401&&i.status!==403)return r&&jt.set(r,n),i}return J(t,e,a())}function Pt(e,t){let n=q(t);if(!pe(n))return null;let r=``,i=``;for(let t of e){let e=q(t);pe(e)&&(!r||z(e,i))&&(r=t,i=e)}return r&&z(i,n)?r:null}function Ft(e){let t=e.replace(`git@`,``).replace(/.+?\/\//,`https://`).replace(/\.git$/,``);return/^[a-z]+:[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?t.replace(/^(.+?):/,(e,t)=>`https://${t}.com/`):/^[a-z0-9-]+\/[a-z0-9-]+$/.test(t)?`https://github.com/${t}`:t}const It=/^[0-9a-f]{7,}$/i;function Lt(e){return e.map(e=>({name:e.name,commitSha:e.commit?.sha||``}))}async function Rt(e,t){let n=t.noCache?null:await tt(e),r=await Nt(e,t,n?{"if-none-match":n.etag}:void 0);if(r?.status===304&&n)try{let e=JSON.parse(n.body);return{tags:e.tags||[],link:e.link||``}}catch{return null}if(!r?.ok)return null;let i=Lt(await r.json()),a=r.headers.get(`link`)||``,o=r.headers.get(`etag`);return o&&!t.noCache&&it(e,o,JSON.stringify({link:a,tags:i})),{tags:i,link:a}}async function zt(e,t,n,r){let i=r=>`${e}/repos/${t}/${n}/tags?per_page=100&page=${r}`;try{let e=await Rt(i(1),r);if(!e)return[];let t=e.tags,n=/<([^>]+)>;\s*rel="last"/.exec(e.link);if(!n)return t;let a=Math.min(Number(new URL(n[1]).searchParams.get(`page`)),10);if(a<2)return t;let o=await Promise.all(Array.from({length:a-1},(e,t)=>Rt(i(t+2),r)));for(let e of o)e&&t.push(...e.tags);return t}catch{return[]}}function Bt(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 Vt(e,t,n=``){let r=t.startsWith(`v`),i=q(e),a=q(t).split(`.`).length,o=i.split(`.`),s;return s=a===1?o[0]:a===2?`${o[0]}.${o[1]||`0`}`:i,`${r?`v`:``}${s}${n}`}function Ht(e){return e.startsWith(`https://bitbucket.org`)?`src/HEAD`:`tree/HEAD`}function Ut({repository:e,homepage:t,info:n},r,i){if(n){let t=n.project_urls;for(let n of[`repository`,`Repository`,`repo`,`Repo`,`source`,`Source`,`source code`,`Source code`,`Source Code`,`homepage`,`Homepage`])if(t?.[n]){e=t[n];break}e??=`https://pypi.org/project/${i}/`}let a=``;return r===`https://npm.pkg.github.com`?`https://github.com/${i.replace(/^@/,``)}`:(e&&(a=Ft(typeof e==`string`?e:e.url),a&&typeof e!=`string`&&e.directory&&(a+=`/${Ht(a)}/${e.directory}`)),a||t||``)}const Wt={"allow-downgrade":{short:`d`,type:`string`,multiple:!0},"error-on-outdated":{short:`E`,type:`boolean`},"error-on-unchanged":{short:`U`,type:`boolean`},exclude:{short:`e`,type:`string`,multiple:!0},file:{short:`f`,type:`string`,multiple:!0},forgeapi:{type:`string`},goproxy:{type:`string`},cargoapi:{type:`string`},dockerapi:{type:`string`},greatest:{short:`g`,type:`string`,multiple:!0},help:{short:`h`,type:`boolean`},include:{short:`i`,type:`string`,multiple:!0},indirect:{short:`I`,type:`boolean`},json:{short:`j`,type:`boolean`},jsrapi:{type:`string`},cooldown:{short:`C`,type:`string`},minor:{short:`m`,type:`string`,multiple:!0},modes:{short:`M`,type:`string`,multiple:!0},color:{short:`c`,type:`boolean`},"no-cache":{short:`x`,type:`boolean`},"no-color":{short:`n`,type:`boolean`},patch:{short:`P`,type:`string`,multiple:!0},pin:{short:`l`,type:`string`,multiple:!0},prerelease:{short:`p`,type:`string`,multiple:!0},pypiapi:{type:`string`},registry:{short:`r`,type:`string`},release:{short:`R`,type:`string`,multiple:!0},sockets:{short:`s`,type:`string`},timeout:{short:`T`,type:`string`},types:{short:`t`,type:`string`,multiple:!0},update:{short:`u`,type:`boolean`},verbose:{short:`V`,type:`boolean`},version:{short:`v`,type:`boolean`}};function Gt(e,t){return RegExp(`^${G(e).replaceAll(`\\*`,`.*`)}$`,t?`i`:``)}function Kt(e,t,n){if(t&&typeof e==`string`)return/^\/.+\/$/.test(e)?new RegExp(e.slice(1,-1)):Gt(e,n);{let t=e instanceof RegExp?e:Gt(e,n);return/[gy]/.test(t.flags)?new RegExp(t.source,t.flags.replace(/[gy]/g,``)):t}}function qt(e){return Array.isArray(e)&&e.every(e=>e===!0)?!0:Array.isArray(e)?new Set(e.filter(e=>typeof e==`string`).flatMap(Ue)):typeof e==`string`?new Set([e]):typeof e==`boolean`&&e}function Jt(e){for(let[t,{short:n}]of Object.entries(Wt))if(t===e||n===e)return t;return``}function X(e){return new Set(e.map(e=>Kt(e,!1,!0)))}function Yt(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`).flatMap(e=>Ue(e)):[]}function Xt(e){let t={},n=Array.isArray(e)?e:[e];for(let e of n){if(typeof e!=`string`)continue;let n=e.indexOf(`=`);if(n===-1)continue;let r=e.slice(0,n),i=e.slice(n+1);r&&i&&ke(i)&&(t[r]=i)}return t}function Zt(e){return typeof e==`boolean`?e:!Array.isArray(e)||!e.length?!1:X(e)}async function Qt(e){let t=await Promise.all([`js`,`ts`,`mjs`,`mts`].map(async t=>{let n=`updates.config.${t}`,r=c(e,n);try{await b(r)}catch{return null}try{return{configDir:e,filename:n,default:(await import(T(r).href)).default??{}}}catch(e){return Error(`Unable to parse config file ${n}: ${e?.message??e}`)}}));for(let e of t)if(e&&!(e instanceof Error))return e;for(let e of t)if(e instanceof Error)throw e;return null}const $t=Xe(e=>Ye(e,Qt));async function en(e,t={}){let n=await $t(e),r=n?.default??{},{loadRenovateConfig:i,makePresetFetcher:a}=await import(`./renovate.js`),o=a(t);return{...await i(n?.configDir??e,r.inherit?.renovate,o),...r}}function tn(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 nn(e){try{return tn(h(e,`utf-8`))}catch{return}}function rn(t){let n=e();for(;;){let e=c(n,t);try{if(_(e).isFile())return e}catch{}let r=s(n);if(r===n)break;n=r}}function an(e){let n={},r=e.toLowerCase();for(let[i,a]of Object.entries(t)){if(!i.toLowerCase().startsWith(r))continue;let t=i.substring(e.length).split(`__`).filter(Boolean);if(t.length===0)continue;let o=n;for(let e=0;e<t.length;e++){let n=t[e];if(e===t.length-1)o[n]=a;else if(o[n]===void 0&&(o[n]={}),typeof o[n]==`object`)o=o[n];else break}}return n}function on(e,n={}){let i=r===`win32`,a=i?t.USERPROFILE:t.HOME,o=[{...n}],s=[];function l(e){if(!e||s.includes(e))return;let t=nn(e);t&&(o.push(t),s.push(e))}i||(l(c(`/etc`,e,`config`)),l(c(`/etc`,`${e}rc`))),a&&(l(c(a,`.config`,e,`config`)),l(c(a,`.config`,e)),l(c(a,`.${e}`,`config`)),l(c(a,`.${e}rc`))),l(rn(`.${e}rc`));let u=an(`${e}_`);return u.config&&l(u.config),Object.assign({},...o,u,s.length?{configs:s,config:s[s.length-1]}:void 0)}const sn=/^.*?:\/\/(.*?@)?(github\.com[:/])/i,cn=/^([^/]+)\/([^/]+)\/(?:.*\/)?([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i,ln=/[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g,un=/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g,dn=/(@[^/]+\/)?([^/]+)/g;function fn(e){let t=e.match(dn);return t?t[t.length-1]:e}const pn=`https://registry.npmjs.org`;let mn=null;const hn=new Map;function gn(){return mn??=on(`npm`,{registry:pn})}function _n(e){return e.replace(/^\$\{?([^}]*)\}?$/,(e,n)=>t[n]||``)}function vn(e,t){let n=n=>t[`${e}:${n}`]||t[`${e}/:${n}`],r=n(`_authToken`);if(r)return{token:_n(r),type:`Bearer`};let i=n(`username`),a=n(`_password`);if(i&&a){let e=Buffer.from(_n(a),`base64`).toString(`utf8`);return{token:Buffer.from(`${i}:${e}`).toString(`base64`),type:`Basic`,username:i,password:e}}let o=n(`_auth`);if(o)return{token:_n(o),type:`Basic`}}function yn(e,t){let n=new URL(e.startsWith(`//`)?`http:${e}`:e),r;for(;r!==`/`&&n.pathname!==r;){r=n.pathname||`/`;let e=vn(`//${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:_n(i),type:`Basic`}}function bn(e,t){let n=t[`${e}:registry`]||t.registry;return n.endsWith(`/`)?n:`${n}/`}function xn(e,t){mn||=gn();let n=e.startsWith(`@`)?e.split(`/`)[0]:``,r=`${n}:${t}`,i=hn.get(r);if(i)return i;let a=()=>({auth:yn(t,mn),registry:t}),o;if(!e.startsWith(`@`))o=a();else{let e=ut(bn(n,mn));if(e!==t)try{let t=yn(e,mn);o=t?.token?{auth:t,registry:e}:a()}catch{o=a()}else o=a()}return hn.set(r,o),o}function Sn(e,t,n){mn||=gn();let r=ut(typeof n.registry==`string`&&n.registry||t.registry||mn.registry||pn);return{...xn(e,r),originalRegistry:r}}function Cn(e,t,n){let r=`${e}/${t.replace(/\//g,`%2f`)}`;return n?`${r}/${n}`:r}const wn=new Map,Tn=new Map,En=new Map;function Dn(e){let t={};for(let n of Object.keys(e.versions??{}))t[n]={};return{name:e.name,"dist-tags":e[`dist-tags`],versions:t,time:e.time,error:e.error}}async function On(e,t,n,r,i){let{auth:a,registry:o}=Sn(e,n,r),s=Cn(o,t===`resolutions`?fn(e):e),c=wn.get(s);if(!c){let t=dt(a?.type,a?.token);t.headers={...t.headers,accept:`application/vnd.npm.install-v1+json`},c=(async()=>{try{let n=await _t(s,i,t,Dn);return`body`in n||Bt(n.res,s,e,o),JSON.parse(n.body)}catch(e){throw wn.delete(s),e}})(),wn.set(s,c)}return[await c,t,o,e]}async function kn(e,t,n,r,i){let{auth:a,registry:o}=Sn(e,n,r),s=Cn(o,e,t),c=Tn.get(s);if(c)return c;let l=(async()=>{try{let n=dt(a?.type,a?.token),r=await vt(s,i,n,e=>({repository:e.repository,homepage:e.homepage,_npmOperationalInternal:e._npmOperationalInternal?.tmp?{tmp:e._npmOperationalInternal.tmp}:void 0}));if(!(`body`in r))return{};let c=JSON.parse(r.body),l=``,u=c?._npmOperationalInternal?.tmp;if(u){let e=/(\d{13})/.exec(u);e&&(l=new Date(Number(e[1])).toISOString())}if(!l){let r=Cn(o,e),a=En.get(r);a||(a=(async()=>{try{let e=await J(i,r,n);return e?.ok?await e.json():null}catch{return En.delete(r),null}})(),En.set(r,a)),l=(await a)?.time?.[t]||``}return{repository:c.repository,homepage:c.homepage,date:l}}catch{return{}}})();return Tn.set(s,l),l}function An(e){return e.startsWith(`npm:@jsr/`)||e.startsWith(`jsr:`)}function jn(e){return e.startsWith(`link:`)||e.startsWith(`file:`)}function Mn(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 Nn(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 _t(o,n,{headers:{"accept-encoding":`gzip, deflate, br`}},e=>({latest:e.latest,versions:Object.fromEntries(Object.entries(e.versions??{}).map(([e,t])=>[e,{createdAt:t?.createdAt}]))}));if(`body`in s){let r=JSON.parse(s.body),i={},a={};for(let[e,t]of Object.entries(r.versions??{}))i[e]={version:e,time:t.createdAt},a[e]=t.createdAt;return[{name:e,"dist-tags":{latest:r.latest},versions:i,time:a},t,n.jsrApiUrl,e]}Bt(s.res,o,e,`JSR`)}function Pn(e,t){let n=new Map;for(let[e,{old:r,oldOrig:i,new:a}]of Object.entries(t)){let[t,o]=e.split(`\0`),s=i||r;t===`packageManager`?n.set(`${t}\0${o}@${s}`,`"${t}": "${o}@${a}"`):n.set(`${o}\0${s}`,`"${o}": "${a}"`)}return n.size?e.replace(/"((?:[^"\\]|\\.)*)": *"((?:[^"\\]|\\.)*)"/g,(e,t,r)=>n.get(`${t}\0${r}`)??e):e}function Fn(e,t,n){let r=e.replace(un,t);if(!n||n===e)return r;let i=/^([\^~]|>=\s*)([\d.]+)$/.exec(n);if(!i)return r;let[,a,o]=i,s=t.split(/[-+]/)[0];if(s!==t)return r;let c=o.split(`.`).length,l=s.split(`.`);return l.length===c?r:`${a}${l.slice(0,c).join(`.`)}`}function Z(e){if(/[xX*]/.test(e))return e;let t=e.match(ln);return t?.length===1?e.replace(ln,Y(t[0])):e}async function In(e,t,n){let r=`${n.forgeApiUrl}/repos/${e}/${t}/commits`;try{let e=n.noCache?null:await tt(r),t=await Nt(r,n,e?{"if-none-match":e.etag}:void 0),i;if(t?.status===304&&e)i=e.body;else if(t?.ok){let{sha:e,commit:a}=JSON.parse(await t.text())[0];i=JSON.stringify([{sha:e,commit:{committer:a?.committer,author:a?.author}}]);let o=t.headers.get(`etag`);o&&!n.noCache&&it(r,o,i)}else return{hash:``,commit:{}};let{sha:a,commit:o}=JSON.parse(i)[0];return{hash:a,commit:o}}catch{return{hash:``,commit:{}}}}async function Ln(e,t,n){return(await zt(n.forgeApiUrl,e,t,n)).map(e=>e.name)}async function Rn(e,t,n){let r=t.old.replace(sn,``),[,i,a,o]=cn.exec(r)||[];if(!i||!a||!o)return null;let s=e=>{let n=t.old.lastIndexOf(o);return t.old.slice(0,n)+e+t.old.slice(n+o.length)};if(It.test(o)){let{hash:t,commit:r}=await In(i,a,n);if(!t)return null;let c=r?.committer?.date??r?.author?.date,l=t.substring(0,o.length);if(o.toLowerCase()!==l.toLowerCase())return{key:e,newRange:s(l),user:i,repo:a,oldRef:o,newRef:l,newDate:c}}else{let t=Pt(await Ln(i,a,n),o);if(t)return{key:e,newRange:s(t),user:i,repo:a,oldRef:o,newRef:t}}return null}function zn(e){let t={};for(let[n,r]of Object.entries(e.releases??{}))t[n]=(r??[]).slice(0,1).map(e=>e.upload_time_iso_8601?{upload_time_iso_8601:e.upload_time_iso_8601}:{});let{name:n,version:r,project_urls:i}=e.info??{};return{info:{name:n,version:r,project_urls:i},releases:t}}async function Bn(e,t,n){let r=`${n.pypiApiUrl}/pypi/${e}/json`,i=await _t(r,n,{headers:{"accept-encoding":`gzip, deflate, br`}},zn);if(`body`in i)return[JSON.parse(i.body),t,null,e];Bt(i.res,r,e,n.pypiApiUrl)}function Vn(e,t){let n=e;for(let[e,{old:r,oldOrig:i}]of Object.entries(t)){let a=e.split(`\0`)[1],o=i||r;n=n.replace(RegExp(`(['"])(${G(a)} *(?:\\[[^\\]]+\\])? *[<>=~]+ *)${G(o)}\\1`,`g`),(n,r,i)=>`${r}${i}${t[e].new}${r}`)}return n}let Hn;async function Un(){let[{execFile:e},{promisify:t}]=await Promise.all([import(`node:child_process`),import(`node:util`)]);return t(e)}function Wn(){return Hn??=Un()}function Gn(){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 ut(e)}return`https://proxy.golang.org`}function Kn(){return(t.GONOPROXY||t.GOPRIVATE||``).split(`,`).map(e=>e.trim()).filter(Boolean)}function qn(e,t){return t.some(t=>e===t||e.startsWith(`${t}/`))}function Jn(e){return e.replace(/[A-Z]/g,e=>`!${e.toLowerCase()}`)}const Yn=/\/v(\d+)$/;function Xn(e){let t=Yn.exec(e);return t?Number.parseInt(t[1]):1}function Zn(e,t){let n=e.replace(Yn,``);return t<=1?n:`${n}/v${t}`}function Qn(e,t){if(t.includes(`+incompatible`))return e;let n=Number.parseInt(q(t).split(`.`)[0]);return Number.isNaN(n)||n<=1||n===Xn(e)?e:Zn(e,n)}function $n(e,t){let n=t?/^(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e):/^replace\s+(\S+)(?:\s+v\S+)?\s+=>\s+(\S+)\s+(v\S+)/.exec(e);if(!n)return null;let[,r,i,a]=n;return i.startsWith(`./`)||i.startsWith(`/`)||i.startsWith(`../`)?null:{origModule:r,targetModule:i,targetVersion:a}}function er(e,t,n){return t===`indirect`||e.startsWith(`golang.org/x/`)||tr(n)}function tr(e){return/\d{14}-[0-9a-f]{12}$/.test(e)}function nr(e,t,n){return[{name:e,old:t,new:t},n,null,e]}async function rr(e,t,n){if(!t)return null;let r=t,i=e+101,a=e+2,o=7;for(;a<=i;){let e=Math.min(a+o-1,i),t=await Promise.all(Array.from({length:e-a+1},(e,t)=>n(a+t))),s=t.indexOf(null),c=s===-1?t:t.slice(0,s);if(c.length&&(r=c.at(-1)),s!==-1)break;a=e+1,o*=2}return r}function ir(e,t,n,r,i,a){let o=r?.Version??i,s=r?.Time??a,c=r?.path??e;return[{name:e,old:n,new:q(o),Time:s,...c!==e&&{newPath:c},sameMajorNew:q(i),sameMajorTime:a},t,null,e]}function ar(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(i.startsWith(`//`))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=$n(i,l);e&&(r[e.targetModule]=e.targetVersion,a.add(e.origModule));continue}let f=c?/^(\S+)\s+(v\S+)/.exec(i):/^require\s+(\S+)\s+(v\S+)/.exec(i);f&&((d?n:t)[f[1]]=f[2])}for(let e of a)delete t[e],delete n[e];if(o.length){let e=[...Object.keys(n),...Object.keys(t)];for(let r of o){let a=``;for(let t of e)(r===t||r.startsWith(`${t}/`))&&t.length>a.length&&(a=t);let o=n[a]?n:t[a]?t:null;o&&(i[a]=o[a],delete o[a])}}return{deps:t,indirect:n,replace:r,tool:i}}async function or(e,n,r,i,a){let o=Xn(e),s=async(e,n)=>{try{let{stdout:r}=await(await Wn())(`go`,[`list`,`-m`,`-json`,`${e}@latest`],{timeout:n,cwd:i,env:t}),a=JSON.parse(r);return{Version:a.Version,Time:a.Time||``,path:e}}catch{return null}},c=er(e,n,r),[l,u]=await Promise.all([s(e,a.fetchTimeout),c?null:s(Zn(e,o+1),a.goProbeTimeout)]);return l?ir(e,n,r,await rr(o,u,t=>s(Zn(e,t),a.goProbeTimeout)),l.Version,l.Time):nr(e,r,n)}async function sr(e,t,n,r,i,a){if(qn(e,a))return or(e,t,n,r,i);let o=Jn(e),s=Xn(e),c=async t=>{let n=Zn(e,t);try{let e=await i.doFetch(`${i.goProxyUrl}/${Jn(n)}/@latest`,{signal:AbortSignal.timeout(i.goProbeTimeout),headers:{"accept-encoding":`gzip, deflate, br`}});return e.ok?{...await e.json(),path:n}:null}catch{return null}},l=er(e,t,n),[u,d]=await Promise.all([J(i,`${i.goProxyUrl}/${o}/@latest`,{headers:{"accept-encoding":`gzip, deflate, br`}}),l?null:c(s+1)]);if(!u.ok)return nr(e,n,t);let f,p;try{let e=await u.json();f=e.Version,p=e.Time}catch{return nr(e,n,t)}return ir(e,t,n,await rr(s,d,c),f,p)}function cr(e,t){if(!e.includes(`replace`))return e;let n=G(t);return e=e.replace(RegExp(`^replace\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(RegExp(`^\\s+${n}(\\s+v\\S+)?\\s+=>\\s+\\S+(\\s+v\\S+)?\\s*\\n`,`gm`),``),e=e.replace(/^replace\s*\(\s*\)\s*\n/gm,``),e}function lr(e,t){let n=e,r={};for(let[e,{old:i,oldOrig:a}]of Object.entries(t)){let[o,s]=e.split(`\0`),c=a||i,l=t[e].new;if(o===`replace`){n=n.replace(RegExp(`(=>\\s+${G(s)}\\s+)v${G(c)}`,`g`),`$1v${l}`);continue}if(o===`indirect`){n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`);continue}let u=Qn(s,l);u===s?n=n.replace(RegExp(`(${G(s)}) +v${G(c)}`,`g`),`$1 v${l}`):(n=n.replace(RegExp(`${G(s)} +v${G(c)}`,`g`),`${u} v${l}`),o===`tool`&&(n=n.replace(RegExp(`(^\\s+|^tool\\s+)${G(s)}(/\\S+)?\\s*$`,`gm`),`$1${u}$2`)),r[s]=u),o!==`tool`&&(n=cr(n,s))}return[n,r]}function ur(e,t,n){let r=Object.entries(t);if(!r.length)return;let i=new Map(r),a=r.map(([e])=>e).sort((e,t)=>t.length-e.length),o=RegExp(`"(${a.map(G).join(`|`)})(/|")`,`g`),s=p(`**/*.go`,{cwd:e});for(let t of s){let r=c(e,t),a=h(r,`utf8`),s=a.replace(o,(e,t,n)=>`"${i.get(t)}${n}`);s!==a&&n(r,s)}}function dr(e){let t=[],n={},r=e.split(/\r?\n/),i=!1,a=!1;for(let e of r){let r=e.trim();if(/^use\s*\(/.test(r)){i=!0;continue}if(/^replace\s*\(/.test(r)){a=!0;continue}if(r===`)`){i=!1,a=!1;continue}if(i){let e=/^(\S+)/.exec(r);e&&!r.startsWith(`//`)&&t.push(e[1]);continue}let o=/^use\s+(\S+)/.exec(r);if(o){t.push(o[1]);continue}if(a||/^replace\s+/.test(r)){let e=$n(r,a);e&&(n[e.targetModule]=e.targetVersion)}}return{use:t,replace:n}}function fr(e){let t=`https://${pr(e)}`,n=new URL(t),r=n.pathname.split(`/`);if(r.length>3){let[,e,i,...a]=r;return n.pathname=`/${e}/${i}/${Ht(t)}/${a.join(`/`)}`,n.href}else return t}function pr(e){return Yn.test(e)?s(e):e}function mr(e){return e.replace(/(\d{7})\d{7}-[0-9a-f]{12}$/,`$1`)}const hr=/^\s*(?:-\s*)?uses:\s*['"]?([^'"#\s]+)['"]?/gm;function gr(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:It.test(o)}}function _r(e,t){return e?e===`github.com`?`https://api.github.com`:`https://${e}/api/v1`:t}async function vr(e,t,n,r,i){let a=`${e}/repos/${t}/${n}/git/commits/${r}`;if(!i.noCache){let e=await tt(a);if(e)return e.body}try{let e=await Nt(a,i);if(!e.ok)return``;let t=await e.json(),n=t?.committer?.date||t?.author?.date||``;return n&&!i.noCache&&it(a,`immutable`,n),n}catch{return``}}function yr(e,t){return Vt(I(q(e))?.version??q(e),t)}function br(e,t){let n=e;for(let{name:e,oldRef:r,newRef:i}of t){let t=RegExp(`(uses:\\s*['"]?(?:https?:\\/\\/)?)${G(e)}@${G(r)}(?![\\w.-])`,`g`);n=n.replace(t,`$1${e}@${i}`)}return n}const xr=[`.github`,`.gitea`,`.forgejo`],Sr=RegExp(`(?:^|/)(?:${xr.map(G).join(`|`)})\\/(?:workflows\\/[^/]+|(?:[^/]+\\/)*action)\\.ya?ml$`);function Cr(e){return Sr.test(e.replace(/\\/g,`/`))}function wr(e){let t=new Set;try{for(let n of g(c(e,`workflows`)))/\.ya?ml$/.test(n)&&t.add(u(c(e,`workflows`,n)))}catch{}try{for(let n of g(e,{recursive:!0,withFileTypes:!0}))!n.isFile()||!/^action\.ya?ml$/.test(n.name)||t.add(u(c(n.parentPath,n.name)))}catch{}return Array.from(t)}const Tr=/^(v?\d+(?:\.\d+){0,2})(-.+)?$/,Er=/^\s*FROM\s+(?:--platform=\S+\s+)?(\S+)/gm,Dr=/^\s*image:\s*['"]?([^\s'"#]+)['"]?/gm,Or=/^\s*container:\s*['"]?([^\s'"#{}]+:[^\s'"#{}:]+)['"]?\s*$/gm,kr=/^\s*(?:-\s*)?uses:\s*['"]?docker:\/\/([^'"#\s]+)['"]?/gm;function Ar(e){let t=e.split(`/`);return t.length===1?{registry:null,namespace:`library`,repo:t[0]}:t.length===2&&!t[0].includes(`.`)&&!t[0].includes(`:`)?{registry:null,namespace:t[0],repo:t[1]}:{registry:t[0],namespace:t.slice(1,-1).join(`/`),repo:t[t.length-1]}}function jr(e){if(e=e.replace(/^docker:\/\//,``),e.includes(`@`))return null;let t=e.lastIndexOf(`:`);if(t===-1||e.lastIndexOf(`/`)>t)return null;let n=e.substring(0,t),r=e.substring(t+1);if(!r||!Tr.test(r))return null;let{registry:i,namespace:a,repo:o}=Ar(n);return{registry:i,namespace:a,repo:o,tag:r,fullImage:n}}function Mr(e){let t=Tr.exec(e);return t?{version:t[1],suffix:t[2]||``}:null}function Nr(e,t){let n=Mr(t);return n?Vt(e,n.version,n.suffix):t}function Pr(e,t){let n=[];for(let r of e.matchAll(t)){let e=jr(r[1]);e&&n.push({ref:e,match:r[1]})}return n}const Fr=new WeakMap;function Ir(e,t,n){let r=Fr.get(n);r||Fr.set(n,r=new Map);let i=`${e}/${t}`,a=r.get(i);return a||r.set(i,a=Lr(e,t,n)),a}async function Lr(e,t,n){let r={},i=`${n.dockerApiUrl}/v2/repositories/${e}/${t}/tags`,a=e=>`${i}?page_size=100&ordering=last_updated&page=${e}`,o={headers:{"accept-encoding":`gzip, deflate, br`}},s=e=>({count:e.count,results:(e.results||[]).map(e=>({name:e.name,tag_last_pushed:e.tag_last_pushed,last_updated:e.last_updated}))}),c=async e=>{try{let t=await _t(a(e),n,o,s);return`body`in t?JSON.parse(t.body):null}catch{return null}},l=await c(1);if(!l)return r;for(let e of l.results||[])r[e.name]=e.tag_last_pushed||e.last_updated||``;let u=Math.min(Math.ceil((l.count||0)/100),10);if(u<2)return r;let d=await Promise.all(Array.from({length:u-1},(e,t)=>c(t+2)));for(let e of d)if(e)for(let t of e.results||[])r[t.name]=t.tag_last_pushed||t.last_updated||``;return r}async function Rr(e,t,n,r){let i=`${r.dockerApiUrl}/v2/repositories/${e}/${t}/tags/${n}`;try{let e=await _t(i,r,{headers:{"accept-encoding":`gzip, deflate, br`}},e=>({digest:e.digest}));if(!(`body`in e))return null;let t=JSON.parse(e.body).digest;return typeof t==`string`?t:null}catch{return null}}async function zr(e,t,n){let{registry:r,namespace:i,repo:a}=Ar(e);if(r)throw Error(`Non-Docker-Hub registries are not yet supported: ${r}`);return[{tags:await Ir(i,a,n),name:e},t,null,e]}function Br(e,t,n,r,i,a){let o=Mr(t);if(!o)return null;let s=he(q(o.version))?.version;if(!s)return null;let c=s,l=``,u=``;for(let[t,s]of Object.entries(e)){let e=Mr(t);if(!e||e.suffix!==o.suffix)continue;let d=he(q(e.version))?.version;if(!d||a&&!H(d,a)||!K(s,r,i))continue;if(d===c){l&&Date.parse(s)>Date.parse(u)&&(l=t,u=s);continue}let f=R(c,d);!f||!n.has(f)||z(d,c)&&(c=d,l=t,u=s)}if(!l||c===s)return null;let d=Nr(c,t);return d===t?null:{newTag:d,hubTag:l,date:u}}function Vr(e,t,n){let r=e;for(let[e,i]of Object.entries(t)){let t=e.split(`\0`)[1],a=i.oldOrig||i.old;for(let e of n)r=r.replace(e(G(t),G(a)),`$1${t}:${i.new}`)}return r}function Hr(e,t){return Vr(e,t,[(e,t)=>RegExp(`(FROM\\s+(?:--platform=\\S+\\s+)?)${e}:${t}(?![\\w.-])`,`g`)])}function Ur(e,t){return Vr(e,t,[(e,t)=>RegExp(`(image:\\s*['"]?)${e}:${t}(?![\\w.-])`,`g`)])}function Wr(e,t){return Vr(e,t,[(e,t)=>RegExp(`((?:container|image):\\s*['"]?)${e}:${t}(?![\\w.-])`,`g`),(e,t)=>RegExp(`(uses:\\s*['"]?docker://)${e}:${t}(?![\\w.-])`,`g`)])}const Gr=[`Dockerfile`,`docker-compose.yml`,`docker-compose.yaml`];function Kr(e){return/^docker-.+\.ya?ml$/.test(e)}function qr(e){return/^Dockerfile(\..+)?$/.test(e)}function Jr(e){return qr(e)||Kr(e)}function Yr(e){return qr(e)?Er:Dr}function Xr(e){return e.registry?``:e.namespace===`library`?`https://hub.docker.com/_/${e.repo}`:`https://hub.docker.com/r/${e.namespace}/${e.repo}`}const Zr=[`Makefile`,`makefile`,`GNUmakefile`];function Qr(e){return Zr.includes(e)||e.endsWith(`.mk`)}const $r=String.raw`^\s*[A-Za-z_][\w.]*\s*(?:::=|:=|\?=|\+=|=)\s*`,ei=RegExp(`${$r}${String.raw`(\S+)@(v\d\S*)\s*$`}`),ti=/^[^/\s]+\.[^/\s]+\//;function ni(e){let t=e.indexOf(`#`);return t===-1?e:e.slice(0,t)}function ri(e){let t=[];for(let n of e.split(/\r?\n/)){let e=ni(n),r=ei.exec(e);if(!r)continue;let[,i,a]=r;ti.test(i)&&t.push({installPath:i,version:a})}return t}const ii=RegExp(`${$r}${String.raw`(\S+)\s*$`}`),ai=/@(sha256:[0-9a-f]{64})$/;function oi(e,t,n){return`${e}:${t}${n?`@${n}`:``}`}function si(e){let t=null,n=e,r=ai.exec(e);r&&(t=r[1],n=e.slice(0,r.index));let i=jr(n.replace(/^docker\.io\//,``));return!i||i.registry||i.namespace===`library`?null:{writtenImage:n.slice(0,n.lastIndexOf(`:`)),ref:i,digest:t}}function ci(e){let t=[];for(let n of e.split(/\r?\n/)){let e=ii.exec(ni(n));if(!e)continue;let r=si(e[1]);r&&t.push(r)}return t}const li=/\/v(?:[2-9]|[1-9]\d+)(?=\/|$)/;function ui(e){let t=li.exec(e);return t?e.slice(0,t.index+t[0].length):null}function di(e){let t=e.split(`/`),n=[];for(let e=t.length;e>=2;e--)n.push(t.slice(0,e).join(`/`));return n}async function fi(e,t){let n=ui(e);if(n)return n;let r=di(e);return(await Promise.all(r.map(async e=>{try{return(await t.doFetch(`${t.goProxyUrl}/${Jn(e)}/@latest`,{signal:AbortSignal.timeout(t.goProbeTimeout)})).ok?e:null}catch{return null}}))).find(Boolean)??null}async function pi(e,t,n,r,i,a){let o=await fi(e,r);if(!o)return null;let[s]=await sr(o,`tool`,q(t),n,r,i),c=Tt(s,{mode:`go`,range:q(t),semvers:a.semvers,useGreatest:a.useGreatest,usePre:a.usePre,useRel:a.useRel,pinnedRange:a.pinnedRange,cooldownDays:a.cooldownDays,now:a.now},{allowDowngrade:a.allowDowngrade,matchesAny:U,isGoPseudoVersion:tr});if(!c)return null;let l=s.newPath??Qn(o,c),u=`${l}${e.slice(o.length)}`,d=Vt(c,t);return u===e&&d===t?null:{newInstallPath:u,newVersion:d,date:s.Time??``,info:fr(l)}}async function mi(e,t,n){let{namespace:r,repo:i,fullImage:a,tag:o}=e.ref,[s]=await zr(a,`docker`,t),c=Br(s.tags,o,n.semvers,n.cooldownDays,n.now,n.pinnedRange);if(!c)return null;let l=null;return e.digest&&(l=await Rr(r,i,c.hubTag,t),!l)?null:{newTag:c.newTag,newDigest:l,date:c.date,info:Xr(e.ref)}}function hi(e,t){for(let{oldSpec:n,newSpec:r}of t){let t=RegExp(`^([^#\\n]*?)${G(n)}(?=[\\s#]|$)`,`gm`);e=e.replace(t,`$1${r}`)}return e}const gi=new Map,_i=e=>({versions:(e.versions||[]).filter(e=>!e.yanked).map(e=>({num:e.num,created_at:e.created_at}))});async function vi(e,t,n){let r=`${ut(n.cratesIoUrl)}/api/v1/crates/${encodeURIComponent(e)}/versions?per_page=100`,i=gi.get(r);return i||(i=(async()=>{try{let t=await _t(r,n,dt(),_i);`body`in t||Bt(t.res,r,e,n.cratesIoUrl);let i;try{i=JSON.parse(t.body)}catch{throw Error(`Invalid JSON from ${r}`)}let a=(i.versions||[]).filter(e=>!e.yanked),o={},s={};for(let e of a)e.num&&(o[e.num]={},s[e.num]=e.created_at||``);return{name:e,versions:o,time:s,"dist-tags":{latest:a[0]?.num??``}}}catch(e){throw gi.delete(r),e}})(),gi.set(r,i)),[await i,t,null,e]}function yi(e){let t=new Map;for(let n of e.split(`[[package]]`)){let e=/\bname\s*=\s*"([^"]+)"/.exec(n),r=/\bversion\s*=\s*"([^"]+)"/.exec(n);if(!e||!r)continue;let i=e[1],a=r[1];if(!pe(a))continue;let o=t.get(i);o||t.set(i,o=[]),o.push(a)}return t}const bi=/^\d/;function xi(e,t){return bi.test(e)?Fn(Z(`^${e}`),t,`^${e}`).replace(/^\^/,``):Fn(Z(e),t,e)}function Si(e,t,n){let r=e.get(t);if(!r)return;let i=bi.test(n)?`^${n}`:n,a;for(let e of r)H(e,i)&&(!a||z(e,a))&&(a=e);return a}const Ci=Ve.map(G).join(`|`);function wi(e,t){let n=e;for(let[e,r]of Object.entries(t)){let[,t]=e.split(`\0`),i=r.oldOrig||r.old,a=r.new,o=G(t),s=G(i);n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*["'])${s}(["'].*)$`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`^(\\s*${o}\\s*=\\s*\\{(?:"[^"]*"|'[^']*'|[^}\\n])*?\\bversion\\s*=\\s*["'])${s}(["'])`,`gm`),`$1${a}$2`),n=n.replace(RegExp(`(\\[(?:${Ci})\\.${o}\\](?:(?!\\n\\[)[\\s\\S])*?version\\s*=\\s*["'])${s}(["'])`,`g`),`$1${a}$2`)}return n}function Ti(e){return e.split(`|`)[0]}function Ei(e,t){let n=t===`.`?``:`|${t}`,r={};for(let[t,i]of Object.entries(e)){let[e,a]=t.split(`\0`),o=Ti(e);e===`${o}${n}`&&(r[`${o}${a}`]=i)}return r}const Di=/[*?{[]/;async function Oi(e,t,n,r=32){let i=e.filter(e=>!e.startsWith(`!`)),a=e.filter(e=>e.startsWith(`!`)).map(e=>e.slice(1)),o=new Set(a.flatMap(e=>p(e,{cwd:t})).map(e=>e.replace(/\\/g,`/`))),s=new Set,d=[];for(let e of i){let r=Di.test(e)?p(e,{cwd:t}).map(e=>u(c(t,e))):[u(c(t,e))];for(let e of r){let r=l(t,e).replace(/\\/g,`/`);if(o.has(r))continue;let i=c(e,n);s.has(i)||(s.add(i),d.push({absPath:i,memberPath:`./${r}`}))}}return(await W(d,async({absPath:e,memberPath:t})=>{try{return{absPath:e,content:await S(e,`utf8`),memberPath:t}}catch{return null}},{concurrency:r})).filter(e=>e!==null)}function ki(e){let t=[],n=e.split(/\r?\n/),r=!1;for(let e of n){if(/^packages\s*:/.test(e)){r=!0;continue}if(r){let n=e.trim();if(!n||n.startsWith(`#`))continue;if(!n.startsWith(`-`))break;let r=/^\s*-\s+['"]?([^'"#\s]+)['"]?/.exec(e);r&&t.push(r[1])}}return t}const Ai={"pnpm-workspace.yaml":`npm`,"package.json":`npm`,"pyproject.toml":`pypi`,"go.work":`go`,"go.mod":`go`,"Cargo.toml":`cargo`},ji=new Set([`npm`,`pypi`,`go`,`cargo`,`actions`,`docker`,`make`]),Mi=(e,t)=>typeof e==`string`?ut(e):typeof t==`function`?t():t;function Ni(e,t){let n=new Map,r=new Set(e),i=t;for(;r.size;){for(let e of r){let t=c(i,e);try{d(t),n.set(e,t),r.delete(e)}catch{}}let e=s(i);if(e===i)break;i=e}return n}async function Pi(e,t){let n=await W(e,async e=>{try{return[e,await S(e,`utf8`)]}catch(t){throw Error(`Unable to open ${e}: ${t.message}`)}},{concurrency:t});return new Map(n)}function Fi(e,t){t&&(e.date=t,e.age=Pe(t,{noAffix:!0}))}function Ii(e){let t=0;for(let n of Object.values(e))t+=Object.keys(n).length;return t}function Li(e){console.error(`${We()} ${e}`)}function Q(e,t,n,r,i){if(i===`engines`&&Re.includes(e)||t===`pypi`&&e===`python`)return!1;if(!n.size&&!r.size)return!0;let a=t===`go`?pr(e):e;for(let t of r)if(t.test(e)||t.test(a))return!1;for(let t of n)if(t.test(e)||t.test(a))return!0;return!n.size}function Ri(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(Ai)){let r=c(e,t),i=null;try{i=m(r)}catch{}i?.isFile()&&n.add(u(r))}try{for(let t of g(e,{withFileTypes:!0}))t.isFile()&&(Jr(t.name)||Qr(t.name))&&n.add(u(c(e,t.name)))}catch{}let t=u(e).replace(/\\/g,`/`),r=xr.some(e=>t.endsWith(`/${e}/workflows`)),i=!r&&xr.some(e=>t.endsWith(`/${e}`)),a=r?[s(t)]:i?[t]:xr.map(e=>c(t,e));for(let e of a)for(let t of wr(e))n.add(t)}else throw Error(`${e} is neither a file nor directory`)}else{let t=new Set(xr),r=[...Object.keys(Ai),...Gr,...Zr,...xr];for(let[i,a]of Ni(r,e()))if(t.has(i))for(let e of wr(a))n.add(e);else n.add(u(a));try{for(let t of g(e(),{withFileTypes:!0})){let r=Jr(t.name)&&!Gr.includes(t.name),i=Qr(t.name)&&!Zr.includes(t.name);t.isFile()&&(r||i)&&n.add(u(c(e(),t.name)))}}catch{}}for(let e of Array.from(n))o(e)===`go.work`&&n.delete(c(s(e),`go.mod`));for(let e of Array.from(n))o(e)===`pnpm-workspace.yaml`&&n.delete(c(s(e),`package.json`));return n}function $(e,t){r===`win32`&&v(e,0),y(e,t,r===`win32`?{flag:`r+`}:void 0)}function zi(e){let t={results:{}};for(let[n,r]of Object.entries(e))for(let[e,i]of Object.entries(r)){typeof i.oldPrint==`string`&&(i.old=i.oldPrint),typeof i.newPrint==`string`&&(i.new=i.newPrint),typeof i.oldOrig==`string`&&!An(i.oldOrig)&&(i.old=n===`go`?mr(i.oldOrig):i.oldOrig),n===`go`?i.new=mr(i.new):n===`actions`&&(i.old=q(i.old),i.new=q(i.new)),delete i.oldPrint,delete i.newPrint,delete i.oldOrig,delete i.date;let[r,a]=e.split(`\0`),o=t.results[n]??={};(o[r]??={})[a]=i}return t}let Bi=!1;async function Vi(t={}){if(!Bi){let{enableDnsCache:e}=await import(`./dns.js`);e(),Bi=!0}let n={...t},r=n.sockets??25,l=n.timeout??0,d=Mi(t.forgeapi,`https://api.github.com`),f=Mi(t.pypiapi,`https://pypi.org`),p=Mi(t.jsrapi,`https://jsr.io`),m=Mi(t.goproxy,Gn),h=Mi(t.cargoapi,`https://crates.io`),g=Mi(t.dockerapi,`https://hub.docker.com`),_=Kn(),v=n.color||!n.noColor&&i.isTTY,y=e=>v?t=>a(e,String(t)):String,b=y(`magenta`),x=y(`green`),C=y(`red`),w={fetchTimeout:l||5e3,goProbeTimeout:l?l/2:lt,forgeApiUrl:d,pypiApiUrl:f,jsrApiUrl:p,goProxyUrl:m,cratesIoUrl:h,dockerApiUrl:g,doFetch:async(e,t)=>{n.verbose&&Li(`${b(t?.method||`GET`)} ${e}`);let r=await mt(e,t);return n.verbose&&Li(`${r.ok?x(r.status):C(r.status)} ${e}`),r},noCache:!!n.noCache},ee=Zt(n.greatest),te=Zt(n.prerelease),T=Zt(n.release),ne=Zt(n.patch),re=Zt(n.minor),ie=Zt(n.allowDowngrade),D=n.modes?.length?new Set(n.modes):ji,ae=(n.overrides??[]).map(e=>({include:e.include?.length?X(e.include):void 0,exclude:e.exclude?.length?X(e.exclude):void 0,greatest:e.greatest,prerelease:e.prerelease,release:e.release,patch:e.patch,minor:e.minor,allowDowngrade:e.allowDowngrade,cooldownDays:e.cooldown===void 0?void 0:qe(String(e.cooldown))})),oe=(e,t)=>e.include&&!U(t,e.include)?!1:!e.exclude||!U(t,e.exclude),se=ae.some(e=>e.cooldownDays);D.has(`actions`)&&At();let ce=new Map;function O(e){let t=ce.get(e);if(!t){let n=U(e,ee),r=U(e,te),i=U(e,T),a=U(e,ne),o=U(e,re),s=U(e,ie),c;for(let t of ae)oe(t,e)&&(t.greatest!==void 0&&(n=t.greatest),t.prerelease!==void 0&&(r=t.prerelease),t.release!==void 0&&(i=t.release),t.patch!==void 0&&(a=t.patch),t.minor!==void 0&&(o=t.minor),t.allowDowngrade!==void 0&&(s=t.allowDowngrade),t.cooldownDays!==void 0&&(c=t.cooldownDays));let l=new Set(a?[`patch`]:o?[`patch`,`minor`]:[`patch`,`minor`,`major`]);t={useGreatest:n,usePre:r,useRel:i,semvers:l,allowDowngrade:s,cooldownOverride:c},ce.set(e,t)}return t}let le=X(n.include??[]),ue=X(n.exclude??[]),de=n.pin??{},k={},A={},j={},M=Date.now(),N=e=>{let t=n.cooldown??e;return t?qe(String(t)):0},fe=e(),P=e=>e.replace(`${fe}/`,``).replace(`${fe}\\`,``),F=0,I=(e,t,n,r,i,a)=>{k[e][`${t}${n}${r}`]={old:i,oldOrig:a}},me=Ri(n.files?.length?new Set(n.files):!1),L=await Pi(Array.from(me).filter(e=>{if(Cr(e))return D.has(`actions`)||D.has(`docker`);let t=o(e);if(Jr(t))return D.has(`docker`);if(Qr(t))return D.has(`make`);let n=Ai[t];return!!n&&D.has(n)}),r),he={},R={},ge={},_e=[],z=null,ve=[],ye=!1,be=[],xe=!1,B=[],Se=[],Ce=[],we={},Te={noCache:n.noCache,timeout:n.timeout||5e3};async function Ee(e){let t=await en(e,Te);return{modeConfig:t,modeInclude:t.include?.length?X([...n.include??[],...t.include]):le,modeExclude:t.exclude?.length?X([...n.exclude??[],...t.exclude]):ue,pin:{...t.pin,...de}}}function V(e,t){return n.types?.length?n.types:t?.types?.length?t.types:e===`npm`?Le:e===`pypi`?ze:e===`go`?n.indirect?Be:Be.filter(e=>e!==`indirect`):e===`cargo`?Ve:[]}function De(e,t,n,r){k.docker??={};for(let i of n)for(let{ref:n}of Pr(e,i)){if(!Q(n.fullImage,`docker`,r.include,r.exclude,`docker`))continue;let e=`${t}${n.fullImage}`;if(k.docker[e])continue;let i=Mr(n.tag);i&&(k.docker[e]={old:i.version,oldOrig:n.tag},Se.push({key:e,fullImage:n.fullImage,ref:n,filePin:r.pin,fileCooldownDays:r.cooldownDays}))}}async function Oe(e){let t=await en(e,Te);return{include:t.include?.length?X([...n.include??[],...t.include]):le,exclude:t.exclude?.length?X([...n.exclude??[],...t.exclude]):ue,pin:t.pin??{},cooldownDays:N(t.cooldown)}}let H=new Set,Ae=new Map;for(let e of me){let t=o(e);if(t===`go.work`)H.add(`go`);else if(t===`pnpm-workspace.yaml`)H.add(`npm`);else if(t===`Cargo.toml`){let t=L.get(e);if(!t)continue;try{let n=E(t);Ae.set(e,n);let r=n.workspace?.members;Array.isArray(r)&&r.length&&H.add(`cargo`)}catch{}}}for(let e of me){if(Cr(e)){let t=D.has(`actions`),n=D.has(`docker`);if(!t&&!n)continue;let r=L.get(e),i=P(e),a=await Oe(s(e));if(he[i]={absPath:e,content:r},t){k.actions??={};let e=Array.from(r.matchAll(hr),e=>gr(e[1])).filter(e=>e!==null);for(let t of e){if(!Q(t.name,`actions`,a.include,a.exclude,`actions`))continue;let e=`${i}${t.name}`;k.actions[e]||(k.actions[e]={old:t.ref},B.push({...t,key:e,apiUrl:_r(t.host,d),filePin:a.pin,fileCooldownDays:a.cooldownDays}))}}n&&(R[i]={absPath:e,content:r,fileType:`workflow`},De(r,i,[Dr,Or,kr],a));continue}let t=o(e);if(Jr(t)){if(!D.has(`docker`))continue;let n=L.get(e),r=P(e),i=qr(t)?`dockerfile`:`compose`,a=await Oe(s(e));R[r]={absPath:e,content:n,fileType:i},De(n,r,[Yr(t)],a);continue}if(Qr(t)){if(!D.has(`make`))continue;let t=L.get(e),n=P(e),r=await Oe(s(e));ge[n]={absPath:e,content:t},k.make??={};let i={projectDir:s(e),filePin:r.pin,fileCooldownDays:r.cooldownDays};for(let{installPath:e,version:a}of ri(t)){if(!Q(e,`make`,r.include,r.exclude,`make`))continue;let t=`${n}${e}`;k.make[t]||(k.make[t]={old:q(a),oldOrig:a},Ce.push({kind:`go`,key:t,name:e,oldSpec:`${e}@${a}`,installPath:e,version:a,...i}))}for(let e of ci(t)){if(!Q(e.writtenImage,`make`,r.include,r.exclude,`make`))continue;let t=`${n}${e.writtenImage}`;if(k.make[t])continue;let a=Mr(e.ref.tag);if(!a)continue;let o=oi(e.writtenImage,e.ref.tag,e.digest);k.make[t]={old:a.version,oldOrig:e.ref.tag},Ce.push({kind:`docker`,key:t,name:e.writtenImage,oldSpec:o,image:e,...i})}continue}let n=Ai[t];if(!D.has(n))continue;if(t===`go.work`){k[n]??={};let t=s(u(e)),i=L.get(e);z={file:e,content:i};let a=dr(i),[o,l]=await Promise.all([Ee(t),W(a.use,async e=>{let n=u(c(t,e,`go.mod`));try{return{usePath:e,modPath:n,content:await S(n,`utf8`)}}catch{return null}},{concurrency:r})]),{modeConfig:d,modeInclude:f,modeExclude:p,pin:m}=o,h=V(n,d);we[n]={modeConfig:d,projectDir:t,pin:m};for(let e of l){if(!e)continue;let{usePath:t,modPath:r,content:i}=e,a=ar(i),o=s(r);_e.push({absPath:r,content:i,projectDir:o,usePath:t});let c=t===`.`?``:`|${t}`;for(let e of h){let t=a[e]||{};for(let[r,i]of Object.entries(t))Q(r,n,f,p,e)&&I(n,e,c,r,mr(i),q(i))}}for(let[e,t]of Object.entries(a.replace))Q(e,n,f,p,`replace`)&&I(n,`replace`,``,e,mr(t),q(t));F+=Object.keys(k[n]).length;continue}if(t===`go.mod`&&_e.some(t=>t.absPath===u(e))||t===`package.json`&&be.some(t=>t.absPath===u(e)))continue;if(t===`Cargo.toml`){k[n]??={};let t=Object.keys(k[n]).length,i=L.get(e),a=Ae.get(e)??E(i),o=s(u(e)),c=Ni([`Cargo.lock`],o).get(`Cargo.lock`),l=a.workspace?.members,d=Array.isArray(l)&&l.length,[f,p,m]=await Promise.all([Ee(o),c?S(c,`utf8`):Promise.resolve(null),d?Oi(l,o,`Cargo.toml`,r):Promise.resolve([])]),{modeConfig:h,modeInclude:g,modeExclude:_,pin:v}=f,y=V(n,h),b=p?yi(p):new Map,x=(e,t)=>{for(let r of y){let i=He(e,r)||{};if(!(typeof i!=`object`||Array.isArray(i))){for(let[e,a]of Object.entries(i))if(Q(e,n,g,_,r))if(typeof a==`object`&&a&&`version`in a&&!(`git`in a)&&!(`path`in a)){let i=a.version;ke(i)&&I(n,r,t,e,Si(b,e,i)??Z(i),i)}else typeof a==`string`&&ke(a)&&I(n,r,t,e,Si(b,e,a)??Z(a),a)}}};if(d){ye=!0,we[n]={modeConfig:h,projectDir:o,pin:v},x(a,``),ve.push({absPath:u(e),content:i,memberPath:`.`});for(let e of m){ve.push(e);try{x(E(e.content),`|${e.memberPath}`)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}}}else{let t=j[n]??=[],r=!t.length&&!H.has(n),s=r?`.`:P(e);t.push({absPath:u(e),content:i,memberPath:s,projectDir:o,modeConfig:h,pin:v,modeCooldownDays:N(h.cooldown)}),r&&(we[n]={modeConfig:h,projectDir:o,pin:v}),x(a,s===`.`?``:`|${s}`)}F+=Object.keys(k[n]).length-t;continue}if(t===`pnpm-workspace.yaml`){k[n]??={};let t=s(u(e)),i=L.get(e);xe=!0;let a=ki(i),o=c(t,`package.json`),[l,d,f]=await Promise.all([Ee(t),Je(S(o,`utf8`)),Oi(a,t,`package.json`,r)]),{modeConfig:p,modeInclude:m,modeExclude:h,pin:g}=l,_=V(n,p);we[n]={modeConfig:p,projectDir:t,pin:g};let v=(e,t)=>{for(let r of _){let i=e[r]||{};if(typeof i==`string`){let[e,a]=i.split(`@`);Q(e,n,m,h,r)&&I(n,r,t,e,Z(a),a)}else if(typeof i==`object`&&!Array.isArray(i))for(let[e,a]of Object.entries(i))Q(e,n,m,h,r)&&(An(a)?I(n,r,t,e,Mn(a,e).version,a):ke(a)?I(n,r,t,e,Z(a),a):jn(a)?I(n,r,t,e,`0.0.0`,a):A[`${r}${t}${e}`]={old:a})}};if(d!==null){let e;try{e=JSON.parse(d)}catch(e){throw Error(`Error parsing ${o}: ${e.message}`)}be.push({absPath:u(o),content:d,memberPath:`.`}),v(e,``)}for(let e of f){let t;try{t=JSON.parse(e.content)}catch(t){throw Error(`Error parsing ${e.absPath}: ${t.message}`)}be.push(e),v(t,`|${e.memberPath}`)}F+=Object.keys(k[n]).length+Object.keys(A).length;continue}k[n]??={};let i=s(u(e)),{modeConfig:a,modeInclude:l,modeExclude:f,pin:p}=await Ee(i),m=V(n,a),h=j[n]??=[],g=!h.length&&!H.has(n),_=g?`.`:P(e),v=_===`.`?``:`|${_}`,y=L.get(e);h.push({absPath:u(e),content:y,memberPath:_,projectDir:i,modeConfig:a,pin:p,modeCooldownDays:N(a.cooldown)});let b={};try{n===`npm`?b=JSON.parse(y):n===`pypi`?b=E(y):n===`go`&&(b=ar(y))}catch(t){throw Error(`Error parsing ${e}: ${t.message}`)}let x=Object.keys(k[n]).length,C=Object.keys(A).length;for(let e of m){let t;if(t=n===`npm`||n===`go`?b[e]||{}:He(b,e)||{},Array.isArray(t)&&n===`pypi`)for(let{name:r,version:i}of Ie(t))Q(r,n,l,f,e)&&I(n,e,v,r,Z(i),i);else if(typeof t==`string`){let[r,i]=t.split(`@`);Q(r,n,l,f,e)&&I(n,e,v,r,Z(i),i)}else for(let[r,i]of Object.entries(t))Q(r,n,l,f,e)&&(n===`npm`&&An(i)?I(n,e,v,r,Mn(i,r).version,i):n!==`go`&&ke(i)?I(n,e,v,r,Z(i),i):n===`npm`&&jn(i)?I(n,e,v,r,`0.0.0`,i):n===`npm`?A[`${e}${v}${r}`]={old:i}:n===`go`&&I(n,e,v,r,mr(i),q(i)))}F+=Object.keys(k[n]).length-x+(Object.keys(A).length-C),g&&(we[n]={modeConfig:a,projectDir:i,pin:p})}if(k.actions&&(F+=Object.keys(k.actions).length),k.docker&&(F+=Object.keys(k.docker).length),k.make&&(F+=Object.keys(k.make).length),F===0)return{results:{},message:`No dependencies found, nothing to do.`};let je=[],Me={registry:n.registry};for(let[e,t]of Object.entries(we)){let n=k[e]&&Object.keys(k[e]).length>0,i=e===`npm`&&Object.keys(A).length>0;if(!n&&!i)continue;let{modeConfig:a,projectDir:o,pin:s}=t,c=N(a.cooldown);je.push((async()=>{let t=new Map;for(let n of j[e]??[])n.memberPath!==`.`&&t.set(`|${n.memberPath}`,n);let n={modeConfig:a,projectDir:o,pin:s,modeCooldownDays:c},i=e=>{let r=e.slice(Ti(e).length);return r&&t.get(r)||n},l=new Map,u=e=>{for(let[t,{date:n}]of Object.entries(e)){if(!n)continue;let{modeCooldownDays:r}=i(t.split(`\0`)[0]);if(!r&&!se)continue;let[,a]=t.split(`\0`),o=O(a).cooldownOverride??r;o&&!K(n,o,M)&&delete e[t]}};if(await W(Object.keys(k[e]),async t=>{let[n,r]=t.split(`\0`),a=Ti(n),{modeConfig:o,projectDir:s,pin:c,modeCooldownDays:u}=i(n),d=k[e][t],f=null;if(e===`npm`){let{oldOrig:n}=d;if(n&&An(n))f=await Nn(r,a,w);else if(n&&jn(n))try{f=await On(r,a,o,Me,w)}catch{delete k[e][t];return}else f=await On(r,a,o,Me,w)}else f=e===`go`?await sr(r,a,d.oldOrig||d.old,s,w,_):e===`cargo`?await vi(r,a,w):await Bn(r,a,w);if(!f)return;let[p,,m]=f;if(p.error)throw Error(p.error);let{useGreatest:h,usePre:g,useRel:v,semvers:y,allowDowngrade:b,cooldownOverride:x}=O(p.name),S=d.old,C=d.oldOrig,ee=c[r],te=x??u,T=Tt(p,{usePre:g,useRel:v,useGreatest:h,semvers:y,range:S,mode:e,pinnedRange:ee,cooldownDays:te||void 0,now:te?M:void 0},{allowDowngrade:b,matchesAny:U,isGoPseudoVersion:tr}),E=``;if([`go`,`pypi`].includes(e)&&T)E=T;else if(e===`cargo`&&T&&C)E=xi(C,T);else if(T)if(C&&jn(C))E=String(gn()[`save-exact`])===`true`?T:`^${T}`;else if(C&&An(C)){let e=/^(npm:@jsr\/[^@]+@|jsr:@[^@]+@)(.+)$/.exec(C);e?E=`${e[1]}${T}`:C.startsWith(`jsr:`)&&(E=`jsr:${T}`)}else E=Fn(S,T,C);if(!T||T===S||C&&C===E){delete k[e][t];return}let ne=``;e===`pypi`&&p.releases?.[T]?.[0]?.upload_time_iso_8601?ne=p.releases[T][0].upload_time_iso_8601:e===`go`&&p.Time?ne=p.Time:e===`cargo`&&p.time?.[T]&&(ne=p.time[T]),d.new=E,C&&An(C)&&(d.newPrint=T),e===`npm`?l.set(t,{name:r,promise:kn(p.name,T,o,Me,w)}):e===`pypi`?d.info=Ut(p,m,p.info.name):e===`go`?d.info=fr(p.newPath||r):e===`cargo`&&(d.info=`https://crates.io/crates/${r}`),ne&&Fi(d,ne)},{concurrency:r}),await Promise.all(Array.from(l,async([t,{name:n,promise:r}])=>{let i=await r,a=k[e][t];a&&(a.info=Ut({repository:i.repository,homepage:i.homepage},null,n),i.date&&Fi(a,i.date))})),e===`npm`&&Object.keys(A).length){let t=(await W(Object.entries(A),([e,t])=>Rn(e,t,w),{concurrency:r})).filter(e=>e!==null);for(let n of t){let{key:t,newRange:r,user:i,repo:a,oldRef:o,newRef:s,newDate:c}=n;k[e][t]={old:A[t].old,new:r,oldPrint:It.test(o)?o.substring(0,7):o,newPrint:It.test(s)?s.substring(0,7):s,info:`https://github.com/${i}/${a}`},c&&Fi(k[e][t],c)}}u(k[e])})())}B.length&&je.push((async()=>{let e=new Map;for(let t of B){let n=`${t.apiUrl}/${t.owner}/${t.repo}`,r=e.get(n);r||e.set(n,r={apiUrl:t.apiUrl,owner:t.owner,repo:t.repo,infos:[]}),r.infos.push(t)}await W(e.values(),async({apiUrl:e,owner:t,repo:n,infos:i})=>{let a=await zt(e,t,n,w),o=[],s=new Map,c=new Map,l=new Map;for(let e of a){c.set(e.name,e);let t=q(e.name);pe(t)&&(o.push(t),s.has(t)||s.set(t,e.name)),e.commitSha&&l.set(e.commitSha,e.name)}let u=new Map;async function d(r){if(u.has(r))return u.get(r);let i=await vr(e,t,n,r,w);return u.set(r,i),i}async function f(e){let t=new Set;for(let n=0;n<20;n++){let n=wt({},t.size?o.filter(e=>!t.has(e)):o,e);if(!n||n===e.range)return null;let r=s.get(n);if(!r){t.add(n);continue}let i=c.get(r)?.commitSha||``;if(!e.cooldownDays)return{version:n,tag:r,commitSha:i,date:``};let a=i?await d(i):``;if(K(a,e.cooldownDays,e.now))return{version:n,tag:r,commitSha:i,date:a};t.add(n)}return null}await W(i,async({key:e,host:r,ref:i,name:a,isHash:o,filePin:s,fileCooldownDays:u})=>{let p=k.actions[e],m=`https://${r||`github.com`}/${t}/${n}`,h=de[a]??s[a];if(o){let{usePre:t,useRel:n,cooldownOverride:r}=O(a),o=r??u,s=await f({range:`0.0.0`,semvers:new Set([`patch`,`minor`,`major`]),usePre:t,useRel:n,useGreatest:!0,pinnedRange:h,cooldownDays:o||void 0,now:o?M:void 0});if(!s){delete k.actions[e];return}let{tag:c,commitSha:d,date:g}=s;if(!d||d===i||d.startsWith(i)||i.startsWith(d)){delete k.actions[e];return}let _=l.get(i);if(!_){for(let[e,t]of l)if(e.startsWith(i)){_=t;break}}p.old=i,p.new=d.substring(0,i.length),p.oldPrint=_||i.substring(0,7),p.newPrint=c,p.info=m,g&&Fi(p,g)}else{let t=Y(q(i));if(!t){delete k.actions[e];return}let{usePre:n,useRel:r,semvers:o,cooldownOverride:s}=O(a),l=s??u,g=await f({range:t,semvers:o,usePre:n,useRel:r,useGreatest:!0,pinnedRange:h,cooldownDays:l||void 0,now:l?M:void 0});if(!g){delete k.actions[e];return}let{tag:_,commitSha:v,date:y}=g,b=yr(_,i);if(b===i){delete k.actions[e];return}if(p.new=c.has(b)?b:_,p.info=m,v&&y)Fi(p,y);else if(v){let e=await d(v);e&&Fi(p,e)}}},{concurrency:r})},{concurrency:r}),Object.keys(k.actions).length||delete k.actions})()),Se.length&&je.push((async()=>{let e=new Map;for(let t of Se){let n=e.get(t.fullImage);n||e.set(t.fullImage,n=[]),n.push(t)}await W(e.entries(),async([e,t])=>{let n;try{let[t]=await zr(e,`docker`,w);n=t}catch{for(let e of t)delete k.docker[e.key];return}for(let e of t){let t=k.docker[e.key],r=t.oldOrig||t.old,{semvers:i,cooldownOverride:a}=O(e.fullImage),o=de[e.fullImage]??e.filePin[e.fullImage],s=a??e.fileCooldownDays,c=Br(n.tags,r,i,s||void 0,s?M:void 0,o);if(!c){delete k.docker[e.key];continue}t.new=c.newTag,t.info=Xr(e.ref),Fi(t,c.date)}},{concurrency:r}),Object.keys(k.docker).length||delete k.docker})()),Ce.length&&je.push((async()=>{await W(Ce,async e=>{let{useGreatest:t,usePre:n,useRel:r,semvers:i,allowDowngrade:a,cooldownOverride:o}=O(e.name),s=de[e.name]??e.filePin[e.name],c=o??e.fileCooldownDays,l={semvers:i,useGreatest:t,usePre:n,useRel:r,allowDowngrade:a,pinnedRange:s,cooldownDays:c||void 0,now:c?M:void 0},u=k.make[e.key],d;if(e.kind===`go`){let t=await Je(pi(e.installPath,e.version,e.projectDir,w,_,l));if(!t){delete k.make[e.key];return}e.newSpec=`${t.newInstallPath}@${t.newVersion}`,u.new=t.newVersion,d=t}else{let t=await Je(mi(e.image,w,l));if(!t){delete k.make[e.key];return}e.newSpec=oi(e.image.writtenImage,t.newTag,e.image.digest?t.newDigest:null),u.new=t.newTag,d=t}u.info=d.info,d.date&&Fi(u,d.date)},{concurrency:r}),Object.keys(k.make).length||delete k.make})());try{await Promise.all(je)}finally{await at()}if(!Ii(k))return{results:{},message:`All dependencies are up to date.`};if(n.update){let e=(e,t,n)=>{for(let r of t){let t=Ei(k[e],r.memberPath);Object.keys(t).length&&$(r.absPath,n(r.content,t))}},t=new Map;if(k.actions)for(let[e,n]of Object.entries(k.actions)){let[r,i]=e.split(`\0`),a=t.get(r);a||t.set(r,a=[]),a.push({name:i,oldRef:n.old,newRef:n.new})}let n=new Map;if(k.docker)for(let[e,t]of Object.entries(k.docker)){let[r]=e.split(`\0`),i=n.get(r);i||n.set(r,i={}),i[e]=t}let r=new Map;if(k.make)for(let e of Ce){if(!e.newSpec||!k.make[e.key])continue;let t=e.key.split(`\0`)[0],n=r.get(t);n||r.set(t,n=[]),n.push({oldSpec:e.oldSpec,newSpec:e.newSpec})}let i=Object.keys(k).sort((e,t)=>(e===`docker`)-+(t===`docker`));for(let a of i)if(Object.keys(k[a]).length){if(a===`actions`){for(let[e,n]of t){let{absPath:t,content:r}=he[e]||{};if(!t)continue;let i=br(r,n);$(t,i),R[e]&&(R[e].content=i)}continue}if(a===`docker`){for(let[e,t]of n){let n=R[e];if(!n)continue;let{absPath:r,content:i,fileType:a}=n;$(r,(a===`dockerfile`?Hr:a===`compose`?Ur:Wr)(i,t))}continue}if(a===`make`){for(let[e,t]of r){let n=ge[e];n&&$(n.absPath,hi(n.content,t))}continue}if(a===`go`){if(z){for(let e of _e){let t=Ei(k[a],e.usePath);if(!Object.keys(t).length)continue;let[n,r]=lr(e.content,t);n!==e.content&&$(e.absPath,n),ur(e.projectDir,r,$)}let e={};for(let[t,n]of Object.entries(k[a]))t.split(`\0`)[0]===`replace`&&(e[t]=n);if(Object.keys(e).length){let[t]=lr(z.content,e);t!==z.content&&$(z.file,t)}}for(let e of j.go??[]){let t=Ei(k[a],e.memberPath);if(!Object.keys(t).length)continue;let[n,r]=lr(e.content,t);$(e.absPath,n),ur(e.projectDir,r,$)}}else a===`cargo`?(ye&&e(a,ve,wi),e(a,j.cargo??[],wi)):a===`npm`?(xe&&e(a,be,Pn),e(a,j.npm??[],Pn)):e(a,j[a]??[],Vn)}}return zi(k)}function Hi(e){try{return tn(h(c(e,`.npmrc`),`utf8`)).registry}catch{return}}function Ui(e,t){if(typeof e!=`string`||!e)return t;try{return`${new URL(e).origin}/`}catch{return null}}function Wi(e,t){let n=(...t)=>t.some(t=>f(c(e,t))),r=new Set,i=e=>{e&&r.add(e)},a=Ui(t.forgeapi,`https://api.github.com/`),o=Ui(t.dockerapi,`https://hub.docker.com/`);return n(`package.json`,`pnpm-workspace.yaml`)&&(i(Ui(typeof t.registry==`string`?t.registry:Hi(e),`https://registry.npmjs.org/`)),i(Ui(t.jsrapi,`https://jsr.io/`)),i(a)),n(`pyproject.toml`)&&i(Ui(t.pypiapi,`https://pypi.org/`)),n(`Cargo.toml`)&&i(Ui(t.cargoapi,`https://crates.io/`)),n(`go.mod`,`go.work`)&&i(Ui(t.goproxy,`https://proxy.golang.org/`)),n(...Gr)&&i(o),n(`.github/workflows`)&&(i(a),i(o)),Array.from(r)}const Gi=/[A-Za-z_$]/,Ki=/[A-Za-z0-9_$]/;function qi(e){let t=``,n=0,r=e.length,i=-1;function a(t){for(;t<r;){if(/\s/.test(e[t])){t++;continue}if(e[t]===`/`&&e[t+1]===`/`){for(t+=2;t<r&&e[t]!==`
7
+ `;)t++;continue}if(e[t]===`/`&&e[t+1]===`*`){for(t+=2;t<r&&(e[t]!==`*`||e[t+1]!==`/`);)t++;t+=2;continue}break}return t}for(;n<r;){let o=e[n];if(o===`"`){for(i=-1,t+=o,n++;n<r;){let i=e[n];if(t+=i,n++,i===`\\`&&n<r){t+=e[n],n++;continue}if(i===`"`)break}continue}if(o===`'`){for(i=-1,t+=`"`,n++;n<r;){let i=e[n];if(i===`\\`){let a=e[n+1];if(a===`'`){t+=`'`,n+=2;continue}if(a===`
8
+ `){n+=2;continue}t+=i,n+1<r?(t+=a,n+=2):n++;continue}if(i===`"`){t+=`\\"`,n++;continue}if(i===`'`){t+=`"`,n++;break}t+=i,n++}continue}if(o===`/`&&n+1<r&&e[n+1]===`/`){for(n+=2;n<r&&e[n]!==`
9
+ `;)n++;continue}if(o===`/`&&n+1<r&&e[n+1]===`*`){for(n+=2;n<r&&(e[n]!==`*`||e[n+1]!==`/`);)n++;n+=2;continue}if(o===`,`){i=t.length,t+=o,n++;continue}if(o===`}`||o===`]`){i>=0&&(t=t.slice(0,i)+t.slice(i+1)),i=-1,t+=o,n++;continue}if(Gi.test(o)){i=-1;let o=``;for(;n<r&&Ki.test(e[n]);)o+=e[n],n++;t+=e[a(n)]===`:`?JSON.stringify(o):o;continue}/\s/.test(o)||(i=-1),t+=o,n++}return JSON.parse(t)}export{bt as A,tt as B,Mt as C,lt as D,Ht as E,K as F,Ye as G,Fe as H,Ft as I,ke as K,Pt as L,ut as M,st as N,It as O,Lt as P,q as R,dt as S,Ut as T,Xe as U,it as V,Ge as W,_t as _,Jt as a,wt as b,Yt as c,Y as d,mt as f,ct as g,vt as h,pr as i,yt as j,Ct as k,qt as l,Nt as m,Wi as n,en as o,zt as p,Vi as r,Wt as s,qi as t,Xt as u,J as v,At as w,Vt as x,Tt as y,Bt as z};
@@ -0,0 +1 @@
1
+ import{C as e,S as t}from"./shared.js";export{t as getFetchOpts,e as getForgeTokens};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "updates",
3
- "version": "17.18.2",
3
+ "version": "17.19.0",
4
4
  "description": "CLI dependency update tool for npm, uv, cargo, go, actions, docker and make",
5
5
  "author": "silverwind",
6
6
  "repository": {
@@ -42,21 +42,21 @@
42
42
  "bun": "*"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/node": "26.1.0",
46
- "@typescript/native-preview": "7.0.0-dev.20260702.3",
47
- "@vitest/coverage-v8": "4.1.9",
48
- "eslint": "10.6.0",
49
- "eslint-config-silverwind": "140.0.0",
45
+ "@types/node": "26.1.1",
46
+ "@typescript/native-preview": "7.0.0-dev.20260707.2",
47
+ "@vitest/coverage-v8": "4.1.10",
48
+ "eslint": "10.7.0",
49
+ "eslint-config-silverwind": "140.2.1",
50
50
  "jest-extended": "7.0.0",
51
51
  "timerel": "5.8.7",
52
- "tsdown": "0.22.3",
53
- "tsdown-config-silverwind": "3.0.4",
52
+ "tsdown": "0.22.7",
53
+ "tsdown-config-silverwind": "4.0.0",
54
54
  "typescript": "6.0.3",
55
- "typescript-config-silverwind": "20.0.0",
56
- "updates-config-silverwind": "4.0.0",
55
+ "typescript-config-silverwind": "20.0.1",
56
+ "updates-config-silverwind": "4.0.1",
57
57
  "versions": "15.1.3",
58
- "vitest": "4.1.9",
59
- "vitest-config-silverwind": "11.3.6"
58
+ "vitest": "4.1.10",
59
+ "vitest-config-silverwind": "11.3.7"
60
60
  },
61
61
  "bin": {
62
62
  "updates": "dist/index.js"