UNPKG

@merkur/cli

Version:

Merkur is tiny and extensible library for creating front-end microservices.

2 lines (1 loc) 3.67 kB
"use strict";(()=>{function _(e){return typeof e=="function"}function R({name:e,version:r,createWidget:t}){let o=d();o.$in.widgetFactory[e+r]=t}function S(e={}){let r=d(),{name:t,version:o}=e,s=r.$in.widgetFactory[t+o];if(!_(s))throw new Error(`The widget with defined name and version "${t+o}" is not defined.`);return s(e)}function h({$plugins:e=[]}={}){let r=d();return e.forEach(t=>{t&&_(t.setup)&&t.setup(r)}),r}function d(){let e=C();return e.__merkur__||(e.__merkur__={$in:{widgets:[],widgetFactory:{}},$external:{},$dependencies:{},isRegistered:v,register:R,create:S}),e.__merkur__}function v(e){let r=d();return!!Object.keys(r.$in.widgetFactory).find(t=>new RegExp(`^${e}`).test(t))}function C(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}var p=class{#e=new Set;pipe(...e){return N(...e)(this)}next(...e){Array.from(this.#e).forEach(r=>{typeof r=="function"?r(...e):r.next(...e)})}error(...e){Array.from(this.#e).forEach(r=>{r?.error?.(...e),this.unsubscribe(r)})}complete(...e){Array.from(this.#e).forEach(r=>{r?.complete?.(...e),this.unsubscribe(r)})}subscribe(e){return this.#e.add(e),{unsubscribe:()=>{this.unsubscribe(e)}}}unsubscribe(e){this.#e.delete(e)}};function N(...e){return r=>Array.from(e).reduce((t,o)=>o(t),r)}var M=5,f=class extends p{#e=null;#r=0;#t={};constructor(r){super(),this.#t=r}init(){return this.#n(),this}send(r){return this.#e&&this.#e.send(r),this}destroy(){return this.#e&&(this.#e.close(),this.#e=null),this}#n(){this.#e=Reflect.construct(WebSocket,[`${this.#t.protocol}//${this.#t.host}`]),this.#e.onopen=()=>{this.#r=0},this.#e.onmessage=r=>{try{let t=JSON.parse(r.data);this.next(t)}catch(t){console.error(t)}},this.#e.onerror=r=>{console.error(r)},this.#e.onclose=()=>{this.#r>=M||(this.#r+=1,setTimeout(()=>{this.#n()},this.#r*500))}}};async function w({to:e,command:r}){e==="browser"&&r==="reload"&&location.reload()}async function k({to:e,command:r,changed:t}){if(e==="browser"&&r==="refresh"){if(await Promise.all(t.map(async s=>new Promise(a=>{let n=document.querySelector(`[data-merkur-asset-name="${s.name}"]`);if(!n||n.nodeName==="STYLE"){location.reload();return}let i=null,l=new URLSearchParams({version:Math.random()});if(n.nodeName==="LINK"){let c=new URL(n.href);i=n.cloneNode(),i.onload=()=>{n.remove(),a()},i.onerror=()=>{n.remove(),a()},i.href=new URL(`${c.origin}${c.pathname}?${l.toString()}`)}if(n.nodeName==="SCRIPT"){let c=new URL(n.src);i=document.createElement("script"),i.setAttribute("data-merkur-asset-name",s.name),i.onload=()=>{n.remove(),a()},i.onerror=()=>{n.remove(),a()},i.src=new URL(`${c.origin}${c.pathname}?${l.toString()}`)}n.parentNode.insertBefore(i,n.nextSibling)}))),!t.some(s=>s.name.endsWith(".js")))return;let o=window.__merkur_dev__.widgets;window.__merkur_dev__.widgets=[],o.forEach(async s=>{let{props:a,state:n,$external:i,name:l,version:c,containerSelector:$,container:y,slot:g}=s,E={props:a,state:n,$external:i,name:l,version:c,containerSelector:$,container:y,slot:g},x=await window.__merkur__.create(E);await s.unmount(),await x.mount()})}}var b=Symbol("MERKUR_CREATE_ORIGINAL"),{__merkur_dev__:u}=window,m=new f(u.merkurConfig.socketServer);u.webSocket=m;u.widgets=[];m.init();m.subscribe(w);m.subscribe(k);if(window?.__merkur__?.create){let e=window.__merkur__.create;window.__merkur__.create=async function(...t){let o=await e(...t);return u.widgets.push(o),o}}function O(){if(window?.__merkur__?.create&&!window.__merkur__.create[b]){let e=window.__merkur__.create;window.__merkur__.create=async function(...t){let o=await e(...t);return u.widgets.push(o),o},window.__merkur__.create[b]=e}}h();O();})();