+"use strict";var plugin=(()=>{var V=Object.create;var w=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var c=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var W=(e,t)=>{for(var r in t)w(e,r,{get:t[r],enumerable:!0})},$=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!F.call(e,o)&&o!==r&&w(e,o,{get:()=>t[o],enumerable:!(n=A(t,o))||n.enumerable});return e};var B=(e,t,r)=>(r=e!=null?V(M(e)):{},$(t||!e||!e.__esModule?w(r,"default",{value:e,enumerable:!0}):r,e)),G=e=>$(w({},"__esModule",{value:!0}),e);var ee={};W(ee,{default:()=>Z});var y=c("@yarnpkg/core");var d=c("@yarnpkg/core");var m=c("@yarnpkg/core");var _="https://versions.backstage.io",I="https://raw.githubusercontent.com/backstage/versions/main";function N(e,t){return new Promise((r,n)=>{let o=setTimeout(()=>{t.aborted||r()},e);t.addEventListener("abort",()=>{clearTimeout(o),n(new Error("Aborted"))})})}async function J(e,t,r){let n=new AbortController,o=new AbortController,a=e(n.signal).then(s=>(o.abort(),s)),i=N(r,o.signal).then(()=>t(o.signal)).then(s=>(n.abort(),s));return Promise.any([a,i]).catch(()=>a)}async function v(e){let t=encodeURIComponent(e.version),r=e.fetch??fetch,n=await J(o=>r(`${_}/v1/releases/${t}/manifest.json`,{signal:o}),o=>r(`${I}/v1/releases/${t}/manifest.json`,{signal:o}),500);if(n.status===404)throw new Error(`No release found for ${e.version} version`);if(n.status!==200)throw new Error(`Unexpected response status ${n.status} when fetching release from ${n.url}.`);return n.json()}var f="backstage:";var S=B(c("assert")),j=c("semver"),k=c("@yarnpkg/fslib");var l=B(c("fs")),p=c("path");function E(e,t){let r=e;for(let n=0;n<1e3;n++){let o=(0,p.resolve)(r,"package.json");if(l.default.existsSync(o)&&t(o))return r;let i=(0,p.dirname)(r);if(i===r)return;r=i}throw new Error(`Iteration limit reached when searching for root package.json at ${e}`)}function H(e){let t=E(e,()=>!0);if(!t)throw new Error(`No package.json found while searching for package root of ${e}`);return t}function z(e){if(!l.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 R(e){let t=H(e),r=l.default.realpathSync(process.cwd()).replace(/^[a-z]:/,s=>s.toLocaleUpperCase("en-US")),n="",o=()=>(n||(n=z(t)),n),a="",i=()=>(a||(a=E(r,s=>{try{let g=l.default.readFileSync(s,"utf8"),U=JSON.parse(g);return Boolean(U.workspaces)}catch(g){throw new Error(`Failed to parse package.json file while searching for root, ${g}`)}})??r),a);return{ownDir:t,get ownRoot(){return o()},targetDir:r,get targetRoot(){return i()},resolveOwn:(...s)=>(0,p.resolve)(t,...s),resolveOwnRoot:(...s)=>(0,p.resolve)(o(),...s),resolveTarget:(...s)=>(0,p.resolve)(r,...s),resolveTargetRoot:(...s)=>(0,p.resolve)(i(),...s)}}var P="backstage.json";var T=e=>{let t=!1,r;return()=>(t||(r=e(),t=!0),r)};var u=c("@yarnpkg/fslib");var D=()=>u.npath.toPortablePath(R(u.npath.fromPortablePath(u.ppath.cwd())).targetRoot);var L=T(()=>{let e=k.ppath.join(D(),P),t=null;try{t=(0,j.valid)(k.xfs.readJsonSync(e).version),(0,S.default)(t!==null)}catch{throw new Error("Valid version string not found in backstage.json")}return t});var h=async(e,t)=>{let r=m.structUtils.stringifyIdent(e),n=m.structUtils.parseRange(e.range);if(n.protocol!==f)throw new Error(`Unsupported version protocol in version range "${e.range}" for package ${r}`);if(n.selector!=="^")throw new Error(`Unexpected version selector "${n.selector}" for package ${r}`);let o=L(),i=(await v({version:o,fetch:async s=>{let g=await m.httpUtils.get(s,{configuration:t,jsonResponse:!0});return{status:200,url:s,json:()=>g}}})).packages.find(s=>s.name===r);if(!i)throw new Error(`Package ${r} 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 K=e=>d.structUtils.parseRange(e).protocol===f,Y=(e,t,r)=>e!=="dependencies"?e:r.manifest.ensureDependencyMeta(d.structUtils.makeDescriptor(t,"unknown")).optional?"optionalDependencies":e,x=async(e,t)=>{for(let r of["dependencies","devDependencies"]){let n=Array.from(e.manifest.getForScope(r).values()).filter(o=>o.range.startsWith(f));for(let o of n){let a=d.structUtils.stringifyIdent(o);if(d.structUtils.parseRange(o.range).selector!=="^")throw new Error(`Unexpected version range "${o.range}" for dependency on "${a}"`);let s=Y(r,o,e);t[s][a]=`^${await h(o,e.project.configuration)}`}}if(["dependencies","devDependencies","optionalDependencies"].some(r=>Object.values(t[r]??{}).some(K)))throw new Error(`Failed to replace all "backstage:" ranges in manifest for ${t.name}`)};var b=c("@yarnpkg/core");var O=async(e,t)=>b.structUtils.parseRange(e.range).protocol===f?b.structUtils.makeDescriptor(e,`npm:^${await h(e,t.configuration)}`):e;var q="\x1B[31;1m",Q="\x1B[0m";y.semverUtils.satisfiesWithPrereleases(y.YarnVersion,"^4.1.1")||(console.error(),console.error(`${q}Unsupported yarn version${Q}: 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 X={hooks:{reduceDependency:O,beforeWorkspacePacking:x}},Z=X;return G(ee);})();
0 commit comments