Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions workspaces/theme/.changeset/clever-walls-drive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@red-hat-developer-hub/backstage-plugin-theme': patch
---

Adopt Backstage yarn plugin for Backstage package version management
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* eslint-disable */
//prettier-ignore
module.exports = {
name: "@yarnpkg/plugin-backstage",
factory: function (require) {
"use strict";var plugin=(()=>{var nr=Object.create;var $=Object.defineProperty;var or=Object.getOwnPropertyDescriptor;var sr=Object.getOwnPropertyNames;var ir=Object.getPrototypeOf,ar=Object.prototype.hasOwnProperty;var a=(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 l=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),cr=(e,r)=>{for(var t in r)$(e,t,{get:r[t],enumerable:!0})},se=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of sr(r))!ar.call(e,o)&&o!==t&&$(e,o,{get:()=>r[o],enumerable:!(n=or(r,o))||n.enumerable});return e};var U=(e,r,t)=>(t=e!=null?nr(ir(e)):{},se(r||!e||!e.__esModule?$(t,"default",{value:e,enumerable:!0}):t,e)),ur=e=>se($({},"__esModule",{value:!0}),e);var fe=l((Zr,ue)=>{ue.exports=ce;ce.sync=lr;var ie=a("fs");function pr(e,r){var t=r.pathExt!==void 0?r.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var n=0;n<t.length;n++){var o=t[n].toLowerCase();if(o&&e.substr(-o.length).toLowerCase()===o)return!0}return!1}function ae(e,r,t){return!e.isSymbolicLink()&&!e.isFile()?!1:pr(r,t)}function ce(e,r,t){ie.stat(e,function(n,o){t(n,n?!1:ae(o,e,r))})}function lr(e,r){return ae(ie.statSync(e),e,r)}});var de=l((et,ge)=>{ge.exports=le;le.sync=mr;var pe=a("fs");function le(e,r,t){pe.stat(e,function(n,o){t(n,n?!1:me(o,r))})}function mr(e,r){return me(pe.statSync(e),r)}function me(e,r){return e.isFile()&&gr(e,r)}function gr(e,r){var t=e.mode,n=e.uid,o=e.gid,s=r.uid!==void 0?r.uid:process.getuid&&process.getuid(),i=r.gid!==void 0?r.gid:process.getgid&&process.getgid(),c=parseInt("100",8),p=parseInt("010",8),u=parseInt("001",8),d=c|p,m=t&u||t&p&&o===i||t&c&&n===s||t&d&&s===0;return m}});var we=l((tt,he)=>{var rt=a("fs"),D;process.platform==="win32"||global.TESTING_WINDOWS?D=fe():D=de();he.exports=M;M.sync=dr;function M(e,r,t){if(typeof r=="function"&&(t=r,r={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(n,o){M(e,r||{},function(s,i){s?o(s):n(i)})})}D(e,r||{},function(n,o){n&&(n.code==="EACCES"||r&&r.ignoreErrors)&&(n=null,o=!1),t(n,o)})}function dr(e,r){try{return D.sync(e,r||{})}catch(t){if(r&&r.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var Pe=l((nt,Re)=>{var v=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",ye=a("path"),hr=v?";":":",xe=we(),Ee=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),ve=(e,r)=>{let t=r.colon||hr,n=e.match(/\//)||v&&e.match(/\\/)?[""]:[...v?[process.cwd()]:[],...(r.path||process.env.PATH||"").split(t)],o=v?r.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=v?o.split(t):[""];return v&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:n,pathExt:s,pathExtExe:o}},ke=(e,r,t)=>{typeof r=="function"&&(t=r,r={}),r||(r={});let{pathEnv:n,pathExt:o,pathExtExe:s}=ve(e,r),i=[],c=u=>new Promise((d,m)=>{if(u===n.length)return r.all&&i.length?d(i):m(Ee(e));let g=n[u],R=/^".*"$/.test(g)?g.slice(1,-1):g,x=ye.join(R,e),L=!R&&/^\.[\\\/]/.test(e)?e.slice(0,2)+x:x;d(p(L,u,0))}),p=(u,d,m)=>new Promise((g,R)=>{if(m===o.length)return g(c(d+1));let x=o[m];xe(u+x,{pathExt:s},(L,tr)=>{if(!L&&tr)if(r.all)i.push(u+x);else return g(u+x);return g(p(u,d,m+1))})});return t?c(0).then(u=>t(null,u),t):c(0)},wr=(e,r)=>{r=r||{};let{pathEnv:t,pathExt:n,pathExtExe:o}=ve(e,r),s=[];for(let i=0;i<t.length;i++){let c=t[i],p=/^".*"$/.test(c)?c.slice(1,-1):c,u=ye.join(p,e),d=!p&&/^\.[\\\/]/.test(e)?e.slice(0,2)+u:u;for(let m=0;m<n.length;m++){let g=d+n[m];try{if(xe.sync(g,{pathExt:o}))if(r.all)s.push(g);else return g}catch{}}}if(r.all&&s.length)return s;if(r.nothrow)return null;throw Ee(e)};Re.exports=ke;ke.sync=wr});var Oe=l((ot,W)=>{"use strict";var Se=(e={})=>{let r=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(r).reverse().find(n=>n.toUpperCase()==="PATH")||"Path"};W.exports=Se;W.exports.default=Se});var Te=l((st,$e)=>{"use strict";var be=a("path"),yr=Pe(),xr=Oe();function Ce(e,r){let t=e.options.env||process.env,n=process.cwd(),o=e.options.cwd!=null,s=o&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let i;try{i=yr.sync(e.command,{path:t[xr({env:t})],pathExt:r?be.delimiter:void 0})}catch{}finally{s&&process.chdir(n)}return i&&(i=be.resolve(o?e.options.cwd:"",i)),i}function Er(e){return Ce(e)||Ce(e,!0)}$e.exports=Er});var De=l((it,q)=>{"use strict";var I=/([()\][%!^"`<>&|;, *?])/g;function vr(e){return e=e.replace(I,"^$1"),e}function kr(e,r){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(I,"^$1"),r&&(e=e.replace(I,"^$1")),e}q.exports.command=vr;q.exports.argument=kr});var Ae=l((at,Be)=>{"use strict";Be.exports=/^#!(.*)/});var Le=l((ct,Ne)=>{"use strict";var Rr=Ae();Ne.exports=(e="")=>{let r=e.match(Rr);if(!r)return null;let[t,n]=r[0].replace(/#! ?/,"").split(" "),o=t.split("/").pop();return o==="env"?n:n?`${o} ${n}`:o}});var je=l((ut,Ue)=>{"use strict";var H=a("fs"),Pr=Le();function Sr(e){let t=Buffer.alloc(150),n;try{n=H.openSync(e,"r"),H.readSync(n,t,0,150,0),H.closeSync(n)}catch{}return Pr(t.toString())}Ue.exports=Sr});var We=l((ft,Me)=>{"use strict";var Or=a("path"),Fe=Te(),Ve=De(),br=je(),Cr=process.platform==="win32",$r=/\.(?:com|exe)$/i,Tr=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Dr(e){e.file=Fe(e);let r=e.file&&br(e.file);return r?(e.args.unshift(e.file),e.command=r,Fe(e)):e.file}function Br(e){if(!Cr)return e;let r=Dr(e),t=!$r.test(r);if(e.options.forceShell||t){let n=Tr.test(r);e.command=Or.normalize(e.command),e.command=Ve.command(e.command),e.args=e.args.map(s=>Ve.argument(s,n));let o=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${o}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function Ar(e,r,t){r&&!Array.isArray(r)&&(t=r,r=null),r=r?r.slice(0):[],t=Object.assign({},t);let n={command:e,args:r,options:t,file:void 0,original:{command:e,args:r}};return t.shell?n:Br(n)}Me.exports=Ar});var He=l((pt,qe)=>{"use strict";var _=process.platform==="win32";function G(e,r){return Object.assign(new Error(`${r} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${r} ${e.command}`,path:e.command,spawnargs:e.args})}function Nr(e,r){if(!_)return;let t=e.emit;e.emit=function(n,o){if(n==="exit"){let s=Ie(o,r);if(s)return t.call(e,"error",s)}return t.apply(e,arguments)}}function Ie(e,r){return _&&e===1&&!r.file?G(r.original,"spawn"):null}function Lr(e,r){return _&&e===1&&!r.file?G(r.original,"spawnSync"):null}qe.exports={hookChildProcess:Nr,verifyENOENT:Ie,verifyENOENTSync:Lr,notFoundError:G}});var Je=l((lt,k)=>{"use strict";var _e=a("child_process"),J=We(),K=He();function Ge(e,r,t){let n=J(e,r,t),o=_e.spawn(n.command,n.args,n.options);return K.hookChildProcess(o,n),o}function Ur(e,r,t){let n=J(e,r,t),o=_e.spawnSync(n.command,n.args,n.options);return o.error=o.error||K.verifyENOENTSync(o.status,n),o}k.exports=Ge;k.exports.spawn=Ge;k.exports.sync=Ur;k.exports._parse=J;k.exports._enoent=K});var zr={};cr(zr,{default:()=>Kr});var N=a("@yarnpkg/core");var b=a("@yarnpkg/core");var X=U(a("assert")),Qe=a("semver"),A=a("@yarnpkg/fslib");var T=U(a("fs")),E=a("path");function fr(e,r){let t=e;for(let n=0;n<1e3;n++){let o=(0,E.resolve)(t,"package.json");if(T.default.existsSync(o)&&r(o))return t;let i=(0,E.dirname)(t);if(i===t)return;t=i}throw new Error(`Iteration limit reached when searching for root package.json at ${e}`)}var h;var j=class{#t;#r;#e;get dir(){if(h)return h.dir;let r=process.cwd();return this.#r!==void 0&&this.#t===r?this.#r:(this.#t=r,this.#e=void 0,this.#r=T.default.realpathSync(r).replace(/^[a-z]:/,t=>t.toLocaleUpperCase("en-US")),this.#r)}get rootDir(){if(h)return h.rootDir;let r=this.dir;return this.#e!==void 0?this.#e:(this.#e=fr(r,t=>{try{let n=T.default.readFileSync(t,"utf8");return!!JSON.parse(n).workspaces}catch(n){throw new Error(`Failed to parse package.json file while searching for root, ${n}`)}})??r,this.#e)}resolve=(...r)=>h?h.resolve(...r):(0,E.resolve)(this.dir,...r);resolveRoot=(...r)=>h?h.resolveRoot(...r):(0,E.resolve)(this.rootDir,...r)},F=new j;var V="backstage.json";var Fr=U(Je());function z(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let r=e;return!(typeof r.name!="string"||r.name===""||typeof r.message!="string")}function Ke(e){if(z(e))return e;if(typeof e=="string")return new Error(e);try{return new Error(`unknown error '${e}'`)}catch{return new Error(`unknown error of type '${typeof e}'`)}}var B=class extends Error{cause;constructor(r,t){let n=t!==void 0?Ke(t):void 0,o=r;if(n!==void 0){let s=String(n),i=s!=="[object Object]"?s:`${n.name}: ${n.message}`;o?o+=`; caused by ${i}`:o=`caused by ${i}`}super(o),Error.captureStackTrace?.(this,this.constructor),(!this.name||this.name==="Error")&&this.constructor.name!=="Error"&&(this.name=this.constructor.name),this.cause=n}};var P=class extends B{constructor(r,t){super(r,t),this.name=z(t)?t.name:"Error"}};var ze=e=>{let r=!1,t;return()=>(r||(t=e(),r=!0),t)};var Xe=a("@yarnpkg/fslib");var Ye=()=>Xe.npath.toPortablePath(F.rootDir);var S=ze(()=>{let e=A.ppath.join(Ye(),V),r=null;try{let t=A.xfs.readJsonSync(e).version;(0,X.default)(t!==void 0,"Version field is missing"),r=(0,Qe.valid)(t),(0,X.default)(r!==null,"Version exists but is not valid semver")}catch(t){throw new P("Valid version string not found in backstage.json",t)}return r});var O=a("@yarnpkg/core"),Ze=a("@yarnpkg/fslib");var Vr="https://versions.backstage.io",Mr="https://raw.githubusercontent.com/backstage/versions/main";function Wr(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 Ir(e,r,t){let n=new AbortController,o=new AbortController,s=e(n.signal).then(c=>(o.abort(),c)),i=Wr(t,o.signal).then(()=>r(o.signal)).then(c=>(n.abort(),c));return Promise.any([s,i]).catch(()=>s)}async function Y(e){let r=encodeURIComponent(e.version),t=e.fetch??fetch,n=e.versionsBaseUrl??Vr,o=e.gitHubRawBaseUrl??Mr,s=await Ir(i=>t(`${n}/v1/releases/${r}/manifest.json`,{signal:i}),i=>t(`${o}/v1/releases/${r}/manifest.json`,{signal:i}),500);if(s.status===404)throw new Error(`No release found for ${e.version} version`);if(s.status!==200)throw new Error(`Unexpected response status ${s.status} when fetching release from ${s.url}.`);return s.json()}var f="backstage:";var Q=a("process"),y=async(e,r)=>{let t=O.structUtils.stringifyIdent(e),n=O.structUtils.parseRange(e.range);if(n.protocol!==f)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=S(),s=Q.env.BACKSTAGE_MANIFEST_FILE,c=(s?await Ze.xfs.readJsonSync(s):await Y({version:o,versionsBaseUrl:Q.env.BACKSTAGE_VERSIONS_BASE_URL,fetch:async p=>{let u=await O.httpUtils.get(p,{configuration:r,jsonResponse:!0});return{status:200,url:p,json:()=>u}}})).packages.find(p=>p.name===t);if(!c)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 c.version};var qr=e=>b.structUtils.parseRange(e).protocol===f,Hr=(e,r,t)=>e!=="dependencies"?e:t.manifest.ensureDependencyMeta(b.structUtils.makeDescriptor(r,"unknown")).optional?"optionalDependencies":e,Z=async(e,r)=>{for(let t of["dependencies","devDependencies"]){let n=Array.from(e.manifest.getForScope(t).values()).filter(o=>o.range.startsWith(f));for(let o of n){let s=b.structUtils.stringifyIdent(o);if(b.structUtils.parseRange(o.range).selector!=="^")throw new Error(`Unexpected version range "${o.range}" for dependency on "${s}"`);let c=Hr(t,o,e);r[c][s]=`^${await y(o,e.project.configuration)}`}}if(["dependencies","devDependencies","optionalDependencies"].some(t=>Object.values(r[t]??{}).some(qr)))throw new Error(`Failed to replace all "backstage:" ranges in manifest for ${r.name}`)};var ee=a("@yarnpkg/core");var re=async(e,r)=>{let t=ee.structUtils.parseRange(e.range);if(t.protocol!==f)return e;if(t.selector!=="^")throw new Error(`Invalid backstage: version range found: ${e.range}`);return ee.structUtils.bindDescriptor(e,{backstage:S(),npm:await y(e,r.configuration)})};var er=a("@yarnpkg/core");var te=async(e,r,t,n)=>{let o=er.structUtils.parseRange(t.range);if(t.scope==="backstage"&&o.protocol!==f){let s=t.range;try{t.range=`${f}^`,await y(t,e.project.configuration),console.info(`Setting ${t.scope}/${t.name} to ${f}^`)}catch{t.range=s}}};var rr=a("@yarnpkg/core");var ne=async(e,r,t,n)=>{let o=rr.structUtils.parseRange(n.range);n.scope==="backstage"&&o.protocol!==f&&console.warn(`${n.name} should be set to "${f}^" instead of "${n.range}". Make sure this change is intentional and not a mistake.`)};var w=a("@yarnpkg/core"),oe=a("@yarnpkg/plugin-npm");var C=class e{static protocol=f;supportsDescriptor=r=>r.range.startsWith(e.protocol);async getCandidates(r,t,n){let o=w.structUtils.parseRange(r.range).params?.npm;if(!o||Array.isArray(o))throw new Error(`Missing npm parameter on backstage: range "${r.range}"`);return new oe.NpmSemverResolver().getCandidates(w.structUtils.makeDescriptor(r,`npm:^${o}`),t,n)}getResolutionDependencies(r){let t=w.structUtils.parseRange(r.range).params?.npm;if(!t)throw new Error(`Missing npm parameter on backstage: range "${r.range}".`);return{[w.structUtils.stringifyIdent(r)]:w.structUtils.makeDescriptor(r,`npm:^${t}`)}}async getSatisfying(r,t,n,o){let s=r,i=w.structUtils.parseRange(s.range);if(i.protocol===f){let c=i.params?.npm;s=w.structUtils.makeDescriptor(r,`npm:^${c}`)}return new oe.NpmSemverResolver().getSatisfying(s,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 _r="\x1B[31;1m",Gr="\x1B[0m";N.semverUtils.satisfiesWithPrereleases(N.YarnVersion,"^4.1.1")||(console.error(),console.error(`${_r}Unsupported yarn version${Gr}: 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 Jr={hooks:{afterWorkspaceDependencyAddition:te,afterWorkspaceDependencyReplacement:ne,reduceDependency:re,beforeWorkspacePacking:Z},resolvers:[C]},Kr=Jr;return ur(zr);})();
return plugin;
}
};
4 changes: 4 additions & 0 deletions workspaces/theme/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
plugins:
- checksum: ae08ece83681cc6d217ebb53d9e00a06ea215383f34af0681a05da5720e018a6b0d98012112f9368e9fe2328b19919baba37ada25f46c4614b894765a9338db9
path: .yarn/plugins/@yarnpkg/plugin-backstage.cjs
spec: 'https://versions.backstage.io/v1/tags/main/yarn-plugin'
8 changes: 4 additions & 4 deletions workspaces/theme/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@
},
"devDependencies": {
"@axe-core/playwright": "^4.11.0",
"@backstage/cli": "^0.36.5",
"@backstage/cli-defaults": "^0.1.5",
"@backstage/e2e-test-utils": "^0.1.2",
"@backstage/repo-tools": "^0.19.0",
"@backstage/cli": "backstage:^",
"@backstage/cli-defaults": "backstage:^",
"@backstage/e2e-test-utils": "backstage:^",
"@backstage/repo-tools": "backstage:^",
"@changesets/cli": "^2.27.1",
"@jest/environment-jsdom-abstract": "^30.3.0",
"@playwright/test": "1.62.1",
Expand Down
56 changes: 28 additions & 28 deletions workspaces/theme/packages/app-legacy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,33 @@
"lint": "backstage-cli package lint"
},
"dependencies": {
"@backstage/app-defaults": "^1.7.11",
"@backstage/catalog-model": "^1.10.0",
"@backstage/cli": "^0.36.5",
"@backstage/core-app-api": "^1.20.4",
"@backstage/core-components": "^0.18.13",
"@backstage/core-plugin-api": "^1.12.9",
"@backstage/integration-react": "^1.2.21",
"@backstage/plugin-api-docs": "^0.14.4",
"@backstage/plugin-catalog": "^2.0.8",
"@backstage/plugin-catalog-common": "^1.1.10",
"@backstage/plugin-catalog-graph": "^0.6.7",
"@backstage/plugin-catalog-import": "^0.13.17",
"@backstage/plugin-catalog-react": "^3.2.2",
"@backstage/plugin-kubernetes": "^0.12.22",
"@backstage/plugin-notifications": "^0.5.20",
"@backstage/plugin-org": "^0.7.8",
"@backstage/plugin-permission-react": "^0.5.4",
"@backstage/plugin-scaffolder": "^1.38.2",
"@backstage/plugin-search": "^1.7.7",
"@backstage/plugin-search-react": "^1.11.7",
"@backstage/plugin-signals": "^0.0.34",
"@backstage/plugin-techdocs": "^1.18.0",
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.39",
"@backstage/plugin-techdocs-react": "^1.3.14",
"@backstage/plugin-user-settings": "^0.9.6",
"@backstage/theme": "^0.7.3",
"@backstage/ui": "^0.17.1",
"@backstage/app-defaults": "backstage:^",
"@backstage/catalog-model": "backstage:^",
"@backstage/cli": "backstage:^",
"@backstage/core-app-api": "backstage:^",
"@backstage/core-components": "backstage:^",
"@backstage/core-plugin-api": "backstage:^",
"@backstage/integration-react": "backstage:^",
"@backstage/plugin-api-docs": "backstage:^",
"@backstage/plugin-catalog": "backstage:^",
"@backstage/plugin-catalog-common": "backstage:^",
"@backstage/plugin-catalog-graph": "backstage:^",
"@backstage/plugin-catalog-import": "backstage:^",
"@backstage/plugin-catalog-react": "backstage:^",
"@backstage/plugin-kubernetes": "backstage:^",
"@backstage/plugin-notifications": "backstage:^",
"@backstage/plugin-org": "backstage:^",
"@backstage/plugin-permission-react": "backstage:^",
"@backstage/plugin-scaffolder": "backstage:^",
"@backstage/plugin-search": "backstage:^",
"@backstage/plugin-search-react": "backstage:^",
"@backstage/plugin-signals": "backstage:^",
"@backstage/plugin-techdocs": "backstage:^",
"@backstage/plugin-techdocs-module-addons-contrib": "backstage:^",
"@backstage/plugin-techdocs-react": "backstage:^",
"@backstage/plugin-user-settings": "backstage:^",
"@backstage/theme": "backstage:^",
"@backstage/ui": "backstage:^",
"@mui/icons-material": "5.18.0",
"@mui/material": "5.18.0",
"@red-hat-developer-hub/backstage-plugin-bcc-test": "workspace:^",
Expand All @@ -60,7 +60,7 @@
},
"devDependencies": {
"@axe-core/playwright": "^4.11.0",
"@backstage/test-utils": "^1.7.21",
"@backstage/test-utils": "backstage:^",
"@playwright/test": "1.62.1",
"@testing-library/dom": "^9.0.0",
"@testing-library/jest-dom": "^6.0.0",
Expand Down
Loading
Loading