UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 4.4 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isCfnTemplate=exports.createCFNTemplateValidation=exports.mergeTemplates=exports.isAwsTemplateOutput=void 0;const Errors_1=require("../../common/Errors"),type_validations_1=require("@altostra/type-validations"),primitives_1=require("@altostra/type-validations/lib/primitives"),common_1=require("./common"),IntrinsicFunctions_1=require("./IntrinsicFunctions"),LogicalId_1=require("./LogicalId"),TemplateParameter_1=require("./TemplateParameter");function mergeTemplates(e,...t){return t.reduce((function(i,a){var o,r,s,n,l,p,m,d,c,u,_;if(i.AWSTemplateFormatVersion!==a.AWSTemplateFormatVersion)throw Errors_1.AltoError.create("Cannot merge templates of different versions",{data:{allTemplates:[e,...t],compared:{temp1:i,temp2:a}}});if(i.Transform!==a.Transform)throw Errors_1.AltoError.create("Cannot merge templates of different transformations",{data:{allTemplates:[e,...t],compared:{temp1:i,temp2:a}}});if(void 0!==(null===(r=null===(o=i.Globals)||void 0===o?void 0:o.Function)||void 0===r?void 0:r.Timeout)&&void 0!==(null===(n=null===(s=a.Globals)||void 0===s?void 0:s.Function)||void 0===n?void 0:n.Timeout)&&i.Globals.Function.Timeout!==a.Globals.Function.Timeout)throw Errors_1.AltoError.create("Cannot merge templates with conflicting globals",{data:{allTemplates:[e,...t],compared:{temp1:i,temp2:a}}});return Object.assign(Object.assign(Object.assign(Object.assign({AWSTemplateFormatVersion:i.AWSTemplateFormatVersion,Transform:i.Transform,Description:(v=i.Description,y=a.Description,void 0===v?y:void 0===y?v:[v,y].join("\n"))},((null===(p=null===(l=i.Globals)||void 0===l?void 0:l.Function)||void 0===p?void 0:p.Timeout)||(null===(d=null===(m=a.Globals)||void 0===m?void 0:m.Function)||void 0===d?void 0:d.Timeout))&&{Globals:{Function:{Timeout:null!==(_=null===(u=null===(c=i.Globals)||void 0===c?void 0:c.Function)||void 0===u?void 0:u.Timeout)&&void 0!==_?_:a.Globals.Function.Timeout}}}),{Resources:f(i.Resources,a.Resources)}),(i.Parameters||a.Parameters)&&{Parameters:f(i.Parameters,a.Parameters)}),(i.Outputs||a.Outputs)&&{Outputs:f(i.Outputs,a.Outputs)});var v,y;function f(e,t){if(void 0===e)return Object.assign({},t);if(void 0===t)return Object.assign({},e);const i=new Set(Object.keys(t));if(Object.keys(e).some(e=>i.has(e)))throw Errors_1.AltoError.create("Cannot merge object with conflicting keys",{data:{obj1:e,obj2:t}});return Object.assign(Object.assign({},e),t)}}),e)}exports.isAwsTemplateOutput=(0,type_validations_1.objectOf)({Description:primitives_1.maybeString,Value:IntrinsicFunctions_1.isCloudFormationString,Export:(0,type_validations_1.maybe)((0,type_validations_1.objectOf)({Name:IntrinsicFunctions_1.isCloudFormationString}))}),exports.mergeTemplates=mergeTemplates;const mappingKeyRX=/^[a-z0-9._-]{1,255}$/i;function isMappingKey(e){return"string"==typeof e&&mappingKeyRX.test(e)}function createCFNTemplateValidation(e,t=primitives_1.string){return(0,type_validations_1.objectOf)({AWSTemplateFormatVersion:(0,type_validations_1.maybe)((0,type_validations_1.is)("2010-09-09")),Transform:(0,type_validations_1.maybe)((0,type_validations_1.singleOrArray)(t)),Description:primitives_1.maybeString,Globals:primitives_1.any,Resources:(0,type_validations_1.recordOf)({key:LogicalId_1.isLogicalId,value:e}),Parameters:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)({key:LogicalId_1.isLogicalId,value:TemplateParameter_1.isTemplateParameter})),Outputs:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)({key:LogicalId_1.isLogicalId,value:exports.isAwsTemplateOutput})),Conditions:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)(primitives_1.any)),Metadata:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)(primitives_1.any)),Mappings:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)({key:LogicalId_1.isLogicalId,value:(0,type_validations_1.recordOf)({key:isMappingKey,value:(0,type_validations_1.recordOf)({key:isMappingKey,value:(0,type_validations_1.anyOf)(primitives_1.string,primitives_1.number,primitives_1.boolean,(0,type_validations_1.arrayOf)(primitives_1.string),(0,type_validations_1.arrayOf)(primitives_1.number),(0,type_validations_1.arrayOf)(primitives_1.boolean))})})}))})}exports.createCFNTemplateValidation=createCFNTemplateValidation,exports.isCfnTemplate=createCFNTemplateValidation(common_1.isAnyAwsResource);