UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 3.44 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assertResourceType=exports.ofResourceType=exports.ResourceCollection=void 0;const AltoError_1=require("../../common/Errors/AltoError"),concat_1=require("@reactivex/ix-es2015-cjs/iterable/concat"),from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),BlueprintError_1=require("../Blueprint/BlueprintError"),Resources_1=require("../Resources"),Collection_1=require("./Collection"),ParametersHelper_1=require("./ParametersHelper"),ResourceHelper_1=require("./ResourceHelper");class ResourceCollection extends Collection_1.Collection{constructor(e,r,t){super(e,s=>new ResourceHelper_1.ResourceHelper(t,e,r,s)),this._blueprint=t}has(e){return e in this._blueprint.blueprint.resources}*[Symbol.iterator](){for(const e of Object.values(this._blueprint.blueprint.resources))e&&(yield this._getWrapper(e))}addByType(e,r,t){return this.add(Object.assign(Object.assign({},r),{type:e}),t)}add(e,r){if((0,Resources_1.isResource)(e)&&this._blueprint.blueprint.resources[e.id])throw new BlueprintError_1.BlueprintError("Resource already exists");const t=this._initCreatedId(e);this._blueprint.blueprint.resources[t.id]=t;const s=this._getWrapper(t);return s.position=r,s}addParameterizedResourceByType(e,r,t){return this.addParameterizedResource(Object.assign(Object.assign({},r),{type:e}),t)}addParameterizedResource(e,r){if((0,Resources_1.isResource)(e)&&this._blueprint.blueprint.resources[e.id])throw new BlueprintError_1.BlueprintError("Resource already exists");const t=this._initCreatedId(e);let s;if(this._blueprint.parameters.setParametersFrom({root:ParametersHelper_1.ParametersHelper.resourcesRoot.append(t.id),parameterized:t,valueSetter:e=>(s=this.add(e,r),s)}),!s)throw AltoError_1.AltoError.create("Resource helper was not created for parameterized resource.",{data:{args:[...arguments]}});return s}delete(e){if(!e)return;e.position=void 0;const r=[...(0,concat_1.concat)(e.incomingConnections,e.outgoingConnections)];for(const e of r)this._blueprint.connections.delete(e);delete this._blueprint.blueprint.resources[e.id],this._blueprint.parameters.deleteAllFromPath(e.rootPath)}_initCreatedId(e){return(0,Resources_1.isResourceTemplate)(e)?Object.assign(Object.assign({},e),{id:this._blueprint.idsManager.getIdFromName(e.name,e.type)}):e}deleteAll(){var e;for(const e of Object.keys(this._blueprint.blueprint.resources))delete this._blueprint.blueprint.resources[e];this._blueprint.connections.deleteAll(),this._blueprint.parameters.deleteAllFromPath("resources"),(null===(e=this._blueprint.blueprint.metadata)||void 0===e?void 0:e.designer)&&(this._blueprint.blueprint.metadata.designer.resourcePositions={})}get(e){const r=this._blueprint.blueprint.resources[e];if(!r)return;return this._getWrapper(r)}ofType(...e){return this.pipe(ofResourceType(...e))}assertType(...e){return this.pipe(assertResourceType(...e))}}function ofResourceType(...e){return function(r){return(0,from_1.from)({*[Symbol.iterator](){for(const t of r)t.is(...e)&&(yield t)}})}}function assertResourceType(...e){const r=new Set(e);return function(t){return(0,from_1.from)({*[Symbol.iterator](){for(const s of t){if(!r.has(s.type))throw AltoError_1.AltoError.create({message:"Resource is of invalid type",data:{resource:s,validTypes:e}});yield s}}})}}exports.ResourceCollection=ResourceCollection,exports.ofResourceType=ofResourceType,exports.assertResourceType=assertResourceType;