UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 2.7 kB
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,r,a){return new(r||(r=Promise))((function(o,i){function p(e){try{n(a.next(e))}catch(e){i(e)}}function s(e){try{n(a.throw(e))}catch(e){i(e)}}function n(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(p,s)}n((a=a.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TemplatesManager=void 0;const AltoError_1=require("../../common/Errors/AltoError"),Iterable_1=require("../../common/Iterable"),from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),filter_1=require("@reactivex/ix-es2015-cjs/iterable/operators/filter"),flatmap_1=require("@reactivex/ix-es2015-cjs/iterable/operators/flatmap"),map_1=require("@reactivex/ix-es2015-cjs/iterable/operators/map"),Template_1=require("./Template"),providersByManager=new WeakMap;class TemplatesManager{constructor(){this.emptyProjectTemplate=TemplatesManager.emptyProjectTemplate,providersByManager.set(this,{})}get providerTypes(){return Object.keys(getProviders(this))}getProvider(e){const t=getProviders(this)[e];if(!t)throw AltoError_1.AltoError.create({message:`No template provider of type [${e}] is registered with this templates manager.`});return t}list(e=!1){return __awaiter(this,void 0,void 0,(function*(){const t=(0,from_1.from)(Object.entries(getProviders(this))).pipe((0,filter_1.filter)(([,e])=>!!e),(0,map_1.map)(([e,t])=>__awaiter(this,void 0,void 0,(function*(){return{type:e,templates:yield t.list()}}))));let r=(0,from_1.from)(yield Promise.all(t)).pipe((0,flatmap_1.flatMap)(({type:e,templates:t})=>t.map(t=>({name:t,type:e}))));return e&&(r=r.pipe((0,Iterable_1.prepend)({type:this.emptyProjectTemplate.type,name:this.emptyProjectTemplate.name}))),[...r]}))}registerProvider(e){const t=getProviders(this);if(t[e.type])throw new AltoError_1.AltoError(`Provider of type [${e.type}] already registered.`);t[e.type]=e}get(e,t){return __awaiter(this,arguments,void 0,(function*(){let r;if("string"==typeof e&&"string"==typeof t)r=e;else{if(void 0!==t||!e||"object"!=typeof e&&"function"!=typeof e)throw AltoError_1.AltoError.create({message:"Invalid arguments to get template",data:{arguments:arguments}});({type:r,name:t}=e)}if(r===this.emptyProjectTemplate.type&&t===this.emptyProjectTemplate.name)return this.emptyProjectTemplate;const a=this.getProvider(r);if(!a)throw AltoError_1.AltoError.create({message:`No template provider is registered for type [${r}]`,data:{type:r,name:t}});return yield a.get(t)}))}}function getProviders(e){return providersByManager.get(e)}exports.TemplatesManager=TemplatesManager,TemplatesManager.emptyProjectTemplate=new Template_1.EmptyTemplate("empty-project");