@asimojs/asimo
Version:
Asynchronous dependency manager for Typescript projects
2 lines (1 loc) • 4.47 kB
JavaScript
(function(b,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(b=typeof globalThis<"u"?globalThis:b||self,I(b.asimo={}))})(this,function(b){"use strict";var I=function(l,S,u,m){function E(f){return f instanceof u?f:new u(function(d){d(f)})}return new(u||(u=Promise))(function(f,d){function j(h){try{v(m.next(h))}catch(_){d(_)}}function g(h){try{v(m.throw(h))}catch(_){d(_)}}function v(h){h.done?f(h.value):E(h.value).then(j,g)}v((m=m.apply(l,S||[])).next())})};function L(l){return{ns:l}}const F="service:",P="object:",x="group:",R=Promise.resolve(null),k="color: #669df6",J="color: #e39f00;font-weight:bold";let y=console,G=0;const $=Symbol("NOT_FOUND"),B=Promise.resolve($);function A(l){let S="",u=null;typeof l=="string"?S=l||`AsmContext${++G}`:(S=(l==null?void 0:l.name)||`AsmContext${++G}`,u=(l==null?void 0:l.parent)||null),S=S.replace(/\//g,"\\/");const m=`${(u==null?void 0:u.path)||""}/${S}`;let E=0;const f=new Map,d=new Map;let j=null;const g={get name(){return S},get parent(){return u},get path(){return m},get definitions(){var t;const e=[];for(const r of f.keys()){const n=r.split(":"),o={iid:(t=n[1])!==null&&t!==void 0?t:"",type:n[0]};o.type==="service"&&(o.loaded=d.has(r)),e.push(o)}return e},registerObject(t,e){M(t,null,"registerObject")&&(j||(j=new Map),j.set(t.ns,e))},registerService(t,e){M(t,e,"registerService")&&(f.set(F+t.ns,e),U(t.ns))},registerFactory(t,e){M(t,e,"registerFactory")&&(f.set(P+t.ns,e),U(t.ns))},registerGroup(t,e){const r=x+ ++E;if(typeof e!="function"){p(`[registerGroup] Invalid group loader: ${w(e)}`);return}const n=()=>{let o=d.get(r);return o||(o=N(e,g),d.set(r,o),o)};for(const o of t)M(o,null,"registerGroup")&&f.set(x+o.ns,n)},get(t,e,...r){const n=v(t);if(e==null||typeof e!="object"||!("ns"in e)||typeof e.ns!="string"){const o=h(n);if(o===$){if(e!==void 0)return e;p(`Object not found: ${w(n)}`,!0)}return o}else{const c=[n,v(e),...r.map(s=>v(s))],a=c.map(s=>h(s)),i=[];for(let s=0;a.length>s;s++)a[s]===$&&i.push(c[s]);return i.length&&(i.length===1?p(`Object not found: "${i[0]}"`,!0):p(`Objects not found: ["${i.join('", "')}"]`,!0)),a}},fetch(t,e,...r){return I(this,void 0,void 0,function*(){const n=v(t);if(e==null||typeof e!="object"||!("ns"in e)||typeof e.ns!="string"){const o=yield _(n,!0);if(o===$){if(e!==void 0)return e;p(`Interface not found: ${w(n)}`,!0)}return o}else{const c=[n,v(e),...r.map(s=>v(s))],a=yield Promise.all(c.map(s=>_(s,!0))),i=[];for(let s=0;a.length>s;s++)a[s]===$&&i.push(c[s]);return i.length&&(i.length===1?p(`Interface not found: "${i[0]}"`,!0):p(`Interfaces not found: ["${i.join('", "')}"]`,!0)),a}})},createChildContext(t){return A({name:t,parent:g})},get logger(){return y},set logger(t){y=t},logState(t){var e;const r=t||[],n=g.definitions;r.push(`Context ${g.path}${n.length===0?" [empty]":":"}`),r.push(...n.map(c=>`+ ${c.iid} [${c.type}]${o(c)}`)),(e=g.parent)===null||e===void 0||e.logState(r),t||y==null||y.log(r);function o(c){return c.type==="service"?c.loaded?": loaded":": not loaded":""}}};return g;function v(t){return typeof t=="string"?t:t.ns}function h(t){const e=j==null?void 0:j.get(t);return e!==void 0?e:u?u.get(t,$):$}function _(t){return I(this,arguments,void 0,function*(e,r=!0){const n=F+e,o=d.get(n);if(o!==void 0)return o;const c=f.get(n);if(c){let a=N(c,g),i;const s=new Promise(T=>{i=T});return a.then(T=>{T&&(typeof T=="object"||typeof T=="function")?(d.set(n,T),i(T)):(p(`Invalid factory output: "${e}"`),d.set(n,R),i($))}),d.set(n,s),s}else{const a=f.get(P+e);if(a)return N(a,g);if(r){const i=f.get(x+e);if(i)return N(i,g).then(()=>_(e,!1))}if(u)return u.fetch(e,$)}return B})}function M(t,e,r){return typeof t!="object"||typeof t.ns!="string"||t.ns===""?(p(`[${r}] Invalid interface id: ${w(t)}`),!1):e&&typeof e!="function"?(p(`[${r}] Invalid factory: ${w(e)}`),!1):!0}function w(t){let e=""+t;try{e=JSON.stringify(t)}catch{}return e}function U(t){f.delete(x+t)}function p(t,e=!1){if(y===console?console.log(`%cASM [${m}] %c${t}`,k,"color: ",J):y==null||y.log(`ASM [${m}] ${t}`),e)throw new Error(`ASM [${m}] ${t}`)}function N(t,e){return I(this,void 0,void 0,function*(){let r=null;try{r=yield t(e)}catch(n){r=null,p(`Instantiation error: ${(n==null?void 0:n.message)||n}`)}return r})}}let C;globalThis.asm?C=globalThis.asm:C=A("asm"),globalThis.asm=C;const V=C;b.asm=V,b.createContext=A,b.interfaceId=L,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});