@kb-labs/quality-entry 2.14.0 → 2.15.0

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.
Files changed (41) hide show
  1. package/dist/widgets/117.js +2 -0
  2. package/dist/widgets/117.js.map +1 -0
  3. package/dist/widgets/297.js +2 -0
  4. package/dist/widgets/297.js.map +1 -0
  5. package/dist/widgets/338.js +2 -0
  6. package/dist/widgets/338.js.map +1 -0
  7. package/dist/widgets/370.js +2 -0
  8. package/dist/widgets/370.js.map +1 -0
  9. package/dist/widgets/451.js +2 -0
  10. package/dist/widgets/451.js.map +1 -0
  11. package/dist/widgets/50.js +2 -0
  12. package/dist/widgets/50.js.map +1 -0
  13. package/dist/widgets/586.js +39 -0
  14. package/dist/widgets/586.js.map +1 -0
  15. package/dist/widgets/59.js +2 -0
  16. package/dist/widgets/59.js.map +1 -0
  17. package/dist/widgets/607.js +2 -0
  18. package/dist/widgets/607.js.map +1 -0
  19. package/dist/widgets/626.js +2 -0
  20. package/dist/widgets/626.js.map +1 -0
  21. package/dist/widgets/669.js +2 -0
  22. package/dist/widgets/669.js.map +1 -0
  23. package/dist/widgets/678.js +2 -0
  24. package/dist/widgets/678.js.map +1 -0
  25. package/dist/widgets/781.js +2 -0
  26. package/dist/widgets/781.js.map +1 -0
  27. package/dist/widgets/842.js +446 -0
  28. package/dist/widgets/842.js.map +1 -0
  29. package/dist/widgets/968.js +10 -0
  30. package/dist/widgets/968.js.map +1 -0
  31. package/dist/widgets/997.js +35 -0
  32. package/dist/widgets/997.js.map +1 -0
  33. package/dist/widgets/@mf-types.d.ts +3 -0
  34. package/dist/widgets/@mf-types.zip +0 -0
  35. package/dist/widgets/__federation_expose_QualityOverview.js +2 -0
  36. package/dist/widgets/__federation_expose_QualityOverview.js.map +1 -0
  37. package/dist/widgets/mf-manifest.json +262 -0
  38. package/dist/widgets/mf-stats.json +301 -0
  39. package/dist/widgets/remoteEntry.js +7 -0
  40. package/dist/widgets/remoteEntry.js.map +1 -0
  41. package/package.json +8 -8
@@ -0,0 +1,3 @@
1
+
2
+ export type RemoteKeys = 'REMOTE_ALIAS_IDENTIFIER/QualityOverview';
3
+ type PackageType<T> = T extends 'REMOTE_ALIAS_IDENTIFIER/QualityOverview' ? typeof import('REMOTE_ALIAS_IDENTIFIER/QualityOverview') :any;
Binary file
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_kb_labs_quality_entry=self.webpackChunk_kb_labs_quality_entry||[]).push([["15"],{572(e,t,n){var r=n(5259),a=Symbol.for("react.element"),i=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,d=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(d=t.ref),t)l.call(t,r)&&!o.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:a,type:e,key:c,ref:d,props:i,_owner:s.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},8048(e,t,n){e.exports=n(572)},9569(e,t,n){n.r(t),n.d(t,{default:()=>f});var r=n(8048),a=n(5259),i=n(1349),l=n(2383);function s(){var e,t,n,a,s,o,c,d,u=(0,l.useData)("/v1/plugins/quality/stats?includeHealth=true"),g=u.data,p=u.isLoading,h=(0,l.useData)("/v1/plugins/quality/health?detailed=true"),x=h.data,f=h.isLoading,m=(0,l.useData)("/v1/plugins/quality/stale?detailed=true"),y=m.data,j=m.isLoading;if(p||f)return(0,r.jsx)("div",{style:{textAlign:"center",padding:"40px"},children:(0,r.jsx)(i.UISpin,{size:"large"})});var I=function(e){return e>=3?"error":e>=2?"warning":"info"};return(0,r.jsxs)("div",{children:[!j&&y&&y.totalStale>0&&(0,r.jsx)(i.UIAlert,{variant:"error",showIcon:!0,icon:(0,r.jsx)(i.UIIcon,{name:"ClockCircleOutlined"}),message:"".concat(y.totalStale," stale package").concat(y.totalStale>1?"s":""," detected"),description:(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{style:{marginBottom:8},children:["Some packages need rebuilding. This affects ",y.totalAffected," downstream package",y.totalAffected>1?"s":"","."]}),y.criticalChains&&y.criticalChains.length>0&&(0,r.jsxs)("div",{style:{marginBottom:12},children:[(0,r.jsx)("strong",{children:"Critical chains:"}),(0,r.jsx)("ul",{style:{marginTop:4,marginBottom:0},children:y.criticalChains.slice(0,3).map(function(e,t){return(0,r.jsxs)("li",{children:[(0,r.jsx)("code",{children:e.root})," affects ",e.affected.length," packages"]},t)})})]}),(0,r.jsxs)(i.UISpace,{children:[(0,r.jsx)(i.UIButton,{variant:"primary",danger:!0,icon:(0,r.jsx)(i.UIIcon,{name:"ThunderboltOutlined"}),size:"small",children:"Rebuild All Stale"}),(0,r.jsx)(i.UIButton,{size:"small",children:"View Details"})]})]}),style:{marginBottom:24}}),(0,r.jsx)(i.UICard,{title:"Health Score",style:{marginBottom:24},children:(0,r.jsxs)(i.UIRow,{gutter:24,children:[(0,r.jsx)(i.UICol,{span:12,children:(0,r.jsxs)("div",{style:{textAlign:"center"},children:[(0,r.jsx)(i.UIProgress,{type:"circle",percent:null!=(t=null==x?void 0:x.score)?t:0,size:180,status:(e=null==x?void 0:x.score)?e>=80?"success":e<60?"exception":"normal":"normal",strokeColor:{"0%":(null==x?void 0:x.score)&&x.score>=80?"#52c41a":"#ff4d4f","100%":(null==x?void 0:x.score)&&x.score>=80?"#73d13d":"#ff7a45"}}),(0,r.jsx)("div",{style:{marginTop:16},children:(0,r.jsxs)(i.UITag,{color:function(e){switch(e){case"A":return"green";case"B":return"blue";case"C":return"orange";case"D":return"red";case"F":return"volcano";default:return"default"}}(null==x?void 0:x.grade),style:{fontSize:16},children:["Grade ",null==x?void 0:x.grade]})})]})}),(0,r.jsxs)(i.UICol,{span:12,children:[(0,r.jsx)(i.UIStatistic,{title:"Packages",value:null!=(n=null==g?void 0:g.packages)?n:0,prefix:(0,r.jsx)(i.UIIcon,{name:"DatabaseOutlined"})}),(0,r.jsx)(i.UIStatistic,{title:"Lines of Code",value:null!=(a=null==g?void 0:g.loc)?a:0,prefix:(0,r.jsx)(i.UIIcon,{name:"CodeOutlined"}),style:{marginTop:16}}),(0,r.jsx)(i.UIStatistic,{title:"Total Size",value:null!=(s=null==g?void 0:g.size)?s:"N/A",prefix:(0,r.jsx)(i.UIIcon,{name:"FileTextOutlined"}),style:{marginTop:16}})]})]})}),(null==x?void 0:x.issues)&&x.issues.length>0&&(0,r.jsx)(i.UICard,{title:"Health Issues",style:{marginBottom:24},children:(0,r.jsx)(i.UIRow,{gutter:16,children:x.issues.map(function(e,t){return(0,r.jsx)(i.UICol,{span:24,style:{marginBottom:12},children:(0,r.jsx)(i.UIAlert,{message:(0,r.jsxs)(i.UISpace,{children:[(0,r.jsx)("span",{children:e.description}),(0,r.jsxs)(i.UITag,{color:"error"===I(e.severity)?"red":"orange",children:["severity: ",e.severity]}),void 0!==e.count&&(0,r.jsxs)(i.UITag,{children:[e.count," affected"]})]}),variant:I(e.severity),showIcon:!0,icon:"error"===I(e.severity)?(0,r.jsx)(i.UIIcon,{name:"WarningOutlined"}):(0,r.jsx)(i.UIIcon,{name:"CheckCircleOutlined"})})},t)})})}),(0,r.jsxs)(i.UIRow,{gutter:16,children:[(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Packages",value:null!=(o=null==g?void 0:g.packages)?o:0,prefix:(0,r.jsx)(i.UIIcon,{name:"DatabaseOutlined"})})})}),(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Lines of Code",value:null!=(c=null==g?void 0:g.loc)?c:0,prefix:(0,r.jsx)(i.UIIcon,{name:"CodeOutlined"})})})}),(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Total Size",value:null!=(d=null==g?void 0:g.size)?d:"N/A",prefix:(0,r.jsx)(i.UIIcon,{name:"FileTextOutlined"})})})})]})]})}function o(){var e,t,n,a,s,o,c,d,u,g=(0,l.useData)("/v1/plugins/quality/dependencies"),p=g.data,h=g.isLoading,x=g.isError;if(h)return(0,r.jsx)("div",{style:{textAlign:"center",padding:"40px"},children:(0,r.jsx)(i.UISpin,{size:"large"})});if(x)return(0,r.jsx)(i.UIAlert,{message:"Failed to load dependencies",variant:"error",showIcon:!0});var f=[{title:"Dependency",dataIndex:"name",key:"name",sorter:function(e,t){return e.name.localeCompare(t.name)}},{title:"Versions",dataIndex:"versions",key:"versions",render:function(e){return(0,r.jsx)(r.Fragment,{children:e.map(function(e){return(0,r.jsxs)(i.UITag,{color:"orange",children:[e.version," (",e.count,")"]},e.version)})})}},{title:"Total Packages",dataIndex:"totalPackages",key:"totalPackages",sorter:function(e,t){return e.totalPackages-t.totalPackages}}],m=[{title:"Dependency",dataIndex:"name",key:"name",sorter:function(e,t){return e.name.localeCompare(t.name)}},{title:"Packages",dataIndex:"packages",key:"packages",render:function(e){return e.join(", ")}}],y=[{title:"Dependency",dataIndex:"name",key:"name",sorter:function(e,t){return e.name.localeCompare(t.name)}},{title:"Packages",dataIndex:"packages",key:"packages",render:function(e){return e.join(", ")}},{title:"Imported In",dataIndex:"importedIn",key:"importedIn",render:function(e){return e.join(", ")}}];return(0,r.jsxs)("div",{children:[p&&0===p.totalIssues&&(0,r.jsx)(i.UIAlert,{message:"No dependency issues found!",description:"Your monorepo has no duplicate, unused, or missing dependencies.",variant:"success",showIcon:!0,style:{marginBottom:24}}),(0,r.jsx)(i.UICard,{title:"Duplicate Dependencies (".concat(null!=(e=null==p||null==(c=p.duplicates)?void 0:c.length)?e:0,")"),style:{marginBottom:24},children:(0,r.jsx)(i.UITable,{dataSource:null!=(t=null==p?void 0:p.duplicates)?t:[],columns:f,rowKey:"name",pagination:{pageSize:10}})}),(0,r.jsx)(i.UICard,{title:"Unused Dependencies (".concat(null!=(n=null==p||null==(d=p.unused)?void 0:d.length)?n:0,")"),style:{marginBottom:24},children:(0,r.jsx)(i.UITable,{dataSource:null!=(a=null==p?void 0:p.unused)?a:[],columns:m,rowKey:"name",pagination:{pageSize:10}})}),(0,r.jsx)(i.UICard,{title:"Missing Dependencies (".concat(null!=(s=null==p||null==(u=p.missing)?void 0:u.length)?s:0,")"),children:(0,r.jsx)(i.UITable,{dataSource:null!=(o=null==p?void 0:p.missing)?o:[],columns:y,rowKey:"name",pagination:{pageSize:10}})})]})}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function d(){var e,t,n,s,o=function(e){if(Array.isArray(e))return e}(e=a.useState())||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a=[],i=!0,l=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(a.push(t.value),2!==a.length);i=!0);}catch(e){l=!0,n=e}finally{try{i||null==r.return||r.return()}finally{if(l)throw n}}return a}}(e)||function(e){if(e){if("string"==typeof e)return c(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return c(e,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),d=o[0],u=o[1],g=d?"/v1/plugins/quality/build-order?package=".concat(encodeURIComponent(d)):"/v1/plugins/quality/build-order",p=(0,l.useData)(g),h=p.data,x=p.isLoading,f=p.isError;if((0,l.useData)("/v1/plugins/quality/cycles").data,x)return(0,r.jsx)("div",{style:{textAlign:"center",padding:"40px"},children:(0,r.jsx)(i.UISpin,{size:"large"})});if(f)return(0,r.jsx)(i.UIAlert,{message:"Failed to load build order",variant:"error",showIcon:!0});var m=[{title:"Layer",dataIndex:"layer",key:"layer",width:100,render:function(e){return(0,r.jsxs)(i.UITag,{color:"blue",children:["Layer ",e]})}},{title:"Packages (can build in parallel)",dataIndex:"packages",key:"packages",render:function(e){return(0,r.jsx)(i.UISpace,{wrap:!0,children:e.map(function(e){return(0,r.jsx)(i.UITag,{children:e},e)})})}}],y=null==h?void 0:h.layers.map(function(e,t){return{layer:t+1,packages:e,key:t}});return(0,r.jsxs)("div",{children:[(null==h?void 0:h.hasCircular)&&(0,r.jsx)(i.UIAlert,{message:"Circular Dependencies Detected!",description:"Found ".concat(h.circular.length," circular dependency cycles. Build order may not be correct."),variant:"error",showIcon:!0,style:{marginBottom:24}}),(0,r.jsx)(i.UICard,{title:"Filter",style:{marginBottom:24},children:(0,r.jsx)(i.UISelect,{style:{width:400},placeholder:"Select package to see its build dependencies",value:d,onChange:function(e){return u(e)},allowClear:!0,showSearch:!0,options:null!=(t=null==h?void 0:h.sorted.map(function(e){return{label:e,value:e}}))?t:[]})}),(0,r.jsx)(i.UICard,{title:"Build Layers (".concat(null!=(n=null==h?void 0:h.layerCount)?n:0," layers, ").concat(null!=(s=null==h?void 0:h.packageCount)?s:0," packages)"),style:{marginBottom:24},children:(0,r.jsx)(i.UITable,{dataSource:null!=y?y:[],columns:m,pagination:!1,expandable:{expandedRowRender:function(e){return(0,r.jsxs)("div",{style:{padding:"8px 0"},children:[(0,r.jsx)("strong",{children:"Packages in this layer:"}),(0,r.jsx)("div",{style:{marginTop:8},children:e.packages.map(function(e){return(0,r.jsx)(i.UITag,{style:{marginBottom:4},children:e},e)})})]})}}})}),(null==h?void 0:h.hasCircular)&&(0,r.jsx)(i.UICard,{title:"Circular Dependencies (".concat(h.circular.length,")"),children:h.circular.map(function(e,t){return(0,r.jsx)(i.UIAlert,{message:"Cycle ".concat(t+1),description:e.join(" → "),variant:"warning",showIcon:!0,style:{marginBottom:12}},t)})})]})}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var i=[],l=!0,s=!1;try{for(a=a.call(e);!(l=(n=a.next()).done)&&(i.push(n.value),!t||i.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{l||null==a.return||a.return()}finally{if(s)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return u(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(){var e,t,n=g(a.useState("stats"),2),s=n[0],o=n[1],c=g(a.useState(),2),d=c[0],u=c[1],p=(0,l.useData)("/v1/plugins/quality/build-order").data;a.useEffect(function(){var e;("reverse"===s||"impact"===s)&&!d&&(null==p||null==(e=p.sorted)?void 0:e[0])&&u(p.sorted[0])},[s,d,p]);var h=d?"/v1/plugins/quality/graph?mode=".concat(s,"&package=").concat(encodeURIComponent(d)):"/v1/plugins/quality/graph?mode=".concat(s),x=(0,l.useData)(h),f=x.data,m=x.isLoading,y=x.isError;if(m)return(0,r.jsx)("div",{style:{textAlign:"center",padding:"40px"},children:(0,r.jsx)(i.UISpin,{size:"large"})});if(y)return(0,r.jsx)(i.UIAlert,{message:"Failed to load graph",variant:"error",showIcon:!0});var j=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=n?"".concat(n,"/").concat(e.name):e.name;return{title:e.name,key:r,children:null==(t=e.children)?void 0:t.map(function(e){return j(e,r)})}};return(0,r.jsxs)("div",{children:[(0,r.jsx)(i.UICard,{title:"Visualization Options",style:{marginBottom:24},children:(0,r.jsxs)(i.UIRow,{gutter:16,children:[(0,r.jsxs)(i.UICol,{span:12,children:[(0,r.jsx)("label",{children:"Mode:"}),(0,r.jsx)(i.UISelect,{style:{width:"100%",marginTop:8},value:s,onChange:function(e){return o(e)},options:[{label:"Dependency Tree",value:"tree"},{label:"Reverse Dependencies",value:"reverse"},{label:"Impact Analysis",value:"impact"},{label:"Statistics",value:"stats"}]})]}),"stats"!==s&&(0,r.jsxs)(i.UICol,{span:12,children:[(0,r.jsxs)("label",{children:["Package","tree"===s?" (optional)":"",":"]}),(0,r.jsx)(i.UISelect,{style:{width:"100%",marginTop:8},placeholder:"tree"===s?"All packages":"Select a package",value:d,onChange:function(e){return u(e)},allowClear:!0,showSearch:!0,options:null!=(e=null==p||null==(t=p.sorted)?void 0:t.map(function(e){return{label:e,value:e}}))?e:[]})]})]})}),(0,r.jsxs)(i.UICard,{title:"".concat(s.charAt(0).toUpperCase()+s.slice(1)," View"),children:["tree"===s&&((null==f?void 0:f.tree)?(0,r.jsx)(i.UITree,{treeData:[j(f.tree)],showLine:!0,defaultExpandedKeys:[f.tree.name]}):(0,r.jsx)(i.UIAlert,{message:"No tree data available",variant:"info"})),("reverse"===s||"impact"===s)&&((null==f?void 0:f.packages)&&0!==f.packages.length?(0,r.jsx)("ul",{children:f.packages.map(function(e){return(0,r.jsx)("li",{children:e},e)})}):(0,r.jsx)(i.UIAlert,{message:"No packages found",variant:"info"})),"stats"===s&&((null==f?void 0:f.stats)?(0,r.jsxs)("div",{children:[(0,r.jsxs)(i.UIRow,{gutter:16,style:{marginBottom:24},children:[(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Total Packages",value:f.stats.totalPackages})})}),(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Max Depth",value:f.stats.maxDepth})})}),(0,r.jsx)(i.UICol,{span:8,children:(0,r.jsx)(i.UICard,{children:(0,r.jsx)(i.UIStatistic,{title:"Avg Dependencies",value:f.stats.avgDependencies,precision:1})})})]}),f.stats.mostDepended&&f.stats.mostDepended.length>0&&(0,r.jsx)(i.UICard,{title:"Most Depended On",children:(0,r.jsx)("ul",{children:f.stats.mostDepended.map(function(e){return(0,r.jsxs)("li",{children:[(0,r.jsx)("strong",{children:e.name})," - ",e.count," packages depend on it"]},e.name)})})})]}):(0,r.jsx)(i.UIAlert,{message:"No stats available",variant:"info"}))]})]})}var h=i.UITypographyText;function x(){var e,t=(0,l.useData)("/v1/plugins/quality/stale?detailed=true"),n=t.data,a=t.isLoading,s=t.isError;if(a)return(0,r.jsx)("div",{style:{textAlign:"center",padding:"40px"},children:(0,r.jsx)(i.UISpin,{size:"large"})});if(s)return(0,r.jsx)(i.UIAlert,{message:"Failed to load stale packages",variant:"error",showIcon:!0});var o=function(e){switch(e){case"critical":return"red";case"high":return"orange";case"medium":return"gold";case"low":return"blue";default:return"default"}},c=function(e){switch(e){case"source-newer":return"Source Modified";case"dependency-rebuilt":return"Dependency Rebuilt";case"missing-dist":return"Missing Build";default:return e}},d=function(e){switch(e){case"source-newer":return"orange";case"dependency-rebuilt":return"blue";case"missing-dist":return"red";default:return"default"}},u=[{title:"Package",dataIndex:"name",key:"name",sorter:function(e,t){return e.name.localeCompare(t.name)},render:function(e){return(0,r.jsx)("code",{children:e})}},{title:"Reason",dataIndex:"reason",key:"reason",filters:[{text:"Source Modified",value:"source-newer"},{text:"Dependency Rebuilt",value:"dependency-rebuilt"},{text:"Missing Build",value:"missing-dist"}],onFilter:function(e,t){return t.reason===e},render:function(e){return(0,r.jsx)(i.UITag,{color:d(e),children:c(e)})}},{title:"Severity",dataIndex:"severity",key:"severity",sorter:function(e,t){var n=["critical","high","medium","low"];return n.indexOf(e.severity)-n.indexOf(t.severity)},filters:[{text:"Critical",value:"critical"},{text:"High",value:"high"},{text:"Medium",value:"medium"},{text:"Low",value:"low"}],onFilter:function(e,t){return t.severity===e},render:function(e){return(0,r.jsx)(i.UITag,{color:o(e),children:e.toUpperCase()})}},{title:"Affected",dataIndex:"affectedCount",key:"affectedCount",sorter:function(e,t){return e.affectedCount-t.affectedCount},render:function(e){return(0,r.jsxs)(h,{type:e>10?"danger":e>5?"warning":"secondary",children:[e," package",1!==e?"s":""]})}},{title:"Modified",key:"modified",render:function(e,t){return t.sourceModified?(0,r.jsxs)(i.UISpace,{direction:"vertical",size:0,children:[(0,r.jsxs)(h,{type:"secondary",style:{fontSize:12},children:["Source: ",new Date(t.sourceModified).toLocaleString()]}),t.distModified&&(0,r.jsxs)(h,{type:"secondary",style:{fontSize:12},children:["Dist: ",new Date(t.distModified).toLocaleString()]})]}):(0,r.jsx)(h,{type:"secondary",children:"-"})}}],g=[{title:"Root Package",dataIndex:"root",key:"root",render:function(e){return(0,r.jsx)("code",{children:e})}},{title:"Depth",dataIndex:"depth",key:"depth",sorter:function(e,t){return e.depth-t.depth},render:function(e){return(0,r.jsxs)(i.UITag,{color:e>5?"red":e>3?"orange":"blue",children:[e," levels"]})}},{title:"Affected Packages",dataIndex:"affected",key:"affected",sorter:function(e,t){return e.affected.length-t.affected.length},render:function(e){return(0,r.jsxs)(h,{type:e.length>20?"danger":"secondary",children:[e.length," package",1!==e.length?"s":""]})}}];return(0,r.jsxs)("div",{children:[n&&n.totalStale>0?(0,r.jsx)(i.UIAlert,{variant:"error",showIcon:!0,icon:(0,r.jsx)(i.UIIcon,{name:"ClockCircleOutlined"}),message:(0,r.jsxs)(i.UISpace,{children:[(0,r.jsxs)("strong",{children:[n.totalStale," stale package",n.totalStale>1?"s":""," detected"]}),(0,r.jsxs)(h,{type:"secondary",children:["affecting ",n.totalAffected," downstream package",n.totalAffected>1?"s":""]})]}),action:(0,r.jsxs)(i.UISpace,{children:[(0,r.jsx)(i.UIButton,{variant:"primary",danger:!0,icon:(0,r.jsx)(i.UIIcon,{name:"ThunderboltOutlined"}),size:"small",children:"Rebuild All"}),(0,r.jsx)(i.UIButton,{size:"small",children:"Export Report"})]}),style:{marginBottom:24}}):(0,r.jsx)(i.UIAlert,{variant:"success",showIcon:!0,message:"All packages are up to date",description:"No stale packages detected. Your monorepo build state is healthy.",style:{marginBottom:24}}),(null==n?void 0:n.criticalChains)&&n.criticalChains.length>0&&(0,r.jsxs)(i.UICard,{title:(0,r.jsxs)(i.UISpace,{children:[(0,r.jsx)(i.UIIcon,{name:"WarningOutlined",style:{color:"#ff4d4f"}}),"Critical Rebuild Chains"]}),style:{marginBottom:24},children:[(0,r.jsx)(i.UIAlert,{variant:"warning",showIcon:!0,message:"High-impact stale packages",description:"These packages affect many downstream packages. Rebuilding them will trigger cascading rebuilds.",style:{marginBottom:16}}),(0,r.jsx)(i.UITable,{dataSource:n.criticalChains,columns:g,rowKey:"root",pagination:{pageSize:5}})]}),(0,r.jsx)(i.UICard,{title:(0,r.jsxs)(i.UISpace,{children:[(0,r.jsx)(i.UIIcon,{name:"FileOutlined"}),"Stale Packages"]}),children:(0,r.jsx)(i.UITable,{dataSource:null!=(e=null==n?void 0:n.stalePackages)?e:[],columns:u,rowKey:"name",pagination:{pageSize:20},expandable:{expandedRowRender:function(e){return(0,r.jsx)("div",{style:{padding:"8px 16px"},children:(0,r.jsxs)(i.UISpace,{direction:"vertical",size:8,style:{width:"100%"},children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(h,{strong:!0,children:"Path: "}),(0,r.jsx)(h,{type:"secondary",code:!0,children:e.path})]}),e.affectedPackages&&e.affectedPackages.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)(h,{strong:!0,children:["Affected Packages (",e.affectedPackages.length,"):"]}),(0,r.jsxs)("div",{style:{marginTop:8},children:[e.affectedPackages.slice(0,10).map(function(e){return(0,r.jsx)(i.UITag,{style:{marginBottom:4},children:e},e)}),e.affectedPackages.length>10&&(0,r.jsxs)(i.UITag,{children:["+",e.affectedPackages.length-10," more"]})]})]})]})})}}})})]})}function f(){var e=(0,r.jsx)(i.UITabs,{syncUrl:"search",items:[{key:"overview",label:"Overview",children:(0,r.jsx)(s,{})},{key:"dependencies",label:"Dependencies",children:(0,r.jsx)(o,{})},{key:"build-order",label:"Build Order",children:(0,r.jsx)(d,{})},{key:"graph",label:"Dependency Graph",children:(0,r.jsx)(p,{})},{key:"stale",label:"Stale Packages",children:(0,r.jsx)(x,{})}]});return(0,r.jsx)(i.UIPage,{children:(0,r.jsx)(i.UIPageHeader,{title:"Quality",description:"Monorepo health metrics, dependency analysis, and build order visualization",tabs:e})})}}}]);
2
+ //# sourceMappingURL=__federation_expose_QualityOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"__federation_expose_QualityOverview.js","sources":["webpack://@kb-labs/quality-entry/../../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@kb-labs/quality-entry/../../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js","webpack://@kb-labs/quality-entry/./src/studio/components/OverviewTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/DependenciesTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/BuildOrderTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/GraphTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/components/StaleTab.tsx","webpack://@kb-labs/quality-entry/./src/studio/pages/QualityOverview.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Overview tab - shows health score, stats, and key metrics\n */\n\nimport * as React from 'react';\nimport { useData, UIRow, UICol, UICard, UIStatistic, UIProgress, UITag, UIAlert, UISpin, UIButton, UISpace, UIIcon } from '@kb-labs/sdk/studio';\nimport type { StatsResponse, HealthResponse, StaleResponse } from '@kb-labs/quality-contracts';\n\nexport function OverviewTab() {\n const { data: statsData, isLoading: statsLoading } = useData<StatsResponse>(\n '/v1/plugins/quality/stats?includeHealth=true',\n );\n const { data: healthData, isLoading: healthLoading } = useData<HealthResponse>(\n '/v1/plugins/quality/health?detailed=true',\n );\n const { data: staleData, isLoading: staleLoading } = useData<StaleResponse>(\n '/v1/plugins/quality/stale?detailed=true',\n );\n\n const isLoading = statsLoading || healthLoading;\n\n if (isLoading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px' }}>\n <UISpin size=\"large\" />\n </div>\n );\n }\n\n const getGradeColor = (grade?: string): string => {\n switch (grade) {\n case 'A': return 'green';\n case 'B': return 'blue';\n case 'C': return 'orange';\n case 'D': return 'red';\n case 'F': return 'volcano';\n default: return 'default';\n }\n };\n\n const getHealthStatus = (score?: number): 'success' | 'exception' | 'normal' => {\n if (!score) {return 'normal';}\n if (score >= 80) {return 'success';}\n if (score < 60) {return 'exception';}\n return 'normal';\n };\n\n const getSeverityVariant = (severity: number): 'error' | 'warning' | 'info' => {\n if (severity >= 3) {return 'error';}\n if (severity >= 2) {return 'warning';}\n return 'info';\n };\n\n return (\n <div>\n {/* Stale Packages Alert */}\n {!staleLoading && staleData && staleData.totalStale > 0 && (\n <UIAlert\n variant=\"error\"\n showIcon\n icon={<UIIcon name=\"ClockCircleOutlined\" />}\n message={`${staleData.totalStale} stale package${staleData.totalStale > 1 ? 's' : ''} detected`}\n description={\n <div>\n <p style={{ marginBottom: 8 }}>\n Some packages need rebuilding. This affects {staleData.totalAffected} downstream\n package{staleData.totalAffected > 1 ? 's' : ''}.\n </p>\n {staleData.criticalChains && staleData.criticalChains.length > 0 && (\n <div style={{ marginBottom: 12 }}>\n <strong>Critical chains:</strong>\n <ul style={{ marginTop: 4, marginBottom: 0 }}>\n {staleData.criticalChains.slice(0, 3).map((chain, idx) => (\n <li key={idx}>\n <code>{chain.root}</code> affects {chain.affected.length} packages\n </li>\n ))}\n </ul>\n </div>\n )}\n <UISpace>\n <UIButton variant=\"primary\" danger icon={<UIIcon name=\"ThunderboltOutlined\" />} size=\"small\">\n Rebuild All Stale\n </UIButton>\n <UIButton size=\"small\">View Details</UIButton>\n </UISpace>\n </div>\n }\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Health Score Card */}\n <UICard title=\"Health Score\" style={{ marginBottom: 24 }}>\n <UIRow gutter={24}>\n <UICol span={12}>\n <div style={{ textAlign: 'center' }}>\n <UIProgress\n type=\"circle\"\n percent={healthData?.score ?? 0}\n size={180}\n status={getHealthStatus(healthData?.score)}\n strokeColor={{\n '0%': healthData?.score && healthData.score >= 80 ? '#52c41a' : '#ff4d4f',\n '100%': healthData?.score && healthData.score >= 80 ? '#73d13d' : '#ff7a45',\n }}\n />\n <div style={{ marginTop: 16 }}>\n <UITag color={getGradeColor(healthData?.grade)} style={{ fontSize: 16 }}>\n Grade {healthData?.grade}\n </UITag>\n </div>\n </div>\n </UICol>\n <UICol span={12}>\n <UIStatistic\n title=\"Packages\"\n value={statsData?.packages ?? 0}\n prefix={<UIIcon name=\"DatabaseOutlined\" />}\n />\n <UIStatistic\n title=\"Lines of Code\"\n value={statsData?.loc ?? 0}\n prefix={<UIIcon name=\"CodeOutlined\" />}\n style={{ marginTop: 16 }}\n />\n <UIStatistic\n title=\"Total Size\"\n value={statsData?.size ?? 'N/A'}\n prefix={<UIIcon name=\"FileTextOutlined\" />}\n style={{ marginTop: 16 }}\n />\n </UICol>\n </UIRow>\n </UICard>\n\n {/* Issues Breakdown */}\n {healthData?.issues && healthData.issues.length > 0 && (\n <UICard title=\"Health Issues\" style={{ marginBottom: 24 }}>\n <UIRow gutter={16}>\n {healthData.issues.map((issue, idx) => (\n <UICol span={24} key={idx} style={{ marginBottom: 12 }}>\n <UIAlert\n message={\n <UISpace>\n <span>{issue.description}</span>\n <UITag color={getSeverityVariant(issue.severity) === 'error' ? 'red' : 'orange'}>\n severity: {issue.severity}\n </UITag>\n {issue.count !== undefined && <UITag>{issue.count} affected</UITag>}\n </UISpace>\n }\n variant={getSeverityVariant(issue.severity)}\n showIcon\n icon={\n getSeverityVariant(issue.severity) === 'error' ? (\n <UIIcon name=\"WarningOutlined\" />\n ) : (\n <UIIcon name=\"CheckCircleOutlined\" />\n )\n }\n />\n </UICol>\n ))}\n </UIRow>\n </UICard>\n )}\n\n {/* Quick Stats */}\n <UIRow gutter={16}>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Packages\"\n value={statsData?.packages ?? 0}\n prefix={<UIIcon name=\"DatabaseOutlined\" />}\n />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Lines of Code\"\n value={statsData?.loc ?? 0}\n prefix={<UIIcon name=\"CodeOutlined\" />}\n />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Total Size\"\n value={statsData?.size ?? 'N/A'}\n prefix={<UIIcon name=\"FileTextOutlined\" />}\n />\n </UICard>\n </UICol>\n </UIRow>\n </div>\n );\n}\n","/**\n * Dependencies tab - shows duplicates, unused, and missing dependencies\n */\n\nimport * as React from 'react';\nimport { useData, UICard, UITable, UITag, UISpin, UIAlert } from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type {\n DependenciesResponse,\n DuplicateDependency,\n VersionInfo,\n UnusedDependency,\n MissingDependency,\n} from '@kb-labs/quality-contracts';\n\nexport function DependenciesTab() {\n const { data, isLoading, isError } = useData<DependenciesResponse>(\n '/v1/plugins/quality/dependencies',\n );\n\n if (isLoading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px' }}>\n <UISpin size=\"large\" />\n </div>\n );\n }\n\n if (isError) {\n return <UIAlert message=\"Failed to load dependencies\" variant=\"error\" showIcon />;\n }\n\n const duplicatesColumns: UITableColumn<DuplicateDependency>[] = [\n {\n title: 'Dependency',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => a.name.localeCompare(b.name),\n },\n {\n title: 'Versions',\n dataIndex: 'versions',\n key: 'versions',\n render: (versions: VersionInfo[]) => (\n <>\n {versions.map((v) => (\n <UITag key={v.version} color=\"orange\">\n {v.version} ({v.count})\n </UITag>\n ))}\n </>\n ),\n },\n {\n title: 'Total Packages',\n dataIndex: 'totalPackages',\n key: 'totalPackages',\n sorter: (a, b) => a.totalPackages - b.totalPackages,\n },\n ];\n\n const unusedColumns: UITableColumn<UnusedDependency>[] = [\n {\n title: 'Dependency',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => a.name.localeCompare(b.name),\n },\n {\n title: 'Packages',\n dataIndex: 'packages',\n key: 'packages',\n render: (packages: string[]) => packages.join(', '),\n },\n ];\n\n const missingColumns: UITableColumn<MissingDependency>[] = [\n {\n title: 'Dependency',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => a.name.localeCompare(b.name),\n },\n {\n title: 'Packages',\n dataIndex: 'packages',\n key: 'packages',\n render: (packages: string[]) => packages.join(', '),\n },\n {\n title: 'Imported In',\n dataIndex: 'importedIn',\n key: 'importedIn',\n render: (files: string[]) => files.join(', '),\n },\n ];\n\n return (\n <div>\n {data && data.totalIssues === 0 && (\n <UIAlert\n message=\"No dependency issues found!\"\n description=\"Your monorepo has no duplicate, unused, or missing dependencies.\"\n variant=\"success\"\n showIcon\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Duplicates */}\n <UICard\n title={`Duplicate Dependencies (${data?.duplicates?.length ?? 0})`}\n style={{ marginBottom: 24 }}\n >\n <UITable\n dataSource={data?.duplicates ?? []}\n columns={duplicatesColumns}\n rowKey=\"name\"\n pagination={{ pageSize: 10 }}\n />\n </UICard>\n\n {/* Unused */}\n <UICard\n title={`Unused Dependencies (${data?.unused?.length ?? 0})`}\n style={{ marginBottom: 24 }}\n >\n <UITable\n dataSource={data?.unused ?? []}\n columns={unusedColumns}\n rowKey=\"name\"\n pagination={{ pageSize: 10 }}\n />\n </UICard>\n\n {/* Missing */}\n <UICard title={`Missing Dependencies (${data?.missing?.length ?? 0})`}>\n <UITable\n dataSource={data?.missing ?? []}\n columns={missingColumns}\n rowKey=\"name\"\n pagination={{ pageSize: 10 }}\n />\n </UICard>\n </div>\n );\n}\n","/**\n * Build Order tab - shows parallel build layers and sequential order\n */\n\nimport * as React from 'react';\nimport { useData, UICard, UITable, UITag, UISpin, UIAlert, UISelect, UISpace } from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { BuildOrderResponse, CyclesResponse } from '@kb-labs/quality-contracts';\n\nexport function BuildOrderTab() {\n const [selectedPackage, setSelectedPackage] = React.useState<string | undefined>();\n\n const buildOrderUrl = selectedPackage\n ? `/v1/plugins/quality/build-order?package=${encodeURIComponent(selectedPackage)}`\n : '/v1/plugins/quality/build-order';\n\n const { data, isLoading, isError } = useData<BuildOrderResponse>(buildOrderUrl);\n const { data: cyclesData } = useData<CyclesResponse>('/v1/plugins/quality/cycles');\n\n if (isLoading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px' }}>\n <UISpin size=\"large\" />\n </div>\n );\n }\n\n if (isError) {\n return <UIAlert message=\"Failed to load build order\" variant=\"error\" showIcon />;\n }\n\n const layersColumns: UITableColumn<{ layer: number; packages: string[]; key: number }>[] = [\n {\n title: 'Layer',\n dataIndex: 'layer',\n key: 'layer',\n width: 100,\n render: (layer: number) => <UITag color=\"blue\">Layer {layer}</UITag>,\n },\n {\n title: 'Packages (can build in parallel)',\n dataIndex: 'packages',\n key: 'packages',\n render: (packages: string[]) => (\n <UISpace wrap>\n {packages.map((pkg) => (\n <UITag key={pkg}>{pkg}</UITag>\n ))}\n </UISpace>\n ),\n },\n ];\n\n const layersData = data?.layers.map((layer, idx) => ({\n layer: idx + 1,\n packages: layer,\n key: idx,\n }));\n\n return (\n <div>\n {/* Circular Dependencies Warning */}\n {data?.hasCircular && (\n <UIAlert\n message=\"Circular Dependencies Detected!\"\n description={`Found ${data.circular.length} circular dependency cycles. Build order may not be correct.`}\n variant=\"error\"\n showIcon\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Package Filter */}\n <UICard title=\"Filter\" style={{ marginBottom: 24 }}>\n <UISelect\n style={{ width: 400 }}\n placeholder=\"Select package to see its build dependencies\"\n value={selectedPackage}\n onChange={(val) => setSelectedPackage(val as string | undefined)}\n allowClear\n showSearch\n options={data?.sorted.map((pkg) => ({\n label: pkg,\n value: pkg,\n })) ?? []}\n />\n </UICard>\n\n {/* Build Layers */}\n <UICard\n title={`Build Layers (${data?.layerCount ?? 0} layers, ${data?.packageCount ?? 0} packages)`}\n style={{ marginBottom: 24 }}\n >\n <UITable\n dataSource={layersData ?? []}\n columns={layersColumns}\n pagination={false}\n expandable={{\n expandedRowRender: (record) => (\n <div style={{ padding: '8px 0' }}>\n <strong>Packages in this layer:</strong>\n <div style={{ marginTop: 8 }}>\n {record.packages.map((pkg) => (\n <UITag key={pkg} style={{ marginBottom: 4 }}>\n {pkg}\n </UITag>\n ))}\n </div>\n </div>\n ),\n }}\n />\n </UICard>\n\n {/* Circular Dependencies */}\n {data?.hasCircular && (\n <UICard title={`Circular Dependencies (${data.circular.length})`}>\n {data.circular.map((cycle, idx) => (\n <UIAlert\n key={idx}\n message={`Cycle ${idx + 1}`}\n description={cycle.join(' → ')}\n variant=\"warning\"\n showIcon\n style={{ marginBottom: 12 }}\n />\n ))}\n </UICard>\n )}\n </div>\n );\n}\n","/**\n * Dependency Graph tab - visualizes package dependencies\n */\n\nimport * as React from 'react';\nimport type { DataNode } from 'antd/es/tree';\nimport { useData, UICard, UISelect, UISpin, UIAlert, UITree, UIRow, UICol, UIStatistic } from '@kb-labs/sdk/studio';\nimport type { GraphResponse, BuildOrderResponse, GraphMode, GraphNode } from '@kb-labs/quality-contracts';\n\nexport function GraphTab() {\n const [mode, setMode] = React.useState<GraphMode>('stats');\n const [selectedPackage, setSelectedPackage] = React.useState<string | undefined>();\n\n const { data: buildOrderData } = useData<BuildOrderResponse>('/v1/plugins/quality/build-order');\n\n // Auto-select first package when switching to modes that require packageName\n React.useEffect(() => {\n if ((mode === 'reverse' || mode === 'impact') && !selectedPackage && buildOrderData?.sorted?.[0]) {\n setSelectedPackage(buildOrderData.sorted[0]);\n }\n }, [mode, selectedPackage, buildOrderData]);\n\n const graphUrl = selectedPackage\n ? `/v1/plugins/quality/graph?mode=${mode}&package=${encodeURIComponent(selectedPackage)}`\n : `/v1/plugins/quality/graph?mode=${mode}`;\n\n const { data, isLoading, isError } = useData<GraphResponse>(graphUrl);\n\n if (isLoading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px' }}>\n <UISpin size=\"large\" />\n </div>\n );\n }\n\n if (isError) {\n return <UIAlert message=\"Failed to load graph\" variant=\"error\" showIcon />;\n }\n\n const convertToTreeData = (node: GraphNode, path: string = ''): DataNode => {\n const key = path ? `${path}/${node.name}` : node.name;\n return {\n title: node.name,\n key,\n children: node.children?.map((child) => convertToTreeData(child, key)),\n };\n };\n\n const renderTreeMode = () => {\n if (!data?.tree) {\n return <UIAlert message=\"No tree data available\" variant=\"info\" />;\n }\n return (\n <UITree\n treeData={[convertToTreeData(data.tree)]}\n showLine\n defaultExpandedKeys={[data.tree.name]}\n />\n );\n };\n\n const renderPackagesMode = () => {\n if (!data?.packages || data.packages.length === 0) {\n return <UIAlert message=\"No packages found\" variant=\"info\" />;\n }\n return (\n <ul>\n {data.packages.map((pkg) => (\n <li key={pkg}>{pkg}</li>\n ))}\n </ul>\n );\n };\n\n const renderStatsMode = () => {\n if (!data?.stats) {\n return <UIAlert message=\"No stats available\" variant=\"info\" />;\n }\n return (\n <div>\n <UIRow gutter={16} style={{ marginBottom: 24 }}>\n <UICol span={8}>\n <UICard>\n <UIStatistic title=\"Total Packages\" value={data.stats.totalPackages} />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic title=\"Max Depth\" value={data.stats.maxDepth} />\n </UICard>\n </UICol>\n <UICol span={8}>\n <UICard>\n <UIStatistic\n title=\"Avg Dependencies\"\n value={data.stats.avgDependencies}\n precision={1}\n />\n </UICard>\n </UICol>\n </UIRow>\n {data.stats.mostDepended && data.stats.mostDepended.length > 0 && (\n <UICard title=\"Most Depended On\">\n <ul>\n {data.stats.mostDepended.map((item) => (\n <li key={item.name}>\n <strong>{item.name}</strong> - {item.count} packages depend on it\n </li>\n ))}\n </ul>\n </UICard>\n )}\n </div>\n );\n };\n\n return (\n <div>\n {/* Controls */}\n <UICard title=\"Visualization Options\" style={{ marginBottom: 24 }}>\n <UIRow gutter={16}>\n <UICol span={12}>\n <label>Mode:</label>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n value={mode}\n onChange={(val) => setMode(val as GraphMode)}\n options={[\n { label: 'Dependency Tree', value: 'tree' },\n { label: 'Reverse Dependencies', value: 'reverse' },\n { label: 'Impact Analysis', value: 'impact' },\n { label: 'Statistics', value: 'stats' },\n ]}\n />\n </UICol>\n {mode !== 'stats' && (\n <UICol span={12}>\n <label>Package{mode === 'tree' ? ' (optional)' : ''}:</label>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder={mode === 'tree' ? 'All packages' : 'Select a package'}\n value={selectedPackage}\n onChange={(val) => setSelectedPackage(val as string | undefined)}\n allowClear\n showSearch\n options={buildOrderData?.sorted?.map((pkg) => ({ label: pkg, value: pkg })) ?? []}\n />\n </UICol>\n )}\n </UIRow>\n </UICard>\n\n {/* Visualization */}\n <UICard title={`${mode.charAt(0).toUpperCase() + mode.slice(1)} View`}>\n {mode === 'tree' && renderTreeMode()}\n {(mode === 'reverse' || mode === 'impact') && renderPackagesMode()}\n {mode === 'stats' && renderStatsMode()}\n </UICard>\n </div>\n );\n}\n","/**\n * Stale Packages tab - shows packages that need rebuilding\n */\n\nimport * as React from 'react';\nimport { useData, UICard, UITable, UITag, UISpin, UIAlert, UISpace, UIButton, UITypographyText, UIIcon } from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { StaleResponse, StalePackage, StaleChain } from '@kb-labs/quality-contracts';\n\nconst Text = UITypographyText;\n\nexport function StaleTab() {\n const { data, isLoading, isError } = useData<StaleResponse>(\n '/v1/plugins/quality/stale?detailed=true',\n );\n\n if (isLoading) {\n return (\n <div style={{ textAlign: 'center', padding: '40px' }}>\n <UISpin size=\"large\" />\n </div>\n );\n }\n\n if (isError) {\n return <UIAlert message=\"Failed to load stale packages\" variant=\"error\" showIcon />;\n }\n\n const getSeverityColor = (severity: string): string => {\n switch (severity) {\n case 'critical': return 'red';\n case 'high': return 'orange';\n case 'medium': return 'gold';\n case 'low': return 'blue';\n default: return 'default';\n }\n };\n\n const getReasonText = (reason: string): string => {\n switch (reason) {\n case 'source-newer': return 'Source Modified';\n case 'dependency-rebuilt': return 'Dependency Rebuilt';\n case 'missing-dist': return 'Missing Build';\n default: return reason;\n }\n };\n\n const getReasonColor = (reason: string): string => {\n switch (reason) {\n case 'source-newer': return 'orange';\n case 'dependency-rebuilt': return 'blue';\n case 'missing-dist': return 'red';\n default: return 'default';\n }\n };\n\n const staleColumns: UITableColumn<StalePackage>[] = [\n {\n title: 'Package',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => a.name.localeCompare(b.name),\n render: (name: string) => <code>{name}</code>,\n },\n {\n title: 'Reason',\n dataIndex: 'reason',\n key: 'reason',\n filters: [\n { text: 'Source Modified', value: 'source-newer' },\n { text: 'Dependency Rebuilt', value: 'dependency-rebuilt' },\n { text: 'Missing Build', value: 'missing-dist' },\n ],\n onFilter: (value, record) => record.reason === value,\n render: (reason: string) => (\n <UITag color={getReasonColor(reason)}>{getReasonText(reason)}</UITag>\n ),\n },\n {\n title: 'Severity',\n dataIndex: 'severity',\n key: 'severity',\n sorter: (a, b) => {\n const order = ['critical', 'high', 'medium', 'low'];\n return order.indexOf(a.severity) - order.indexOf(b.severity);\n },\n filters: [\n { text: 'Critical', value: 'critical' },\n { text: 'High', value: 'high' },\n { text: 'Medium', value: 'medium' },\n { text: 'Low', value: 'low' },\n ],\n onFilter: (value, record) => record.severity === value,\n render: (severity: string) => (\n <UITag color={getSeverityColor(severity)}>{severity.toUpperCase()}</UITag>\n ),\n },\n {\n title: 'Affected',\n dataIndex: 'affectedCount',\n key: 'affectedCount',\n sorter: (a, b) => a.affectedCount - b.affectedCount,\n render: (count: number) => (\n <Text type={count > 10 ? 'danger' : count > 5 ? 'warning' : 'secondary'}>\n {count} package{count !== 1 ? 's' : ''}\n </Text>\n ),\n },\n {\n title: 'Modified',\n key: 'modified',\n render: (_, record) => {\n if (record.sourceModified) {\n return (\n <UISpace direction=\"vertical\" size={0}>\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n Source: {new Date(record.sourceModified).toLocaleString()}\n </Text>\n {record.distModified && (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n Dist: {new Date(record.distModified).toLocaleString()}\n </Text>\n )}\n </UISpace>\n );\n }\n return <Text type=\"secondary\">-</Text>;\n },\n },\n ];\n\n const chainColumns: UITableColumn<StaleChain>[] = [\n {\n title: 'Root Package',\n dataIndex: 'root',\n key: 'root',\n render: (root: string) => <code>{root}</code>,\n },\n {\n title: 'Depth',\n dataIndex: 'depth',\n key: 'depth',\n sorter: (a, b) => a.depth - b.depth,\n render: (depth: number) => (\n <UITag color={depth > 5 ? 'red' : depth > 3 ? 'orange' : 'blue'}>{depth} levels</UITag>\n ),\n },\n {\n title: 'Affected Packages',\n dataIndex: 'affected',\n key: 'affected',\n sorter: (a, b) => a.affected.length - b.affected.length,\n render: (affected: string[]) => (\n <Text type={affected.length > 20 ? 'danger' : 'secondary'}>\n {affected.length} package{affected.length !== 1 ? 's' : ''}\n </Text>\n ),\n },\n ];\n\n return (\n <div>\n {/* Summary Alert */}\n {data && data.totalStale > 0 ? (\n <UIAlert\n variant=\"error\"\n showIcon\n icon={<UIIcon name=\"ClockCircleOutlined\" />}\n message={\n <UISpace>\n <strong>\n {data.totalStale} stale package{data.totalStale > 1 ? 's' : ''} detected\n </strong>\n <Text type=\"secondary\">\n affecting {data.totalAffected} downstream package{data.totalAffected > 1 ? 's' : ''}\n </Text>\n </UISpace>\n }\n action={\n <UISpace>\n <UIButton variant=\"primary\" danger icon={<UIIcon name=\"ThunderboltOutlined\" />} size=\"small\">\n Rebuild All\n </UIButton>\n <UIButton size=\"small\">Export Report</UIButton>\n </UISpace>\n }\n style={{ marginBottom: 24 }}\n />\n ) : (\n <UIAlert\n variant=\"success\"\n showIcon\n message=\"All packages are up to date\"\n description=\"No stale packages detected. Your monorepo build state is healthy.\"\n style={{ marginBottom: 24 }}\n />\n )}\n\n {/* Critical Chains */}\n {data?.criticalChains && data.criticalChains.length > 0 && (\n <UICard\n title={\n <UISpace>\n <UIIcon name=\"WarningOutlined\" style={{ color: '#ff4d4f' }} />\n Critical Rebuild Chains\n </UISpace>\n }\n style={{ marginBottom: 24 }}\n >\n <UIAlert\n variant=\"warning\"\n showIcon\n message=\"High-impact stale packages\"\n description=\"These packages affect many downstream packages. Rebuilding them will trigger cascading rebuilds.\"\n style={{ marginBottom: 16 }}\n />\n <UITable\n dataSource={data.criticalChains}\n columns={chainColumns}\n rowKey=\"root\"\n pagination={{ pageSize: 5 }}\n />\n </UICard>\n )}\n\n {/* Stale Packages Table */}\n <UICard\n title={\n <UISpace>\n <UIIcon name=\"FileOutlined\" />\n Stale Packages\n </UISpace>\n }\n >\n <UITable\n dataSource={data?.stalePackages ?? []}\n columns={staleColumns}\n rowKey=\"name\"\n pagination={{ pageSize: 20 }}\n expandable={{\n expandedRowRender: (record) => (\n <div style={{ padding: '8px 16px' }}>\n <UISpace direction=\"vertical\" size={8} style={{ width: '100%' }}>\n <div>\n <Text strong>Path: </Text>\n <Text type=\"secondary\" code>\n {record.path}\n </Text>\n </div>\n {record.affectedPackages && record.affectedPackages.length > 0 && (\n <div>\n <Text strong>Affected Packages ({record.affectedPackages.length}):</Text>\n <div style={{ marginTop: 8 }}>\n {record.affectedPackages.slice(0, 10).map((pkg: string) => (\n <UITag key={pkg} style={{ marginBottom: 4 }}>\n {pkg}\n </UITag>\n ))}\n {record.affectedPackages.length > 10 && (\n <UITag>+{record.affectedPackages.length - 10} more</UITag>\n )}\n </div>\n </div>\n )}\n </UISpace>\n </div>\n ),\n }}\n />\n </UICard>\n </div>\n );\n}\n","/**\n * QualityOverview — main Quality plugin page (Module Federation widget).\n * Tabbed view: Overview / Dependencies / Build Order / Graph / Stale Packages\n */\n\nimport * as React from 'react';\nimport { UIPage, UIPageHeader, UITabs } from '@kb-labs/sdk/studio';\nimport { OverviewTab } from '../components/OverviewTab';\nimport { DependenciesTab } from '../components/DependenciesTab';\nimport { BuildOrderTab } from '../components/BuildOrderTab';\nimport { GraphTab } from '../components/GraphTab';\nimport { StaleTab } from '../components/StaleTab';\n\nexport default function QualityOverview() {\n const tabs = (\n <UITabs\n syncUrl=\"search\"\n items={[\n {\n key: 'overview',\n label: 'Overview',\n children: <OverviewTab />,\n },\n {\n key: 'dependencies',\n label: 'Dependencies',\n children: <DependenciesTab />,\n },\n {\n key: 'build-order',\n label: 'Build Order',\n children: <BuildOrderTab />,\n },\n {\n key: 'graph',\n label: 'Dependency Graph',\n children: <GraphTab />,\n },\n {\n key: 'stale',\n label: 'Stale Packages',\n children: <StaleTab />,\n },\n ]}\n />\n );\n\n return (\n <UIPage>\n <UIPageHeader\n title=\"Quality\"\n description=\"Monorepo health metrics, dependency analysis, and build order visualization\"\n tabs={tabs}\n />\n </UIPage>\n );\n}\n"],"names":["Symbol","Object","OverviewTab","score","_useData","statsData","statsLoading","_useData1","healthData","healthLoading","_useData2","staleData","staleLoading","UISpin","getSeverityVariant","severity","UIAlert","UIIcon","chain","idx","UISpace","UIButton","UICard","UIRow","UICol","UIProgress","UITag","getGradeColor","grade","UIStatistic","issue","undefined","DependenciesTab","_data_duplicates","_data_unused","_data_missing","data","isLoading","isError","duplicatesColumns","sorter","a","b","render","versions","v","unusedColumns","packages","missingColumns","files","UITable","BuildOrderTab","_React_useState","selectedPackage","setSelectedPackage","buildOrderUrl","encodeURIComponent","layersColumns","layer","pkg","layersData","UISelect","onChange","val","expandedRowRender","record","cycle","GraphTab","_buildOrderData_sorted","mode","setMode","_React_useState1","buildOrderData","React","graphUrl","convertToTreeData","node","_node_children","path","key","child","UITree","item","Text","UITypographyText","StaleTab","getSeverityColor","getReasonText","reason","getReasonColor","staleColumns","name","onFilter","value","order","count","_","Date","chainColumns","root","depth","affected","QualityOverview","tabs","UITabs","UIPage","UIPageHeader"],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ {
2
+ "id": "qualityPlugin",
3
+ "name": "qualityPlugin",
4
+ "metaData": {
5
+ "name": "qualityPlugin",
6
+ "type": "app",
7
+ "buildInfo": {
8
+ "buildVersion": "2.14.0",
9
+ "buildName": "@kb-labs/quality-entry"
10
+ },
11
+ "remoteEntry": {
12
+ "name": "remoteEntry.js",
13
+ "path": "",
14
+ "type": "global"
15
+ },
16
+ "types": {
17
+ "path": "",
18
+ "name": "",
19
+ "zip": "@mf-types.zip",
20
+ "api": "@mf-types.d.ts"
21
+ },
22
+ "globalName": "qualityPlugin",
23
+ "pluginVersion": "0.8.12",
24
+ "prefetchInterface": false,
25
+ "publicPath": "auto"
26
+ },
27
+ "shared": [
28
+ {
29
+ "id": "qualityPlugin:@kb-labs/studio-event-bus",
30
+ "name": "@kb-labs/studio-event-bus",
31
+ "version": "2.14.0",
32
+ "singleton": true,
33
+ "requiredVersion": "^0.1.0",
34
+ "assets": {
35
+ "js": {
36
+ "async": [
37
+ "781.js"
38
+ ],
39
+ "sync": [
40
+ "50.js",
41
+ "669.js"
42
+ ]
43
+ },
44
+ "css": {
45
+ "async": [],
46
+ "sync": []
47
+ }
48
+ }
49
+ },
50
+ {
51
+ "id": "qualityPlugin:@kb-labs/studio-hooks",
52
+ "name": "@kb-labs/studio-hooks",
53
+ "version": "2.14.0",
54
+ "singleton": true,
55
+ "requiredVersion": "^0.1.0",
56
+ "assets": {
57
+ "js": {
58
+ "async": [
59
+ "781.js",
60
+ "669.js",
61
+ "626.js",
62
+ "997.js",
63
+ "338.js",
64
+ "451.js",
65
+ "842.js",
66
+ "968.js"
67
+ ],
68
+ "sync": [
69
+ "370.js"
70
+ ]
71
+ },
72
+ "css": {
73
+ "async": [],
74
+ "sync": []
75
+ }
76
+ }
77
+ },
78
+ {
79
+ "id": "qualityPlugin:@kb-labs/studio-ui-core",
80
+ "name": "@kb-labs/studio-ui-core",
81
+ "version": "2.14.0",
82
+ "singleton": true,
83
+ "requiredVersion": "^0.1.0",
84
+ "assets": {
85
+ "js": {
86
+ "async": [],
87
+ "sync": [
88
+ "968.js"
89
+ ]
90
+ },
91
+ "css": {
92
+ "async": [],
93
+ "sync": []
94
+ }
95
+ }
96
+ },
97
+ {
98
+ "id": "qualityPlugin:@kb-labs/studio-ui-kit",
99
+ "name": "@kb-labs/studio-ui-kit",
100
+ "version": "2.14.0",
101
+ "singleton": true,
102
+ "requiredVersion": "^0.1.0",
103
+ "assets": {
104
+ "js": {
105
+ "async": [
106
+ "781.js",
107
+ "997.js",
108
+ "338.js",
109
+ "842.js",
110
+ "968.js",
111
+ "607.js"
112
+ ],
113
+ "sync": [
114
+ "117.js"
115
+ ]
116
+ },
117
+ "css": {
118
+ "async": [],
119
+ "sync": []
120
+ }
121
+ }
122
+ },
123
+ {
124
+ "id": "qualityPlugin:@tanstack/react-query",
125
+ "name": "@tanstack/react-query",
126
+ "version": "5.97.0",
127
+ "singleton": true,
128
+ "requiredVersion": "^5.0.0",
129
+ "assets": {
130
+ "js": {
131
+ "async": [
132
+ "781.js"
133
+ ],
134
+ "sync": [
135
+ "626.js"
136
+ ]
137
+ },
138
+ "css": {
139
+ "async": [],
140
+ "sync": []
141
+ }
142
+ }
143
+ },
144
+ {
145
+ "id": "qualityPlugin:antd",
146
+ "name": "antd",
147
+ "version": "5.29.3",
148
+ "singleton": true,
149
+ "requiredVersion": "^5.21.0",
150
+ "assets": {
151
+ "js": {
152
+ "async": [
153
+ "781.js",
154
+ "338.js"
155
+ ],
156
+ "sync": [
157
+ "842.js"
158
+ ]
159
+ },
160
+ "css": {
161
+ "async": [],
162
+ "sync": []
163
+ }
164
+ }
165
+ },
166
+ {
167
+ "id": "qualityPlugin:react-dom",
168
+ "name": "react-dom",
169
+ "version": "18.3.1",
170
+ "singleton": true,
171
+ "requiredVersion": "^18.3.0",
172
+ "assets": {
173
+ "js": {
174
+ "async": [
175
+ "781.js"
176
+ ],
177
+ "sync": [
178
+ "338.js"
179
+ ]
180
+ },
181
+ "css": {
182
+ "async": [],
183
+ "sync": []
184
+ }
185
+ }
186
+ },
187
+ {
188
+ "id": "qualityPlugin:react-router-dom",
189
+ "name": "react-router-dom",
190
+ "version": "7.14.0",
191
+ "singleton": true,
192
+ "requiredVersion": "^7.0.0",
193
+ "assets": {
194
+ "js": {
195
+ "async": [
196
+ "781.js",
197
+ "338.js"
198
+ ],
199
+ "sync": [
200
+ "997.js"
201
+ ]
202
+ },
203
+ "css": {
204
+ "async": [],
205
+ "sync": []
206
+ }
207
+ }
208
+ },
209
+ {
210
+ "id": "qualityPlugin:react",
211
+ "name": "react",
212
+ "version": "18.3.1",
213
+ "singleton": true,
214
+ "requiredVersion": "^18.3.0",
215
+ "assets": {
216
+ "js": {
217
+ "async": [],
218
+ "sync": [
219
+ "781.js"
220
+ ]
221
+ },
222
+ "css": {
223
+ "async": [],
224
+ "sync": []
225
+ }
226
+ }
227
+ }
228
+ ],
229
+ "remotes": [],
230
+ "exposes": [
231
+ {
232
+ "id": "qualityPlugin:QualityOverview",
233
+ "name": "QualityOverview",
234
+ "assets": {
235
+ "js": {
236
+ "sync": [
237
+ "__federation_expose_QualityOverview.js"
238
+ ],
239
+ "async": [
240
+ "781.js",
241
+ "451.js",
242
+ "586.js",
243
+ "117.js",
244
+ "842.js",
245
+ "338.js",
246
+ "968.js",
247
+ "607.js",
248
+ "997.js",
249
+ "370.js",
250
+ "669.js",
251
+ "626.js"
252
+ ]
253
+ },
254
+ "css": {
255
+ "sync": [],
256
+ "async": []
257
+ }
258
+ },
259
+ "path": "./QualityOverview"
260
+ }
261
+ ]
262
+ }