onfiguration:e});return s?.get("npmAuthIdent")||s?.get("npmAuthToken")?s:JBe(t,{configuration:e})||e}function $dt({configuration:t,version:e,publishTimes:r}){let s=t.get("npmMinimalAgeGate");if(s){let a=r?.[e];if(typeof a>"u"||(new Date().getTime()-new Date(a).getTime())/60/1e3emt(e,r,s))}function xw(t){return!$dt(t)||tmt(t)}var zBe=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(zBe||{});async function ag(t,{attemptedAs:e,registry:r,headers:s,configuration:a})
{if(uN(t))throw new jt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new jt(41,`Invalid authentication (${typeof e!="string"?`as ${await hmt(r,s,{configuration:a})}`:`attempted as ${e}`})`)}function qm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${he.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function WD(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var XBe=new Map,rmt=new Map;async function nmt(t){return await je.getFactoryWithDefault(XBe,t,async()=>{let e=null;try{e=await ce.readJsonPromise(t)}catch{}return e})}async function imt(t,e,{configuration:r,cached:s,registry:a,headers:n,version:c,...f}){return await je.getFactoryWithDefault(rmt,t,async()=>await Wm(WD(e),{...f,customErrorMessage:qm,configuration:r,registry:a
,ident:e,headers:{...n,"If-None-Match":s?.etag,"If-Modified-Since":s?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(s===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:s.metadata}}let E=omt(JSON.parse(h.body.toString())),C={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return XBe.set(t,Promise.resolve(C)),Promise.resolve().then(async()=>{let S=`${t}-${process.pid}.tmp`;await ce.mkdirPromise(J.dirname(S),{recursive:!0}),await ce.writeJsonPromise(S,C,{compact:!0}),await ce.renamePromise(S,t)}).catch(()=>{}),{...h,body:E}}}))}function smt(t){return t.scope!==null?`@${t.scope}-${t.name}-${t.scope.length}`:t.name}async function Qw(t,{cache:e,project:r,registry:s,headers:a,version:n,...c}){let{configuration:f}=r;s=YD(f,{ident:t,registry:s});let p=lmt(f,s),h=J.join(p,`${smt(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await nmt(h),E)){if(typeof n<"u"&&typeof E.
metadata.versions[n]<"u")return E.metadata;if(f.get("enableOfflineMode")){let C=structuredClone(E.metadata),S=new Set;if(e){for(let I of Object.keys(C.versions)){let R=G.makeLocator(t,`npm:${I}`),N=e.getLocatorMirrorPath(R);(!N||!ce.existsSync(N))&&(delete C.versions[I],S.add(I))}let P=C["dist-tags"].latest;if(S.has(P)){let I=Object.keys(E.metadata.versions).sort(KBe.default.compare),R=I.indexOf(P);for(;S.has(I[R])&&R>=0;)R-=1;R>=0?C["dist-tags"].latest=I[R]:delete C["dist-tags"].latest}}return C}}return await imt(h,t,{...c,configuration:f,cached:E,registry:s,headers:a,version:n})}var ZBe=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function omt(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,Kd(r,ZBe)])),time:t.time}}var amt=Nn.makeHash("time",...ZBe).slice(0,6);function lmt(t,e){let r=cmt(t)
,s=new URL(e);return J.join(r,amt,s.hostname)}function cmt(t){return J.join(t.get("globalFolder"),"metadata/npm")}async function Wm(t,{configuration:e,headers:r,ident:s,authType:a,allowOidc:n,registry:c,...f}){c=YD(e,{ident:s,registry:c}),s&&s.scope&&typeof a>"u"&&(a=1);let p=await cN(c,{authType:a,allowOidc:n,configuration:e,ident:s});p&&(r={...r,authorization:p});try{return await nn.get(t.charAt(0)==="/"?`${c}${t}`:t,{configuration:e,headers:r,...f})}catch(h){throw await ag(h,{registry:c,configuration:e,headers:r}),h}}async function umt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await cN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await nn.post(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!uN(S)||h)throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=await MY(S,{configuration:s});l
et P={...a,...kw(h)};try{return await nn.post(`${p}${t}`,e,{configuration:s,headers:P,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function fmt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await cN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await nn.put(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!uN(S))throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=await MY(S,{configuration:s});let P={...a,...kw(h)};try{return await nn.put(`${p}${t}`,e,{configuration:s,headers:P,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function Amt(t,{attemptedAs:e,configuration:r,headers:s,ident:a,authType:n=3,allowOidc:c,registry:f,otp:p,...h}){f=YD(r,{ident:a,registry:f});let E=await cN(f,{authType:n,
allowOidc:c,configuration:r,ident:a});E&&(s={...s,authorization:E}),p&&(s={...s,...kw(p)});try{return await nn.del(f+t,{configuration:r,headers:s,...h})}catch(C){if(!uN(C)||p)throw await ag(C,{attemptedAs:e,registry:f,configuration:r,headers:s}),C;p=await MY(C,{configuration:r});let S={...s,...kw(p)};try{return await nn.del(`${f}${t}`,{configuration:r,headers:S,...h})}catch(P){throw await ag(P,{attemptedAs:e,registry:f,configuration:r,headers:s}),P}}}function YD(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return Pw(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return Jc(r)}async function cN(t,{authType:e=2,allowOidc:r=!1,configuration:s,ident:a}){let n=OY(t,{configuration:s,ident:a}),c=pmt(n,e);if(!c)return null;let f=await s.reduceHook(p=>p.getNpmAuthenticationHeader,void 0,t,{configuration:s,ident:a});if(f)return f;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")}`;if(n.get("npmAuthIdent")
){let p=n.get("npmAuthIdent");return p.includes(":")?`Basic ${Buffer.from(p).toString("base64")}`:`Basic ${p}`}if(r&&a){let p=await gmt(t,{configuration:s,ident:a});if(p)return`Bearer ${p}`}if(c&&e!==1)throw new jt(33,"No authentication configured for request");return null}function pmt(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function hmt(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function MY(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Ot.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,he.pretty(e,"$1",he.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r
.match(/open (https?:\/\/\S+)/i);if(n&&Ui.openUrl){let{openNow:c}=await(0,LY.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});c&&(await Ui.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(`
+`}}}}let p=t.cwd,h=J.join(p,Ti,jBe);a&&await ce.removePromise(h),await ce.changeFilePromise(h,n,{automaticNewlines:!0})}async function PY(t,{unrollAliases:e=!1}={}){let r=t.cwd,s=J.join(r,Ti,jBe),a;try{a=await ce.statPromise(s)}catch{}if(!a)return null;let n=ls(await ce.readFilePromise(s,"utf8"));if(n.__metadata.version>HBe)return null;let c=n.__metadata.nmMode||"classic",f=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let C=E.locations.map(P=>J.join(r,P)),S=E.bin;if(S)for(let[P,I]of Object.entries(S)){let R=J.join(r,fe.toPortablePath(P)),N=je.getMapWithDefault(p,R);for(let[U,W]of Object.entries(I))N.set(U,fe.toPortablePath([R,Ti,W].join(J.sep)))}if(f.set(h,{target:vt.dot,linkType:"HARD",locations:C,aliases:E.aliases||[]}),e&&E.aliases)for(let P of E.aliases){let{scope:I,name:R}=G.parseLocator(h),N=G.makeLocator(G.makeIdent(I,R),P),U=G.stringifyLocator(N);f.set(U,{target:vt.dot,linkType:"HARD",locations:C,aliases:[]})}}return{locatorMap:f,binSymlin
ks:p,locationTree:GBe(f,{skipPrefix:t.cwd}),nmMode:c,mtimeMs:a.mtimeMs}}var bw=async(t,e)=>{if(t.split(J.sep).indexOf(Ti)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{let r;if(!e.innerLoop&&(r=await ce.lstatPromise(t),!r.isDirectory()&&!r.isSymbolicLink()||r.isSymbolicLink()&&!e.isWorkspaceDir)){await ce.unlinkPromise(t);return}let s=await ce.readdirPromise(t,{withFileTypes:!0});for(let n of s){let c=J.join(t,n.name);n.isDirectory()?(n.name!==Ti||e&&e.innerLoop)&&await bw(c,{innerLoop:!0,contentsOnly:!1}):await ce.unlinkPromise(c)}let a=!e.innerLoop&&e.isWorkspaceDir&&r?.isSymbolicLink();!e.contentsOnly&&!a&&await ce.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},LBe=4,lN=(t,{skipPrefix:e})=>{let r=J.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let s=r.split(J.sep).filter(p=>p!==""),a=s.indexOf(Ti),n
=s.slice(0,a).join(J.sep),c=J.join(e,n),f=s.slice(a);return{locationRoot:c,segments:f}},GBe=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let s=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&J.contains(e,n.target)!==null){let f=je.getFactoryWithDefault(r,n.target,s);f.locator=a,f.linkType=n.linkType}for(let c of n.locations){let{locationRoot:f,segments:p}=lN(c,{skipPrefix:e}),h=je.getFactoryWithDefault(r,f,s);for(let E=0;E
{if(process.platform==="win32"&&r==="junctions"){let s;try{s=await ce.lstatPromise(t)}catch{}if(!s||s.isDirectory()){await ce.symlinkPromise(t,e,"junction");return}}await ce.symlinkPromise(J.relative(J.dirname(e),t),e)};async function qBe(t,e,r){let s=J.join(t,`${xY.default.randomBytes(16).toString("hex")}.tmp`);try
{await ce.writeFilePromise(s,r);try{await ce.linkPromise(s,e)}catch{}}finally{await ce.unlinkPromise(s)}}async function Hdt({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:s,baseFs:a,nmMode:n}){if(r.kind==="file"){if(n.value==="hardlinks-global"&&s&&r.digest){let f=J.join(s,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await ce.statPromise(f);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs{await ce.mkdirPromise(t,{recursive:!0});let f=async(E=vt.dot)=>{let C=J.join(e,E),S=await r.readdirPromise(C,{withFileTypes:!0}),P=new Map;for(let I of S){let R=J.join(E,I.name),N,U=J.join(C,I.name);if(I.isFile()){if(N={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let W=await Nn.checksumFile(U,{baseFs:r,algorithm:"sha1"});N.digest=W}}else if(I.isDirectory())N={kind:"directory"};else if(I.isSymbolicLink())N={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(P.set(R,N),I.isDirectory()&&R!==Ti){let W=await f(R);for(let[ee,ie]of W)P.set(ee,ie)}}return P},p;if(a
.value==="hardlinks-global"&&s&&c){let E=J.join(s,c.substring(0,2),`${c.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await ce.readFilePromise(E,"utf8"))))}catch{p=await f()}}else p=await f();let h=!1;for(let[E,C]of p){let S=J.join(e,E),P=J.join(t,E);if(C.kind==="directory")await ce.mkdirPromise(P,{recursive:!0});else if(C.kind==="file"){let I=C.mtimeMs;await Hdt({srcPath:S,dstPath:P,entry:C,nmMode:a,baseFs:r,globalHardlinksStore:s}),C.mtimeMs!==I&&(h=!0)}else C.kind==="symlink"&&await QY(J.resolve(J.dirname(P),C.symlinkTo),P,n)}if(a.value==="hardlinks-global"&&s&&h&&c){let E=J.join(s,c.substring(0,2),`${c.substring(2)}.json`);await ce.removePromise(E),await qBe(s,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function Gdt(t,e,r,s){let a=new Map,n=new Map,c=new Map,f=!1,p=(h,E,C,S,P)=>{let I=!0,R=J.join(h,E),N=new Set;if(E===Ti||E.startsWith("@")){let W;try{W=ce.statSync(R)}catch{}I=!!W,W?W.mtimeMs>r?(f=!0,N=new Set(ce.readdirSync(R))):N=new Set(C.chi
ldren.get(E).children.keys()):f=!0;let ee=e.get(h);if(ee){let ie=J.join(h,Ti,aN),ue;try{ue=ce.statSync(ie)}catch{}if(!ue)f=!0;else if(ue.mtimeMs>r){f=!0;let le=new Set(ce.readdirSync(ie)),me=new Map;n.set(h,me);for(let[pe,Be]of ee)le.has(pe)&&me.set(pe,Be)}else n.set(h,ee)}}else I=P.has(E);let U=C.children.get(E);if(I){let{linkType:W,locator:ee}=U,ie={children:new Map,linkType:W,locator:ee};if(S.children.set(E,ie),ee){let ue=je.getSetWithDefault(c,ee);ue.add(R),c.set(ee,ue)}for(let ue of U.children.keys())p(R,ue,U,ie,N)}else U.locator&&s.storedBuildState.delete(G.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:C,locator:S}=E,P={children:new Map,linkType:C,locator:S};if(a.set(h,P),S){let I=je.getSetWithDefault(c,E.locator);I.add(h),c.set(E.locator,I)}E.children.has(Ti)&&p(h,Ti,E,P,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:c,installChangedByUser:f}}function WBe(t){let e=G.parseDescriptor(t);return G.isVirtualDescriptor(e)&&(e=G.devirtua
lizeDescriptor(e)),e.range.startsWith("link:")}async function qdt(t,e,r,{loadManifest:s}){let a=new Map;for(let[f,{locations:p}]of t){let h=WBe(f)?null:await s(f,p[0]),E=new Map;if(h)for(let[C,S]of h.bin){let P=J.join(p[0],S);S!==""&&ce.existsSync(P)&&E.set(C,S)}a.set(f,E)}let n=new Map,c=(f,p,h)=>{let E=new Map,C=J.contains(r,f);if(h.locator&&C!==null){let S=a.get(h.locator);for(let[P,I]of S){let R=J.join(f,fe.toPortablePath(I));E.set(P,R)}for(let[P,I]of h.children){let R=J.join(f,P),N=c(R,R,I);N.size>0&&n.set(f,new Map([...n.get(f)||new Map,...N]))}}else for(let[S,P]of h.children){let I=c(J.join(f,S),p,P);for(let[R,N]of I)E.set(R,N)}return E};for(let[f,p]of e){let h=c(f,f,p);h.size>0&&n.set(f,new Map([...n.get(f)||new Map,...h]))}return n}var MBe=(t,e)=>{if(!t||!e)return t===e;let r=G.parseLocator(t);G.isVirtualLocator(r)&&(r=G.devirtualizeLocator(r));let s=G.parseLocator(e);return G.isVirtualLocator(s)&&(s=G.devirtualizeLocator(s)),G.areLocatorsEqual(r,s)};function TY(t){
return J.join(t.get("globalFolder"),"store")}function Wdt(t,e){let r=s=>{let a=s.split(J.sep),n=a.lastIndexOf(Ti);if(n<0||n==a.length-1)throw new Error(`Assertion failed. Path is outside of any node_modules package ${s}`);return a.slice(0,n+(a[n+1].startsWith("@")?3:2)).join(J.sep)};for(let s of t.values())for(let[a,n]of s)e.has(r(n))&&s.delete(a)}async function Ydt(t,e,{baseFs:r,project:s,report:a,loadManifest:n,realLocatorChecksums:c}){let f=J.join(s.cwd,Ti),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:C}=Gdt(t.locationTree,t.binSymlinks,t.mtimeMs,s),S=GBe(e,{skipPrefix:s.cwd}),P=[],I=async({srcDir:Be,dstDir:Ce,linkType:g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:Ae,packageChecksum:se})=>{let Z=(async()=>{try{g==="SOFT"?(await ce.mkdirPromise(J.dirname(Ce),{recursive:!0}),await QY(J.resolve(Be),Ce,Ae)):await jdt(Ce,Be,{baseFs:r,globalHardlinksStore:we,nmMode:ye,windowsLinkType:Ae,packageChecksum:se})}catch(De){throw De.message=`While persis
ting ${Be} -> ${Ce} ${De.message}`,De}finally{ie.tick()}})().then(()=>P.splice(P.indexOf(Z),1));P.push(Z),P.length>LBe&&await Promise.race(P)},R=async(Be,Ce,g)=>{let we=(async()=>{let ye=async(Ae,se,Z)=>{try{Z.innerLoop||await ce.mkdirPromise(se,{recursive:!0});let De=await ce.readdirPromise(Ae,{withFileTypes:!0});for(let Re of De){if(!Z.innerLoop&&Re.name===aN)continue;let mt=J.join(Ae,Re.name),j=J.join(se,Re.name);Re.isDirectory()?(Re.name!==Ti||Z&&Z.innerLoop)&&(await ce.mkdirPromise(j,{recursive:!0}),await ye(mt,j,{...Z,innerLoop:!0})):me.value==="hardlinks-local"||me.value==="hardlinks-global"?await ce.linkPromise(mt,j):await ce.copyFilePromise(mt,j,_Be.default.constants.COPYFILE_FICLONE)}}catch(De){throw Z.innerLoop||(De.message=`While cloning ${Ae} -> ${se} ${De.message}`),De}finally{Z.innerLoop||ie.tick()}};await ye(Be,Ce,g)})().then(()=>P.splice(P.indexOf(we),1));P.push(we),P.length>LBe&&await Promise.race(P)},N=async(Be,Ce,g)=>{if(g)for(let[we,ye]of Ce.children){le
t Ae=g.children.get(we);await N(J.join(Be,we),ye,Ae)}else{Ce.children.has(Ti)&&await bw(J.join(Be,Ti),{contentsOnly:!1});let we=J.basename(Be)===Ti&&p.has(J.join(J.dirname(Be)));await bw(Be,{contentsOnly:Be===f,isWorkspaceDir:we})}};for(let[Be,Ce]of p){let g=S.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let Ae=g&&g.children.get(we),se=J.join(Be,we);await N(se,ye,Ae)}}let U=async(Be,Ce,g)=>{if(g){MBe(Ce.locator,g.locator)||await bw(Be,{contentsOnly:Ce.linkType==="HARD"});for(let[we,ye]of Ce.children){let Ae=g.children.get(we);await U(J.join(Be,we),ye,Ae)}}else{Ce.children.has(Ti)&&await bw(J.join(Be,Ti),{contentsOnly:!0});let we=J.basename(Be)===Ti&&S.has(J.join(J.dirname(Be)));await bw(Be,{contentsOnly:Ce.linkType==="HARD",isWorkspaceDir:we})}};for(let[Be,Ce]of S){let g=p.get(Be);for(let[we,ye]of Ce.children){if(we===".")continue;let Ae=g&&g.children.get(we);await U(J.join(Be,we),ye,Ae)}}let W=new Map,ee=[];for(let[Be,Ce]of E)for(let g of Ce){let{locationRoot:
we,segments:ye}=lN(g,{skipPrefix:s.cwd}),Ae=S.get(we),se=we;if(Ae){for(let Z of ye)if(se=J.join(se,Z),Ae=Ae.children.get(Z),!Ae)break;if(Ae){let Z=MBe(Ae.locator,Be),De=e.get(Ae.locator),Re=De.target,mt=se,j=De.linkType;if(Z)W.has(Re)||W.set(Re,mt);else if(Re!==mt){let rt=G.parseLocator(Ae.locator);G.isVirtualLocator(rt)&&(rt=G.devirtualizeLocator(rt)),ee.push({srcDir:Re,dstDir:mt,linkType:j,realLocatorHash:rt.locatorHash})}}}}for(let[Be,{locations:Ce}]of e.entries())for(let g of Ce){let{locationRoot:we,segments:ye}=lN(g,{skipPrefix:s.cwd}),Ae=p.get(we),se=S.get(we),Z=we,De=e.get(Be),Re=G.parseLocator(Be);G.isVirtualLocator(Re)&&(Re=G.devirtualizeLocator(Re));let mt=Re.locatorHash,j=De.target,rt=g;if(j===rt)continue;let Fe=De.linkType;for(let Ne of ye)se=se.children.get(Ne);if(!Ae)ee.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:mt});else for(let Ne of ye)if(Z=J.join(Z,Ne),Ae=Ae.children.get(Ne),!Ae){ee.push({srcDir:j,dstDir:rt,linkType:Fe,realLocatorHash:mt});break}}
let ie=Ao.progressViaCounter(ee.length),ue=a.reportProgress(ie),le=s.configuration.get("nmMode"),me={value:le},pe=s.configuration.get("winLinkType");try{let Be=me.value==="hardlinks-global"?`${TY(s.configuration)}/v1`:null;if(Be&&!await ce.existsPromise(Be)){await ce.mkdirpPromise(Be);for(let g=0;g<256;g++)await ce.mkdirPromise(J.join(Be,g.toString(16).padStart(2,"0")))}for(let g of ee)(g.linkType==="SOFT"||!W.has(g.srcDir))&&(W.set(g.srcDir,g.dstDir),await I({...g,globalHardlinksStore:Be,nmMode:me,windowsLinkType:pe,packageChecksum:c.get(g.realLocatorHash)||null}));await Promise.all(P),P.length=0;for(let g of ee){let we=W.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==we&&await R(we,g.dstDir,{nmMode:me})}await Promise.all(P),await ce.mkdirPromise(f,{recursive:!0}),Wdt(h,new Set(ee.map(g=>g.dstDir)));let Ce=await qdt(e,S,s.cwd,{loadManifest:n});await Vdt(h,Ce,s.cwd,pe),await _dt(s,e,Ce,me,{installChangedByUser:C}),le=="hardlinks-global"&&me.value=="hardlinks-local"&&a.reportW
arningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{ue.stop()}}async function Vdt(t,e,r,s){for(let a of t.keys()){if(J.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=J.join(a,Ti,aN);await ce.removePromise(n)}}for(let[a,n]of e){if(J.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let c=J.join(a,Ti,aN),f=t.get(a)||new Map;await ce.mkdirPromise(c,{recursive:!0});for(let p of f.keys())n.has(p)||(await ce.removePromise(J.join(c,p)),process.platform==="win32"&&await ce.removePromise(J.join(c,`${p}.cmd`)));for(let[p,h]of n){let E=f.get(p),C=J.join(c,p);E!==h&&(process.platform==="win32"?await(0,UBe.default)(fe.fromPortablePath(h),fe.fromPortablePath(C),{createPwshFile:!1}):(await ce.removePromise(C)
,await QY(h,C,s),J.contains(r,await ce.realpathPromise(h))!==null&&await ce.chmodPromise(h,493)))}}}Ge();Dt();eA();var GD=class extends sg{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new RY(r)}},RY=class extends Gm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let s=new uo({baseFs:new $f({maxOpenFiles:80,readOnlyArchives:!0,customZipImplementation:ST})}),a=SBe(r,this.opts.project.cwd,s),{tree:n,errors:c}=kD(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:C,text:S}of c)this.opts.report.reportError(C,S);return}let f=new Map;r.fallbackPool=f;let p=(C,S)=>{let P=G.parseLocator(S.locator),I=G.stringifyIdent(P);I===C?f.set(C,P.reference):f.set(C,[I,P.reference])},h=J.join(this.opts.project.cwd,Er.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let C of E.dirList){let S=J.join(h,C),P=n.get(S
);if(typeof P>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in P)p(C,P);else for(let I of P.dirList){let R=J.join(S,I),N=n.get(R);if(typeof N>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in N)p(`${C}/${I}`,N);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var Jdt={hooks:{cleanGlobalArtifacts:async t=>{let e=TY(t);await ce.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspa
ces.",type:"BOOLEAN",default:!0}},linkers:[jD,GD]},Kdt=Jdt;var FK={};Vt(FK,{NpmHttpFetcher:()=>VD,NpmRemapResolver:()=>JD,NpmSemverFetcher:()=>oh,NpmSemverResolver:()=>KD,NpmTagResolver:()=>zD,default:()=>ubt,npmConfigUtils:()=>hi,npmHttpUtils:()=>en,npmPublishUtils:()=>v1});Ge();var $Be=ut(Ai());var oi="npm:";var en={};Vt(en,{AuthType:()=>zBe,customPackageError:()=>qm,del:()=>Amt,get:()=>Wm,getIdentUrl:()=>WD,getPackageMetadata:()=>Qw,handleInvalidAuthenticationError:()=>ag,post:()=>umt,put:()=>fmt});Ge();Ge();Dt();var LY=ut(Vv());ql();var KBe=ut(Ai());var hi={};Vt(hi,{RegistryType:()=>VBe,getAuditRegistry:()=>zdt,getAuthConfiguration:()=>OY,getDefaultRegistry:()=>qD,getPublishRegistry:()=>Xdt,getRegistryConfiguration:()=>JBe,getScopeConfiguration:()=>NY,getScopeRegistry:()=>Pw,isPackageApproved:()=>xw,normalizeRegistry:()=>Jc});Ge();var YBe=ut(Go()),VBe=(s=>(s.AUDIT_REGISTRY="npmAuditRegistry",s.FETCH_REGISTRY="npmRegistryServer",s.PUBLISH_REGISTRY="npmPublishRegistry",s))
(VBe||{});function Jc(t){return t.replace(/\/$/,"")}function zdt({configuration:t}){return qD({configuration:t,type:"npmAuditRegistry"})}function Xdt(t,{configuration:e}){return t.publishConfig?.registry?Jc(t.publishConfig.registry):t.name?Pw(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):qD({configuration:e,type:"npmPublishRegistry"})}function Pw(t,{configuration:e,type:r="npmRegistryServer"}){let s=NY(t,{configuration:e});if(s===null)return qD({configuration:e,type:r});let a=s.get(r);return a===null?qD({configuration:e,type:r}):Jc(a)}function qD({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return Jc(r!==null?r:t.get("npmRegistryServer"))}function JBe(t,{configuration:e}){let r=e.get("npmRegistries"),s=Jc(t),a=r.get(s);if(typeof a<"u")return a;let n=r.get(s.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}var Zdt=new Map([["npmRegistryServer","https://npm.jsr.io/"]]);function NY(t,{configuration:e}){if(t===null)return null;let s=e.get("npmScopes
").get(t);return s||(t==="jsr"?Zdt:null)}function OY(t,{configuration:e,ident:r}){let s=r&&NY(r.scope,{configuration:e});return s?.get("npmAuthIdent")||s?.get("npmAuthToken")?s:JBe(t,{configuration:e})||e}function $dt({configuration:t,version:e,publishTimes:r}){let s=t.get("npmMinimalAgeGate");if(s){let a=r?.[e];if(typeof a>"u"||(new Date().getTime()-new Date(a).getTime())/60/1e3emt(e,r,s))}function xw(t){return!$dt(t)||tmt(t)}var zBe=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(zBe||{});async function ag(t,{attemptedAs:e,registry:r,
headers:s,configuration:a}){if(uN(t))throw new jt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new jt(41,`Invalid authentication (${typeof e!="string"?`as ${await hmt(r,s,{configuration:a})}`:`attempted as ${e}`})`)}function qm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${he.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function WD(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var XBe=new Map,rmt=new Map;async function nmt(t){return await je.getFactoryWithDefault(XBe,t,async()=>{let e=null;try{e=await ce.readJsonPromise(t)}catch{}return e})}async function imt(t,e,{configuration:r,cached:s,registry:a,headers:n,version:c,...f}){return await je.getFactoryWithDefault(rmt,t,async()=>await Wm(WD(e),{...f,customErrorMessage:qm
,configuration:r,registry:a,ident:e,headers:{...n,"If-None-Match":s?.etag,"If-Modified-Since":s?.lastModified},wrapNetworkRequest:async p=>async()=>{let h=await p();if(h.statusCode===304){if(s===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...h,body:s.metadata}}let E=omt(JSON.parse(h.body.toString())),C={metadata:E,etag:h.headers.etag,lastModified:h.headers["last-modified"]};return XBe.set(t,Promise.resolve(C)),Promise.resolve().then(async()=>{let S=`${t}-${process.pid}.tmp`;await ce.mkdirPromise(J.dirname(S),{recursive:!0}),await ce.writeJsonPromise(S,C,{compact:!0}),await ce.renamePromise(S,t)}).catch(()=>{}),{...h,body:E}}}))}function smt(t){return t.scope!==null?`@${t.scope}-${t.name}-${t.scope.length}`:t.name}async function Qw(t,{cache:e,project:r,registry:s,headers:a,version:n,...c}){let{configuration:f}=r;s=YD(f,{ident:t,registry:s});let p=lmt(f,s),h=J.join(p,`${smt(t)}.json`),E=null;if(!r.lockfileNeedsRefresh&&(E=await nmt(h),E))
{if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(f.get("enableOfflineMode")){let C=structuredClone(E.metadata),S=new Set;if(e){for(let I of Object.keys(C.versions)){let R=G.makeLocator(t,`npm:${I}`),N=e.getLocatorMirrorPath(R);(!N||!ce.existsSync(N))&&(delete C.versions[I],S.add(I))}let P=C["dist-tags"].latest;if(S.has(P)){let I=Object.keys(E.metadata.versions).sort(KBe.default.compare),R=I.indexOf(P);for(;S.has(I[R])&&R>=0;)R-=1;R>=0?C["dist-tags"].latest=I[R]:delete C["dist-tags"].latest}}return C}}return await imt(h,t,{...c,configuration:f,cached:E,registry:s,headers:a,version:n})}var ZBe=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function omt(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,Kd(r,ZBe)])),time:t.time}}var amt=Nn.makeHash("time",...ZBe).slice(0,6);fun
ction lmt(t,e){let r=cmt(t),s=new URL(e);return J.join(r,amt,s.hostname)}function cmt(t){return J.join(t.get("globalFolder"),"metadata/npm")}async function Wm(t,{configuration:e,headers:r,ident:s,authType:a,allowOidc:n,registry:c,...f}){c=YD(e,{ident:s,registry:c}),s&&s.scope&&typeof a>"u"&&(a=1);let p=await cN(c,{authType:a,allowOidc:n,configuration:e,ident:s});p&&(r={...r,authorization:p});try{return await nn.get(t.charAt(0)==="/"?`${c}${t}`:t,{configuration:e,headers:r,...f})}catch(h){throw await ag(h,{registry:c,configuration:e,headers:r}),h}}async function umt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await cN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await nn.post(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!uN(S)||h)throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=awai
t MY(S,{configuration:s});let P={...a,...kw(h)};try{return await nn.post(`${p}${t}`,e,{configuration:s,headers:P,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function fmt(t,e,{attemptedAs:r,configuration:s,headers:a,ident:n,authType:c=3,allowOidc:f,registry:p,otp:h,...E}){p=YD(s,{ident:n,registry:p});let C=await cN(p,{authType:c,allowOidc:f,configuration:s,ident:n});C&&(a={...a,authorization:C}),h&&(a={...a,...kw(h)});try{return await nn.put(p+t,e,{configuration:s,headers:a,...E})}catch(S){if(!uN(S))throw await ag(S,{attemptedAs:r,registry:p,configuration:s,headers:a}),S;h=await MY(S,{configuration:s});let P={...a,...kw(h)};try{return await nn.put(`${p}${t}`,e,{configuration:s,headers:P,...E})}catch(I){throw await ag(I,{attemptedAs:r,registry:p,configuration:s,headers:a}),I}}}async function Amt(t,{attemptedAs:e,configuration:r,headers:s,ident:a,authType:n=3,allowOidc:c,registry:f,otp:p,...h}){f=YD(r,{ident:a,registry:f});le
t E=await cN(f,{authType:n,allowOidc:c,configuration:r,ident:a});E&&(s={...s,authorization:E}),p&&(s={...s,...kw(p)});try{return await nn.del(f+t,{configuration:r,headers:s,...h})}catch(C){if(!uN(C)||p)throw await ag(C,{attemptedAs:e,registry:f,configuration:r,headers:s}),C;p=await MY(C,{configuration:r});let S={...s,...kw(p)};try{return await nn.del(`${f}${t}`,{configuration:r,headers:S,...h})}catch(P){throw await ag(P,{attemptedAs:e,registry:f,configuration:r,headers:s}),P}}}function YD(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return Pw(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return Jc(r)}async function cN(t,{authType:e=2,allowOidc:r=!1,configuration:s,ident:a}){let n=OY(t,{configuration:s,ident:a}),c=pmt(n,e);if(!c)return null;let f=await s.reduceHook(p=>p.getNpmAuthenticationHeader,void 0,t,{configuration:s,ident:a});if(f)return f;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")
}`;if(n.get("npmAuthIdent")){let p=n.get("npmAuthIdent");return p.includes(":")?`Basic ${Buffer.from(p).toString("base64")}`:`Basic ${p}`}if(r&&a){let p=await gmt(t,{configuration:s,ident:a});if(p)return`Bearer ${p}`}if(c&&e!==1)throw new jt(33,"No authentication configured for request");return null}function pmt(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function hmt(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await nn.get(new URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function MY(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Ot.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,he.pretty(e,"$1",he.Type.URL))),!process.en
v.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ui.openUrl){let{openNow:c}=await(0,LY.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});c&&(await Ui.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(`
`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:s}=await(0,LY.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(`
`),s}function uN(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function kw(t){return{"npm-otp":t}}async function gmt(t,{configuration:e,ident:r}){let s=null;if(process.env.GITLAB_CI)s=process.env.NPM_ID_TOKEN||null;else if(process.env.GITHUB_ACTIONS){if(!(process.env.ACTIONS_ID_TOKEN_REQUEST_URL&&process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN))return null;let a=`npm:${new URL(t).host.replace("registry.yarnpkg.com","registry.npmjs.org").replace("yarn.npmjs.org","registry.npmjs.org")}`,n=new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL);n.searchParams.append("audience",a),s=(await nn.get(n.href,{configuration:e,jsonResponse:!0,headers:{Authorization:`Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`}})).value}if(!s)return null;try{return(await nn.post(`${t}/-/npm/v1/oidc/token/exchange/package${WD(r)}`,null,{configuration:e,jsonResponse:
!0,headers:{Authorization:`Bearer ${s}`}})).token||null}catch{}return null}var VD=class{supports(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s,params:a}=G.parseRange(e.reference);return!(!$Be.default.valid(s)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let{params:s}=G.parseRange(e.reference);if(s===null||typeof s.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await Wm(s.__archiveUrl,{customE
rrorMessage:qm,configuration:r.project.configuration,ident:e});return await ps.convertToZip(a,{configuration:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}};Ge();var JD=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!G.tryParseDescriptor(e.range.slice(oi.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){let s=r.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return r.resolver.getResolutionDependencies(s,r)}async getCandidates(e,r,s){let a=s.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return await s.resolver.getCandidates(a,r,s)}async getSatisfying(e,r,s,a){let n=a.project.configuration.normalizeDependency(G.parseDescriptor(e.range.slice(oi.length),!0));return a.resolver.getSatisfying(n,r,s,a)}resolve(e,r){throw new Error("Unrea
chable")}};Ge();Ge();var eve=ut(Ai());var oh=class t{supports(e,r){if(!e.reference.startsWith(oi))return!1;let s=new URL(e.reference);return!(!eve.default.valid(s.pathname)||s.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let s=r.checksums.get(e.locatorHash)||null,[a,n,c]=await r.cache.fetchPackageFromCache(e,s,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${G.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:G.getIdentVendorPath(e),checksum:c}}async fetchFromNetwork(e,r){let s;try{s=await Wm(t.getLocatorUrl(e),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}catch{s=await Wm(t.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:qm,configuration:r.project.configuration,ident:e})}return await ps.convertToZip(s,{configura
tion:r.project.configuration,prefixPath:G.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:s}){let a=Pw(e.scope,{configuration:s}),n=t.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=Fr.clean(e.reference.slice(oi.length));if(r===null)throw new jt(10,"The npm semver resolver got selected, but the version isn't semver");return`${WD(e)}/-/${e.name}-${r}.tgz`}};Ge();Ge();Ge();var UY=ut(Ai());var fN=G.makeIdent(null,"node-gyp"),dmt=/\b(node-gyp|prebuild-install)\b/,KD=class{supportsDescriptor(e,r){return e.range.startsWith(oi)?!!Fr.validRange(e.range.slice(oi.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(oi))return!1;let{selector:s}=G.parseRan
ge(e.reference);return!!UY.default.valid(s)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=Fr.validRange(e.range.slice(oi.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);let n=await Qw(e,{cache:s.fetchOptions?.cache,project:s.project,version:UY.default.valid(a.raw)?a.raw:void 0}),c=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new Fr.SemVer(h);if(a.test(E))return xw({configuration:s.project.configuration,ident:e,version:h,publishTimes:n.time})?E:je.mapAndFilter.skip}catch{}return je.mapAndFilter.skip}),f=c.filter(h=>!n.versions[h.raw].deprecated),p=f.length>0?f:c;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=G.makeLocator(e,`${oi}${h.raw}`),C=n.versions[h.raw].dist.tarball;return oh.isConventionalTarballUrl(E,C,{configuration:s.project.configuration})?E:G.bindLocator(E,{__archiveUrl:C})})}async getSatisfying(e,r,s,a){let
n=Fr.validRange(e.range.slice(oi.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(oi.length)}`);return{locators:je.mapAndFilter(s,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=G.tryParseRange(p.reference,{requireProtocol:oi});if(!h)return je.mapAndFilter.skip;let E=new Fr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:s}=G.parseRange(e.reference),a=Fr.clean(s);if(a===null)throw new jt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await Qw(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new jt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new jt(16,`Registry failed to return reference "${a}"`);let c=new Ut;if(c.load(n.versions[a]),!c.depende
ncies.has(fN.identHash)&&!c.peerDependencies.has(fN.identHash)){for(let f of c.scripts.values())if(f.match(dmt)){c.dependencies.set(fN.identHash,G.makeDescriptor(fN,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:c.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(c.dependencies),peerDependencies:c.peerDependencies,dependenciesMeta:c.dependenciesMeta,peerDependenciesMeta:c.peerDependenciesMeta,bin:c.bin}}};Ge();Ge();var AN=ut(Ai());var zD=class{supportsDescriptor(e,r){return!(!e.range.startsWith(oi)||!Mp.test(e.range.slice(oi.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,s){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,s){let a=e.range.slice(oi.length),n=await Qw(e,{cache:s.fetchOptions?.cache,project:s.project});if(!Object.hasOwn(n,"dist-tags"))throw new jt(15,'Registry returned invalid data - missing "dist-tags
" field');let c=n["dist-tags"];if(!Object.hasOwn(c,a))throw new jt(16,`Registry failed to return tag "${a}"`);let f=Object.keys(n.versions),p=n.time,h=c[a];if(a==="latest"&&!xw({configuration:s.project.configuration,ident:e,version:h,publishTimes:p})){let S=h.includes("-"),P=AN.default.rsort(f).find(I=>AN.default.lt(I,h)&&(S||!I.includes("-"))&&xw({configuration:s.project.configuration,ident:e,version:I,publishTimes:p}));if(!P)throw new jt(16,`The version for tag "${a}" is quarantined, and no lower version is available`);h=P}let E=G.makeLocator(e,`${oi}${h}`),C=n.versions[h].dist.tarball;return oh.isConventionalTarballUrl(E,C,{configuration:s.project.configuration})?[E]:[G.bindLocator(E,{__archiveUrl:C})]}async getSatisfying(e,r,s,a){let n=[];for(let c of s){if(c.identHash!==e.identHash)continue;let f=G.tryParseRange(c.reference,{requireProtocol:oi});if(!(!f||!AN.default.valid(f.selector))){if(f.params?.__archiveUrl){let p=G.makeRange({protocol:oi,selector:f.selector,source:
null,params:null}),[h]=await a.resolver.getCandidates(G.makeDescriptor(e,p),r,a);if(c.reference!==h.reference)continue}n.push(c)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var v1={};Vt(v1,{getGitHead:()=>abt,getPublishAccess:()=>qxe,getReadmeContent:()=>Wxe,makePublishBody:()=>obt});Ge();Ge();Dt();var bV={};Vt(bV,{PackCommand:()=>jw,default:()=>KEt,packUtils:()=>yA});Ge();Ge();Ge();Dt();Yt();var yA={};Vt(yA,{genPackList:()=>NN,genPackStream:()=>DV,genPackageManifest:()=>QSe,hasPackScripts:()=>vV,prepareForPack:()=>SV});Ge();Dt();var BV=ut(Go()),xSe=ut(SSe()),kSe=Ie("zlib"),MEt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],UEt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function vV(t){return!!(In.hasWorkspaceScript(t,"prepack")||In.hasWorkspaceScript(t,"postpack"))}async function SV(t,{report:e},r){await In.m
aybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let s=J.join(t.cwd,Ut.fileName);await ce.existsPromise(s)&&await t.manifest.loadFile(s,{baseFs:ce}),await r()}finally{await In.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function DV(t,e){typeof e>"u"&&(e=await NN(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(J.normalize(n));for(let n of t.manifest.bin.values())r.add(J.normalize(n));let s=xSe.default.pack();process.nextTick(async()=>{for(let n of e){let c=J.normalize(n),f=J.resolve(t.cwd,c),p=J.join("package",c),h=await ce.lstatPromise(f),E={name:p,mtime:new Date(fi.SAFE_TIME*1e3)},C=r.has(c)?493:420,S,P,I=new Promise((N,U)=>{S=N,P=U}),R=N=>{N?P(N):S()};if(h.isFile()){let N;c==="package.json"?N=Buffer.from(JSON.stringify(await QSe(t),null,2)):N=await ce.readFilePromise(f),s.entry({...E,mode:C,type:"file"},N,R)}else h.isSymbolicLink()?s.entry({...E,mode:C,type:"symlink",linkname:await ce.readlinkP
romise(f)},R):R(new Error(`Unsupported file type ${h.mode} for ${fe.fromPortablePath(c)}`));await I}s.finalize()});let a=(0,kSe.createGzip)();return s.pipe(a),a}async function QSe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function NN(t){let e=t.project,r=e.configuration,s={accept:[],reject:[]};for(let C of UEt)s.reject.push(C);for(let C of MEt)s.accept.push(C);s.reject.push(r.get("rcFilename"));let a=C=>{if(C===null||!C.startsWith(`${t.cwd}/`))return;let S=J.relative(t.cwd,C),P=J.resolve(vt.root,S);s.reject.push(P)};a(J.resolve(e.cwd,Er.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(C=>C.populateYarnPaths,e,C=>{a(C)});for(let C of e.workspaces){let S=J.relative(t.cwd,C.cwd);S!==""&&!S.match(/^(\.\.)?\//)&&s.reject.push(`/${S}`)}let n={accept:[],reject:[]},c=t.manifest.p
ublishConfig?.main??t.manifest.main,f=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;c!=null&&n.accept.push(J.resolve(vt.root,c)),f!=null&&n.accept.push(J.resolve(vt.root,f)),typeof p=="string"&&n.accept.push(J.resolve(vt.root,p));for(let C of h.values())n.accept.push(J.resolve(vt.root,C));if(p instanceof Map)for(let[C,S]of p.entries())n.accept.push(J.resolve(vt.root,C)),typeof S=="string"&&n.accept.push(J.resolve(vt.root,S));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let C of t.manifest.files)TSe(n.accept,C,{cwd:vt.root})}return await _Et(t.cwd,{hasExplicitFileList:E,globalList:s,ignoreList:n})}async function _Et(t,{hasExplicitFileList:e,globalList:r,ignoreList:s}){let a=[],n=new Hf(t),c=[[vt.root,[s]]];for(;c.length>0;){let[f,p]=c.pop(),h=await n.lstatPromise(f);if(!bSe(f,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=a
wait n.readdirPromise(f),C=!1,S=!1;if(!e||f!==vt.root)for(let R of E)C=C||R===".gitignore",S=S||R===".npmignore";let P=S?await DSe(n,f,".npmignore"):C?await DSe(n,f,".gitignore"):null,I=P!==null?[P].concat(p):p;bSe(f,{globalList:r,ignoreLists:p})&&(I=[...p,{accept:[],reject:["**/*"]}]);for(let R of E)c.push([J.resolve(f,R),I])}else(h.isFile()||h.isSymbolicLink())&&a.push(J.relative(vt.root,f))}return a.sort()}async function DSe(t,e,r){let s={accept:[],reject:[]},a=await t.readFilePromise(J.join(e,r),"utf8");for(let n of a.split(/\n/g))TSe(s.reject,n,{cwd:e});return s}function HEt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=J.resolve(e,t)),r&&(t=`!${t}`),t}function TSe(t,e,{cwd:r}){let s=e.trim();s===""||s[0]==="#"||t.push(HEt(s,{cwd:r}))}function bSe(t,{globalList:e,ignoreLists:r}){let s=FN(t,e.accept);if(s!==0)return s===2;let a=FN(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let c=FN(t,n.accept);if(c!==0)return c===2;let f
=FN(t,n.reject);if(f!==0)return f===1}return!1}function FN(t,e){let r=e,s=[];for(let a=0;a{await SV(a,{report:p},async()=>{p.reportJson({base:fe.fromPortablePath(a.cwd)});let h=await NN(a);for(let E of h)p.reportInfo(null,fe.fromPortablePath(E)),p.reportJson({location:fe.fromPortablePath(E)});if(!this.dryRun){let E=await DV(a,h);await ce.mkdirPromise(J.dirname(c),{recursive:!0});let C=ce.createWriteStream(c);E.pipe(C),await new Promise(S=>{C.on("finish",S)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${he.pretty(r,c,he.Type.PATH)}`),p.reportJson({output:fe.fromPortablePath(c)}))})).exitCode()}};function jEt(t,{workspace:e}){let r=t.replace("%s",GEt(e)).replace("%v",qEt(e));return fe.toPortablePath(r)}function GE
t(t){return t.manifest.name!==null?G.slugifyIdent(t.manifest.name):"package"}function qEt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var WEt=["dependencies","devDependencies","peerDependencies"],YEt="workspace:",VEt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let s of WEt)for(let a of t.manifest.getForScope(s).values()){let n=r.tryWorkspaceByDescriptor(a),c=G.parseRange(a.range);if(c.protocol===YEt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new jt(21,`${G.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let f;G.areDes
criptorsEqual(a,n.anchoredDescriptor)||c.selector==="*"?f=n.manifest.version??"0.0.0":c.selector==="~"||c.selector==="^"?f=`${c.selector}${n.manifest.version??"0.0.0"}`:f=c.selector;let p=s==="dependencies"?G.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":s;e[h][G.stringifyIdent(a)]=f}}},JEt={hooks:{beforeWorkspacePacking:VEt},commands:[jw]},KEt=JEt;var Gxe=ut(HSe());Ge();var Hxe=ut(_xe()),{env:Bt}=process,XDt="application/vnd.in-toto+json",ZDt="https://in-toto.io/Statement/v0.1",$Dt="https://in-toto.io/Statement/v1",ebt="https://slsa.dev/provenance/v0.2",tbt="https://slsa.dev/provenance/v1",rbt="https://github.com/actions/runner",nbt="https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1",ibt="https://github.com/npm/cli/gitlab",sbt="v0alpha1",jxe=async(t,e)=>{let r;if(Bt.GITHUB_ACTIONS){if(!Bt.ACTIONS_ID_TOKEN_REQUEST_URL)throw new jt(91,'Provenance generation in GitHub Actions requires "write
" access to the "id-token" permission');let s=(Bt.GITHUB_WORKFLOW_REF||"").replace(`${Bt.GITHUB_REPOSITORY}/`,""),a=s.indexOf("@"),n=s.slice(0,a),c=s.slice(a+1);r={_type:$Dt,subject:t,predicateType:tbt,predicate:{buildDefinition:{buildType:nbt,externalParameters:{workflow:{ref:c,repository:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}`,path:n}},internalParameters:{github:{event_name:Bt.GITHUB_EVENT_NAME,repository_id:Bt.GITHUB_REPOSITORY_ID,repository_owner_id:Bt.GITHUB_REPOSITORY_OWNER_ID}},resolvedDependencies:[{uri:`git+${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}@${Bt.GITHUB_REF}`,digest:{gitCommit:Bt.GITHUB_SHA}}]},runDetails:{builder:{id:`${rbt}/${Bt.RUNNER_ENVIRONMENT}`},metadata:{invocationId:`${Bt.GITHUB_SERVER_URL}/${Bt.GITHUB_REPOSITORY}/actions/runs/${Bt.GITHUB_RUN_ID}/attempts/${Bt.GITHUB_RUN_ATTEMPT}`}}}}}else if(Bt.GITLAB_CI){if(!Bt.SIGSTORE_ID_TOKEN)throw new jt(91,`Provenance generation in GitLab CI requires "SIGSTORE_ID_TOKEN" with "sigstore" audience
to be present in "id_tokens". For more info see:
https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html`);r={_type:ZDt,subject:t,predicateType:ebt,predicate:{buildType:`${ibt}/${sbt}`,builder:{id:`${Bt.CI_PROJECT_URL}/-/runners/${Bt.CI_RUNNER_ID}`},invocation:{configSource:{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA},entryPoint:Bt.CI_JOB_NAME},parameters:{CI:Bt.CI,CI_API_GRAPHQL_URL:Bt.CI_API_GRAPHQL_URL,CI_API_V4_URL:Bt.CI_API_V4_URL,CI_BUILD_BEFORE_SHA:Bt.CI_BUILD_BEFORE_SHA,CI_BUILD_ID:Bt.CI_BUILD_ID,CI_BUILD_NAME:Bt.CI_BUILD_NAME,CI_BUILD_REF:Bt.CI_BUILD_REF,CI_BUILD_REF_NAME:Bt.CI_BUILD_REF_NAME,CI_BUILD_REF_SLUG:Bt.CI_BUILD_REF_SLUG,CI_BUILD_STAGE:Bt.CI_BUILD_STAGE,CI_COMMIT_BEFORE_SHA:Bt.CI_COMMIT_BEFORE_SHA,CI_COMMIT_BRANCH:Bt.CI_COMMIT_BRANCH,CI_COMMIT_REF_NAME:Bt.CI_COMMIT_REF_NAME,CI_COMMIT_REF_PROTECTED:Bt.CI_COMMIT_REF_PROTECTED,CI_COMMIT_REF_SLUG:Bt.CI_COMMIT_REF_SLUG,CI_COMMIT_SHA:Bt.CI_COMMIT_SHA,CI_COMMIT_SHORT_SHA:Bt.CI_COMMIT_SHORT_SHA,CI_COMMIT_TIMESTAMP:Bt.CI_COMMIT_TIMES
TAMP,CI_COMMIT_TITLE:Bt.CI_COMMIT_TITLE,CI_CONFIG_PATH:Bt.CI_CONFIG_PATH,CI_DEFAULT_BRANCH:Bt.CI_DEFAULT_BRANCH,CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX:Bt.CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX,CI_DEPENDENCY_PROXY_SERVER:Bt.CI_DEPENDENCY_PROXY_SERVER,CI_DEPENDENCY_PROXY_USER:Bt.CI_DEPENDENCY_PROXY_USER,CI_JOB_ID:Bt.CI_JOB_ID,CI_JOB_NAME:Bt.CI_JOB_NAME,CI_JOB_NAME_SLUG:Bt.CI_JOB_NAME_SLUG,CI_JOB_STAGE:Bt.CI_JOB_STAGE,CI_JOB_STARTED_AT:Bt.CI_JOB_STARTED_AT,CI_JOB_URL:Bt.CI_JOB_URL,CI_NODE_TOTAL:Bt.CI_NODE_TOTAL,CI_PAGES_DOMAIN:Bt.CI_PAGES_DOMAIN,CI_PAGES_URL:Bt.CI_PAGES_URL,CI_PIPELINE_CREATED_AT:Bt.CI_PIPELINE_CREATED_AT,CI_PIPELINE_ID:Bt.CI_PIPELINE_ID,CI_PIPELINE_IID:Bt.CI_PIPELINE_IID,CI_PIPELINE_SOURCE:Bt.CI_PIPELINE_SOURCE,CI_PIPELINE_URL:Bt.CI_PIPELINE_URL,CI_PROJECT_CLASSIFICATION_LABEL:Bt.CI_PROJECT_CLASSIFICATION_LABEL,CI_PROJECT_DESCRIPTION:Bt.CI_PROJECT_DESCRIPTION,CI_PROJ
ECT_ID:Bt.CI_PROJECT_ID,CI_PROJECT_NAME:Bt.CI_PROJECT_NAME,CI_PROJECT_NAMESPACE:Bt.CI_PROJECT_NAMESPACE,CI_PROJECT_NAMESPACE_ID:Bt.CI_PROJECT_NAMESPACE_ID,CI_PROJECT_PATH:Bt.CI_PROJECT_PATH,CI_PROJECT_PATH_SLUG:Bt.CI_PROJECT_PATH_SLUG,CI_PROJECT_REPOSITORY_LANGUAGES:Bt.CI_PROJECT_REPOSITORY_LANGUAGES,CI_PROJECT_ROOT_NAMESPACE:Bt.CI_PROJECT_ROOT_NAMESPACE,CI_PROJECT_TITLE:Bt.CI_PROJECT_TITLE,CI_PROJECT_URL:Bt.CI_PROJECT_URL,CI_PROJECT_VISIBILITY:Bt.CI_PROJECT_VISIBILITY,CI_REGISTRY:Bt.CI_REGISTRY,CI_REGISTRY_IMAGE:Bt.CI_REGISTRY_IMAGE,CI_REGISTRY_USER:Bt.CI_REGISTRY_USER,CI_RUNNER_DESCRIPTION:Bt.CI_RUNNER_DESCRIPTION,CI_RUNNER_ID:Bt.CI_RUNNER_ID,CI_RUNNER_TAGS:Bt.CI_RUNNER_TAGS,CI_SERVER_HOST:Bt.CI_SERVER_HOST,CI_SERVER_NAME:Bt.CI_SERVER_NAME,CI_SERVER_PORT:Bt.CI_SERVER_PORT,CI_SERVER_PROTOCOL:Bt.CI_SERVER_PROTOCOL,CI_SERVER_REVISION:Bt.CI_SERVER_REVISION,CI_SERVER_SHELL_SSH_HOST:Bt.CI_SERVER_SHELL_SSH_HOST,CI_SERVER_SHELL_SSH_PORT:Bt.CI_SERVER_SHELL_SSH_PORT,CI_SERVER_URL:Bt
.CI_SERVER_URL,CI_SERVER_VERSION:Bt.CI_SERVER_VERSION,CI_SERVER_VERSION_MAJOR:Bt.CI_SERVER_VERSION_MAJOR,CI_SERVER_VERSION_MINOR:Bt.CI_SERVER_VERSION_MINOR,CI_SERVER_VERSION_PATCH:Bt.CI_SERVER_VERSION_PATCH,CI_TEMPLATE_REGISTRY_HOST:Bt.CI_TEMPLATE_REGISTRY_HOST,GITLAB_CI:Bt.GITLAB_CI,GITLAB_FEATURES:Bt.GITLAB_FEATURES,GITLAB_USER_ID:Bt.GITLAB_USER_ID,GITLAB_USER_LOGIN:Bt.GITLAB_USER_LOGIN,RUNNER_GENERATE_ARTIFACTS_METADATA:Bt.RUNNER_GENERATE_ARTIFACTS_METADATA},environment:{name:Bt.CI_RUNNER_DESCRIPTION,architecture:Bt.CI_RUNNER_EXECUTABLE_ARCH,server:Bt.CI_SERVER_URL,project:Bt.CI_PROJECT_PATH,job:{id:Bt.CI_JOB_ID},pipeline:{id:Bt.CI_PIPELINE_ID,ref:Bt.CI_CONFIG_PATH}}},metadata:{buildInvocationId:`${Bt.CI_JOB_URL}`,completeness:{parameters:!0,environment:!0,materials:!1},reproducible:!1},materials:[{uri:`git+${Bt.CI_PROJECT_URL}`,digest:{sha1:Bt.CI_COMMIT_SHA}}]}}}else throw new jt(91,"Provenance generation is only supported in GitHub Actions and GitLab CI");return Hxe.att
est(Buffer.from(JSON.stringify(r)),XDt,e)};async function obt(t,e,{access:r,tag:s,registry:a,gitHead:n,provenance:c}){let f=t.manifest.name,p=t.manifest.version,h=G.stringifyIdent(f),E=Gxe.default.fromData(e,{algorithms:["sha1","sha512"]}),C=r??qxe(t,f),S=await Wxe(t),P=await yA.genPackageManifest(t),I=`${h}-${p}.tgz`,R=new URL(`${Jc(a)}/${h}/-/${I}`),N={[I]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}};if(c){let U={name:`pkg:npm/${h.replace(/^@/,"%40")}@${p}`,digest:{sha512:E.sha512[0].hexDigest()}},W=await jxe([U]),ee=JSON.stringify(W);N[`${h}-${p}.sigstore`]={content_type:W.mediaType,data:ee,length:ee.length}}return{_id:h,_attachments:N,name:h,access:C,"dist-tags":{[s]:p},versions:{[p]:{...P,_id:`${h}@${p}`,name:h,version:p,gitHead:n,dist:{shasum:E.sha1[0].hexDigest(),integrity:E.sha512[0].toString(),tarball:R.toString()}}},readme:S}}async function abt(t){try{let{stdout:e}=await qr.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd
:t});return e.trim()===""?void 0:e.trim()}catch{return}}function qxe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function Wxe(t){let e=fe.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${G.stringifyIdent(r)}
diff --git a/devel/electron40/files/packagejsons/default_app/package.json b/devel/electron40/files/packagejsons/default_app/package.json
new file mode 100644
index 000000000000..65fee98c59eb
--- /dev/null
+++ b/devel/electron40/files/packagejsons/default_app/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "electron",
+ "productName": "Electron",
+ "main": "main.js",
+ "type": "module"
+}
diff --git a/devel/electron40/files/packagejsons/npm/package.json b/devel/electron40/files/packagejsons/npm/package.json
new file mode 100644
index 000000000000..6d453ce21d9a
--- /dev/null
+++ b/devel/electron40/files/packagejsons/npm/package.json
@@ -0,0 +1,28 @@
+{
+ "main": "index.js",
+ "types": "electron.d.ts",
+ "bin": {
+ "electron": "cli.js"
+ },
+ "scripts": {
+ "postinstall": "node install.js"
+ },
+ "files": [
+ "LICENSE",
+ "README.md",
+ "abi_version",
+ "checksums.json",
+ "cli.js",
+ "electron.d.ts",
+ "index.js",
+ "install.js"
+ ],
+ "dependencies": {
+ "@electron/get": "^2.0.0",
+ "@types/node": "^24.9.0",
+ "extract-zip": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 12.20.55"
+ }
+}
diff --git a/devel/electron40/files/packagejsons/package.json b/devel/electron40/files/packagejsons/package.json
index 72c263f4d5c2..e62bd494f37b 100644
--- a/devel/electron40/files/packagejsons/package.json
+++ b/devel/electron40/files/packagejsons/package.json
@@ -85,7 +85,7 @@
"gn-typescript-definitions": "npm run create-typescript-definitions && node script/cp.mjs electron.d.ts",
"pre-flight": "pre-flight",
"gn-check": "node ./script/gn-check.js",
- "gn-format": "python3 script/run-gn-format.py",
+ "gn-format": "node ./script/lint.js --gn --fix",
"precommit": "lint-staged",
"preinstall": "node -e 'process.exit(0)'",
"pretest": "npm run create-typescript-definitions",
@@ -116,7 +116,7 @@
],
"*.{gn,gni}": [
"npm run gn-check",
- "npm run gn-format"
+ "node ./script/lint.js --gn --fix --only --"
],
"*.py": [
"node script/lint.js --py --fix --only --"
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/app-path/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/app-path/package.json
new file mode 100644
index 000000000000..95c402d27efc
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/app-path/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-app-path",
+ "main": "lib/index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/command-line/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/command-line/package.json
new file mode 100644
index 000000000000..897fa828efb0
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/command-line/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-command-line",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/context-bridge/context-bridge-mutability/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/context-bridge/context-bridge-mutability/package.json
new file mode 100644
index 000000000000..91b9749095be
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/context-bridge/context-bridge-mutability/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-context-bridge-mutability",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/cookie-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/cookie-app/package.json
new file mode 100644
index 000000000000..6b2951e75ac1
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/cookie-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-cookie-app",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/default-menu/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/default-menu/package.json
new file mode 100644
index 000000000000..614b3ecf3ca6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/default-menu/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-default-menu",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/exit-closes-all-windows-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/exit-closes-all-windows-app/package.json
new file mode 100644
index 000000000000..ae52532315a3
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/exit-closes-all-windows-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-exit-closes-all-windows",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/base/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/base/package.json
new file mode 100644
index 000000000000..1766d0668460
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/base/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-first-party-sets-base",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/command-line/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/command-line/package.json
new file mode 100644
index 000000000000..c4b5839bdcc6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/first-party-sets/command-line/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-first-party-sets-command-line",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/ipc-main-listeners/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/ipc-main-listeners/package.json
new file mode 100644
index 000000000000..9400a77a8c7a
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/ipc-main-listeners/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-ipc-main-listeners",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/locale-check/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/locale-check/package.json
new file mode 100644
index 000000000000..60e5f4d1cdc4
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/locale-check/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-locale-check",
+ "main": "main.js"
+}
+
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/mixed-sandbox-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/mixed-sandbox-app/package.json
new file mode 100644
index 000000000000..e7c1a4105eed
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/mixed-sandbox-app/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-mixed-sandbox",
+ "main": "main.js"
+}
+
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/net-log/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/net-log/package.json
new file mode 100644
index 000000000000..4b99b89a4c28
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/net-log/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-net-log",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/protocol-name/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/protocol-name/package.json
new file mode 100644
index 000000000000..c09844bbf414
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/protocol-name/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-protocol-name",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/quit-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/quit-app/package.json
new file mode 100644
index 000000000000..5ca705eee714
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/quit-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-quit-app",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/relaunch/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/relaunch/package.json
new file mode 100644
index 000000000000..93edb1ae8aeb
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/relaunch/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-relaunch",
+ "main": "main.js"
+}
+
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/decrypt-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/decrypt-app/package.json
new file mode 100644
index 000000000000..f4e7a5ad938a
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/decrypt-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-safe-storage",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/encrypt-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/encrypt-app/package.json
new file mode 100644
index 000000000000..1b14cccc1d78
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/safe-storage/encrypt-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-safe-storage",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/shared-dictionary/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/shared-dictionary/package.json
new file mode 100644
index 000000000000..15ce54dfad0d
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/shared-dictionary/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-shared-dictionary-app",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-data/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-data/package.json
new file mode 100644
index 000000000000..a1498100b0fe
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-data/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-singleton-data",
+ "main": "main.js"
+}
+
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-userdata/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-userdata/package.json
new file mode 100644
index 000000000000..1269c0a67d5d
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton-userdata/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-singleton-userdata",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/singleton/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton/package.json
new file mode 100644
index 000000000000..42299dda7735
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/singleton/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-singleton",
+ "main": "main.js"
+}
+
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-null/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-null/package.json
new file mode 100644
index 000000000000..bfb7944df5c8
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-null/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-menu",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-visibility/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-visibility/package.json
new file mode 100644
index 000000000000..bfb7944df5c8
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/test-menu-visibility/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-menu",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/env-app/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/env-app/package.json
new file mode 100644
index 000000000000..f706e185822e
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/env-app/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-utility-process-env-app",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stderr/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stderr/package.json
new file mode 100644
index 000000000000..eab8b4655c27
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stderr/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-utility-process-inherit-stderr",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stdout/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stdout/package.json
new file mode 100644
index 000000000000..c067207f88f6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/utility-process/inherit-stdout/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-utility-process-inherit-stdout",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/api/window-all-closed/package.json b/devel/electron40/files/packagejsons/spec/fixtures/api/window-all-closed/package.json
new file mode 100644
index 000000000000..bd54ca2fe402
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/api/window-all-closed/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-window-all-closed",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/crash/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/crash/package.json
new file mode 100644
index 000000000000..fefcef88bea6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/crash/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-crash",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/node-options-utility-process/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/node-options-utility-process/package.json
new file mode 100644
index 000000000000..41ec34b06de6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/node-options-utility-process/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-node-options-utility-process",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/open-new-window-from-link/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/open-new-window-from-link/package.json
new file mode 100644
index 000000000000..ff9319a62ae9
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/open-new-window-from-link/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-open-new-window-from-link",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/refresh-page/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/refresh-page/package.json
new file mode 100644
index 000000000000..0d7231e0ecb6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/refresh-page/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-refresh-page",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/remote-control/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/remote-control/package.json
new file mode 100644
index 000000000000..1d473fd35e0e
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/remote-control/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-remote-control",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/self-module-paths/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/self-module-paths/package.json
new file mode 100644
index 000000000000..dd5fbf228960
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/self-module-paths/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-self-module-paths",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/set-path/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/set-path/package.json
new file mode 100644
index 000000000000..84edf0f3a389
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/set-path/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-set-path",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/apps/xwindow-icon/package.json b/devel/electron40/files/packagejsons/spec/fixtures/apps/xwindow-icon/package.json
new file mode 100644
index 000000000000..9e9503d422d0
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/apps/xwindow-icon/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-xwindow-icon",
+ "main": "main.js"
+ }
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check-with-headers/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check-with-headers/package.json
new file mode 100644
index 000000000000..b5362baed5a4
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check-with-headers/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-check-with-headers",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check/package.json
new file mode 100644
index 000000000000..d127bfd34929
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/check/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-check",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/initial/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/initial/package.json
new file mode 100644
index 000000000000..e207e9794961
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/initial/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-initial-app",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-json/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-json/package.json
new file mode 100644
index 000000000000..ef434f0b4091
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-json/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-update-json",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-race/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-race/package.json
new file mode 100644
index 000000000000..9fcf92e9d9f5
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-race/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-update-race",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-stack/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-stack/package.json
new file mode 100644
index 000000000000..59201c228481
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-stack/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-update-stack",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-triple-stack/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-triple-stack/package.json
new file mode 100644
index 000000000000..8da9f065c6a6
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update-triple-stack/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-update-triple-stack",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update/package.json b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update/package.json
new file mode 100644
index 000000000000..c9bb15fe643a
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/auto-update/update/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "electron-test-update",
+ "version": "1.0.0",
+ "main": "./index.js"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/esm/import-meta/package.json b/devel/electron40/files/packagejsons/spec/fixtures/esm/import-meta/package.json
new file mode 100644
index 000000000000..13ef5537eb99
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/esm/import-meta/package.json
@@ -0,0 +1,4 @@
+{
+ "main": "main.mjs",
+ "type": "module"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/esm/package/package.json b/devel/electron40/files/packagejsons/spec/fixtures/esm/package/package.json
new file mode 100644
index 000000000000..84f117c27534
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/esm/package/package.json
@@ -0,0 +1,4 @@
+{
+ "main": "index.mjs",
+ "type": "module"
+}
diff --git a/devel/electron40/files/packagejsons/spec/fixtures/snapshot-items-available/package.json b/devel/electron40/files/packagejsons/spec/fixtures/snapshot-items-available/package.json
new file mode 100644
index 000000000000..1ff551bf6ea5
--- /dev/null
+++ b/devel/electron40/files/packagejsons/spec/fixtures/snapshot-items-available/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "electron-test-snapshot-items-available",
+ "main": "main.js"
+}
diff --git a/devel/electron40/files/patch-electron_spec_api-app-spec.ts b/devel/electron40/files/patch-electron_spec_api-app-spec.ts
index bfe074db5ae0..ca4a281b8444 100644
--- a/devel/electron40/files/patch-electron_spec_api-app-spec.ts
+++ b/devel/electron40/files/patch-electron_spec_api-app-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-app-spec.ts.orig 2026-03-17 08:46:36 UTC
+--- electron/spec/api-app-spec.ts.orig 2026-04-30 19:26:43 UTC
+++ electron/spec/api-app-spec.ts
-@@ -129,11 +129,11 @@ describe('app module', () => {
+@@ -145,11 +145,11 @@ describe('app module', () => {
});
describe('app.getPreferredSystemLanguages()', () => {
@@ -14,7 +14,7 @@
const languages = app.getPreferredSystemLanguages();
if (languages.length) {
expect(languages).to.not.include('C');
-@@ -210,7 +210,7 @@ describe('app module', () => {
+@@ -226,7 +226,7 @@ describe('app module', () => {
expect(code).to.equal(123, 'exit code should be 123, if you see this please tag @MarshallOfSound');
});
@@ -23,7 +23,7 @@
const electronPath = process.execPath;
const appPath = path.join(fixturesPath, 'api', 'singleton');
appProcess = cp.spawn(electronPath, [appPath]);
-@@ -374,7 +374,7 @@ describe('app module', () => {
+@@ -390,7 +390,7 @@ describe('app module', () => {
});
// GitHub Actions macOS-13 runners used for x64 seem to have a problem with this test.
@@ -32,7 +32,7 @@
const tempFiles = [
path.join(fixturesPath, 'foo.txt'),
path.join(fixturesPath, 'bar.txt'),
-@@ -502,7 +502,7 @@ describe('app module', () => {
+@@ -518,7 +518,7 @@ describe('app module', () => {
// let w = null
// before(function () {
@@ -41,7 +41,7 @@
// this.skip()
// }
// })
-@@ -609,7 +609,7 @@ describe('app module', () => {
+@@ -625,7 +625,7 @@ describe('app module', () => {
describe('app.badgeCount', () => {
const platformIsNotSupported =
(process.platform === 'win32') ||
@@ -50,7 +50,7 @@
const expectedBadgeCount = 42;
-@@ -653,7 +653,7 @@ describe('app module', () => {
+@@ -669,7 +669,7 @@ describe('app module', () => {
});
});
@@ -59,7 +59,7 @@
const isMac = process.platform === 'darwin';
const isWin = process.platform === 'win32';
-@@ -1033,7 +1033,7 @@ describe('app module', () => {
+@@ -1049,7 +1049,7 @@ describe('app module', () => {
});
});
@@ -68,7 +68,7 @@
it('is mutable', () => {
const values = [false, true, false];
const setters: Array<(arg: boolean) => void> = [
-@@ -1302,7 +1302,7 @@ describe('app module', () => {
+@@ -1318,7 +1318,7 @@ describe('app module', () => {
});
});
@@ -77,7 +77,16 @@
let w: BrowserWindow;
before(function () {
-@@ -1437,7 +1437,7 @@ describe('app module', () => {
+@@ -1451,7 +1451,7 @@ describe('app module', () => {
+ });
+ });
+
+- ifdescribe(process.platform === 'linux')('default protocol client APIs with mocked XDG settings', () => {
++ ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('default protocol client APIs with mocked XDG settings', () => {
+ const protocol = 'electron-test-linux';
+ const desktopFileId = 'electron-test.desktop';
+ const protocolMimeType = `x-scheme-handler/${protocol}`;
+@@ -1541,7 +1541,7 @@ describe('app module', () => {
describe('getApplicationNameForProtocol()', () => {
// TODO: Linux CI doesn't have registered http & https handlers
@@ -86,7 +95,16 @@
// We can't expect particular app names here, but these protocols should
// at least have _something_ registered. Except on our Linux CI
// environment apparently.
-@@ -1455,7 +1455,7 @@ describe('app module', () => {
+@@ -1558,7 +1558,7 @@ describe('app module', () => {
+ expect(app.getApplicationNameForProtocol('bogus-protocol://')).to.equal('');
+ });
+
+- ifdescribe(process.platform === 'linux')('on Linux with mocked XDG dirs', () => {
++ ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')('on Linux with mocked XDG dirs', () => {
+ const fixtureApp = path.join(fixturesPath, 'api', 'protocol-name');
+ const desktopFileId = 'mock-browser.desktop';
+ const mockScheme = 'mockproto';
+@@ -1685,7 +1685,7 @@ describe('app module', () => {
});
});
@@ -95,7 +113,7 @@
it('returns promise rejection for a bogus protocol', async function () {
await expect(
app.getApplicationInfoForProtocol('bogus-protocol://')
-@@ -1528,7 +1528,7 @@ describe('app module', () => {
+@@ -1758,7 +1758,7 @@ describe('app module', () => {
});
// FIXME Get these specs running on Linux CI
@@ -104,7 +122,7 @@
const iconPath = path.join(__dirname, 'fixtures/assets/icon.ico');
const sizes = {
small: 16,
-@@ -1610,7 +1610,7 @@ describe('app module', () => {
+@@ -1840,7 +1840,7 @@ describe('app module', () => {
expect(entry.memory).to.have.property('privateBytes').that.is.greaterThan(0);
}
@@ -113,7 +131,7 @@
expect(entry.sandboxed).to.be.a('boolean');
}
-@@ -1684,7 +1684,7 @@ describe('app module', () => {
+@@ -1914,7 +1914,7 @@ describe('app module', () => {
it('succeeds with complete GPUInfo', async () => {
const completeInfo = await getGPUInfo('complete');
@@ -122,7 +140,7 @@
// For linux and macOS complete info is same as basic info
await verifyBasicGPUInfo(completeInfo);
const basicInfo = await getGPUInfo('basic');
-@@ -1708,7 +1708,7 @@ describe('app module', () => {
+@@ -1938,7 +1938,7 @@ describe('app module', () => {
});
});
diff --git a/devel/electron40/files/patch-electron_spec_api-protocol-spec.ts b/devel/electron40/files/patch-electron_spec_api-protocol-spec.ts
index d416171ce325..3c830a05211e 100644
--- a/devel/electron40/files/patch-electron_spec_api-protocol-spec.ts
+++ b/devel/electron40/files/patch-electron_spec_api-protocol-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-protocol-spec.ts.orig 2026-04-15 14:05:49 UTC
+--- electron/spec/api-protocol-spec.ts.orig 2026-04-30 19:26:43 UTC
+++ electron/spec/api-protocol-spec.ts
-@@ -1757,7 +1757,7 @@ describe('protocol module', () => {
+@@ -1899,7 +1899,7 @@ describe('protocol module', () => {
// TODO(nornagon): this test doesn't pass on Linux currently, investigate.
// test is also flaky on CI on macOS so it is currently disabled there as well.
diff --git a/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts b/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts
index bf94cf020797..8eacc7f74744 100644
--- a/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts
+++ b/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-web-contents-spec.ts.orig 2026-04-21 14:16:24 UTC
+--- electron/spec/api-web-contents-spec.ts.orig 2026-04-30 19:26:43 UTC
+++ electron/spec/api-web-contents-spec.ts
-@@ -1244,7 +1244,7 @@ describe('webContents module', () => {
+@@ -1245,7 +1245,7 @@ describe('webContents module', () => {
// back to OpenFolder() which does a blocking DirectoryExists() on the UI
// thread (pre-existing behavior). Workspace-gating is covered by the test
// above.
@@ -9,7 +9,7 @@
const w = new BrowserWindow({ show: false });
await openDevTools(w);
-@@ -2979,7 +2979,7 @@ describe('webContents module', () => {
+@@ -2990,7 +2990,7 @@ describe('webContents module', () => {
});
// TODO(codebytere): OOPIF printing is disabled on Linux at the moment due to crashes.
diff --git a/devel/electron40/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5 b/devel/electron40/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
index 6b11cfd76a56..a8d52fa175c3 100644
--- a/devel/electron40/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
+++ b/devel/electron40/files/patch-third__party_blink_renderer_platform_runtime__enabled__features.json5
@@ -1,4 +1,4 @@
---- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2026-01-18 20:29:18 UTC
+--- third_party/blink/renderer/platform/runtime_enabled_features.json5.orig 2026-05-02 13:49:55 UTC
+++ third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -362,7 +362,7 @@
"default": "",
@@ -108,7 +108,7 @@
status: "experimental",
public: true,
base_feature_status: "enabled",
-@@ -5420,7 +5420,7 @@
+@@ -5425,7 +5425,7 @@
name: "UnrestrictedSharedArrayBuffer",
base_feature: "none",
origin_trial_feature_name: "UnrestrictedSharedArrayBuffer",
@@ -117,7 +117,7 @@
},
// Enables using policy-controlled feature "usb-unrestricted" to allow
*** 24 LINES SKIPPED ***