@module-federation/treeshake-server 0.0.1 → 2.0.1

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.
@@ -1,2 +1,2 @@
1
- /*! For license information please see 987.6bf8e9b0.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_module_federation_treeshake_frontend=self.webpackChunk_module_federation_treeshake_frontend||[]).push([["987"],{2423(e,t,s){s.d(t,{A:()=>a});let a=(0,s(9122).A)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])},4723(e,t,s){s.d(t,{E:()=>n});var a=s(5723);s(2155);var l=s(5445),r=s(8207);let i=(0,l.F)("inline-flex items-center rounded-md border border-zinc-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-zinc-950 focus:ring-offset-2 dark:border-zinc-800 dark:focus:ring-zinc-300",{variants:{variant:{default:"border-transparent bg-zinc-900 text-zinc-50 shadow hover:bg-zinc-900/80 dark:bg-zinc-50 dark:text-zinc-900 dark:hover:bg-zinc-50/80",secondary:"border-transparent bg-zinc-100 text-zinc-900 hover:bg-zinc-100/80 dark:bg-zinc-800 dark:text-zinc-50 dark:hover:bg-zinc-800/80",destructive:"border-transparent bg-red-500 text-zinc-50 shadow hover:bg-red-500/80 dark:bg-red-900 dark:text-zinc-50 dark:hover:bg-red-900/80",outline:"text-zinc-950 dark:text-zinc-50"}},defaultVariants:{variant:"default"}});function n(e){let{className:t,variant:s,...l}=e;return(0,a.jsx)("div",{className:(0,r.cn)(i({variant:s}),t),...l})}},670(e,t,s){s.r(t),s.d(t,{default:()=>m});var a=s(5723),l=s(2155),r=s(7938),i=s(1946),n=s(4723),d=s(3760),c=s(8207),o=s(2423);function x(){let e=(0,l.useRef)(null),[t,s]=(0,l.useState)(0),{t:x}=(0,r.Bd)(),m=(0,i.Zp)();(0,l.useEffect)(()=>{let e,t=null,a=l=>{null==t&&(t=l);let r=Math.min((l-t)/5e3,1);s(r),r<1&&(e=requestAnimationFrame(a))};return e=requestAnimationFrame(a),()=>cancelAnimationFrame(e)},[]);let h=(e,t,s)=>e<=t?0:e>=s?1:1-Math.pow(1-(e-t)/(s-t),3),u=h(t,.05,.55),f=h(t,.22,.82),p=h(t,.12,.7),g=h(t,.32,.9),b=h(t,.4,1),j=h(t,.2,.8),v=Math.round(120*u),y=Math.round(42*f),N=Math.max(v-y,0),k=Math.max(0,Math.round(65*b)),w=Math.round(950*p),z=Math.round(360*g),M=Math.round(40*j),A=Math.round(14*j),_=t>.2&&t<1;return(0,a.jsxs)("section",{ref:e,onMouseMove:t=>{let s=e.current;if(!s)return;let a=s.getBoundingClientRect(),l=(t.clientX-a.left)/a.width-.5,r=(t.clientY-a.top)/a.height-.5;s.style.setProperty("--hero-px",l.toFixed(3)),s.style.setProperty("--hero-py",r.toFixed(3))},onMouseLeave:()=>{let t=e.current;t&&(t.style.setProperty("--hero-px","0"),t.style.setProperty("--hero-py","0"))},className:"relative flex flex-1 flex-col justify-center py-10 md:py-16",children:[(0,a.jsxs)("div",{className:"relative z-10 grid gap-10 md:grid-cols-[minmax(0,1.2fr)_minmax(0,1fr)] md:items-center",children:[(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)(n.E,{className:"inline-flex items-center gap-1 rounded-full bg-slate-900/90 px-3 py-1 text-[11px] uppercase tracking-wide text-slate-50 shadow-lg shadow-sky-500/40 dark:bg-slate-100 dark:text-slate-900",children:[(0,a.jsx)(o.A,{className:"h-3 w-3"}),x("home.badge")]}),(0,a.jsxs)("h1",{className:"text-balance text-3xl font-semibold tracking-tight md:text-4xl",children:[x("home.titlePrefix"),(0,a.jsx)("span",{className:"mx-1 bg-gradient-to-r from-sky-400 via-fuchsia-500 to-emerald-400 bg-clip-text text-transparent",children:x("home.titleHighlight")}),x("home.titleSuffix")]}),(0,a.jsx)("p",{className:"max-w-xl text-sm leading-relaxed text-slate-600 dark:text-slate-300",children:x("home.subtitle")})]}),(0,a.jsx)("div",{className:"relative",children:(0,a.jsxs)("div",{className:"hero-glass-panel p-5 md:p-6",children:[(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:(0,c.cn)("hero-metric-pill relative flex items-center justify-between rounded-full bg-slate-900/95 px-3 py-2 text-xs text-slate-100 shadow-md",_&&"hero-metric-pill--active"),children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"inline-flex h-5 w-5 items-center justify-center rounded-full bg-rose-500/20 text-[11px] text-rose-200",children:"F"}),x("results.cardFullTitle")]}),(0,a.jsxs)("span",{className:"font-semibold",children:[v," KB \xb7 ~",w," ms"]})]}),(0,a.jsxs)("div",{className:(0,c.cn)("hero-metric-pill relative flex items-center justify-between rounded-full bg-emerald-500/10 px-3 py-2 text-xs text-emerald-700 dark:text-emerald-100 shadow-md shadow-emerald-500/30 backdrop-blur",_&&"hero-metric-pill--active"),children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"inline-flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500/30 text-[11px] text-emerald-800 dark:text-emerald-50",children:"T"}),x("results.cardTreeshakeTitle")]}),(0,a.jsxs)("span",{className:"font-semibold text-emerald-700 dark:text-emerald-100",children:[y," KB \xb7 ~",z," ms"]})]})]}),(0,a.jsxs)("div",{className:"space-y-3 text-[11px] text-slate-300",children:[(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:"text-slate-200",children:x("home.savedSize")}),(0,a.jsxs)("span",{className:"text-sm font-semibold text-fuchsia-200",children:[N," KB"]})]}),(0,a.jsxs)("div",{className:"relative h-2 overflow-hidden rounded-full bg-slate-800/80",children:[(0,a.jsx)("div",{className:"h-full rounded-full bg-gradient-to-r from-fuchsia-500 via-sky-400 to-emerald-400",style:{width:`${Math.min(k,100)}%`,transition:"width 300ms cubic-bezier(0.22, 1, 0.36, 1)"}}),(0,a.jsx)("div",{className:(0,c.cn)("hero-bar-shimmer",_&&"hero-bar-shimmer--active")})]}),(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:"text-slate-400",children:x("home.savedPercent")}),(0,a.jsx)("span",{className:"text-sm font-semibold text-fuchsia-300",children:k>0?`${k}%`:"--"})]}),(0,a.jsxs)("div",{className:"mt-1 grid grid-cols-2 gap-2 text-[10px] text-slate-400",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-slate-900/60 px-2 py-1",children:[(0,a.jsx)("span",{children:x("home.moduleCount")}),(0,a.jsxs)("span",{className:"font-mono text-xs text-slate-100",children:[M," → ",A]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-slate-900/60 px-2 py-1",children:[(0,a.jsx)("span",{children:x("home.simulatedLoad")}),(0,a.jsxs)("span",{className:"font-mono text-xs text-emerald-200",children:["~",950," ms → ~",360," ms"]})]})]})]})]}),(0,a.jsx)("p",{className:"mt-4 text-[10px] text-slate-400",children:x("home.demoNote")})]})})]}),(0,a.jsx)("div",{className:"relative z-10 mt-10 flex justify-center",children:(0,a.jsxs)(d.$,{type:"button",className:"inline-flex items-center gap-2 rounded-full bg-gradient-to-r from-sky-500 via-fuchsia-500 to-emerald-500 px-8 py-2.5 text-sm font-medium text-white shadow-xl shadow-sky-500/40 transition-transform hover:translate-y-0.5 hover:shadow-2xl",onClick:()=>m("/analyze"),children:[(0,a.jsx)(o.A,{className:"h-4 w-4"}),x("common.tryNow")]})})]})}function m(){return(0,a.jsx)("div",{className:"relative z-10 flex flex-1 flex-col",children:(0,a.jsx)(x,{})})}}}]);
1
+ /*! For license information please see 987.5b1e5ce3.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_module_federation_treeshake_frontend=self.webpackChunk_module_federation_treeshake_frontend||[]).push([["987"],{2423(e,t,s){s.d(t,{A:()=>a});let a=(0,s(9122).A)("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]])},4723(e,t,s){s.d(t,{E:()=>n});var a=s(5723);s(2155);var l=s(5445),r=s(8207);let i=(0,l.F)("inline-flex items-center rounded-md border border-zinc-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-zinc-950 focus:ring-offset-2 dark:border-zinc-800 dark:focus:ring-zinc-300",{variants:{variant:{default:"border-transparent bg-zinc-900 text-zinc-50 shadow hover:bg-zinc-900/80 dark:bg-zinc-50 dark:text-zinc-900 dark:hover:bg-zinc-50/80",secondary:"border-transparent bg-zinc-100 text-zinc-900 hover:bg-zinc-100/80 dark:bg-zinc-800 dark:text-zinc-50 dark:hover:bg-zinc-800/80",destructive:"border-transparent bg-red-500 text-zinc-50 shadow hover:bg-red-500/80 dark:bg-red-900 dark:text-zinc-50 dark:hover:bg-red-900/80",outline:"text-zinc-950 dark:text-zinc-50"}},defaultVariants:{variant:"default"}});function n(e){let{className:t,variant:s,...l}=e;return(0,a.jsx)("div",{className:(0,r.cn)(i({variant:s}),t),...l})}},670(e,t,s){s.r(t),s.d(t,{default:()=>m});var a=s(5723),l=s(2155),r=s(6532),i=s(1946),n=s(4723),d=s(3760),c=s(8207),o=s(2423);function x(){let e=(0,l.useRef)(null),[t,s]=(0,l.useState)(0),{t:x}=(0,r.Bd)(),m=(0,i.Zp)();(0,l.useEffect)(()=>{let e,t=null,a=l=>{null==t&&(t=l);let r=Math.min((l-t)/5e3,1);s(r),r<1&&(e=requestAnimationFrame(a))};return e=requestAnimationFrame(a),()=>cancelAnimationFrame(e)},[]);let h=(e,t,s)=>e<=t?0:e>=s?1:1-Math.pow(1-(e-t)/(s-t),3),u=h(t,.05,.55),f=h(t,.22,.82),p=h(t,.12,.7),g=h(t,.32,.9),b=h(t,.4,1),j=h(t,.2,.8),v=Math.round(120*u),y=Math.round(42*f),N=Math.max(v-y,0),k=Math.max(0,Math.round(65*b)),w=Math.round(950*p),z=Math.round(360*g),M=Math.round(40*j),A=Math.round(14*j),_=t>.2&&t<1;return(0,a.jsxs)("section",{ref:e,onMouseMove:t=>{let s=e.current;if(!s)return;let a=s.getBoundingClientRect(),l=(t.clientX-a.left)/a.width-.5,r=(t.clientY-a.top)/a.height-.5;s.style.setProperty("--hero-px",l.toFixed(3)),s.style.setProperty("--hero-py",r.toFixed(3))},onMouseLeave:()=>{let t=e.current;t&&(t.style.setProperty("--hero-px","0"),t.style.setProperty("--hero-py","0"))},className:"relative flex flex-1 flex-col justify-center py-10 md:py-16",children:[(0,a.jsxs)("div",{className:"relative z-10 grid gap-10 md:grid-cols-[minmax(0,1.2fr)_minmax(0,1fr)] md:items-center",children:[(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)(n.E,{className:"inline-flex items-center gap-1 rounded-full bg-slate-900/90 px-3 py-1 text-[11px] uppercase tracking-wide text-slate-50 shadow-lg shadow-sky-500/40 dark:bg-slate-100 dark:text-slate-900",children:[(0,a.jsx)(o.A,{className:"h-3 w-3"}),x("home.badge")]}),(0,a.jsxs)("h1",{className:"text-balance text-3xl font-semibold tracking-tight md:text-4xl",children:[x("home.titlePrefix"),(0,a.jsx)("span",{className:"mx-1 bg-gradient-to-r from-sky-400 via-fuchsia-500 to-emerald-400 bg-clip-text text-transparent",children:x("home.titleHighlight")}),x("home.titleSuffix")]}),(0,a.jsx)("p",{className:"max-w-xl text-sm leading-relaxed text-slate-600 dark:text-slate-300",children:x("home.subtitle")})]}),(0,a.jsx)("div",{className:"relative",children:(0,a.jsxs)("div",{className:"hero-glass-panel p-5 md:p-6",children:[(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:(0,c.cn)("hero-metric-pill relative flex items-center justify-between rounded-full bg-slate-900/95 px-3 py-2 text-xs text-slate-100 shadow-md",_&&"hero-metric-pill--active"),children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"inline-flex h-5 w-5 items-center justify-center rounded-full bg-rose-500/20 text-[11px] text-rose-200",children:"F"}),x("results.cardFullTitle")]}),(0,a.jsxs)("span",{className:"font-semibold",children:[v," KB \xb7 ~",w," ms"]})]}),(0,a.jsxs)("div",{className:(0,c.cn)("hero-metric-pill relative flex items-center justify-between rounded-full bg-emerald-500/10 px-3 py-2 text-xs text-emerald-700 dark:text-emerald-100 shadow-md shadow-emerald-500/30 backdrop-blur",_&&"hero-metric-pill--active"),children:[(0,a.jsxs)("span",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"inline-flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500/30 text-[11px] text-emerald-800 dark:text-emerald-50",children:"T"}),x("results.cardTreeshakeTitle")]}),(0,a.jsxs)("span",{className:"font-semibold text-emerald-700 dark:text-emerald-100",children:[y," KB \xb7 ~",z," ms"]})]})]}),(0,a.jsxs)("div",{className:"space-y-3 text-[11px] text-slate-300",children:[(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:"text-slate-200",children:x("home.savedSize")}),(0,a.jsxs)("span",{className:"text-sm font-semibold text-fuchsia-200",children:[N," KB"]})]}),(0,a.jsxs)("div",{className:"relative h-2 overflow-hidden rounded-full bg-slate-800/80",children:[(0,a.jsx)("div",{className:"h-full rounded-full bg-gradient-to-r from-fuchsia-500 via-sky-400 to-emerald-400",style:{width:`${Math.min(k,100)}%`,transition:"width 300ms cubic-bezier(0.22, 1, 0.36, 1)"}}),(0,a.jsx)("div",{className:(0,c.cn)("hero-bar-shimmer",_&&"hero-bar-shimmer--active")})]}),(0,a.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,a.jsx)("span",{className:"text-slate-400",children:x("home.savedPercent")}),(0,a.jsx)("span",{className:"text-sm font-semibold text-fuchsia-300",children:k>0?`${k}%`:"--"})]}),(0,a.jsxs)("div",{className:"mt-1 grid grid-cols-2 gap-2 text-[10px] text-slate-400",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-slate-900/60 px-2 py-1",children:[(0,a.jsx)("span",{children:x("home.moduleCount")}),(0,a.jsxs)("span",{className:"font-mono text-xs text-slate-100",children:[M," → ",A]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-lg bg-slate-900/60 px-2 py-1",children:[(0,a.jsx)("span",{children:x("home.simulatedLoad")}),(0,a.jsxs)("span",{className:"font-mono text-xs text-emerald-200",children:["~",950," ms → ~",360," ms"]})]})]})]})]}),(0,a.jsx)("p",{className:"mt-4 text-[10px] text-slate-400",children:x("home.demoNote")})]})})]}),(0,a.jsx)("div",{className:"relative z-10 mt-10 flex justify-center",children:(0,a.jsxs)(d.$,{type:"button",className:"inline-flex items-center gap-2 rounded-full bg-gradient-to-r from-sky-500 via-fuchsia-500 to-emerald-500 px-8 py-2.5 text-sm font-medium text-white shadow-xl shadow-sky-500/40 transition-transform hover:translate-y-0.5 hover:shadow-2xl",onClick:()=>m("/analyze"),children:[(0,a.jsx)(o.A,{className:"h-4 w-4"}),x("common.tryNow")]})})]})}function m(){return(0,a.jsx)("div",{className:"relative z-10 flex flex-1 flex-col",children:(0,a.jsx)(x,{})})}}}]);
@@ -1,4 +1,4 @@
1
- (()=>{"use strict";var e,t,r,a,s,o,l,n={3760(e,t,r){r.d(t,{$:()=>d});var a=r(5723),s=r(2155),o=r(1497),l=r(5445),n=r(8207);let i=(0,l.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-zinc-950 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:focus-visible:ring-zinc-300",{variants:{variant:{default:"bg-zinc-900 text-zinc-50 shadow hover:bg-zinc-900/90 dark:bg-zinc-50 dark:text-zinc-900 dark:hover:bg-zinc-50/90",destructive:"bg-red-500 text-zinc-50 shadow-sm hover:bg-red-500/90 dark:bg-red-900 dark:text-zinc-50 dark:hover:bg-red-900/90",outline:"border border-zinc-200 bg-white shadow-sm hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-800 dark:hover:text-zinc-50",secondary:"bg-zinc-100 text-zinc-900 shadow-sm hover:bg-zinc-100/80 dark:bg-zinc-800 dark:text-zinc-50 dark:hover:bg-zinc-800/80",ghost:"hover:bg-zinc-100 hover:text-zinc-900 dark:hover:bg-zinc-800 dark:hover:text-zinc-50",link:"text-zinc-900 underline-offset-4 hover:underline dark:text-zinc-50"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),d=s.forwardRef((e,t)=>{let{className:r,variant:s,size:l,asChild:d=!1,...c}=e,u=d?o.DX:"button";return(0,a.jsx)(u,{className:(0,n.cn)(i({variant:s,size:l,className:r})),ref:t,...c})});d.displayName="Button"},9980(e,t,r){r.d(t,{dj:()=>u,oR:()=>c});var a=r(2155);let s=0,o=new Map,l=e=>{if(o.has(e))return;let t=setTimeout(()=>{o.delete(e),d({type:"REMOVE_TOAST",toastId:e})},1e6);o.set(e,t)},n=[],i={toasts:[]};function d(e){i=((e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case"DISMISS_TOAST":{let{toastId:r}=t;return r?l(r):e.toasts.forEach(e=>{l(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===r||void 0===r?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===t.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}})(i,e),n.forEach(e=>{e(i)})}function c(e){let{...t}=e,r=(s=(s+1)%Number.MAX_SAFE_INTEGER).toString(),a=()=>d({type:"DISMISS_TOAST",toastId:r});return d({type:"ADD_TOAST",toast:{...t,id:r,open:!0,onOpenChange:e=>{e||a()}}}),{id:r,dismiss:a,update:e=>d({type:"UPDATE_TOAST",toast:{...e,id:r}})}}function u(){let[e,t]=a.useState(i);return a.useEffect(()=>(n.push(t),()=>{let e=n.indexOf(t);e>-1&&n.splice(e,1)}),[e]),{...e,toast:c,dismiss:e=>d({type:"DISMISS_TOAST",toastId:e})}}},836(e,t,r){r.d(t,{A:()=>n});var a=r(9728),s=r(7938),o=r(4537);let l={"zh-CN":{translation:{common:{appName:"Shared Bundle Treeshake Studio",appSubtitle:"让 Treeshake 变得可观察",mockModeLabel:"Mock Mode",mockModeLocal:"本地模拟数据",mockModeRemote:"真实服务",themeToggleAria:"切换主题",tryNow:"Try it now",reset:"重置",submitIdle:"立即分析",submitLoading:"正在分析 bundle...",formSubmitHint:"回车键 或 点击按钮发起分析。",copied:"已复制",copy:"复制",download:"下载",copySuccessTitle:"已复制到剪贴板",copySuccessDescFile:"文件名: {{file}}",copyErrorTitle:"复制失败",copyErrorDesc:"浏览器暂不支持自动复制,请手动选择代码。",downloadErrorTitle:"下载失败",downloadErrorDesc:"浏览器不支持自动下载,请手动复制内容。",bundleEmptyPlaceholder:"// 当前 bundle 暂无内容",showAllCode:"展开全部代码",yes:"是",no:"否",quickTry:"快速体验",fillDemo:"填入演示数据",importManifest:"导入清单配置"},home:{badge:"Treeshake-ready Shared Bundling",titlePrefix:"一眼看懂",titleHighlight:"Full vs Treeshake",titleSuffix:"带来的真实体感",subtitle:"Visual comparison of Full vs Treeshaken builds. Making tree-shaking tangible.",savedSize:"节省体积",savedPercent:"节省比例",moduleCount:"模块数",simulatedLoad:"模拟加载时间",demoNote:"动画数值仅为示意,不代表真实环境。接入你的打包服务后,分析页会基于真实 bundle 给出精确对比。"},analyze:{heroBadge:"Treeshake-ready Shared Bundling",heroTitlePrefix:"用一张页面,看懂",heroTitleHighlight:"按需打包",heroTitleSuffix:"为 shared 带来的真实收益",heroSubtitle:"输入 shared 名称、版本和要保留的导出,一键对比完整 bundle 和 Treeshaken bundle 的体积、模块数量,以及两份产物的代码差异。所有 JS 仅以文本形式展示,不会在页面中执行。",featureVisualizationTitle:"收益可视化",featureVisualizationDesc:"体积、百分比一目了然",featureConfigTitle:"高级构建配置",featureConfigDesc:"目标、格式、平台随时可调",featureSafeCodeTitle:"安全地展示代码",featureSafeCodeDesc:"只展示文本,绝不执行 bundle",formCardTitle:"快速体验 Treeshake 效果",formCardDesc:"填写信息后,回车或点击按钮即可开始分析。",fieldSharedLabel:"Shared Name",fieldSharedPlaceholder:"例如: @scope/shared-lib",fieldVersionLabel:"Version",fieldVersionPlaceholder:"例如: 6.1.0",fieldExportsLabel:"Exports to keep",fieldExportsPlaceholderEmpty:"例如: useQuery, Button, ThemeProvider",fieldExportsPlaceholderMore:"继续输入导出名,回车 / 空格确认",fieldExportsHelp:"支持使用回车、逗号或空格快速创建导出 chip,退格键可以删除最后一个导出。",formErrorSharedRequired:"请输入 shared 名称",formErrorVersionRequired:"请输入版本号",formErrorExportsRequired:"请至少保留一个导出符号",formErrorTitleIncomplete:"表单未填写完整",formErrorDescIncomplete:"请补全必填字段后再发起构建。",sharedVersionRequired:"Shared 依赖 {{name}} 必须指定版本号 (例如: react@18.2.0)",extraConfigErrorTitle:"额外构建配置格式错误",extraConfigErrorDesc:"请确保额外 JSON 配置是合法的 JSON 字符串。",apiBaseRequired:"请在高级配置中填写 API Base URL,或开启 Mock Mode。",headersJsonInvalid:"请求头配置不是合法的 JSON 对象。",responseRootInvalid:"响应格式不符合预期:根节点不是对象。",responseMissingJs:"响应中缺少 full/treeshake.js 字段。",analyzeSuccessTitle:"分析完成",analyzeSuccessDesc:"已生成完整 bundle 与 Treeshaken bundle 的对比结果。",analyzeErrorTitle:"分析失败",analyzeErrorDescFallback:"请求失败,请稍后重试。",errorDuplicateSharedCurrent:"Shared 模块名称重复: {{name}}。",errorDuplicateSharedDeps:"依赖中发现重复的 Shared 模块: {{names}}。",suggestionMoveToShared:"建议把此库添加到 shared 里,而不是 treeshake",btnMoveToShared:"移动到 shared"},advanced:{title:"高级构建配置",subtitle:"默认即可使用,如需精准对齐服务端配置可在此调整。",collapse:"收起",expand:"展开",apiBaseLabel:"Server API Base URL",apiBasePlaceholder:"例如: http://localhost:4000/build",apiBaseDesc:"留空时会回落到环境变量 VITE_API_BASE_URL。",targetLabel:"Target",targetPlaceholder:`web,
1
+ (()=>{"use strict";var e,t,r,a,s,o,l,n={3760(e,t,r){r.d(t,{$:()=>d});var a=r(5723),s=r(2155),o=r(7042),l=r(5445),n=r(8207);let i=(0,l.F)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-zinc-950 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 dark:focus-visible:ring-zinc-300",{variants:{variant:{default:"bg-zinc-900 text-zinc-50 shadow hover:bg-zinc-900/90 dark:bg-zinc-50 dark:text-zinc-900 dark:hover:bg-zinc-50/90",destructive:"bg-red-500 text-zinc-50 shadow-sm hover:bg-red-500/90 dark:bg-red-900 dark:text-zinc-50 dark:hover:bg-red-900/90",outline:"border border-zinc-200 bg-white shadow-sm hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:bg-zinc-950 dark:hover:bg-zinc-800 dark:hover:text-zinc-50",secondary:"bg-zinc-100 text-zinc-900 shadow-sm hover:bg-zinc-100/80 dark:bg-zinc-800 dark:text-zinc-50 dark:hover:bg-zinc-800/80",ghost:"hover:bg-zinc-100 hover:text-zinc-900 dark:hover:bg-zinc-800 dark:hover:text-zinc-50",link:"text-zinc-900 underline-offset-4 hover:underline dark:text-zinc-50"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),d=s.forwardRef((e,t)=>{let{className:r,variant:s,size:l,asChild:d=!1,...c}=e,u=d?o.DX:"button";return(0,a.jsx)(u,{className:(0,n.cn)(i({variant:s,size:l,className:r})),ref:t,...c})});d.displayName="Button"},9980(e,t,r){r.d(t,{dj:()=>u,oR:()=>c});var a=r(2155);let s=0,o=new Map,l=e=>{if(o.has(e))return;let t=setTimeout(()=>{o.delete(e),d({type:"REMOVE_TOAST",toastId:e})},1e6);o.set(e,t)},n=[],i={toasts:[]};function d(e){i=((e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,1)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(e=>e.id===t.toast.id?{...e,...t.toast}:e)};case"DISMISS_TOAST":{let{toastId:r}=t;return r?l(r):e.toasts.forEach(e=>{l(e.id)}),{...e,toasts:e.toasts.map(e=>e.id===r||void 0===r?{...e,open:!1}:e)}}case"REMOVE_TOAST":if(void 0===t.toastId)return{...e,toasts:[]};return{...e,toasts:e.toasts.filter(e=>e.id!==t.toastId)}}})(i,e),n.forEach(e=>{e(i)})}function c(e){let{...t}=e,r=(s=(s+1)%Number.MAX_SAFE_INTEGER).toString(),a=()=>d({type:"DISMISS_TOAST",toastId:r});return d({type:"ADD_TOAST",toast:{...t,id:r,open:!0,onOpenChange:e=>{e||a()}}}),{id:r,dismiss:a,update:e=>d({type:"UPDATE_TOAST",toast:{...e,id:r}})}}function u(){let[e,t]=a.useState(i);return a.useEffect(()=>(n.push(t),()=>{let e=n.indexOf(t);e>-1&&n.splice(e,1)}),[e]),{...e,toast:c,dismiss:e=>d({type:"DISMISS_TOAST",toastId:e})}}},836(e,t,r){r.d(t,{A:()=>n});var a=r(7852),s=r(6532),o=r(4537);let l={"zh-CN":{translation:{common:{appName:"Shared Bundle Treeshake Studio",appSubtitle:"让 Treeshake 变得可观察",mockModeLabel:"Mock Mode",mockModeLocal:"本地模拟数据",mockModeRemote:"真实服务",themeToggleAria:"切换主题",tryNow:"Try it now",reset:"重置",submitIdle:"立即分析",submitLoading:"正在分析 bundle...",formSubmitHint:"回车键 或 点击按钮发起分析。",copied:"已复制",copy:"复制",download:"下载",copySuccessTitle:"已复制到剪贴板",copySuccessDescFile:"文件名: {{file}}",copyErrorTitle:"复制失败",copyErrorDesc:"浏览器暂不支持自动复制,请手动选择代码。",downloadErrorTitle:"下载失败",downloadErrorDesc:"浏览器不支持自动下载,请手动复制内容。",bundleEmptyPlaceholder:"// 当前 bundle 暂无内容",showAllCode:"展开全部代码",yes:"是",no:"否",quickTry:"快速体验",fillDemo:"填入演示数据",importManifest:"导入清单配置"},home:{badge:"Treeshake-ready Shared Bundling",titlePrefix:"一眼看懂",titleHighlight:"Full vs Treeshake",titleSuffix:"带来的真实体感",subtitle:"Visual comparison of Full vs Treeshaken builds. Making tree-shaking tangible.",savedSize:"节省体积",savedPercent:"节省比例",moduleCount:"模块数",simulatedLoad:"模拟加载时间",demoNote:"动画数值仅为示意,不代表真实环境。接入你的打包服务后,分析页会基于真实 bundle 给出精确对比。"},analyze:{heroBadge:"Treeshake-ready Shared Bundling",heroTitlePrefix:"用一张页面,看懂",heroTitleHighlight:"按需打包",heroTitleSuffix:"为 shared 带来的真实收益",heroSubtitle:"输入 shared 名称、版本和要保留的导出,一键对比完整 bundle 和 Treeshaken bundle 的体积、模块数量,以及两份产物的代码差异。所有 JS 仅以文本形式展示,不会在页面中执行。",featureVisualizationTitle:"收益可视化",featureVisualizationDesc:"体积、百分比一目了然",featureConfigTitle:"高级构建配置",featureConfigDesc:"目标、格式、平台随时可调",featureSafeCodeTitle:"安全地展示代码",featureSafeCodeDesc:"只展示文本,绝不执行 bundle",formCardTitle:"快速体验 Treeshake 效果",formCardDesc:"填写信息后,回车或点击按钮即可开始分析。",fieldSharedLabel:"Shared Name",fieldSharedPlaceholder:"例如: @scope/shared-lib",fieldVersionLabel:"Version",fieldVersionPlaceholder:"例如: 6.1.0",fieldExportsLabel:"Exports to keep",fieldExportsPlaceholderEmpty:"例如: useQuery, Button, ThemeProvider",fieldExportsPlaceholderMore:"继续输入导出名,回车 / 空格确认",fieldExportsHelp:"支持使用回车、逗号或空格快速创建导出 chip,退格键可以删除最后一个导出。",formErrorSharedRequired:"请输入 shared 名称",formErrorVersionRequired:"请输入版本号",formErrorExportsRequired:"请至少保留一个导出符号",formErrorTitleIncomplete:"表单未填写完整",formErrorDescIncomplete:"请补全必填字段后再发起构建。",sharedVersionRequired:"Shared 依赖 {{name}} 必须指定版本号 (例如: react@18.2.0)",extraConfigErrorTitle:"额外构建配置格式错误",extraConfigErrorDesc:"请确保额外 JSON 配置是合法的 JSON 字符串。",apiBaseRequired:"请在高级配置中填写 API Base URL,或开启 Mock Mode。",headersJsonInvalid:"请求头配置不是合法的 JSON 对象。",responseRootInvalid:"响应格式不符合预期:根节点不是对象。",responseMissingJs:"响应中缺少 full/treeshake.js 字段。",analyzeSuccessTitle:"分析完成",analyzeSuccessDesc:"已生成完整 bundle 与 Treeshaken bundle 的对比结果。",analyzeErrorTitle:"分析失败",analyzeErrorDescFallback:"请求失败,请稍后重试。",errorDuplicateSharedCurrent:"Shared 模块名称重复: {{name}}。",errorDuplicateSharedDeps:"依赖中发现重复的 Shared 模块: {{names}}。",suggestionMoveToShared:"建议把此库添加到 shared 里,而不是 treeshake",btnMoveToShared:"移动到 shared"},advanced:{title:"高级构建配置",subtitle:"默认即可使用,如需精准对齐服务端配置可在此调整。",collapse:"收起",expand:"展开",apiBaseLabel:"Server API Base URL",apiBasePlaceholder:"例如: http://localhost:4000/build",apiBaseDesc:"留空时会回落到环境变量 VITE_API_BASE_URL。",targetLabel:"Target",targetPlaceholder:`web,
2
2
  browserslist:> 0.01%,not dead,not op_mini all`,targetDesc:"Rspack 输出产物的目标环境和 Rspack runtime 代码的 ECMAScript 版本。",pluginsLabel:"Plugins",pluginsPlaceholder:"例如: @scope/my-plugin@6.1.0",pluginsDesc:"Rspack plugin,用于修改构建时的完整配置。支持指定版本。",sharedLabel:"Shared",sharedPlaceholder:"例如: react@18.2.0,react-dom@18.2.0",sharedDesc:"相关的 shared 依赖,例如 antd 依赖 react,则两者都应被设置为 shared。支持以逗号或空格分隔。"},results:{overviewTitle:"Full vs Treeshake 总览",overviewDoneBadge:"已完成一次分析",tableMetric:"指标",tableFull:"Full bundle",tableTreeshake:"Treeshake bundle",metricSize:"体积 (KB)",metricLoadTime:"加载时间 (ms)",metricModules:"模块数",metricSavedPercent:"节省比例",metricSavedPercentNA:"--",cardFullTitle:"Full Bundle",cardFullDesc:"完整 shared bundle 的总体积。",cardFullModules:"模块数量: {{count}}",cardTreeshakeTitle:"Treeshaken Bundle",cardTreeshakeDesc:"仅保留指定导出后的按需 bundle 体积。",cardTreeshakeModules:"模块数量: {{count}}",cardSavedTitle:"Size Saved",cardSavedDesc:"Treeshake 帮你摇掉的 JS 体积,越大越划算。",cardSavedPercentLabel:"节省比例",cardSavedPercentUnit:"%",cardKeptTitle:"模块保留情况",cardKeptExportsUnit:"个核心导出",cardKeptDesc:"Treeshake 后仍被保留的导出数量,通常与页面真实使用强相关。",cardKeptFullCount:"完整 bundle 模块数量: {{count}}",chartTitle:"体积对比",chartDesc:"越小的柱子 = 越少的 JS 需要被下载和解析",chartEmptyTitle:"等待一次构建结果",chartEmptyDesc:"填写表单并发起分析后,这里会展示完整 bundle 与 Treeshaken bundle 的体积对比动画。",modulesSectionTitle:"导出模块一览",modulesSectionDesc:"快速查看完整 bundle 与 Treeshaken bundle 分别包含哪些导出。",fullModulesLabel:"Full bundle",treeshakeModulesLabel:"Treeshaken bundle",moduleCountLabel:"{{count}} 个导出",moduleMoreLabel:"+{{count}} 个更多导出...",codeCompareTitle:"代码对比",codeCompareDesc:"下方仅展示返回的 JS 文本内容,不会在页面中执行。"},pseudocode:{sectionTitle:"如何加载产物(伪代码)",badge:"仅为示意,不会执行",cardTitle:"跨环境加载 shared 产物的伪代码流程",cardDesc:"下面的伪代码仅用于解释加载流程的设计思路,不会在浏览器中执行。",intro:"假设你的打包服务返回的 full / treeshake 产物都可以通过 URL 访问,或者可以在前端将字符串转成 Blob,再生成临时 URL。",tabBrowser:"浏览器环境",tabNode:"Node / SSR 环境",browserCode:`// 1. 从后端拿到 full JS 与 treeshaken JS 字符串
3
3
  const fullJs = response.full.js
4
4
  const treeshakeJs = response.treeshake.js
@@ -85,4 +85,4 @@ writeFileSync("./shared.treeshake.js", treeshakeJs)
85
85
  // - Or hand them over to your bundler / runtime
86
86
 
87
87
  // Note: to avoid executing untrusted code, do this only in
88
- // trusted build environments or sandboxed runtimes.`},faq:{title:"FAQ",q1:"What does Mock Mode do?",a1:"When no real build service is wired, Mock Mode synthesizes a local response so you can experience the full UX and visualizations. Turn it off once a real backend is connected.",q2:"Where does API Base URL come from?",a2:"We first read the value from the Advanced Config panel (persisted in localStorage), then fall back to environment variable VITE_API_BASE_URL, and finally to http://localhost:4000/build.",q3:"Why might treeshake results differ slightly from real outputs?",a3:"The page only displays returned JS text plus export info inferred with simple heuristics, to make savings intuitive. It never executes JS. Your real production build behaviour is defined by your own build service."},footer:{jsSafety:"Frontend only renders text and never executes returned JS."},lang:{zh:"中文",en:"English"}}}};a.Ay.use(o.A).use(s.r9).init({resources:l,fallbackLng:"zh-CN",supportedLngs:["zh-CN","en"],lng:"zh-CN",interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator","htmlTag"],caches:["localStorage"]}});let n=a.Ay},8207(e,t,r){r.d(t,{cn:()=>o});var a=r(851),s=r(834);function o(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,a.$)(t))}},9864(e,t,r){var a=r(5723),s=r(2155),o=r(8997);r(836);var l=r(7938),n=r(1946),i=r(3760),d=r(6153),c=r(8207);let u=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(d.bL,{className:(0,c.cn)("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-zinc-900 data-[state=unchecked]:bg-zinc-200 dark:focus-visible:ring-zinc-300 dark:focus-visible:ring-offset-zinc-950 dark:data-[state=checked]:bg-zinc-50 dark:data-[state=unchecked]:bg-zinc-800",r),...s,ref:t,children:(0,a.jsx)(d.zi,{className:(0,c.cn)("pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 dark:bg-zinc-950")})})});function h(e){let{className:t,...r}=e;return(0,a.jsx)("div",{className:(0,c.cn)("animate-pulse rounded-md bg-zinc-900/10 dark:bg-zinc-50/10",t),...r})}u.displayName=d.bL.displayName;var p=r(9980),m=r(4489),f=r(5445),b=r(1784);let g=m.Kq,v=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.LM,{ref:t,className:(0,c.cn)("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",r),...s})});v.displayName=m.LM.displayName;let k=(0,f.F)("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border border-zinc-200 p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full dark:border-zinc-800",{variants:{variant:{default:"border bg-white text-zinc-950 dark:bg-zinc-950 dark:text-zinc-50",destructive:"destructive group border-red-500 bg-red-500 text-zinc-50 dark:border-red-900 dark:bg-red-900 dark:text-zinc-50"}},defaultVariants:{variant:"default"}}),x=s.forwardRef((e,t)=>{let{className:r,variant:s,...o}=e;return(0,a.jsx)(m.bL,{ref:t,className:(0,c.cn)(k({variant:s}),r),...o})});x.displayName=m.bL.displayName,s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.rc,{ref:t,className:(0,c.cn)("inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-zinc-200 bg-transparent px-3 text-sm font-medium transition-colors hover:bg-zinc-100 focus:outline-none focus:ring-1 focus:ring-zinc-950 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-zinc-100/40 group-[.destructive]:hover:border-red-500/30 group-[.destructive]:hover:bg-red-500 group-[.destructive]:hover:text-zinc-50 group-[.destructive]:focus:ring-red-500 dark:border-zinc-800 dark:hover:bg-zinc-800 dark:focus:ring-zinc-300 dark:group-[.destructive]:border-zinc-800/40 dark:group-[.destructive]:hover:border-red-900/30 dark:group-[.destructive]:hover:bg-red-900 dark:group-[.destructive]:hover:text-zinc-50 dark:group-[.destructive]:focus:ring-red-900",r),...s})}).displayName=m.rc.displayName;let y=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.bm,{ref:t,className:(0,c.cn)("absolute right-1 top-1 rounded-md p-1 text-zinc-950/50 opacity-0 transition-opacity hover:text-zinc-950 focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600 dark:text-zinc-50/50 dark:hover:text-zinc-50",r),"toast-close":"",...s,children:(0,a.jsx)(b.A,{className:"h-4 w-4"})})});y.displayName=m.bm.displayName;let S=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.hE,{ref:t,className:(0,c.cn)("text-sm font-semibold [&+div]:text-xs",r),...s})});S.displayName=m.hE.displayName;let w=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.VY,{ref:t,className:(0,c.cn)("text-sm opacity-90",r),...s})});function T(){let{toasts:e}=(0,p.dj)();return(0,a.jsxs)(g,{children:[e.map(function(e){let{id:t,title:r,description:s,action:o,...l}=e;return(0,a.jsxs)(x,{...l,children:[(0,a.jsxs)("div",{className:"grid gap-1",children:[r&&(0,a.jsx)(S,{children:r}),s&&(0,a.jsx)(w,{children:s})]}),o,(0,a.jsx)(y,{})]},t)}),(0,a.jsx)(v,{})]})}w.displayName=m.VY.displayName;var z=r(6425),j=r(5539),E=r(9086);function N(){let{i18n:e,t}=(0,l.Bd)(),r=(e.language||"zh-CN").startsWith("en")?"en":"zh-CN",s=t=>a=>{if(a.preventDefault(),t!==r){e.changeLanguage(t);try{"u">typeof window&&window.localStorage.setItem("i18nextLng",t)}catch{}}};return(0,a.jsxs)("div",{className:"flex items-center gap-1 rounded-full bg-white/60 px-1 py-0.5 text-[11px] shadow-sm backdrop-blur-md dark:bg-slate-900/70",children:[(0,a.jsx)("button",{type:"button",onClick:s("zh-CN"),className:(0,c.cn)("rounded-full px-2 py-0.5 transition-colors","zh-CN"===r?"bg-slate-900 text-slate-50 dark:bg-slate-100 dark:text-slate-900":"text-slate-600 hover:bg-slate-200/70 dark:text-slate-300 dark:hover:bg-slate-800/70"),children:t("lang.zh")}),(0,a.jsx)("span",{className:"text-slate-400 dark:text-slate-500",children:"/"}),(0,a.jsx)("button",{type:"button",onClick:s("en"),className:(0,c.cn)("rounded-full px-2 py-0.5 transition-colors","en"===r?"bg-slate-900 text-slate-50 dark:bg-slate-100 dark:text-slate-900":"text-slate-600 hover:bg-slate-200/70 dark:text-slate-300 dark:hover:bg-slate-800/70"),children:t("lang.en")})]})}let L=(0,s.lazy)(()=>r.e("987").then(r.bind(r,670))),M=(0,s.lazy)(()=>Promise.all([r.e("951"),r.e("873")]).then(r.bind(r,4704))),R="tree-shaking-theme";(0,o.createRoot)(document.getElementById("root")).render((0,a.jsx)(s.StrictMode,{children:(0,a.jsx)(n.I9,{children:(0,a.jsx)(function(){let{t:e}=(0,l.Bd)(),[t,r]=(0,s.useState)(()=>(function(){if("u"<typeof window)return"light";let e=window.localStorage.getItem(R);return"light"===e||"dark"===e?e:window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"})()),[o,d]=(0,s.useState)(!1),[p,m]=(0,s.useState)(!1),f=(0,n.zy)();return(0,s.useEffect)(()=>{"u">typeof window&&m(!!window.localStorage.getItem("treeshake_mock_mode"))},[]),(0,s.useEffect)(()=>{"u">typeof document&&(document.documentElement.classList.toggle("dark","dark"===t),window.localStorage.setItem(R,t))},[t]),(0,a.jsxs)("div",{className:(0,c.cn)("min-h-screen text-slate-900 transition-colors duration-500 dark:text-slate-50","/analyze"===f.pathname?"bg-gradient-to-b from-sky-50 via-slate-50 to-slate-100 dark:from-slate-950 dark:via-slate-950 dark:to-slate-900":"bg-white dark:bg-slate-950"),children:["/analyze"===f.pathname&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-0 -z-10 h-64 bg-gradient-to-br from-sky-400/25 via-fuchsia-500/15 to-emerald-400/25 blur-3xl opacity-80"}),(0,a.jsx)("div",{className:"pointer-events-none absolute inset-y-0 right-0 -z-10 w-1/3 bg-gradient-to-tl from-sky-500/10 via-transparent to-emerald-500/10 blur-3xl"})]}),(0,a.jsxs)("div",{className:"relative mx-auto flex min-h-screen max-w-6xl flex-col px-4 pb-8 pt-6 md:px-8 md:pb-12 md:pt-10",children:[(0,a.jsxs)("header",{className:"flex items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:"flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-tr from-sky-500 to-fuchsia-500 text-white shadow-lg shadow-sky-500/40",children:(0,a.jsx)(z.A,{className:"h-4 w-4"})}),(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-semibold tracking-tight",children:e("common.appName")}),(0,a.jsx)("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:e("common.appSubtitle")})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsx)(N,{}),p&&(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-full bg-white/60 px-3 py-1 text-xs shadow-sm backdrop-blur-md dark:bg-slate-900/70",children:[(0,a.jsx)("span",{className:"text-[11px] text-slate-500 dark:text-slate-400",children:e("common.mockModeLabel")}),(0,a.jsx)(u,{checked:o,onCheckedChange:e=>d(!!e)}),(0,a.jsx)("span",{className:"text-[11px] text-emerald-600 dark:text-emerald-400",children:e(o?"common.mockModeLocal":"common.mockModeRemote")})]}),(0,a.jsx)(i.$,{type:"button",variant:"ghost",size:"icon","aria-label":e("common.themeToggleAria"),className:"h-9 w-9 rounded-full border border-slate-200/70 bg-white/70 shadow-sm backdrop-blur-md dark:border-slate-700 dark:bg-slate-900",onClick:()=>r(e=>"light"===e?"dark":"light"),children:"light"===t?(0,a.jsx)(j.A,{className:"h-4 w-4 text-slate-700"}):(0,a.jsx)(E.A,{className:"h-4 w-4 text-amber-300"})})]})]}),(0,a.jsx)("main",{className:"mt-8 flex flex-1 flex-col gap-8 md:mt-10",children:"/analyze"===f.pathname?(0,a.jsx)(s.Suspense,{fallback:(0,a.jsx)(h,{className:"h-40 w-full"}),children:(0,a.jsx)(M,{mockMode:o})}):"/"===f.pathname?(0,a.jsx)(s.Suspense,{fallback:(0,a.jsx)(h,{className:"h-40 w-full"}),children:(0,a.jsx)(L,{})}):null}),(0,a.jsx)("footer",{className:"mt-8 border-t border-slate-200/80 pt-4 text-[11px] text-slate-500 dark:border-slate-800/80 dark:text-slate-400",children:(0,a.jsx)("div",{className:"flex justify-center text-center",children:(0,a.jsx)("span",{className:"text-slate-400",children:e("footer.jsSafety")})})})]}),(0,a.jsx)(T,{})]})},{})})}))}},i={};function d(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return n[e](r,r.exports,d),r.exports}d.m=n,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(r,a){if(1&a&&(r=this(r)),8&a||"object"==typeof r&&r&&(4&a&&r.__esModule||16&a&&"function"==typeof r.then))return r;var s=Object.create(null);d.r(s);var o={};e=e||[null,t({}),t([]),t(t)];for(var l=2&a&&r;("object"==typeof l||"function"==typeof l)&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach(e=>{o[e]=()=>r[e]});return o.default=()=>r,d.d(s,o),s},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((t,r)=>(d.f[r](e,t),t),[])),d.u=e=>"static/js/async/"+e+"."+({873:"6ccd5409",951:"ec9191e2",987:"6bf8e9b0"})[e]+".js",d.miniCssF=e=>""+e+".css",d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},d.l=function(e,t,a,s){if(r[e])return void r[e].push(t);if(void 0!==a)for(var o,l,n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var c=n[i];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="@module-federation/treeshake-frontend:"+a){o=c;break}}o||(l=!0,(o=document.createElement("script")).timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-rspack","@module-federation/treeshake-frontend:"+a),o.src=e),r[e]=[t];var u=function(t,a){o.onerror=o.onload=null,clearTimeout(h);var s=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),s&&s.forEach(function(e){return e(a)}),t)return t(a)},h=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),l&&document.head.appendChild(o)},d.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nc=void 0,a=[],d.O=(e,t,r,s)=>{if(t){s=s||0;for(var o=a.length;o>0&&a[o-1][2]>s;o--)a[o]=a[o-1];a[o]=[t,r,s];return}for(var l=1/0,o=0;o<a.length;o++){for(var[t,r,s]=a[o],n=!0,i=0;i<t.length;i++)(!1&s||l>=s)&&Object.keys(d.O).every(e=>d.O[e](t[i]))?t.splice(i--,1):(n=!1,s<l&&(l=s));if(n){a.splice(o--,1);var c=r();void 0!==c&&(e=c)}}return e},d.p="/tree-shaking/",s={410:0},d.f.j=function(e,t){var r=d.o(s,e)?s[e]:void 0;if(0!==r)if(r)t.push(r[2]);else{var a=new Promise((t,a)=>r=s[e]=[t,a]);t.push(r[2]=a);var o=d.p+d.u(e),l=Error();d.l(o,function(t){if(d.o(s,e)&&(0!==(r=s[e])&&(s[e]=void 0),r)){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+a+": "+o+")",l.name="ChunkLoadError",l.type=a,l.request=o,r[1](l)}},"chunk-"+e,e)}},d.O.j=e=>0===s[e],o=(e,t)=>{var r,a,[o,l,n]=t,i=0;if(o.some(e=>0!==s[e])){for(r in l)d.o(l,r)&&(d.m[r]=l[r]);if(n)var c=n(d)}for(e&&e(t);i<o.length;i++)a=o[i],d.o(s,a)&&s[a]&&s[a][0](),s[a]=0;return d.O(c)},(l=self.webpackChunk_module_federation_treeshake_frontend=self.webpackChunk_module_federation_treeshake_frontend||[]).forEach(o.bind(null,0)),l.push=o.bind(null,l.push.bind(l));var c=d.O(void 0,["783","535","954"],()=>d(9864));c=d.O(c)})();
88
+ // trusted build environments or sandboxed runtimes.`},faq:{title:"FAQ",q1:"What does Mock Mode do?",a1:"When no real build service is wired, Mock Mode synthesizes a local response so you can experience the full UX and visualizations. Turn it off once a real backend is connected.",q2:"Where does API Base URL come from?",a2:"We first read the value from the Advanced Config panel (persisted in localStorage), then fall back to environment variable VITE_API_BASE_URL, and finally to http://localhost:4000/build.",q3:"Why might treeshake results differ slightly from real outputs?",a3:"The page only displays returned JS text plus export info inferred with simple heuristics, to make savings intuitive. It never executes JS. Your real production build behaviour is defined by your own build service."},footer:{jsSafety:"Frontend only renders text and never executes returned JS."},lang:{zh:"中文",en:"English"}}}};a.Ay.use(o.A).use(s.r9).init({resources:l,fallbackLng:"zh-CN",supportedLngs:["zh-CN","en"],lng:"zh-CN",interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator","htmlTag"],caches:["localStorage"]}});let n=a.Ay},8207(e,t,r){r.d(t,{cn:()=>o});var a=r(851),s=r(3455);function o(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,s.QP)((0,a.$)(t))}},9864(e,t,r){var a=r(5723),s=r(2155),o=r(8997);r(836);var l=r(6532),n=r(1946),i=r(3760),d=r(9087),c=r(8207);let u=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(d.bL,{className:(0,c.cn)("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-950 focus-visible:ring-offset-2 focus-visible:ring-offset-white disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-zinc-900 data-[state=unchecked]:bg-zinc-200 dark:focus-visible:ring-zinc-300 dark:focus-visible:ring-offset-zinc-950 dark:data-[state=checked]:bg-zinc-50 dark:data-[state=unchecked]:bg-zinc-800",r),...s,ref:t,children:(0,a.jsx)(d.zi,{className:(0,c.cn)("pointer-events-none block h-4 w-4 rounded-full bg-white shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 dark:bg-zinc-950")})})});function h(e){let{className:t,...r}=e;return(0,a.jsx)("div",{className:(0,c.cn)("animate-pulse rounded-md bg-zinc-900/10 dark:bg-zinc-50/10",t),...r})}u.displayName=d.bL.displayName;var p=r(9980),m=r(6276),f=r(5445),b=r(1784);let g=m.Kq,v=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.LM,{ref:t,className:(0,c.cn)("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",r),...s})});v.displayName=m.LM.displayName;let k=(0,f.F)("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border border-zinc-200 p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full dark:border-zinc-800",{variants:{variant:{default:"border bg-white text-zinc-950 dark:bg-zinc-950 dark:text-zinc-50",destructive:"destructive group border-red-500 bg-red-500 text-zinc-50 dark:border-red-900 dark:bg-red-900 dark:text-zinc-50"}},defaultVariants:{variant:"default"}}),x=s.forwardRef((e,t)=>{let{className:r,variant:s,...o}=e;return(0,a.jsx)(m.bL,{ref:t,className:(0,c.cn)(k({variant:s}),r),...o})});x.displayName=m.bL.displayName,s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.rc,{ref:t,className:(0,c.cn)("inline-flex h-8 shrink-0 items-center justify-center rounded-md border border-zinc-200 bg-transparent px-3 text-sm font-medium transition-colors hover:bg-zinc-100 focus:outline-none focus:ring-1 focus:ring-zinc-950 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-zinc-100/40 group-[.destructive]:hover:border-red-500/30 group-[.destructive]:hover:bg-red-500 group-[.destructive]:hover:text-zinc-50 group-[.destructive]:focus:ring-red-500 dark:border-zinc-800 dark:hover:bg-zinc-800 dark:focus:ring-zinc-300 dark:group-[.destructive]:border-zinc-800/40 dark:group-[.destructive]:hover:border-red-900/30 dark:group-[.destructive]:hover:bg-red-900 dark:group-[.destructive]:hover:text-zinc-50 dark:group-[.destructive]:focus:ring-red-900",r),...s})}).displayName=m.rc.displayName;let y=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.bm,{ref:t,className:(0,c.cn)("absolute right-1 top-1 rounded-md p-1 text-zinc-950/50 opacity-0 transition-opacity hover:text-zinc-950 focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600 dark:text-zinc-50/50 dark:hover:text-zinc-50",r),"toast-close":"",...s,children:(0,a.jsx)(b.A,{className:"h-4 w-4"})})});y.displayName=m.bm.displayName;let S=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.hE,{ref:t,className:(0,c.cn)("text-sm font-semibold [&+div]:text-xs",r),...s})});S.displayName=m.hE.displayName;let w=s.forwardRef((e,t)=>{let{className:r,...s}=e;return(0,a.jsx)(m.VY,{ref:t,className:(0,c.cn)("text-sm opacity-90",r),...s})});function T(){let{toasts:e}=(0,p.dj)();return(0,a.jsxs)(g,{children:[e.map(function(e){let{id:t,title:r,description:s,action:o,...l}=e;return(0,a.jsxs)(x,{...l,children:[(0,a.jsxs)("div",{className:"grid gap-1",children:[r&&(0,a.jsx)(S,{children:r}),s&&(0,a.jsx)(w,{children:s})]}),o,(0,a.jsx)(y,{})]},t)}),(0,a.jsx)(v,{})]})}w.displayName=m.VY.displayName;var z=r(6425),j=r(5539),E=r(9086);function N(){let{i18n:e,t}=(0,l.Bd)(),r=(e.language||"zh-CN").startsWith("en")?"en":"zh-CN",s=t=>a=>{if(a.preventDefault(),t!==r){e.changeLanguage(t);try{"u">typeof window&&window.localStorage.setItem("i18nextLng",t)}catch{}}};return(0,a.jsxs)("div",{className:"flex items-center gap-1 rounded-full bg-white/60 px-1 py-0.5 text-[11px] shadow-sm backdrop-blur-md dark:bg-slate-900/70",children:[(0,a.jsx)("button",{type:"button",onClick:s("zh-CN"),className:(0,c.cn)("rounded-full px-2 py-0.5 transition-colors","zh-CN"===r?"bg-slate-900 text-slate-50 dark:bg-slate-100 dark:text-slate-900":"text-slate-600 hover:bg-slate-200/70 dark:text-slate-300 dark:hover:bg-slate-800/70"),children:t("lang.zh")}),(0,a.jsx)("span",{className:"text-slate-400 dark:text-slate-500",children:"/"}),(0,a.jsx)("button",{type:"button",onClick:s("en"),className:(0,c.cn)("rounded-full px-2 py-0.5 transition-colors","en"===r?"bg-slate-900 text-slate-50 dark:bg-slate-100 dark:text-slate-900":"text-slate-600 hover:bg-slate-200/70 dark:text-slate-300 dark:hover:bg-slate-800/70"),children:t("lang.en")})]})}let L=(0,s.lazy)(()=>r.e("987").then(r.bind(r,670))),M=(0,s.lazy)(()=>Promise.all([r.e("794"),r.e("873")]).then(r.bind(r,4704))),R="tree-shaking-theme";(0,o.createRoot)(document.getElementById("root")).render((0,a.jsx)(s.StrictMode,{children:(0,a.jsx)(n.I9,{children:(0,a.jsx)(function(){let{t:e}=(0,l.Bd)(),[t,r]=(0,s.useState)(()=>(function(){if("u"<typeof window)return"light";let e=window.localStorage.getItem(R);return"light"===e||"dark"===e?e:window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"})()),[o,d]=(0,s.useState)(!1),[p,m]=(0,s.useState)(!1),f=(0,n.zy)();return(0,s.useEffect)(()=>{"u">typeof window&&m(!!window.localStorage.getItem("treeshake_mock_mode"))},[]),(0,s.useEffect)(()=>{"u">typeof document&&(document.documentElement.classList.toggle("dark","dark"===t),window.localStorage.setItem(R,t))},[t]),(0,a.jsxs)("div",{className:(0,c.cn)("min-h-screen text-slate-900 transition-colors duration-500 dark:text-slate-50","/analyze"===f.pathname?"bg-gradient-to-b from-sky-50 via-slate-50 to-slate-100 dark:from-slate-950 dark:via-slate-950 dark:to-slate-900":"bg-white dark:bg-slate-950"),children:["/analyze"===f.pathname&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"pointer-events-none absolute inset-x-0 top-0 -z-10 h-64 bg-gradient-to-br from-sky-400/25 via-fuchsia-500/15 to-emerald-400/25 blur-3xl opacity-80"}),(0,a.jsx)("div",{className:"pointer-events-none absolute inset-y-0 right-0 -z-10 w-1/3 bg-gradient-to-tl from-sky-500/10 via-transparent to-emerald-500/10 blur-3xl"})]}),(0,a.jsxs)("div",{className:"relative mx-auto flex min-h-screen max-w-6xl flex-col px-4 pb-8 pt-6 md:px-8 md:pb-12 md:pt-10",children:[(0,a.jsxs)("header",{className:"flex items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:"flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-tr from-sky-500 to-fuchsia-500 text-white shadow-lg shadow-sky-500/40",children:(0,a.jsx)(z.A,{className:"h-4 w-4"})}),(0,a.jsxs)("div",{className:"flex flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-semibold tracking-tight",children:e("common.appName")}),(0,a.jsx)("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:e("common.appSubtitle")})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsx)(N,{}),p&&(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-full bg-white/60 px-3 py-1 text-xs shadow-sm backdrop-blur-md dark:bg-slate-900/70",children:[(0,a.jsx)("span",{className:"text-[11px] text-slate-500 dark:text-slate-400",children:e("common.mockModeLabel")}),(0,a.jsx)(u,{checked:o,onCheckedChange:e=>d(!!e)}),(0,a.jsx)("span",{className:"text-[11px] text-emerald-600 dark:text-emerald-400",children:e(o?"common.mockModeLocal":"common.mockModeRemote")})]}),(0,a.jsx)(i.$,{type:"button",variant:"ghost",size:"icon","aria-label":e("common.themeToggleAria"),className:"h-9 w-9 rounded-full border border-slate-200/70 bg-white/70 shadow-sm backdrop-blur-md dark:border-slate-700 dark:bg-slate-900",onClick:()=>r(e=>"light"===e?"dark":"light"),children:"light"===t?(0,a.jsx)(j.A,{className:"h-4 w-4 text-slate-700"}):(0,a.jsx)(E.A,{className:"h-4 w-4 text-amber-300"})})]})]}),(0,a.jsx)("main",{className:"mt-8 flex flex-1 flex-col gap-8 md:mt-10",children:"/analyze"===f.pathname?(0,a.jsx)(s.Suspense,{fallback:(0,a.jsx)(h,{className:"h-40 w-full"}),children:(0,a.jsx)(M,{mockMode:o})}):"/"===f.pathname?(0,a.jsx)(s.Suspense,{fallback:(0,a.jsx)(h,{className:"h-40 w-full"}),children:(0,a.jsx)(L,{})}):null}),(0,a.jsx)("footer",{className:"mt-8 border-t border-slate-200/80 pt-4 text-[11px] text-slate-500 dark:border-slate-800/80 dark:text-slate-400",children:(0,a.jsx)("div",{className:"flex justify-center text-center",children:(0,a.jsx)("span",{className:"text-slate-400",children:e("footer.jsSafety")})})})]}),(0,a.jsx)(T,{})]})},{})})}))}},i={};function d(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return n[e](r,r.exports,d),r.exports}d.m=n,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(r,a){if(1&a&&(r=this(r)),8&a||"object"==typeof r&&r&&(4&a&&r.__esModule||16&a&&"function"==typeof r.then))return r;var s=Object.create(null);d.r(s);var o={};e=e||[null,t({}),t([]),t(t)];for(var l=2&a&&r;("object"==typeof l||"function"==typeof l)&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach(e=>{o[e]=()=>r[e]});return o.default=()=>r,d.d(s,o),s},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((t,r)=>(d.f[r](e,t),t),[])),d.u=e=>"static/js/async/"+e+"."+({794:"cada3bfc",873:"3956a71d",987:"5b1e5ce3"})[e]+".js",d.miniCssF=e=>""+e+".css",d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},d.l=function(e,t,a,s){if(r[e])return void r[e].push(t);if(void 0!==a)for(var o,l,n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var c=n[i];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="@module-federation/treeshake-frontend:"+a){o=c;break}}o||(l=!0,(o=document.createElement("script")).timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-rspack","@module-federation/treeshake-frontend:"+a),o.src=e),r[e]=[t];var u=function(t,a){o.onerror=o.onload=null,clearTimeout(h);var s=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),s&&s.forEach(function(e){return e(a)}),t)return t(a)},h=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),l&&document.head.appendChild(o)},d.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nc=void 0,a=[],d.O=(e,t,r,s)=>{if(t){s=s||0;for(var o=a.length;o>0&&a[o-1][2]>s;o--)a[o]=a[o-1];a[o]=[t,r,s];return}for(var l=1/0,o=0;o<a.length;o++){for(var[t,r,s]=a[o],n=!0,i=0;i<t.length;i++)(!1&s||l>=s)&&Object.keys(d.O).every(e=>d.O[e](t[i]))?t.splice(i--,1):(n=!1,s<l&&(l=s));if(n){a.splice(o--,1);var c=r();void 0!==c&&(e=c)}}return e},d.p="/tree-shaking/",s={410:0},d.f.j=function(e,t){var r=d.o(s,e)?s[e]:void 0;if(0!==r)if(r)t.push(r[2]);else{var a=new Promise((t,a)=>r=s[e]=[t,a]);t.push(r[2]=a);var o=d.p+d.u(e),l=Error();d.l(o,function(t){if(d.o(s,e)&&(0!==(r=s[e])&&(s[e]=void 0),r)){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+a+": "+o+")",l.name="ChunkLoadError",l.type=a,l.request=o,r[1](l)}},"chunk-"+e,e)}},d.O.j=e=>0===s[e],o=(e,t)=>{var r,a,[o,l,n]=t,i=0;if(o.some(e=>0!==s[e])){for(r in l)d.o(l,r)&&(d.m[r]=l[r]);if(n)var c=n(d)}for(e&&e(t);i<o.length;i++)a=o[i],d.o(s,a)&&s[a]&&s[a][0](),s[a]=0;return d.O(c)},(l=self.webpackChunk_module_federation_treeshake_frontend=self.webpackChunk_module_federation_treeshake_frontend||[]).forEach(o.bind(null,0)),l.push=o.bind(null,l.push.bind(l));var c=d.O(void 0,["783","535","328"],()=>d(9864));c=d.O(c)})();
package/dist/index.d.ts CHANGED
@@ -7,4 +7,4 @@ export { createAdapterRegistry, createOssAdapterRegistry, } from './adapters/reg
7
7
  export { createLogger } from './infra/logger';
8
8
  export type { FrontendAdapter } from './frontend/types';
9
9
  export { LocalAdapter, LocalObjectStore } from './adapters/local';
10
- export type { AdapterConfig, AdapterEnv, AdapterContext, AdapterCreateResult, TreeShakeAdapter, ObjectStore, ProjectPublisher, UploadOptions, } from './adapters/types';
10
+ export type { AdapterConfig, AdapterEnv, AdapterContext, AdapterCreateResult, TreeShakeAdapter, ObjectStore, ProjectPublisher, UploadOptions, AdapterLogger, } from './adapters/types';
package/dist/index.js CHANGED
@@ -77,8 +77,12 @@ const loggerMiddleware = async (c, next)=>{
77
77
  c.set('logger', child);
78
78
  await next();
79
79
  };
80
+ const external_node_os_namespaceObject = require("node:os");
81
+ var external_node_os_default = /*#__PURE__*/ __webpack_require__.n(external_node_os_namespaceObject);
80
82
  const zod_validator_namespaceObject = require("@hono/zod-validator");
81
83
  const external_nanoid_namespaceObject = require("nanoid");
84
+ const external_p_limit_namespaceObject = require("p-limit");
85
+ var external_p_limit_default = /*#__PURE__*/ __webpack_require__.n(external_p_limit_namespaceObject);
82
86
  const parseNormalizedKey = (key)=>{
83
87
  const res = key.split('@');
84
88
  return {
@@ -112,14 +116,15 @@ function normalizeConfig(config) {
112
116
  return normalizedConfig;
113
117
  }
114
118
  function extractBuildConfig(config, type) {
115
- const { shared, plugins, target, libraryType, usedExports } = config;
119
+ const { shared, plugins, target, libraryType, usedExports, hostName } = config;
116
120
  return {
117
121
  shared,
118
122
  plugins,
119
123
  target,
120
124
  libraryType,
121
125
  usedExports,
122
- type
126
+ type,
127
+ hostName
123
128
  };
124
129
  }
125
130
  const external_zod_namespaceObject = require("zod");
@@ -154,10 +159,8 @@ const CheckTreeShakingSchema = ConfigSchema.extend({
154
159
  uploadOptions: UploadOptionsSchema.optional()
155
160
  });
156
161
  const external_node_crypto_namespaceObject = require("node:crypto");
157
- const external_node_fs_namespaceObject = require("node:fs");
158
- var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
159
- const external_node_os_namespaceObject = require("node:os");
160
- var external_node_os_default = /*#__PURE__*/ __webpack_require__.n(external_node_os_namespaceObject);
162
+ const promises_namespaceObject = require("node:fs/promises");
163
+ var promises_default = /*#__PURE__*/ __webpack_require__.n(promises_namespaceObject);
161
164
  const external_node_path_namespaceObject = require("node:path");
162
165
  var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
163
166
  const STATS_NAME = 'mf-stats.json';
@@ -257,11 +260,11 @@ const startPeriodicPrune = (intervalMs = DEFAULT_INTERVAL)=>{
257
260
  maybePrune();
258
261
  }, intervalMs);
259
262
  };
260
- const createUniqueTempDirByKey = (key)=>{
263
+ const createUniqueTempDirByKey = async (key)=>{
261
264
  const base = external_node_path_default().join(external_node_os_default().tmpdir(), `re-shake-share-${key}`);
262
265
  let candidate = base;
263
266
  for(;;)try {
264
- external_node_fs_default().mkdirSync(candidate, {
267
+ await promises_default().mkdir(candidate, {
265
268
  recursive: false
266
269
  });
267
270
  return candidate;
@@ -270,15 +273,22 @@ const createUniqueTempDirByKey = (key)=>{
270
273
  candidate = `${base}-${rand}`;
271
274
  }
272
275
  };
273
- const prepareProject = (config, excludeShared)=>{
276
+ const prepareProject = async (config, excludeShared)=>{
274
277
  const key = (0, external_node_crypto_namespaceObject.createHash)('sha256').update(JSON.stringify(config)).digest('hex');
275
- const dir = createUniqueTempDirByKey(key);
276
- const templateDir = external_node_path_default().join(__dirname, '..', 'template', 're-shake-share');
277
- external_node_fs_default().cpSync(templateDir, dir, {
278
+ const dir = await createUniqueTempDirByKey(key);
279
+ const templateDir = external_node_path_default().join(__dirname, '.', 'template', 're-shake-share');
280
+ await promises_default().cp(templateDir, dir, {
278
281
  recursive: true
279
282
  });
280
283
  const pkgPath = external_node_path_default().join(dir, 'package.json');
281
- const pkg = JSON.parse(external_node_fs_default().readFileSync(pkgPath, 'utf-8'));
284
+ const indexPath = external_node_path_default().join(dir, 'index.ts');
285
+ const rspackConfigPath = external_node_path_default().join(dir, 'rspack.config.ts');
286
+ const [pkgContent, indexContent, rspackConfigContent] = await Promise.all([
287
+ promises_default().readFile(pkgPath, 'utf-8'),
288
+ promises_default().readFile(indexPath, 'utf-8'),
289
+ promises_default().readFile(rspackConfigPath, 'utf-8')
290
+ ]);
291
+ const pkg = JSON.parse(pkgContent);
282
292
  const deps = {
283
293
  ...pkg.dependencies || {}
284
294
  };
@@ -319,28 +329,29 @@ const prepareProject = (config, excludeShared)=>{
319
329
  });
320
330
  pluginOptionStr += '\n]';
321
331
  pkg.dependencies = deps;
322
- external_node_fs_default().writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
332
+ const newPkgContent = JSON.stringify(pkg, null, 2);
323
333
  const sharedImportPlaceholder = "${SHARED_IMPORT}";
334
+ const newIndexContent = indexContent.replace(sharedImportPlaceholder, sharedImport);
324
335
  const pluginsPlaceholder = "${ PLUGINS }";
325
336
  const mfConfigPlaceholder = "${ MF_CONFIG }";
326
- const indexPath = external_node_path_default().join(dir, 'index.ts');
327
- const indexContent = external_node_fs_default().readFileSync(indexPath, 'utf-8');
328
- external_node_fs_default().writeFileSync(indexPath, indexContent.replace(sharedImportPlaceholder, sharedImport));
329
- const rspackConfigPath = external_node_path_default().join(dir, 'rspack.config.ts');
330
- let cfg = external_node_fs_default().readFileSync(rspackConfigPath, 'utf-8');
337
+ let cfg = rspackConfigContent;
331
338
  cfg += pluginImportStr;
332
339
  cfg = cfg.replace(pluginsPlaceholder, pluginOptionStr);
333
340
  cfg = cfg.replace(mfConfigPlaceholder, JSON.stringify(mfConfig, null, 2));
334
- external_node_fs_default().writeFileSync(rspackConfigPath, cfg);
341
+ await Promise.all([
342
+ promises_default().writeFile(pkgPath, newPkgContent),
343
+ promises_default().writeFile(indexPath, newIndexContent),
344
+ promises_default().writeFile(rspackConfigPath, cfg)
345
+ ]);
335
346
  return dir;
336
347
  };
337
348
  const installDependencies = async (cwd)=>{
338
349
  markInstallStart();
339
350
  try {
340
- await runCommand('pnpm i', {
351
+ await runCommand("pnpm i --ignore-scripts --prefer-offline --reporter=silent ", {
341
352
  cwd,
342
353
  env: {
343
- npm_config_registry: 'https://registry.npmjs.org/'
354
+ npm_config_registry: process.env.MF_NPM_REGISTRY || 'https://registry.npmjs.org/'
344
355
  }
345
356
  });
346
357
  } finally{
@@ -355,12 +366,13 @@ const buildProject = async (cwd, type)=>{
355
366
  cwd
356
367
  })));
357
368
  };
358
- const retrieveSharedFilepaths = (projectDir, type)=>{
369
+ const retrieveSharedFilepaths = async (projectDir, type)=>{
359
370
  const sharedFilepaths = [];
360
- const collectSharedFilepaths = (t)=>{
371
+ const collectSharedFilepaths = async (t)=>{
361
372
  const dir = 'full' === t ? 'full-shared' : 'dist';
362
373
  const distDir = external_node_path_default().join(projectDir, dir);
363
- const stats = JSON.parse(external_node_fs_default().readFileSync(external_node_path_default().join(distDir, STATS_NAME), 'utf-8'));
374
+ const statsContent = await promises_default().readFile(external_node_path_default().join(distDir, STATS_NAME), 'utf-8');
375
+ const stats = JSON.parse(statsContent);
364
376
  stats.shared.forEach((s)=>{
365
377
  const { name, version, fallback, fallbackName } = s;
366
378
  if (fallback && fallbackName) {
@@ -378,22 +390,31 @@ const retrieveSharedFilepaths = (projectDir, type)=>{
378
390
  }
379
391
  });
380
392
  };
381
- collectSharedFilepaths(type);
393
+ await collectSharedFilepaths(type);
382
394
  return sharedFilepaths;
383
395
  };
384
396
  const runBuild = async (normalizedConfig, excludeShared, type)=>{
385
- const tmpDir = prepareProject(normalizedConfig, excludeShared);
397
+ const tStart = Date.now();
398
+ const tmpDir = await prepareProject(normalizedConfig, excludeShared);
399
+ const tPrepare = Date.now();
400
+ logger_logger.info(`prepareProject took ${tPrepare - tStart}ms`);
386
401
  await installDependencies(tmpDir);
402
+ const tInstall = Date.now();
403
+ logger_logger.info(`installDependencies took ${tInstall - tPrepare}ms`);
387
404
  await buildProject(tmpDir, type);
388
- const sharedFilePaths = retrieveSharedFilepaths(tmpDir, type);
405
+ const tBuild = Date.now();
406
+ logger_logger.info(`buildProject took ${tBuild - tInstall}ms`);
407
+ const sharedFilePaths = await retrieveSharedFilepaths(tmpDir, type);
408
+ const tRetrieve = Date.now();
409
+ logger_logger.info(`retrieveSharedFilepaths took ${tRetrieve - tBuild}ms`);
389
410
  return {
390
411
  sharedFilePaths,
391
412
  dir: tmpDir
392
413
  };
393
414
  };
394
- function cleanUp(tmpDir) {
415
+ async function cleanUp(tmpDir) {
395
416
  if (!tmpDir) return;
396
- external_node_fs_default().rmSync(tmpDir, {
417
+ await promises_default().rm(tmpDir, {
397
418
  recursive: true,
398
419
  force: true
399
420
  });
@@ -407,7 +428,7 @@ const encodeName = function(name, prefix = '', withExt = false) {
407
428
  function retrieveGlobalName(mfName, sharedName, version) {
408
429
  return encodeName(`${mfName}_${sharedName}_${version}`);
409
430
  }
410
- const SERVER_VERSION = 'v0-011501';
431
+ const SERVER_VERSION = 'v0-0205';
411
432
  const UPLOADED_DIR = '_shared-tree-shaking';
412
433
  function createCacheHash(config, type) {
413
434
  const relevant = extractBuildConfig({
@@ -495,7 +516,7 @@ async function uploadToCacheStore(sharedFilePaths, normalizedConfig, store) {
495
516
  const jsonFilePath = filepath.replace(/\.js$/, '.json');
496
517
  const jsonFile = JSON.stringify(res);
497
518
  const jsonCdnUrl = cdnPath.replace(/\.js$/, '.json');
498
- external_node_fs_default().writeFileSync(jsonFilePath, jsonFile);
519
+ await promises_default().writeFile(jsonFilePath, jsonFile);
499
520
  await store.uploadFile(jsonFilePath, jsonCdnUrl);
500
521
  } catch (error) {
501
522
  logger_logger.error(`Failed to upload ${name}@${version} json file: ${error}`);
@@ -513,25 +534,26 @@ const downloadToFile = async (url, destPath)=>{
513
534
  const res = await fetch(url);
514
535
  if (!res.ok) throw new Error(`Download failed: ${res.status} ${res.statusText} - ${url}`);
515
536
  const buf = Buffer.from(await res.arrayBuffer());
516
- await external_node_fs_default().promises.mkdir(external_node_path_default().dirname(destPath), {
537
+ await promises_default().mkdir(external_node_path_default().dirname(destPath), {
517
538
  recursive: true
518
539
  });
519
- await external_node_fs_default().promises.writeFile(destPath, buf);
540
+ await promises_default().writeFile(destPath, buf);
520
541
  return destPath;
521
542
  };
522
- async function uploadProject(uploadResults, sharedFilePaths, normalizedConfig, publisher) {
523
- const tmpDir = createUniqueTempDirByKey(`upload-project${Date.now().toString()}`);
543
+ async function uploadProject(uploadResults, sharedFilePaths, normalizedConfig, publisher, store) {
544
+ const tmpDir = await createUniqueTempDirByKey(`upload-project${Date.now().toString()}`);
524
545
  const uploaded = [];
525
546
  try {
526
547
  for (const item of uploadResults)try {
527
- const config = normalizedConfig[normalizedKey(item.name, item.version)];
548
+ const sharedKey = normalizedKey(item.name, item.version);
549
+ const config = normalizedConfig[sharedKey];
528
550
  if (!config) {
529
551
  logger_logger.error(`No config found for ${item.name}`);
530
552
  continue;
531
553
  }
532
554
  const { uploadOptions } = config;
533
555
  if (!uploadOptions) throw new Error(`No uploadOptions found for ${item.name}`);
534
- const filename = external_node_path_default().basename(new URL(item.cdnUrl).pathname);
556
+ const filename = external_node_path_default().basename(new URL(item.cdnUrl, 'http://dummy.com').pathname);
535
557
  const localPath = external_node_path_default().join(tmpDir, filename);
536
558
  const hash = createCacheHash({
537
559
  ...config,
@@ -593,16 +615,20 @@ async function uploadProject(uploadResults, sharedFilePaths, normalizedConfig, p
593
615
  version: s.version,
594
616
  globalName: s.globalName,
595
617
  cdnUrl,
596
- type: s.type
618
+ type: s.type,
619
+ modules: s.modules,
620
+ canTreeShaking: s.canTreeShaking
597
621
  });
598
622
  } catch (error) {
599
623
  logger_logger.error(`Failed to upload ${s.name}@${s.version}: ${error}`);
600
624
  }
601
625
  return uploaded;
602
626
  } finally{
603
- external_node_fs_default().rmSync(tmpDir, {
627
+ promises_default().rm(tmpDir, {
604
628
  recursive: true,
605
629
  force: true
630
+ }).catch((err)=>{
631
+ logger_logger.error(`Failed to cleanup dir ${tmpDir}: ${err}`);
606
632
  });
607
633
  }
608
634
  }
@@ -611,14 +637,14 @@ async function upload(sharedFilePaths, uploadResults, normalizedConfig, uploadOp
611
637
  if (!uploadOptions) {
612
638
  const hydrated = await Promise.all(uploadResults.map(async (item)=>{
613
639
  if ('full' !== item.type) return item;
614
- const tmpDir = createUniqueTempDirByKey(`download-full-json${Date.now().toString()}`);
640
+ const tmpDir = await createUniqueTempDirByKey(`download-full-json${Date.now().toString()}`);
615
641
  const jsonPath = external_node_path_default().join(tmpDir, `${item.name}-${item.version}.json`);
616
642
  try {
617
643
  const tJson0 = Date.now();
618
644
  await downloadToFile(item.cdnUrl.replace('.js', '.json'), jsonPath);
619
645
  const tJson = Date.now() - tJson0;
620
646
  logger_logger.info(`Downloaded ${item.name}@${item.version} json in ${tJson}ms`);
621
- const jsonContent = JSON.parse(external_node_fs_default().readFileSync(jsonPath, 'utf8'));
647
+ const jsonContent = JSON.parse(await promises_default().readFile(jsonPath, 'utf8'));
622
648
  return {
623
649
  ...item,
624
650
  canTreeShaking: jsonContent.canTreeShaking,
@@ -631,7 +657,7 @@ async function upload(sharedFilePaths, uploadResults, normalizedConfig, uploadOp
631
657
  canTreeShaking: item.canTreeShaking ?? true
632
658
  };
633
659
  } finally{
634
- external_node_fs_default().rmSync(tmpDir, {
660
+ await promises_default().rm(tmpDir, {
635
661
  recursive: true,
636
662
  force: true
637
663
  });
@@ -643,9 +669,10 @@ async function upload(sharedFilePaths, uploadResults, normalizedConfig, uploadOp
643
669
  ];
644
670
  }
645
671
  if (!publisher) throw new Error('uploadOptions provided but no projectPublisher configured (configure the selected adapter to enable it or omit uploadOptions)');
646
- const projectUploadResults = await uploadProject(uploadResults, sharedFilePaths, normalizedConfig, publisher);
672
+ const projectUploadResults = await uploadProject(uploadResults, sharedFilePaths, normalizedConfig, publisher, store);
647
673
  return projectUploadResults;
648
674
  }
675
+ const buildLimit = external_p_limit_default()(Math.max(1, external_node_os_default().cpus().length));
649
676
  const buildRoute = new external_hono_namespaceObject.Hono();
650
677
  buildRoute.post('/', (0, zod_validator_namespaceObject.zValidator)('json', ConfigSchema), async (c)=>{
651
678
  const logger = c.get('logger');
@@ -658,16 +685,27 @@ buildRoute.post('/', (0, zod_validator_namespaceObject.zValidator)('json', Confi
658
685
  const store = c.get('objectStore');
659
686
  const publisher = c.get('projectPublisher');
660
687
  try {
688
+ const t0 = Date.now();
661
689
  const { cacheItems, excludeShared, restConfig } = await retrieveCacheItems(normalizedConfig, 're-shake', store);
690
+ const tRetrieveCache = Date.now();
691
+ logger.info(`retrieveCacheItems took ${tRetrieveCache - t0}ms`);
662
692
  let sharedFilePaths = [];
663
693
  let dir;
664
694
  if (Object.keys(restConfig).length > 0) {
665
- const buildResult = await runBuild(normalizedConfig, excludeShared, 're-shake');
695
+ const buildResult = await buildLimit(()=>runBuild(normalizedConfig, excludeShared, 're-shake'));
666
696
  sharedFilePaths = buildResult.sharedFilePaths;
667
697
  dir = buildResult.dir;
668
698
  }
699
+ const tBuild = Date.now();
700
+ logger.info(`runBuild took ${tBuild - tRetrieveCache}ms`);
669
701
  const uploadResults = await upload(sharedFilePaths, cacheItems, normalizedConfig, body.uploadOptions, store, publisher);
670
- cleanUp(dir);
702
+ const tUpload = Date.now();
703
+ logger.info(`upload took ${tUpload - tBuild}ms`);
704
+ cleanUp(dir).catch((err)=>{
705
+ logger.error(`Failed to cleanup dir ${dir}: ${err}`);
706
+ });
707
+ const tCleanUp = Date.now();
708
+ logger.info(`cleanUp scheduled (non-blocking) took ${tCleanUp - tUpload}ms`);
671
709
  return c.json({
672
710
  jobId,
673
711
  status: 'success',
@@ -705,16 +743,27 @@ async function handleCheckTreeshake(c, body) {
705
743
  const store = c.get('objectStore');
706
744
  const publisher = c.get('projectPublisher');
707
745
  try {
746
+ const t0 = Date.now();
708
747
  const { cacheItems, excludeShared, restConfig } = await retrieveCacheItems(normalizedConfig, 'full', store);
748
+ const tRetrieveCache = Date.now();
749
+ logger.info(`retrieveCacheItems took ${tRetrieveCache - t0}ms`);
709
750
  let sharedFilePaths = [];
710
751
  let dir;
711
752
  if (Object.keys(restConfig).length > 0) {
712
- const buildResult = await runBuild(normalizedConfig, excludeShared, 'full');
753
+ const buildResult = await buildLimit(()=>runBuild(normalizedConfig, excludeShared, 'full'));
713
754
  sharedFilePaths = buildResult.sharedFilePaths;
714
755
  dir = buildResult.dir;
715
756
  }
757
+ const tBuild = Date.now();
758
+ logger.info(`runBuild took ${tBuild - tRetrieveCache}ms`);
716
759
  const uploadResults = await upload(sharedFilePaths, cacheItems, normalizedConfig, body.uploadOptions, store, publisher);
717
- cleanUp(dir);
760
+ const tUpload = Date.now();
761
+ logger.info(`upload took ${tUpload - tBuild}ms`);
762
+ cleanUp(dir).catch((err)=>{
763
+ logger.error(`Failed to cleanup dir ${dir}: ${err}`);
764
+ });
765
+ const tCleanUp = Date.now();
766
+ logger.info(`cleanUp scheduled (non-blocking) took ${tCleanUp - tUpload}ms`);
718
767
  return c.json({
719
768
  jobId,
720
769
  status: 'success',
@@ -759,6 +808,8 @@ maintenanceRoute.post('/', async (c)=>{
759
808
  const routes = new external_hono_namespaceObject.Hono();
760
809
  routes.route('/build', buildRoute);
761
810
  routes.route('/clean-cache', maintenanceRoute);
811
+ const external_node_fs_namespaceObject = require("node:fs");
812
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
762
813
  function contentTypeByExt(filePath) {
763
814
  if (filePath.endsWith('.js')) return "application/javascript";
764
815
  if (filePath.endsWith('.json')) return 'application/json';
@@ -794,6 +845,7 @@ function createStaticRoute(opts) {
794
845
  staticRoute.get('/tree-shaking-shared/*', async (c)=>serveLocalFile(c, rootDir));
795
846
  return staticRoute;
796
847
  }
848
+ const timeout_namespaceObject = require("hono/timeout");
797
849
  function createApp(deps, opts) {
798
850
  var _opts_appExtensions, _opts_frontendAdapters;
799
851
  if (null == opts ? void 0 : opts.logger) setLogger(opts.logger);
@@ -815,6 +867,7 @@ function createApp(deps, opts) {
815
867
  }));
816
868
  app.use('*', loggerMiddleware);
817
869
  app.use('*', createDiMiddleware(deps));
870
+ app.use('*', (0, timeout_namespaceObject.timeout)(60000));
818
871
  if (null == opts ? void 0 : null == (_opts_appExtensions = opts.appExtensions) ? void 0 : _opts_appExtensions.length) for (const extend of opts.appExtensions)extend(app);
819
872
  app.get('/tree-shaking-shared/healthz', (c)=>c.json({
820
873
  status: 'ok',
@@ -835,7 +888,8 @@ function createServer(opts) {
835
888
  return (0, node_server_namespaceObject.serve)({
836
889
  fetch: opts.app.fetch,
837
890
  port,
838
- hostname
891
+ hostname,
892
+ overrideGlobalObjects: false
839
893
  });
840
894
  }
841
895
  async function createAdapterDeps(params) {
@@ -881,7 +935,8 @@ class LocalObjectStore {
881
935
  localObjectStore_define_property(this, "rootDir", void 0);
882
936
  localObjectStore_define_property(this, "publicBaseUrl", void 0);
883
937
  this.rootDir = (null == opts ? void 0 : opts.rootDir) ?? external_node_path_default().join(process.cwd(), 'log', 'static');
884
- const base = (null == opts ? void 0 : opts.publicBaseUrl) ?? '/';
938
+ const port = process.env.PORT || 3000;
939
+ const base = (null == opts ? void 0 : opts.publicBaseUrl) === '/' ? `http://localhost:${port}/` : (null == opts ? void 0 : opts.publicBaseUrl) ?? '/';
885
940
  this.publicBaseUrl = base.endsWith('/') ? base : `${base}/`;
886
941
  }
887
942
  }