@rushstack/lockfile-explorer 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ !function(){"use strict";var e,t={259:function(e,t,n){var r,a,s=n(823),c=n(998),l="HK80a6ZVkdxoTKzrP9Eq",i=n(201);!function(e){e[e.DEPENDENCY=0]="DEPENDENCY",e[e.DEV_DEPENDENCY=1]="DEV_DEPENDENCY",e[e.PEER_DEPENDENCY=2]="PEER_DEPENDENCY"}(r||(r={}));class o{constructor(e,t,n,a,s){if(this.entryId="",this.name=e,this.version=t,this.dependencyType=n,this.containingEntry=a,this.peerDependencyMeta={},this.version.startsWith("link:")){const t=this.version.substring("link:".length),n=new i.y(".").relative(new i.y(a.packageJsonFolderPath).concat(t));if(!n)return void console.error("No root relative path for dependency!",e);this.entryId="project:"+n.toString()}else this.version.startsWith("/")?this.entryId=this.version:this.dependencyType===r.PEER_DEPENDENCY?(null==s?void 0:s.peerDependencies)?this.peerDependencyMeta={name:this.name,version:s.peerDependencies[this.name],optional:!(!s.peerDependenciesMeta||!s.peerDependenciesMeta[this.name])&&s.peerDependenciesMeta[this.name].optional}:console.error("Peer dependencies info missing!",s):this.entryId="/"+this.name+"/"+this.version}static parseDependencies(e,t,n){if(n.dependencies)for(const[a,s]of Object.entries(n.dependencies))e.push(new o(a,s,r.DEPENDENCY,t));if(n.devDependencies)for(const[a,s]of Object.entries(n.devDependencies))e.push(new o(a,s,r.DEV_DEPENDENCY,t));if(n.peerDependencies)for(const[a,s]of Object.entries(n.peerDependencies))e.push(new o(a,s,r.PEER_DEPENDENCY,t,n));if(n.transitivePeerDependencies)for(const e of n.transitivePeerDependencies)t.transitivePeerDependencies.add(e)}}!function(e){e[e.Project=0]="Project",e[e.Package=1]="Package",e[e.SideBySide=2]="SideBySide",e[e.Doppelganger=3]="Doppelganger"}(a||(a={}));class d{constructor(e){this.entryId="",this.packageJsonFolderPath="",this.entryPackageName="",this.displayText="",this.dependencies=[],this.transitivePeerDependencies=new Set,this.referrers=[],this.entryPackageVersion="",this.entrySuffix="";const{rawEntryId:t,kind:n,rawYamlData:r}=e;if(this.rawEntryId=t,this.kind=n,"."!==t){if(n===a.Project){const e=new i.y("common/temp/package.json").dirname()||"",n=new i.y(".").relative(new i.y(e).concat(t)),r=new i.y(t).basename();if(!n||!r)return void console.error("Could not construct path for entry: ",t);this.packageJsonFolderPath=n.toString(),this.entryId="project:"+this.packageJsonFolderPath,this.entryPackageName=r.toString(),this.displayText="Project: "+this.entryPackageName}else{this.displayText=t;const e=d._packageEntryIdRegex.exec(t);if(e){const[,t,n]=e;this.entryPackageName=t;const r=n.indexOf("_");if(r>=0){const e=n.substring(0,r),a=n.substring(r+1);this.entryPackageVersion=e,this.entrySuffix=a,this.displayText=t+" "+e+" ("+a+")"}else this.entryPackageVersion=n,this.displayText=t+" "+n}this.packageJsonFolderPath="common/temp/node_modules/.pnpm/"+this.entryPackageName.replace("/","+")+"@"+this.entryPackageVersion+(this.entrySuffix?`_${this.entrySuffix}`:"")+"/node_modules/"+this.entryPackageName}o.parseDependencies(this.dependencies,this,r)}}}d._packageEntryIdRegex=new RegExp("/(.*)/([^/]+)$");const p=window.appContext.serviceUrl;var m="IWEAxDEzQLw3g5TI_6up",E=n(300);const u=E.I0,f=E.v9;var y=n(329);const h={allEntries:[],filters:{[a.Project]:!1,[a.Package]:!0,[a.SideBySide]:!1,[a.Doppelganger]:!1},selectedEntryStack:[],bookmarkedEntries:[]},k=(0,y.oM)({name:"entry",initialState:h,reducers:{loadEntries:(e,t)=>{e.allEntries=t.payload},setFilter:(e,t)=>{e.filters[t.payload.filter]=t.payload.state},clearStackAndPush:(e,t)=>{e.selectedEntryStack=[t.payload]},pushToStack:(e,t)=>{e.selectedEntryStack.push(t.payload)},popStack:e=>{e.selectedEntryStack.length>1&&e.selectedEntryStack.pop()},addBookmark:(e,t)=>{e.bookmarkedEntries.includes(t.payload)||e.bookmarkedEntries.push(t.payload)},removeBookmark:(e,t)=>{e.bookmarkedEntries=e.bookmarkedEntries.filter((e=>e.rawEntryId!==t.payload.rawEntryId))}}}),v=e=>e.entry.selectedEntryStack.length?e.entry.selectedEntryStack[e.entry.selectedEntryStack.length-1]:void 0,g=e=>{const t=[];return e.entry.filters[a.Package]?t.push(...e.entry.allEntries.filter((e=>e.kind===a.Package))):e.entry.filters[a.Project]&&t.push(...e.entry.allEntries.filter((e=>e.kind===a.Project))),t},{loadEntries:N,setFilter:P,clearStackAndPush:D,pushToStack:w,popStack:S,addBookmark:b,removeBookmark:C}=k.actions,j=k.reducer;const x=({options:e})=>s.createElement("div",{className:"b1H6mzJXpxsG350hyeU_"},e.map((e=>s.createElement("div",{key:e.text,className:"mWhs4CnCA0TKj6CRR8gk "+(e.active?"Q9WEwAuQb3UsVbcHr0oI":""),onClick:e.onClick},e.text)))),O=({group:e})=>{const t=f(v),n=u(),r=(0,s.useRef)(),a=(0,s.useCallback)((e=>()=>{n(D(e))}),[]);return(0,s.useEffect)((()=>{t&&t.entryPackageName===e.entryName&&r.current.scrollIntoView({behavior:"smooth"})}),[t,e]),s.createElement("div",{className:"OcndyDBetZor3ptzTnTX",ref:r},s.createElement("h5",null,e.entryName),e.versions.map((e=>s.createElement("div",{key:e.rawEntryId,onClick:a(e),className:"Wg5pG3RVf6SQ51i0tVkd "+((null==t?void 0:t.rawEntryId)===e.rawEntryId?"NBIr3yosJ9gX6LZcnC7T":"")},s.createElement("p",null,e.entryPackageVersion||e.entryPackageName," ",e.entrySuffix&&`[${e.entrySuffix}]`)))))},_=()=>{const[e,t]=(0,s.useState)(""),n=f(g),r=f((e=>e.entry.filters)),c=(0,s.useCallback)((e=>t(e.target.value)),[]),l=f((e=>e.entry.selectedEntryStack)),i=u();if(!n)return null;const o=(0,s.useCallback)((()=>{i(S())}),[]),d=(0,s.useCallback)((e=>t=>{i(P({filter:e,state:t.target.checked}))}),[]),p=(0,s.useCallback)((e=>()=>{e===a.Project?(i(P({filter:e,state:!r[e]})),i(P({filter:a.Package,state:!1}))):(i(P({filter:e,state:!r[e]})),i(P({filter:a.Project,state:!1})))}),[r]);return s.createElement(s.Fragment,null,s.createElement(x,{options:[{text:"Projects",active:r[a.Project],onClick:p(a.Project)},{text:"Packages",active:r[a.Package],onClick:p(a.Package)}]}),s.createElement("div",{className:"HK80a6ZVkdxoTKzrP9Eq yk7wrFMnnNyYLABMBhz_"},s.createElement("div",{className:"oq4FJVnF_fONdOKuiK0w"},l.length>1?s.createElement("button",{onClick:o},"back"):null,s.createElement("h5",null,"filter:"),s.createElement("input",{type:"text",value:e,onChange:c})),s.createElement("div",{className:"PoJj8_8xv9BXiMVPKFVE"},(()=>{let t=[];t=e?n.filter((t=>-1!==t.entryPackageName.indexOf(e))):n;const s=t.reduce(((e,t)=>{const n=e[t.entryPackageName]||[];return n.push(t),e[t.entryPackageName]=n,e}),{});let c=[];for(const[e,t]of Object.entries(s))c.push({entryName:e,versions:t});return r[a.SideBySide]&&(c=c.filter((e=>e.versions.length>1))),r[a.Doppelganger]&&(c=c.filter((e=>(e=>{const t=new Set;for(const n of e){if(t.has(n.entryPackageVersion))return!0;t.add(n.entryPackageVersion)}return!1})(e.versions)))),c})().map((e=>s.createElement(O,{group:e,key:e.entryName})))),s.createElement("div",{className:"K6dDN5KzjLkbPPFWUaly"},s.createElement("h5",null,"Filters"),s.createElement("div",{className:m},s.createElement("input",{type:"checkbox",checked:r[a.SideBySide],onChange:d(a.SideBySide)}),s.createElement("h5",null,"Must have side-by-side versions")),s.createElement("div",{className:m},s.createElement("input",{type:"checkbox",checked:r[a.Doppelganger],onChange:d(a.Doppelganger)}),s.createElement("h5",null,"Must have doppelgangers")))))},I=window.appContext.serviceUrl;var A;!function(e){e[e.PACKAGE_JSON=0]="PACKAGE_JSON",e[e.CJS=1]="CJS",e[e.PARSED_PACKAGE_JSON=2]="PARSED_PACKAGE_JSON"}(A||(A={}));const T=()=>{const[e,t]=(0,s.useState)(void 0),[n,r]=(0,s.useState)(void 0),[a,c]=(0,s.useState)(new Map),[i,o]=(0,s.useState)(""),d=f(v),[p,m]=(0,s.useState)(A.PARSED_PACKAGE_JSON),E=(0,s.useCallback)((e=>()=>m(e)),[]);(0,s.useEffect)((()=>{d&&(d.entryPackageName?async function(e){const n=await(async()=>{try{const e=await fetch(`${I}/api/pnpmfile`);return await e.text()}catch(e){return console.error("Could not load cjs file: ",e),"Missing CJS"}})();o(n);const a=await(async e=>{try{const t=await fetch(`${I}/api/package-json`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectPath:e})});return await t.json()}catch(e){return void console.error("Could not load package json file: ",e)}})(e);t(a);const s=await(async e=>{try{const t=await fetch(`${I}/api/package-spec`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectPath:e})});return await t.json()}catch(e){return void console.error("Could not load cjs file: ",e)}})(e);if(r(s),a&&s){const e=((e,t)=>{const n=new Map,r=new Map;for(const[t,r]of Object.entries(Object.assign(Object.assign(Object.assign({},e.dependencies),e.devDependencies),e.peerDependencies)))n.set(t,r);for(const[e,n]of Object.entries(Object.assign(Object.assign(Object.assign({},t.dependencies),t.devDependencies),t.peerDependencies)))r.set(e,n);const a=new Map;for(const e of n.keys())r.has(e)?r.get(e)!==n.get(e)&&a.set(e,{type:"diff",packageName:e,from:n.get(e),to:r.get(e)}):a.set(e,{type:"remove",packageName:e});for(const e of r.keys())n.has(e)||a.set(e,{type:"add",packageName:e});return a})(a,s);c(e)}}(d.packageJsonFolderPath).catch((e=>{console.error(`Failed to load project information: ${e}`)})):console.log("The selected entry has no entry name: ",d.entryPackageName))}),[d]);const u=e=>{var t,n;const[r,c]=e;if(!a.has(r))return s.createElement("p",{key:r},r,": ",c);switch(null===(t=a.get(r))||void 0===t?void 0:t.type){case"add":return s.createElement("p",{key:r},s.createElement("span",{className:"nTIc62ACgp5xMWIvZ4cn"},r,": ",c)," ","[Added by .pnpmfile.cjs]");case"diff":return s.createElement("p",{key:r},s.createElement("span",{className:"I4A8ZZlpCL3Op0c53VjN"},r,": ",c)," ","[Changed from ",null===(n=a.get(r))||void 0===n?void 0:n.from,"]");case"remove":return s.createElement("p",{key:r},s.createElement("span",{className:"iavWjvHy9s5MhCZ_ncgb"},r,": ",c)," ","[Deleted by .pnpmfile.cjs]");default:return s.createElement("p",{key:r},r,": ",c)}};return s.createElement("div",null,s.createElement(x,{options:[{text:"package spec",active:p===A.PARSED_PACKAGE_JSON,onClick:E(A.PARSED_PACKAGE_JSON)},{text:"package.json",active:p===A.PACKAGE_JSON,onClick:E(A.PACKAGE_JSON)},{text:".pnpmfile.cjs",active:p===A.CJS,onClick:E(A.CJS)}]}),s.createElement("div",{className:l},s.createElement("div",{className:"e2KEBfZCHwEMeH4j6wS7"},(()=>{switch(p){case A.PACKAGE_JSON:return e?s.createElement("pre",null,JSON.stringify(e,null,2)):null;case A.CJS:return s.createElement("pre",null,i);case A.PARSED_PACKAGE_JSON:return n?s.createElement("div",{className:"Ko0YQxSlY0hCIDTfmNlr"},s.createElement("h5",null,"Dependencies"),n.dependencies&&Object.entries(n.dependencies).map(u),s.createElement("h5",null,"Dev Dependencies"),n.devDependencies&&Object.entries(n.devDependencies).map(u),s.createElement("h5",null,"Peer Dependencies"),n.peerDependencies&&Object.entries(n.peerDependencies).map(u)):null;default:return null}})())))};var R,J="_R50_3JsFs2FC9kVffQL",F="mRQWdzXzOM1NpFUpYnhP";!function(e){e[e.Determinant=0]="Determinant",e[e.TransitiveReferrer=1]="TransitiveReferrer"}(R||(R={}));const M=()=>{var e,t;const n=f(v),a=u(),[c,i]=(0,s.useState)(null),[o,d]=(0,s.useState)([]);(0,s.useEffect)((()=>{n&&i(null)}),[n]);const p=(0,s.useCallback)((e=>()=>{if(c&&c.name===e.name)e.resolvedEntry?a(w(e.resolvedEntry)):((...e)=>{console.log("Diagnostic: ",...e)})("No resolved entry for dependency:",e);else if(n){i(e);const t=[n],r=new Set,a=new Set,s=new Set;for(s.add(n);t.length;){const n=t.pop();if(n)for(const c of n.referrers){let l=!1;for(const t of c.dependencies)if(t.name===e.name){r.add(c),l=!0;break}if(!l){c.transitivePeerDependencies.has(e.name)?a.add(c):console.error('Error analyzing influencers: A referrer appears to be missing its "transitivePeerDependencies" field in the YAML file: ',c);for(const e of n.referrers)s.has(e)||(t.push(e),s.add(e))}}}const c=[];for(const e of r.values())c.push({entry:e,type:R.Determinant});for(const e of a.values())c.push({entry:e,type:R.TransitiveReferrer});d(c)}}),[n,c]),m=(0,s.useCallback)((e=>()=>{a(w(e))}),[n]);return n?s.createElement(s.Fragment,null,s.createElement("div",{className:"KWDuEbG1GmwLxFmPPppw"},s.createElement("div",{className:l},s.createElement("h5",null,"Direct Referrers"),s.createElement("div",{className:J},null===(e=n.referrers)||void 0===e?void 0:e.map((e=>s.createElement("div",{className:F,key:e.rawEntryId,onClick:m(e)},s.createElement("h5",null,"Name: ",e.displayText),s.createElement("div",null,s.createElement("p",null,"Entry ID: ",e.rawEntryId))))))),s.createElement("div",{className:l},s.createElement("h5",null,"Direct Dependencies"),s.createElement("div",{className:J},null===(t=n.dependencies)||void 0===t?void 0:t.map((e=>s.createElement("div",{className:`mRQWdzXzOM1NpFUpYnhP ${(null==c?void 0:c.name)===e.name&&"GbZbP1wHbcReGrxpZ3Ra"}`,key:e.entryId||e.name,onClick:p(e)},s.createElement("h5",null,"Name: ",e.name," ",e.dependencyType===r.PEER_DEPENDENCY?(e.peerDependencyMeta.optional?"(Optional)":"(Non-optional)")+" Peer Dependency":""),s.createElement("div",null,s.createElement("p",null,"Version: ",e.version),s.createElement("p",null,"Entry ID: ",e.entryId)))))))),n?n.dependencies.filter((e=>e.dependencyType===r.PEER_DEPENDENCY)).length?c&&c.dependencyType===r.PEER_DEPENDENCY?s.createElement("div",{className:l},s.createElement("h5",null,"Influencers:"),o.filter((e=>e.type===R.Determinant)).map((({entry:e})=>s.createElement("div",{key:e.rawEntryId},e.displayText))),s.createElement("h5",null,"Transitive Referencers:"),o.filter((e=>e.type===R.TransitiveReferrer)).map((({entry:e})=>s.createElement("div",{key:e.rawEntryId},e.displayText)))):s.createElement("div",null,s.createElement("h5",null,"Select a peer dependency to view its influencers")):s.createElement("div",{className:l},s.createElement("h5",null,"No peer dependencies.")):null):s.createElement("div",{className:l},s.createElement("h5",null,"Select an entry to view its details"))};const K=()=>{const e=f((e=>e.entry.bookmarkedEntries)),t=u(),n=(0,s.useCallback)((e=>()=>{t(D(e))}),[]),r=(0,s.useCallback)((e=>()=>{t(C(e))}),[]);return s.createElement("div",{className:"HK80a6ZVkdxoTKzrP9Eq aM5oGgiHs9rRHcHdAqFh"},s.createElement("h5",null,"Bookmarks"),s.createElement("hr",null),e.map((e=>s.createElement("div",{key:e.rawEntryId,className:"Ci1rEoM4eR29ZJcnvJJE"},s.createElement("p",{onClick:n(e)},e.displayText),s.createElement("button",{onClick:r(e)},"Remove")))))};var Y="dklLbMzvzbuzLd2XJh3W";const V=()=>{const e=f(v),t=f((t=>!!e&&t.entry.bookmarkedEntries.includes(e))),n=u(),r=(0,s.useCallback)((()=>{e&&n(b(e))}),[e]),a=(0,s.useCallback)((()=>{e&&n(C(e))}),[e]);return e?s.createElement("div",{className:Y},s.createElement("div",{className:"Hd2WYHIwrFrldD0I8qDj"},s.createElement("h5",null,"Selected entry:"),s.createElement("span",null,e.displayText)),s.createElement("p",null,"Package Entry: ",e.rawEntryId),s.createElement("p",null,"Package JSON path: ",e.packageJsonFolderPath),t?s.createElement("button",{onClick:a},"Remove Bookmark"):s.createElement("button",{onClick:r},"Add Bookmark")):s.createElement("div",{className:Y},s.createElement("h5",null,"No Entry Selected"))};var z="wR2C2OTixe7QR738j44h",B="Oo_rkIqOkO0j8slDAm5V";const G=()=>{const e=window.appContext.appVersion;return s.createElement("div",{className:"mqcpXwTQfD4A2eS4QRMa"},s.createElement("a",{href:"https://www.npmjs.com/package/@rushstack/lockfile-explorer",target:"_blank",rel:"noreferrer"},s.createElement("div",{className:"gxAXHLK7j_oYpFDmIJLR"},s.createElement("img",{className:z,src:n(769)})),s.createElement("div",{className:"rHArsuIMBTbIFs5o2cuw"},s.createElement("img",{className:z,src:n(500)})),s.createElement("div",{className:"P6XzPBuW8Osze59RSui1"},s.createElement("img",{className:z,src:n(126)})),s.createElement("div",{className:B},e),s.createElement("div",{className:B},"rushstack.io")))},H=(0,y.xC)({reducer:{entry:j},middleware:e=>e({serializableCheck:!1})}),W=document.getElementById("root");c.render(s.createElement(E.zt,{store:H},s.createElement((()=>{const e=u();return(0,s.useEffect)((()=>{(async function(){const t=await(async()=>{const e=await fetch(`${p}/`);return(e=>{const t=[],n={},r=[];if(e.importers)for(const[s,c]of Object.entries(e.importers)){const e=new d({rawEntryId:s,kind:a.Project,rawYamlData:c});r.push(e),t.push(e),n[e.entryId]=e}const s=[];if(e.packages)for(const[r,c]of Object.entries(e.packages)){const e=new d({rawEntryId:r,kind:a.Package,rawYamlData:c});s.push(e),t.push(e),n[r]=e}for(const e of t)for(const t of e.dependencies){const r=n[t.entryId];r?(t.resolvedEntry=r,r.referrers.push(e)):console.error("Could not resolve dependency entryId: ",t.entryId)}return t})(await e.json())})();e(N(t))})().catch((e=>{console.log(`Failed to read lockfile: ${e}`)}))}),[]),s.createElement("div",{className:"uXEYthi0e8fjYu_FisVm"},s.createElement("div",{className:"FFuReYR1pIswEW7Az6w9"},s.createElement("div",{className:"ms-Grid",dir:"ltr"},s.createElement("div",{className:"ms-Grid-row"},s.createElement("div",{className:"ms-Grid-col ms-sm3"},s.createElement(_,null)),s.createElement("div",{className:"ms-Grid-col ms-sm7 HqAzbQwu1zc9yH8ZQESI"},s.createElement(V,null),s.createElement(T,null),s.createElement(M,null)),s.createElement("div",{className:"ms-Grid-col ms-sm2"},s.createElement(K,null))))),s.createElement(G,null))}),null)),W)},769:function(e,t,n){e.exports=n.p+"d39919ddc699d58b84ba.svg"},500:function(e,t,n){e.exports=n.p+"d13d30e9b42faf842d2f.svg"},126:function(e,t,n){e.exports=n.p+"510f03f81080fd3cfd63.svg"}},n={};function r(e){var a=n[e];if(void 0!==a)return a.exports;var s=n[e]={exports:{}};return t[e](s,s.exports,r),s.exports}r.m=t,e=[],r.O=function(t,n,a,s){if(!n){var c=1/0;for(d=0;d<e.length;d++){n=e[d][0],a=e[d][1],s=e[d][2];for(var l=!0,i=0;i<n.length;i++)(!1&s||c>=s)&&Object.keys(r.O).every((function(e){return r.O[e](n[i])}))?n.splice(i--,1):(l=!1,s<c&&(c=s));if(l){e.splice(d--,1);var o=a();void 0!==o&&(t=o)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,a,s]},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e;r.g.importScripts&&(e=r.g.location+"");var t=r.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=e}(),function(){var e={143:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var a,s,c=n[0],l=n[1],i=n[2],o=0;if(c.some((function(t){return 0!==e[t]}))){for(a in l)r.o(l,a)&&(r.m[a]=l[a]);if(i)var d=i(r)}for(t&&t(n);o<c.length;o++)s=c[o],r.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return r.O(d)},n=self.webpackChunk_rushstack_lockfile_explorer_web=self.webpackChunk_rushstack_lockfile_explorer_web||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var a=r.O(void 0,[671],(function(){return r(259)}));a=r.O(a)}();
package/dist/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Lockfile Explorer</title><link rel="stylesheet" href="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-core/11.0.0/css/fabric.min.css"/><script defer="defer" src="671.7d28fb3bed4d33f53049.js"></script><script defer="defer" src="app.079d79f35d4426c7ebbb.js"></script><link href="app.38b6a629474b8d6a0be5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Lockfile Explorer</title><link rel="stylesheet" href="https://static2.sharepointonline.com/files/fabric/office-ui-fabric-core/11.0.0/css/fabric.min.css"/><script defer="defer" src="initappcontext.js"></script><script defer="defer" src="671.7d28fb3bed4d33f53049.js"></script><script defer="defer" src="app.cb94d72ab05d62c0ad2e.js"></script><link href="app.38b6a629474b8d6a0be5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
3
+ // See LICENSE in the project root for license information.
4
+ // This file is copied into the dist folder when the web app is being loaded
5
+ // from Webpack dev server. In a production release, a generated script is served by the
6
+ // Node.js service with the live context object.
7
+ console.log('Loaded stub/initappcontext.js');
8
+ window.appContext = {
9
+ serviceUrl: 'http://localhost:8091',
10
+ appVersion: '(dev)',
11
+ debugMode: true
12
+ };
13
+ //# sourceMappingURL=initappcontext.js.map
package/lib/init.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAoC,MAAM,SAAS,CAAC;AAErE,eAAO,MAAM,IAAI,QAAO,QAqDvB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAoC,MAAM,SAAS,CAAC;AAErE,eAAO,MAAM,IAAI,QAAO,QAuDvB,CAAC"}
package/lib/init.js CHANGED
@@ -16,6 +16,7 @@ const init = () => {
16
16
  const appState = new state_1.AppState({
17
17
  currDir
18
18
  });
19
+ appState.appVersion = require(path_1.default.join(__dirname, '../package.json')).version;
19
20
  let currExploredDir = currDir;
20
21
  while (path_1.default.resolve(currExploredDir) !== '/') {
21
22
  // Look for a rush.json [rush project] or pnpm-lock.yaml file [regular pnpm workspace]
package/lib/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;AAE3D,uHAAuH;AACvH,6DAA6D;AAC7D,4CAAoB;AACpB,gDAAwB;AACxB,mCAAqE;AAE9D,MAAM,IAAI,GAAG,GAAa,EAAE;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,gBAAQ,CAAC;QAC5B,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,eAAe,GAAG,OAAO,CAAC;IAC9B,OAAO,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE;QAC5C,sFAAsF;QACtF,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,EAAE;YAC1D,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;YAE7E,QAAQ,CAAC,WAAW,GAAG,mBAAW,CAAC,YAAY,CAAC;YAChD,QAAQ,CAAC,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,oCAAoC,CAAC,CAAC;YACjG,QAAQ,CAAC,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC;YAC5F,QAAQ,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM;SACP;aAAM,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,EAAE;YACtE,QAAQ,CAAC,WAAW,GAAG,mBAAW,CAAC,cAAc,CAAC;YAClD,QAAQ,CAAC,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;YAC9E,QAAQ,CAAC,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;YACzE,QAAQ,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM;SACP;QACD,eAAe,IAAI,KAAK,CAAC;KAC1B;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IAED,IAAI,QAAQ,CAAC,WAAW,KAAK,mBAAW,CAAC,YAAY,EAAE;QACrD,yBAAyB;QACzB,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEhG,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CACjD,gDAAgD,EAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAElD,MAAM,QAAQ,GAA6C,EAAE,CAAC;QAC9D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACvC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;SACH;QAED,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KACnC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AArDW,QAAA,IAAI,QAqDf","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This function will read the current directory and try to figure out if it's a rush project or regular pnpm workspace\n// Currently it will throw error if neither can be determined\nimport fs from 'fs';\nimport path from 'path';\nimport { AppState, IRushProjectDetails, ProjectType } from './state';\n\nexport const init = (): AppState => {\n const currDir = process.cwd();\n const appState = new AppState({\n currDir\n });\n\n let currExploredDir = currDir;\n while (path.resolve(currExploredDir) !== '/') {\n // Look for a rush.json [rush project] or pnpm-lock.yaml file [regular pnpm workspace]\n if (fs.existsSync(path.join(currExploredDir, 'rush.json'))) {\n console.log('found rush project: ', path.join(currExploredDir, 'rush.json'));\n\n appState.projectType = ProjectType.RUSH_PROJECT;\n appState.pnpmLockfileLocation = path.join(currExploredDir, '/common/config/rush/pnpm-lock.yaml');\n appState.pnpmfileLocation = path.join(currExploredDir, '/common/config/rush/.pnpmfile.cjs');\n appState.projectRoot = path.resolve(currExploredDir);\n break;\n } else if (fs.existsSync(path.join(currExploredDir, 'pnpm-lock.yaml'))) {\n appState.projectType = ProjectType.PNPM_WORKSPACE;\n appState.pnpmLockfileLocation = path.join(currExploredDir, '/pnpm-lock.yaml');\n appState.pnpmfileLocation = path.join(currExploredDir, '/.pnpmfile.cjs');\n appState.projectRoot = path.resolve(currExploredDir);\n break;\n }\n currExploredDir += '/..';\n }\n\n if (!appState.projectRoot) {\n throw new Error('Could not find a rush or pnpm project!');\n }\n\n if (appState.projectType === ProjectType.RUSH_PROJECT) {\n // Load the rush projects\n const rushJsonString = fs.readFileSync(path.join(appState.projectRoot, 'rush.json')).toString();\n\n const parsedRushJsonString = rushJsonString.replace(\n /\\\\\"|\"(?:\\\\\"|[^\"])*\"|(\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/)/g,\n (m, g) => (g ? '' : m)\n );\n const rushJson = JSON.parse(parsedRushJsonString);\n\n const projects: { [key in string]: IRushProjectDetails } = {};\n for (const project of rushJson.projects) {\n projects[project.projectFolder] = {\n projectName: project.packageName,\n projectFolder: project.projectFolder\n };\n }\n\n appState.rush.projects = projects;\n }\n\n return appState;\n};\n"]}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;AAE3D,uHAAuH;AACvH,6DAA6D;AAC7D,4CAAoB;AACpB,gDAAwB;AACxB,mCAAqE;AAE9D,MAAM,IAAI,GAAG,GAAa,EAAE;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,gBAAQ,CAAC;QAC5B,OAAO;KACR,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IAE/E,IAAI,eAAe,GAAG,OAAO,CAAC;IAC9B,OAAO,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE;QAC5C,sFAAsF;QACtF,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,EAAE;YAC1D,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;YAE7E,QAAQ,CAAC,WAAW,GAAG,mBAAW,CAAC,YAAY,CAAC;YAChD,QAAQ,CAAC,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,oCAAoC,CAAC,CAAC;YACjG,QAAQ,CAAC,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,mCAAmC,CAAC,CAAC;YAC5F,QAAQ,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM;SACP;aAAM,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,EAAE;YACtE,QAAQ,CAAC,WAAW,GAAG,mBAAW,CAAC,cAAc,CAAC;YAClD,QAAQ,CAAC,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;YAC9E,QAAQ,CAAC,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;YACzE,QAAQ,CAAC,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACrD,MAAM;SACP;QACD,eAAe,IAAI,KAAK,CAAC;KAC1B;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IAED,IAAI,QAAQ,CAAC,WAAW,KAAK,mBAAW,CAAC,YAAY,EAAE;QACrD,yBAAyB;QACzB,MAAM,cAAc,GAAG,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEhG,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CACjD,gDAAgD,EAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACvB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAElD,MAAM,QAAQ,GAA6C,EAAE,CAAC;QAC9D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACvC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;SACH;QAED,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KACnC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAvDW,QAAA,IAAI,QAuDf","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This function will read the current directory and try to figure out if it's a rush project or regular pnpm workspace\n// Currently it will throw error if neither can be determined\nimport fs from 'fs';\nimport path from 'path';\nimport { AppState, IRushProjectDetails, ProjectType } from './state';\n\nexport const init = (): AppState => {\n const currDir = process.cwd();\n const appState = new AppState({\n currDir\n });\n\n appState.appVersion = require(path.join(__dirname, '../package.json')).version;\n\n let currExploredDir = currDir;\n while (path.resolve(currExploredDir) !== '/') {\n // Look for a rush.json [rush project] or pnpm-lock.yaml file [regular pnpm workspace]\n if (fs.existsSync(path.join(currExploredDir, 'rush.json'))) {\n console.log('found rush project: ', path.join(currExploredDir, 'rush.json'));\n\n appState.projectType = ProjectType.RUSH_PROJECT;\n appState.pnpmLockfileLocation = path.join(currExploredDir, '/common/config/rush/pnpm-lock.yaml');\n appState.pnpmfileLocation = path.join(currExploredDir, '/common/config/rush/.pnpmfile.cjs');\n appState.projectRoot = path.resolve(currExploredDir);\n break;\n } else if (fs.existsSync(path.join(currExploredDir, 'pnpm-lock.yaml'))) {\n appState.projectType = ProjectType.PNPM_WORKSPACE;\n appState.pnpmLockfileLocation = path.join(currExploredDir, '/pnpm-lock.yaml');\n appState.pnpmfileLocation = path.join(currExploredDir, '/.pnpmfile.cjs');\n appState.projectRoot = path.resolve(currExploredDir);\n break;\n }\n currExploredDir += '/..';\n }\n\n if (!appState.projectRoot) {\n throw new Error('Could not find a rush or pnpm project!');\n }\n\n if (appState.projectType === ProjectType.RUSH_PROJECT) {\n // Load the rush projects\n const rushJsonString = fs.readFileSync(path.join(appState.projectRoot, 'rush.json')).toString();\n\n const parsedRushJsonString = rushJsonString.replace(\n /\\\\\"|\"(?:\\\\\"|[^\"])*\"|(\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/)/g,\n (m, g) => (g ? '' : m)\n );\n const rushJson = JSON.parse(parsedRushJsonString);\n\n const projects: { [key in string]: IRushProjectDetails } = {};\n for (const project of rushJson.projects) {\n projects[project.projectFolder] = {\n projectName: project.packageName,\n projectFolder: project.projectFolder\n };\n }\n\n appState.rush.projects = projects;\n }\n\n return appState;\n};\n"]}
package/lib/start.js CHANGED
@@ -1,4 +1,6 @@
1
1
  "use strict";
2
+ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
3
+ // See LICENSE in the project root for license information.
2
4
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
5
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
6
  };
@@ -7,16 +9,32 @@ const express_1 = __importDefault(require("express"));
7
9
  const js_yaml_1 = __importDefault(require("js-yaml"));
8
10
  const cors_1 = __importDefault(require("cors"));
9
11
  const fs_1 = __importDefault(require("fs"));
12
+ const process_1 = __importDefault(require("process"));
10
13
  const path_1 = __importDefault(require("path"));
11
14
  const open_1 = __importDefault(require("open"));
12
15
  const init_1 = require("./init");
13
16
  const PORT = 8091;
14
- const APP_URL = `http://localhost:${PORT}/app/`;
17
+ // Must not have a trailing slash
18
+ const SERVICE_URL = `http://localhost:${PORT}`;
19
+ const APP_URL = `${SERVICE_URL}/app/`;
15
20
  const appState = (0, init_1.init)();
16
- process.chdir(path_1.default.join(__dirname, '..'));
21
+ process_1.default.chdir(path_1.default.join(__dirname, '..'));
17
22
  const app = (0, express_1.default)();
18
23
  app.use(express_1.default.json());
19
24
  app.use((0, cors_1.default)());
25
+ // This takes precedence over the `/app` static route, which also has an `initappcontext.js` file.
26
+ app.get('/app/initappcontext.js', (req, res) => {
27
+ const appContext = {
28
+ serviceUrl: SERVICE_URL,
29
+ appVersion: appState.appVersion,
30
+ debugMode: process_1.default.argv.indexOf('--debug') >= 0
31
+ };
32
+ const sourceCode = [
33
+ `console.log('Loaded initappcontext.js');`,
34
+ `appContext = ${JSON.stringify(appContext)}`
35
+ ].join('\n');
36
+ res.type('application/javascript').send(sourceCode);
37
+ });
20
38
  app.use('/app', express_1.default.static(path_1.default.resolve(__dirname, '../dist')));
21
39
  app.use('/favicon.ico', express_1.default.static(path_1.default.resolve(__dirname, '../dist'), { index: 'favicon.ico' }));
22
40
  app.get('/', (req, res) => {
@@ -52,8 +70,8 @@ app.post('/api/package-spec', (req, res) => {
52
70
  res.send(parsedPackage);
53
71
  });
54
72
  app.listen(PORT, async () => {
55
- console.log(`Rush Lockfile Explorer running at ${APP_URL}`);
56
- if (!process.argv.includes('--debug')) {
73
+ console.log(`Rush Lockfile Explorer ${appState.appVersion} running at ${APP_URL}`);
74
+ if (!process_1.default.argv.includes('--debug')) {
57
75
  try {
58
76
  // Launch the web browser
59
77
  await (0, open_1.default)(APP_URL);
package/lib/start.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["import express from 'express';\nimport yaml from 'js-yaml';\nimport cors from 'cors';\nimport fs from 'fs';\nimport path from 'path';\nimport open from 'open';\nimport { init } from './init';\n// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport { IAppState } from './state';\n\nconst PORT: number = 8091;\nconst APP_URL: string = `http://localhost:${PORT}/app/`;\n\nconst appState: IAppState = init();\n\nprocess.chdir(path.join(__dirname, '..'));\nconst app: express.Application = express();\napp.use(express.json());\napp.use(cors());\n\napp.use('/app', express.static(path.resolve(__dirname, '../dist')));\n\napp.use('/favicon.ico', express.static(path.resolve(__dirname, '../dist'), { index: 'favicon.ico' }));\n\napp.get('/', (req: express.Request, res: express.Response) => {\n const doc = yaml.load(fs.readFileSync(appState.pnpmLockfileLocation).toString());\n res.send(doc);\n});\n\napp.post(\n '/api/package-json',\n (req: express.Request<{}, {}, { projectPath: string }, {}>, res: express.Response) => {\n const { projectPath } = req.body;\n const fileLocation = path.resolve(appState.projectRoot, projectPath, 'package.json');\n if (!fs.existsSync(fileLocation)) {\n return res.status(400).send({\n message: `Could not load package.json file in location: ${projectPath}`\n });\n }\n const packageJson = fs.readFileSync(fileLocation);\n res.send(packageJson);\n }\n);\n\napp.get('/api/pnpmfile', (req: express.Request, res: express.Response) => {\n const cjsFile = fs.readFileSync(path.resolve(appState.pnpmfileLocation));\n res.send(cjsFile);\n});\n\napp.post(\n '/api/package-spec',\n (req: express.Request<{}, {}, { projectPath: string }, {}>, res: express.Response) => {\n const { projectPath } = req.body;\n const fileLocation = path.resolve(appState.projectRoot, projectPath, 'package.json');\n if (!fs.existsSync(fileLocation)) {\n return res.status(400).send({\n message: `Could not load package.json file in location: ${projectPath}`\n });\n }\n const packageJson = fs.readFileSync(fileLocation).toString();\n\n const {\n hooks: { readPackage }\n } = require(path.resolve(appState.pnpmfileLocation));\n const parsedPackage = readPackage(JSON.parse(packageJson));\n res.send(parsedPackage);\n }\n);\n\napp.listen(PORT, async () => {\n console.log(`Rush Lockfile Explorer running at ${APP_URL}`);\n\n if (!process.argv.includes('--debug')) {\n try {\n // Launch the web browser\n await open(APP_URL);\n } catch (e) {\n console.error('Error launching browser: ' + e.toString());\n }\n }\n});\n"]}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport express from 'express';\nimport yaml from 'js-yaml';\nimport cors from 'cors';\nimport fs from 'fs';\nimport process from 'process';\nimport path from 'path';\nimport open from 'open';\nimport { init } from './init';\n\nimport { IAppState } from './state';\nimport type { IAppContext } from '@rushstack/lockfile-explorer-web/lib/AppContext';\n\nconst PORT: number = 8091;\n// Must not have a trailing slash\nconst SERVICE_URL: string = `http://localhost:${PORT}`;\nconst APP_URL: string = `${SERVICE_URL}/app/`;\n\nconst appState: IAppState = init();\n\nprocess.chdir(path.join(__dirname, '..'));\nconst app: express.Application = express();\napp.use(express.json());\napp.use(cors());\n\n// This takes precedence over the `/app` static route, which also has an `initappcontext.js` file.\napp.get('/app/initappcontext.js', (req: express.Request, res: express.Response) => {\n const appContext: IAppContext = {\n serviceUrl: SERVICE_URL,\n appVersion: appState.appVersion,\n debugMode: process.argv.indexOf('--debug') >= 0\n };\n const sourceCode: string = [\n `console.log('Loaded initappcontext.js');`,\n `appContext = ${JSON.stringify(appContext)}`\n ].join('\\n');\n\n res.type('application/javascript').send(sourceCode);\n});\n\napp.use('/app', express.static(path.resolve(__dirname, '../dist')));\n\napp.use('/favicon.ico', express.static(path.resolve(__dirname, '../dist'), { index: 'favicon.ico' }));\n\napp.get('/', (req: express.Request, res: express.Response) => {\n const doc = yaml.load(fs.readFileSync(appState.pnpmLockfileLocation).toString());\n res.send(doc);\n});\n\napp.post(\n '/api/package-json',\n (req: express.Request<{}, {}, { projectPath: string }, {}>, res: express.Response) => {\n const { projectPath } = req.body;\n const fileLocation = path.resolve(appState.projectRoot, projectPath, 'package.json');\n if (!fs.existsSync(fileLocation)) {\n return res.status(400).send({\n message: `Could not load package.json file in location: ${projectPath}`\n });\n }\n const packageJson = fs.readFileSync(fileLocation);\n res.send(packageJson);\n }\n);\n\napp.get('/api/pnpmfile', (req: express.Request, res: express.Response) => {\n const cjsFile = fs.readFileSync(path.resolve(appState.pnpmfileLocation));\n res.send(cjsFile);\n});\n\napp.post(\n '/api/package-spec',\n (req: express.Request<{}, {}, { projectPath: string }, {}>, res: express.Response) => {\n const { projectPath } = req.body;\n const fileLocation = path.resolve(appState.projectRoot, projectPath, 'package.json');\n if (!fs.existsSync(fileLocation)) {\n return res.status(400).send({\n message: `Could not load package.json file in location: ${projectPath}`\n });\n }\n const packageJson = fs.readFileSync(fileLocation).toString();\n\n const {\n hooks: { readPackage }\n } = require(path.resolve(appState.pnpmfileLocation));\n const parsedPackage = readPackage(JSON.parse(packageJson));\n res.send(parsedPackage);\n }\n);\n\napp.listen(PORT, async () => {\n console.log(`Rush Lockfile Explorer ${appState.appVersion} running at ${APP_URL}`);\n\n if (!process.argv.includes('--debug')) {\n try {\n // Launch the web browser\n await open(APP_URL);\n } catch (e) {\n console.error('Error launching browser: ' + e.toString());\n }\n }\n});\n"]}
@@ -12,6 +12,7 @@ export interface IAppState {
12
12
  projectType: ProjectType;
13
13
  pnpmLockfileLocation: string;
14
14
  pnpmfileLocation: string;
15
+ appVersion: string;
15
16
  rush: {
16
17
  projects: {
17
18
  [key in string]: IRushProjectDetails;
@@ -27,6 +28,7 @@ export declare class AppState implements IAppState {
27
28
  projectType: ProjectType;
28
29
  pnpmLockfileLocation: string;
29
30
  pnpmfileLocation: string;
31
+ appVersion: string;
30
32
  rush: {
31
33
  projects: {
32
34
  [key in string]: IRushProjectDetails;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAGA,oBAAY,WAAW;IACrB,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE;QACJ,QAAQ,EAAE;aACP,GAAG,IAAI,MAAM,GAAG,mBAAmB;SACrC,CAAC;KACH,CAAC;CACH;AAED,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,QAAS,YAAW,SAAS;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAM;IACzB,WAAW,EAAE,WAAW,CAA4B;IACpD,oBAAoB,EAAE,MAAM,CAAM;IAClC,gBAAgB,EAAE,MAAM,CAAM;IAC9B,IAAI,EAAE;QACX,QAAQ,EAAE;aACP,GAAG,IAAI,MAAM,GAAG,mBAAmB;SACrC,CAAC;KACH,CAEC;gBAEiB,KAAK,EAAE,MAAM;CAGjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAGA,oBAAY,WAAW;IACrB,YAAY,IAAA;IACZ,cAAc,IAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACJ,QAAQ,EAAE;aACP,GAAG,IAAI,MAAM,GAAG,mBAAmB;SACrC,CAAC;KACH,CAAC;CACH;AAED,UAAU,MAAM;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,QAAS,YAAW,SAAS;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAM;IACzB,WAAW,EAAE,WAAW,CAA4B;IACpD,oBAAoB,EAAE,MAAM,CAAM;IAClC,gBAAgB,EAAE,MAAM,CAAM;IAC9B,UAAU,EAAE,MAAM,CAAM;IACxB,IAAI,EAAE;QACX,QAAQ,EAAE;aACP,GAAG,IAAI,MAAM,GAAG,mBAAmB;SACrC,CAAC;KACH,CAEC;gBAEiB,KAAK,EAAE,MAAM;CAGjC"}
@@ -14,6 +14,7 @@ class AppState {
14
14
  this.projectType = ProjectType.RUSH_PROJECT;
15
15
  this.pnpmLockfileLocation = '';
16
16
  this.pnpmfileLocation = '';
17
+ this.appVersion = '';
17
18
  this.rush = {
18
19
  projects: {}
19
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,6DAAY,CAAA;IACZ,iEAAc,CAAA;AAChB,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB;AAuBD,MAAa,QAAQ;IAcnB,YAAmB,KAAa;QAZzB,gBAAW,GAAW,EAAE,CAAC;QACzB,gBAAW,GAAgB,WAAW,CAAC,YAAY,CAAC;QACpD,yBAAoB,GAAW,EAAE,CAAC;QAClC,qBAAgB,GAAW,EAAE,CAAC;QAC9B,SAAI,GAIP;YACF,QAAQ,EAAE,EAAE;SACb,CAAC;QAGA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,CAAC;CACF;AAjBD,4BAiBC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport enum ProjectType {\n RUSH_PROJECT,\n PNPM_WORKSPACE\n}\n\nexport interface IRushProjectDetails {\n projectName: string;\n projectFolder: string;\n}\n\nexport interface IAppState {\n currDir: string;\n projectRoot: string;\n projectType: ProjectType;\n pnpmLockfileLocation: string;\n pnpmfileLocation: string;\n rush: {\n projects: {\n [key in string]: IRushProjectDetails;\n };\n };\n}\n\ninterface IProps {\n currDir: string;\n}\nexport class AppState implements IAppState {\n public currDir: string;\n public projectRoot: string = '';\n public projectType: ProjectType = ProjectType.RUSH_PROJECT;\n public pnpmLockfileLocation: string = '';\n public pnpmfileLocation: string = '';\n public rush: {\n projects: {\n [key in string]: IRushProjectDetails;\n };\n } = {\n projects: {}\n };\n\n public constructor(props: IProps) {\n this.currDir = props.currDir;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,6DAAY,CAAA;IACZ,iEAAc,CAAA;AAChB,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB;AAwBD,MAAa,QAAQ;IAenB,YAAmB,KAAa;QAbzB,gBAAW,GAAW,EAAE,CAAC;QACzB,gBAAW,GAAgB,WAAW,CAAC,YAAY,CAAC;QACpD,yBAAoB,GAAW,EAAE,CAAC;QAClC,qBAAgB,GAAW,EAAE,CAAC;QAC9B,eAAU,GAAW,EAAE,CAAC;QACxB,SAAI,GAIP;YACF,QAAQ,EAAE,EAAE;SACb,CAAC;QAGA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/B,CAAC;CACF;AAlBD,4BAkBC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nexport enum ProjectType {\n RUSH_PROJECT,\n PNPM_WORKSPACE\n}\n\nexport interface IRushProjectDetails {\n projectName: string;\n projectFolder: string;\n}\n\nexport interface IAppState {\n currDir: string;\n projectRoot: string;\n projectType: ProjectType;\n pnpmLockfileLocation: string;\n pnpmfileLocation: string;\n appVersion: string;\n rush: {\n projects: {\n [key in string]: IRushProjectDetails;\n };\n };\n}\n\ninterface IProps {\n currDir: string;\n}\nexport class AppState implements IAppState {\n public currDir: string;\n public projectRoot: string = '';\n public projectType: ProjectType = ProjectType.RUSH_PROJECT;\n public pnpmLockfileLocation: string = '';\n public pnpmfileLocation: string = '';\n public appVersion: string = '';\n public rush: {\n projects: {\n [key in string]: IRushProjectDetails;\n };\n } = {\n projects: {}\n };\n\n public constructor(props: IProps) {\n this.currDir = props.currDir;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushstack/lockfile-explorer",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Rush Lockfile Explorer: The UI for solving version conflicts quickly in a large monorepo",
5
5
  "keywords": [
6
6
  "conflict",
@@ -1 +0,0 @@
1
- !function(){"use strict";var e,t={259:function(e,t,n){var r,a,s=n(823),c=n(998),l="HK80a6ZVkdxoTKzrP9Eq",i=n(201);!function(e){e[e.DEPENDENCY=0]="DEPENDENCY",e[e.DEV_DEPENDENCY=1]="DEV_DEPENDENCY",e[e.PEER_DEPENDENCY=2]="PEER_DEPENDENCY"}(r||(r={}));class o{constructor(e,t,n,a,s){if(this.entryId="",this.name=e,this.version=t,this.dependencyType=n,this.containingEntry=a,this.peerDependencyMeta={},this.version.startsWith("link:")){const t=this.version.substring("link:".length),n=new i.y(".").relative(new i.y(a.packageJsonFolderPath).concat(t));if(!n)return void console.error("No root relative path for dependency!",e);this.entryId="project:"+n.toString()}else this.version.startsWith("/")?this.entryId=this.version:this.dependencyType===r.PEER_DEPENDENCY?(null==s?void 0:s.peerDependencies)?this.peerDependencyMeta={name:this.name,version:s.peerDependencies[this.name],optional:!(!s.peerDependenciesMeta||!s.peerDependenciesMeta[this.name])&&s.peerDependenciesMeta[this.name].optional}:console.error("Peer dependencies info missing!",s):this.entryId="/"+this.name+"/"+this.version}static parseDependencies(e,t,n){if(n.dependencies)for(const[a,s]of Object.entries(n.dependencies))e.push(new o(a,s,r.DEPENDENCY,t));if(n.devDependencies)for(const[a,s]of Object.entries(n.devDependencies))e.push(new o(a,s,r.DEV_DEPENDENCY,t));if(n.peerDependencies)for(const[a,s]of Object.entries(n.peerDependencies))e.push(new o(a,s,r.PEER_DEPENDENCY,t,n));if(n.transitivePeerDependencies)for(const e of n.transitivePeerDependencies)t.transitivePeerDependencies.add(e)}}!function(e){e[e.Project=0]="Project",e[e.Package=1]="Package",e[e.SideBySide=2]="SideBySide",e[e.Doppelganger=3]="Doppelganger"}(a||(a={}));class d{constructor(e){this.entryId="",this.packageJsonFolderPath="",this.entryPackageName="",this.displayText="",this.dependencies=[],this.transitivePeerDependencies=new Set,this.referrers=[],this.entryPackageVersion="",this.entrySuffix="";const{rawEntryId:t,kind:n,rawYamlData:r}=e;if(this.rawEntryId=t,this.kind=n,"."!==t){if(n===a.Project){const e=new i.y("common/temp/package.json").dirname()||"",n=new i.y(".").relative(new i.y(e).concat(t)),r=new i.y(t).basename();if(!n||!r)return void console.error("Could not construct path for entry: ",t);this.packageJsonFolderPath=n.toString(),this.entryId="project:"+this.packageJsonFolderPath,this.entryPackageName=r.toString(),this.displayText="Project: "+this.entryPackageName}else{this.displayText=t;const e=d._packageEntryIdRegex.exec(t);if(e){const[,t,n]=e;this.entryPackageName=t;const r=n.indexOf("_");if(r>=0){const e=n.substring(0,r),a=n.substring(r+1);this.entryPackageVersion=e,this.entrySuffix=a,this.displayText=t+" "+e+" ("+a+")"}else this.entryPackageVersion=n,this.displayText=t+" "+n}this.packageJsonFolderPath="common/temp/node_modules/.pnpm/"+this.entryPackageName.replace("/","+")+"@"+this.entryPackageVersion+(this.entrySuffix?`_${this.entrySuffix}`:"")+"/node_modules/"+this.entryPackageName}o.parseDependencies(this.dependencies,this,r)}}}d._packageEntryIdRegex=new RegExp("/(.*)/([^/]+)$");var p="IWEAxDEzQLw3g5TI_6up",m=n(300);const E=m.I0,u=m.v9;var f=n(329);const y={allEntries:[],filters:{[a.Project]:!1,[a.Package]:!0,[a.SideBySide]:!1,[a.Doppelganger]:!1},selectedEntryStack:[],bookmarkedEntries:[]},h=(0,f.oM)({name:"entry",initialState:y,reducers:{loadEntries:(e,t)=>{e.allEntries=t.payload},setFilter:(e,t)=>{e.filters[t.payload.filter]=t.payload.state},clearStackAndPush:(e,t)=>{e.selectedEntryStack=[t.payload]},pushToStack:(e,t)=>{e.selectedEntryStack.push(t.payload)},popStack:e=>{e.selectedEntryStack.length>1&&e.selectedEntryStack.pop()},addBookmark:(e,t)=>{e.bookmarkedEntries.includes(t.payload)||e.bookmarkedEntries.push(t.payload)},removeBookmark:(e,t)=>{e.bookmarkedEntries=e.bookmarkedEntries.filter((e=>e.rawEntryId!==t.payload.rawEntryId))}}}),k=e=>e.entry.selectedEntryStack.length?e.entry.selectedEntryStack[e.entry.selectedEntryStack.length-1]:void 0,v=e=>{const t=[];return e.entry.filters[a.Package]?t.push(...e.entry.allEntries.filter((e=>e.kind===a.Package))):e.entry.filters[a.Project]&&t.push(...e.entry.allEntries.filter((e=>e.kind===a.Project))),t},{loadEntries:g,setFilter:N,clearStackAndPush:P,pushToStack:D,popStack:S,addBookmark:b,removeBookmark:w}=h.actions,C=h.reducer;const j=({options:e})=>s.createElement("div",{className:"b1H6mzJXpxsG350hyeU_"},e.map((e=>s.createElement("div",{key:e.text,className:"mWhs4CnCA0TKj6CRR8gk "+(e.active?"Q9WEwAuQb3UsVbcHr0oI":""),onClick:e.onClick},e.text)))),O=({group:e})=>{const t=u(k),n=E(),r=(0,s.useRef)(),a=(0,s.useCallback)((e=>()=>{n(P(e))}),[]);return(0,s.useEffect)((()=>{t&&t.entryPackageName===e.entryName&&r.current.scrollIntoView({behavior:"smooth"})}),[t,e]),s.createElement("div",{className:"OcndyDBetZor3ptzTnTX",ref:r},s.createElement("h5",null,e.entryName),e.versions.map((e=>s.createElement("div",{key:e.rawEntryId,onClick:a(e),className:"Wg5pG3RVf6SQ51i0tVkd "+((null==t?void 0:t.rawEntryId)===e.rawEntryId?"NBIr3yosJ9gX6LZcnC7T":"")},s.createElement("p",null,e.entryPackageVersion||e.entryPackageName," ",e.entrySuffix&&`[${e.entrySuffix}]`)))))},x=()=>{const[e,t]=(0,s.useState)(""),n=u(v),r=u((e=>e.entry.filters)),c=(0,s.useCallback)((e=>t(e.target.value)),[]),l=u((e=>e.entry.selectedEntryStack)),i=E();if(!n)return null;const o=(0,s.useCallback)((()=>{i(S())}),[]),d=(0,s.useCallback)((e=>t=>{i(N({filter:e,state:t.target.checked}))}),[]),m=(0,s.useCallback)((e=>()=>{e===a.Project?(i(N({filter:e,state:!r[e]})),i(N({filter:a.Package,state:!1}))):(i(N({filter:e,state:!r[e]})),i(N({filter:a.Project,state:!1})))}),[r]);return s.createElement(s.Fragment,null,s.createElement(j,{options:[{text:"Projects",active:r[a.Project],onClick:m(a.Project)},{text:"Packages",active:r[a.Package],onClick:m(a.Package)}]}),s.createElement("div",{className:"HK80a6ZVkdxoTKzrP9Eq yk7wrFMnnNyYLABMBhz_"},s.createElement("div",{className:"oq4FJVnF_fONdOKuiK0w"},l.length>1?s.createElement("button",{onClick:o},"back"):null,s.createElement("h5",null,"filter:"),s.createElement("input",{type:"text",value:e,onChange:c})),s.createElement("div",{className:"PoJj8_8xv9BXiMVPKFVE"},(()=>{let t=[];t=e?n.filter((t=>-1!==t.entryPackageName.indexOf(e))):n;const s=t.reduce(((e,t)=>{const n=e[t.entryPackageName]||[];return n.push(t),e[t.entryPackageName]=n,e}),{});let c=[];for(const[e,t]of Object.entries(s))c.push({entryName:e,versions:t});return r[a.SideBySide]&&(c=c.filter((e=>e.versions.length>1))),r[a.Doppelganger]&&(c=c.filter((e=>(e=>{const t=new Set;for(const n of e){if(t.has(n.entryPackageVersion))return!0;t.add(n.entryPackageVersion)}return!1})(e.versions)))),c})().map((e=>s.createElement(O,{group:e,key:e.entryName})))),s.createElement("div",{className:"K6dDN5KzjLkbPPFWUaly"},s.createElement("h5",null,"Filters"),s.createElement("div",{className:p},s.createElement("input",{type:"checkbox",checked:r[a.SideBySide],onChange:d(a.SideBySide)}),s.createElement("h5",null,"Must have side-by-side versions")),s.createElement("div",{className:p},s.createElement("input",{type:"checkbox",checked:r[a.Doppelganger],onChange:d(a.Doppelganger)}),s.createElement("h5",null,"Must have doppelgangers")))))};var _;!function(e){e[e.PACKAGE_JSON=0]="PACKAGE_JSON",e[e.CJS=1]="CJS",e[e.PARSED_PACKAGE_JSON=2]="PARSED_PACKAGE_JSON"}(_||(_={}));const I=()=>{const[e,t]=(0,s.useState)(void 0),[n,r]=(0,s.useState)(void 0),[a,c]=(0,s.useState)(new Map),[i,o]=(0,s.useState)(""),d=u(k),[p,m]=(0,s.useState)(_.PARSED_PACKAGE_JSON),E=(0,s.useCallback)((e=>()=>m(e)),[]);(0,s.useEffect)((()=>{d&&(d.entryPackageName?async function(e){const n=await(async()=>{try{const e=await fetch("http://localhost:8091/api/pnpmfile");return await e.text()}catch(e){return console.error("Could not load cjs file: ",e),"Missing CJS"}})();o(n);const a=await(async e=>{try{const t=await fetch("http://localhost:8091/api/package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectPath:e})});return await t.json()}catch(e){return void console.error("Could not load package json file: ",e)}})(e);t(a);const s=await(async e=>{try{const t=await fetch("http://localhost:8091/api/package-spec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectPath:e})});return await t.json()}catch(e){return void console.error("Could not load cjs file: ",e)}})(e);if(r(s),a&&s){const e=((e,t)=>{const n=new Map,r=new Map;for(const[t,r]of Object.entries(Object.assign(Object.assign(Object.assign({},e.dependencies),e.devDependencies),e.peerDependencies)))n.set(t,r);for(const[e,n]of Object.entries(Object.assign(Object.assign(Object.assign({},t.dependencies),t.devDependencies),t.peerDependencies)))r.set(e,n);const a=new Map;for(const e of n.keys())r.has(e)?r.get(e)!==n.get(e)&&a.set(e,{type:"diff",packageName:e,from:n.get(e),to:r.get(e)}):a.set(e,{type:"remove",packageName:e});for(const e of r.keys())n.has(e)||a.set(e,{type:"add",packageName:e});return a})(a,s);c(e)}}(d.packageJsonFolderPath).catch((e=>{console.error(`Failed to load project information: ${e}`)})):console.log("The selected entry has no entry name: ",d.entryPackageName))}),[d]);const f=e=>{var t,n;const[r,c]=e;if(!a.has(r))return s.createElement("p",{key:r},r,": ",c);switch(null===(t=a.get(r))||void 0===t?void 0:t.type){case"add":return s.createElement("p",{key:r},s.createElement("span",{className:"nTIc62ACgp5xMWIvZ4cn"},r,": ",c)," ","[Added by .pnpmfile.cjs]");case"diff":return s.createElement("p",{key:r},s.createElement("span",{className:"I4A8ZZlpCL3Op0c53VjN"},r,": ",c)," ","[Changed from ",null===(n=a.get(r))||void 0===n?void 0:n.from,"]");case"remove":return s.createElement("p",{key:r},s.createElement("span",{className:"iavWjvHy9s5MhCZ_ncgb"},r,": ",c)," ","[Deleted by .pnpmfile.cjs]");default:return s.createElement("p",{key:r},r,": ",c)}};return s.createElement("div",null,s.createElement(j,{options:[{text:"package spec",active:p===_.PARSED_PACKAGE_JSON,onClick:E(_.PARSED_PACKAGE_JSON)},{text:"package.json",active:p===_.PACKAGE_JSON,onClick:E(_.PACKAGE_JSON)},{text:".pnpmfile.cjs",active:p===_.CJS,onClick:E(_.CJS)}]}),s.createElement("div",{className:l},s.createElement("div",{className:"e2KEBfZCHwEMeH4j6wS7"},(()=>{switch(p){case _.PACKAGE_JSON:return e?s.createElement("pre",null,JSON.stringify(e,null,2)):null;case _.CJS:return s.createElement("pre",null,i);case _.PARSED_PACKAGE_JSON:return n?s.createElement("div",{className:"Ko0YQxSlY0hCIDTfmNlr"},s.createElement("h5",null,"Dependencies"),n.dependencies&&Object.entries(n.dependencies).map(f),s.createElement("h5",null,"Dev Dependencies"),n.devDependencies&&Object.entries(n.devDependencies).map(f),s.createElement("h5",null,"Peer Dependencies"),n.peerDependencies&&Object.entries(n.peerDependencies).map(f)):null;default:return null}})())))};var A,T="_R50_3JsFs2FC9kVffQL",R="mRQWdzXzOM1NpFUpYnhP";!function(e){e[e.Determinant=0]="Determinant",e[e.TransitiveReferrer=1]="TransitiveReferrer"}(A||(A={}));const J=()=>{var e,t;const n=u(k),a=E(),[c,i]=(0,s.useState)(null),[o,d]=(0,s.useState)([]);(0,s.useEffect)((()=>{n&&i(null)}),[n]);const p=(0,s.useCallback)((e=>()=>{if(c&&c.name===e.name)e.resolvedEntry?a(D(e.resolvedEntry)):((...e)=>{console.log("Diagnostic: ",...e)})("No resolved entry for dependency:",e);else if(n){i(e);const t=[n],r=new Set,a=new Set,s=new Set;for(s.add(n);t.length;){const n=t.pop();if(n)for(const c of n.referrers){let l=!1;for(const t of c.dependencies)if(t.name===e.name){r.add(c),l=!0;break}if(!l){c.transitivePeerDependencies.has(e.name)?a.add(c):console.error('Error analyzing influencers: A referrer appears to be missing its "transitivePeerDependencies" field in the YAML file: ',c);for(const e of n.referrers)s.has(e)||(t.push(e),s.add(e))}}}const c=[];for(const e of r.values())c.push({entry:e,type:A.Determinant});for(const e of a.values())c.push({entry:e,type:A.TransitiveReferrer});d(c)}}),[n,c]),m=(0,s.useCallback)((e=>()=>{a(D(e))}),[n]);return n?s.createElement(s.Fragment,null,s.createElement("div",{className:"KWDuEbG1GmwLxFmPPppw"},s.createElement("div",{className:l},s.createElement("h5",null,"Direct Referrers"),s.createElement("div",{className:T},null===(e=n.referrers)||void 0===e?void 0:e.map((e=>s.createElement("div",{className:R,key:e.rawEntryId,onClick:m(e)},s.createElement("h5",null,"Name: ",e.displayText),s.createElement("div",null,s.createElement("p",null,"Entry ID: ",e.rawEntryId))))))),s.createElement("div",{className:l},s.createElement("h5",null,"Direct Dependencies"),s.createElement("div",{className:T},null===(t=n.dependencies)||void 0===t?void 0:t.map((e=>s.createElement("div",{className:`mRQWdzXzOM1NpFUpYnhP ${(null==c?void 0:c.name)===e.name&&"GbZbP1wHbcReGrxpZ3Ra"}`,key:e.entryId||e.name,onClick:p(e)},s.createElement("h5",null,"Name: ",e.name," ",e.dependencyType===r.PEER_DEPENDENCY?(e.peerDependencyMeta.optional?"(Optional)":"(Non-optional)")+" Peer Dependency":""),s.createElement("div",null,s.createElement("p",null,"Version: ",e.version),s.createElement("p",null,"Entry ID: ",e.entryId)))))))),n?n.dependencies.filter((e=>e.dependencyType===r.PEER_DEPENDENCY)).length?c&&c.dependencyType===r.PEER_DEPENDENCY?s.createElement("div",{className:l},s.createElement("h5",null,"Influencers:"),o.filter((e=>e.type===A.Determinant)).map((({entry:e})=>s.createElement("div",{key:e.rawEntryId},e.displayText))),s.createElement("h5",null,"Transitive Referencers:"),o.filter((e=>e.type===A.TransitiveReferrer)).map((({entry:e})=>s.createElement("div",{key:e.rawEntryId},e.displayText)))):s.createElement("div",null,s.createElement("h5",null,"Select a peer dependency to view its influencers")):s.createElement("div",{className:l},s.createElement("h5",null,"No peer dependencies.")):null):s.createElement("div",{className:l},s.createElement("h5",null,"Select an entry to view its details"))};const F=()=>{const e=u((e=>e.entry.bookmarkedEntries)),t=E(),n=(0,s.useCallback)((e=>()=>{t(P(e))}),[]),r=(0,s.useCallback)((e=>()=>{t(w(e))}),[]);return s.createElement("div",{className:"HK80a6ZVkdxoTKzrP9Eq aM5oGgiHs9rRHcHdAqFh"},s.createElement("h5",null,"Bookmarks"),s.createElement("hr",null),e.map((e=>s.createElement("div",{key:e.rawEntryId,className:"Ci1rEoM4eR29ZJcnvJJE"},s.createElement("p",{onClick:n(e)},e.displayText),s.createElement("button",{onClick:r(e)},"Remove")))))};var M="dklLbMzvzbuzLd2XJh3W";const K=()=>{const e=u(k),t=u((t=>!!e&&t.entry.bookmarkedEntries.includes(e))),n=E(),r=(0,s.useCallback)((()=>{e&&n(b(e))}),[e]),a=(0,s.useCallback)((()=>{e&&n(w(e))}),[e]);return e?s.createElement("div",{className:M},s.createElement("div",{className:"Hd2WYHIwrFrldD0I8qDj"},s.createElement("h5",null,"Selected entry:"),s.createElement("span",null,e.displayText)),s.createElement("p",null,"Package Entry: ",e.rawEntryId),s.createElement("p",null,"Package JSON path: ",e.packageJsonFolderPath),t?s.createElement("button",{onClick:a},"Remove Bookmark"):s.createElement("button",{onClick:r},"Add Bookmark")):s.createElement("div",{className:M},s.createElement("h5",null,"No Entry Selected"))};var Y="wR2C2OTixe7QR738j44h",V="Oo_rkIqOkO0j8slDAm5V";const z=()=>s.createElement("div",{className:"mqcpXwTQfD4A2eS4QRMa"},s.createElement("a",{href:"https://www.npmjs.com/package/@rushstack/lockfile-explorer",target:"_blank",rel:"noreferrer"},s.createElement("div",{className:"gxAXHLK7j_oYpFDmIJLR"},s.createElement("img",{className:Y,src:n(769)})),s.createElement("div",{className:"rHArsuIMBTbIFs5o2cuw"},s.createElement("img",{className:Y,src:n(500)})),s.createElement("div",{className:"P6XzPBuW8Osze59RSui1"},s.createElement("img",{className:Y,src:n(126)})),s.createElement("div",{className:V},"0.1.0"),s.createElement("div",{className:V},"rushstack.io"))),B=(0,f.xC)({reducer:{entry:C},middleware:e=>e({serializableCheck:!1})}),G=document.getElementById("root");c.render(s.createElement(m.zt,{store:B},s.createElement((()=>{const e=E();return(0,s.useEffect)((()=>{(async function(){const t=await(async()=>{const e=await fetch("http://localhost:8091/");return(e=>{const t=[],n={},r=[];if(e.importers)for(const[s,c]of Object.entries(e.importers)){const e=new d({rawEntryId:s,kind:a.Project,rawYamlData:c});r.push(e),t.push(e),n[e.entryId]=e}const s=[];if(e.packages)for(const[r,c]of Object.entries(e.packages)){const e=new d({rawEntryId:r,kind:a.Package,rawYamlData:c});s.push(e),t.push(e),n[r]=e}for(const e of t)for(const t of e.dependencies){const r=n[t.entryId];r?(t.resolvedEntry=r,r.referrers.push(e)):console.error("Could not resolve dependency entryId: ",t.entryId)}return t})(await e.json())})();e(g(t))})().catch((e=>{console.log(`Failed to read lockfile: ${e}`)}))}),[]),s.createElement("div",{className:"uXEYthi0e8fjYu_FisVm"},s.createElement("div",{className:"FFuReYR1pIswEW7Az6w9"},s.createElement("div",{className:"ms-Grid",dir:"ltr"},s.createElement("div",{className:"ms-Grid-row"},s.createElement("div",{className:"ms-Grid-col ms-sm3"},s.createElement(x,null)),s.createElement("div",{className:"ms-Grid-col ms-sm7 HqAzbQwu1zc9yH8ZQESI"},s.createElement(K,null),s.createElement(I,null),s.createElement(J,null)),s.createElement("div",{className:"ms-Grid-col ms-sm2"},s.createElement(F,null))))),s.createElement(z,null))}),null)),G)},769:function(e,t,n){e.exports=n.p+"d39919ddc699d58b84ba.svg"},500:function(e,t,n){e.exports=n.p+"d13d30e9b42faf842d2f.svg"},126:function(e,t,n){e.exports=n.p+"510f03f81080fd3cfd63.svg"}},n={};function r(e){var a=n[e];if(void 0!==a)return a.exports;var s=n[e]={exports:{}};return t[e](s,s.exports,r),s.exports}r.m=t,e=[],r.O=function(t,n,a,s){if(!n){var c=1/0;for(d=0;d<e.length;d++){n=e[d][0],a=e[d][1],s=e[d][2];for(var l=!0,i=0;i<n.length;i++)(!1&s||c>=s)&&Object.keys(r.O).every((function(e){return r.O[e](n[i])}))?n.splice(i--,1):(l=!1,s<c&&(c=s));if(l){e.splice(d--,1);var o=a();void 0!==o&&(t=o)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[n,a,s]},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},function(){var e;r.g.importScripts&&(e=r.g.location+"");var t=r.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=e}(),function(){var e={143:0};r.O.j=function(t){return 0===e[t]};var t=function(t,n){var a,s,c=n[0],l=n[1],i=n[2],o=0;if(c.some((function(t){return 0!==e[t]}))){for(a in l)r.o(l,a)&&(r.m[a]=l[a]);if(i)var d=i(r)}for(t&&t(n);o<c.length;o++)s=c[o],r.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return r.O(d)},n=self.webpackChunk_rushstack_lockfile_explorer_web=self.webpackChunk_rushstack_lockfile_explorer_web||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var a=r.O(void 0,[671],(function(){return r(259)}));a=r.O(a)}();