+"use strict";var plugin=(()=>{var j=Object.create;var R=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var c=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var N=(e,r)=>{for(var t in r)R(e,t,{get:r[t],enumerable:!0})},U=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of F(r))!W.call(e,o)&&o!==t&&R(e,o,{get:()=>r[o],enumerable:!(n=M(r,o))||n.enumerable});return e};var T=(e,r,t)=>(t=e!=null?j(H(e)):{},U(r||!e||!e.__esModule?R(t,"default",{value:e,enumerable:!0}):t,e)),G=e=>U(R({},"__esModule",{value:!0}),e);var te={};N(te,{default:()=>re});var P=c("@yarnpkg/core");var k=c("@yarnpkg/core");var C=T(c("assert")),A=c("semver"),y=c("@yarnpkg/fslib");var m=T(c("fs")),p=c("path");function S(e,r){let t=e;for(let n=0;n<1e3;n++){let o=(0,p.resolve)(t,"package.json");if(m.default.existsSync(o)&&r(o))return t;let i=(0,p.dirname)(t);if(i===t)return;t=i}throw new Error(`Iteration limit reached when searching for root package.json at ${e}`)}function I(e){let r=S(e,()=>!0);if(!r)throw new Error(`No package.json found while searching for package root of ${e}`);return r}function _(e){if(!m.default.existsSync((0,p.resolve)(e,"src")))throw new Error("Tried to access monorepo package root dir outside of Backstage repository");return(0,p.resolve)(e,"../..")}function b(e){let r=I(e),t=m.default.realpathSync(process.cwd()).replace(/^[a-z]:/,s=>s.toLocaleUpperCase("en-US")),n="",o=()=>(n||(n=_(r)),n),a="",i=()=>(a||(a=S(t,s=>{try{let f=m.default.readFileSync(s,"utf8");return!!JSON.parse(f).workspaces}catch(f){throw new Error(`Failed to parse package.json file while searching for root, ${f}`)}})??t),a);return{ownDir:r,get ownRoot(){return o()},targetDir:t,get targetRoot(){return i()},resolveOwn:(...s)=>(0,p.resolve)(r,...s),resolveOwnRoot:(...s)=>(0,p.resolve)(o(),...s),resolveTarget:(...s)=>(0,p.resolve)(t,...s),resolveTargetRoot:(...s)=>(0,p.resolve)(i(),...s)}}var x="backstage.json";var L=e=>{let r=!1,t;return()=>(r||(t=e(),r=!0),t)};var u=c("@yarnpkg/fslib");var V=()=>u.npath.toPortablePath(b(u.npath.fromPortablePath(u.ppath.cwd())).targetRoot);var h=L(()=>{let e=y.ppath.join(V(),x),r=null;try{r=(0,A.valid)(y.xfs.readJsonSync(e).version),(0,C.default)(r!==null)}catch{throw new Error("Valid version string not found in backstage.json")}return r});var w=c("@yarnpkg/core");var J="https://versions.backstage.io",z="https://raw.githubusercontent.com/backstage/versions/main";function K(e,r){return new Promise((t,n)=>{let o=setTimeout(()=>{r.aborted||t()},e);r.addEventListener("abort",()=>{clearTimeout(o),n(new Error("Aborted"))})})}async function Y(e,r,t){let n=new AbortController,o=new AbortController,a=e(n.signal).then(s=>(o.abort(),s)),i=K(t,o.signal).then(()=>r(o.signal)).then(s=>(n.abort(),s));return Promise.any([a,i]).catch(()=>a)}async function B(e){let r=encodeURIComponent(e.version),t=e.fetch??fetch,n=e.versionsBaseUrl??J,o=e.gitHubRawBaseUrl??z,a=await Y(i=>t(`${n}/v1/releases/${r}/manifest.json`,{signal:i}),i=>t(`${o}/v1/releases/${r}/manifest.json`,{signal:i}),500);if(a.status===404)throw new Error(`No release found for ${e.version} version`);if(a.status!==200)throw new Error(`Unexpected response status ${a.status} when fetching release from ${a.url}.`);return a.json()}var g="backstage:";var d=async(e,r)=>{let t=w.structUtils.stringifyIdent(e),n=w.structUtils.parseRange(e.range);if(n.protocol!==g)throw new Error(`Unsupported version protocol in version range "${e.range}" for package ${t}`);if(n.selector!=="^")throw new Error(`Unexpected version selector "${n.selector}" for package ${t}`);let o=h(),i=(await B({version:o,fetch:async s=>{let f=await w.httpUtils.get(s,{configuration:r,jsonResponse:!0});return{status:200,url:s,json:()=>f}}})).packages.find(s=>s.name===t);if(!i)throw new Error(`Package ${t} not found in manifest for Backstage v${o}. This means the specified package is not included in this Backstage release. This may imply the package has been replaced with an alternative - please review the documentation for the package. If you need to continue using this package, it will be necessary to switch to manually managing its version.`);return i.version};var q=e=>k.structUtils.parseRange(e).protocol===g,Q=(e,r,t)=>e!=="dependencies"?e:t.manifest.ensureDependencyMeta(k.structUtils.makeDescriptor(r,"unknown")).optional?"optionalDependencies":e,D=async(e,r)=>{for(let t of["dependencies","devDependencies"]){let n=Array.from(e.manifest.getForScope(t).values()).filter(o=>o.range.startsWith(g));for(let o of n){let a=k.structUtils.stringifyIdent(o);if(k.structUtils.parseRange(o.range).selector!=="^")throw new Error(`Unexpected version range "${o.range}" for dependency on "${a}"`);let s=Q(t,o,e);r[s][a]=`^${await d(o,e.project.configuration)}`}}if(["dependencies","devDependencies","optionalDependencies"].some(t=>Object.values(r[t]??{}).some(q)))throw new Error(`Failed to replace all "backstage:" ranges in manifest for ${r.name}`)};var O=c("@yarnpkg/core");var $=async(e,r)=>{let t=O.structUtils.parseRange(e.range);if(t.protocol!==g)return e;if(t.selector!=="^")throw new Error(`Invalid backstage: version range found: ${e.range}`);return O.structUtils.bindDescriptor(e,{backstage:h(),npm:await d(e,r.configuration)})};var l=c("@yarnpkg/core"),E=c("@yarnpkg/plugin-npm");var v=class e{static protocol=g;supportsDescriptor=r=>r.range.startsWith(e.protocol);async getCandidates(r,t,n){let o=l.structUtils.parseRange(r.range).params?.npm;if(!o||Array.isArray(o))throw new Error(`Missing npm parameter on backstage: range "${r.range}"`);return new E.NpmSemverResolver().getCandidates(l.structUtils.makeDescriptor(r,`npm:^${o}`),t,n)}getResolutionDependencies(r){let t=l.structUtils.parseRange(r.range).params?.npm;if(!t)throw new Error(`Missing npm parameter on backstage: range "${r.range}".`);return{[l.structUtils.stringifyIdent(r)]:l.structUtils.makeDescriptor(r,`npm:^${t}`)}}async getSatisfying(r,t,n,o){let a=r,i=l.structUtils.parseRange(a.range);if(i.protocol===g){let s=i.params?.npm;a=l.structUtils.makeDescriptor(r,`npm:^${s}`)}return new E.NpmSemverResolver().getSatisfying(a,t,n,o)}bindDescriptor=r=>r;supportsLocator=()=>!1;shouldPersistResolution=()=>{throw new Error("Unreachable: BackstageNpmResolver should never persist resolution as it uses npm: protocol")};resolve=async()=>{throw new Error("Unreachable: BackstageNpmResolver should never resolve as it uses npm: protocol")}};var X="\x1B[31;1m",Z="\x1B[0m";P.semverUtils.satisfiesWithPrereleases(P.YarnVersion,"^4.1.1")||(console.error(),console.error(`${X}Unsupported yarn version${Z}: The Backstage yarn plugin only works with yarn ^4.1.1. Please upgrade yarn, or remove this plugin with "yarn plugin remove @yarnpkg/plugin-backstage".`),console.error());var ee={hooks:{reduceDependency:$,beforeWorkspacePacking:D},resolvers:[v]},re=ee;return G(te);})();
0 commit comments