vanilla-native-federation
Version:
A lightweight **runtime micro frontend orchestrator** that loads micro frontends built with native federation into any web page. It can cache dependencies across page reloads, making it perfect for traditional server-rendered hosts (PHP, Java, Rails, etc.
2 lines (1 loc) • 1.36 kB
JavaScript
function d(r){let g=new Map,o=new Map,v=new Map,m=new Map,a=new Set,E=Math.ceil(r.maxEvents*r.removePercentage),f=async(e,n)=>{let i=typeof n=="function"?await n():n;g.set(e,i);let t=o.get(e);t&&(o.delete(e),t.forEach(s=>s(i)))},l=(e,n)=>{let i=g.get(e);if(i!==void 0)return n(i),()=>{};let t=o.get(e);return t||(t=new Set,o.set(e,t)),t.add(n),()=>{t.delete(n),t.size===0&&o.delete(e)}},N=(e,n)=>{let i=v.get(e),t=i?[...i]:null,s=m.get(e);return s||(s=new Set,m.set(e,s)),s.add(n),t&&t.length>0&&queueMicrotask(()=>{t.forEach(c=>n(c))}),()=>{s.delete(n),s.size===0&&m.delete(e)}},u=(e,n)=>{let i={data:n,timestamp:Date.now()};if(a.delete(e),a.add(e),a.size>r.maxStreams){let c=a.values().next().value;c&&(a.delete(c),v.delete(c))}let t=v.get(e)||[];t.push(i),t.length>r.maxEvents&&(t=t.slice(-(r.maxEvents-E))),v.set(e,t);let s=m.get(e);s&&s.size>0&&s.forEach(c=>c(i))},F=e=>{e?(v.delete(e),m.delete(e),g.delete(e),o.delete(e),a.delete(e)):(v.clear(),m.clear(),o.clear(),g.clear(),a.clear())};return()=>({register:f,onReady:l,emit:u,on:N,clear:F})}(function(){let r=document.currentScript,g={maxStreams:r?.dataset?.maxStreams?Number(r.dataset.maxStreams):50,maxEvents:r?.dataset?.maxEvents?Number(r.dataset.maxEvents):50,removePercentage:r?.dataset?.removePercentage?Number(r.dataset.removePercentage)/100:.5},o=d(g);window.__NF_REGISTRY__=Object.freeze(o())})();