UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 5.76 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isEntryPoint=exports.parseEntryPoint=exports.isSubnetIds=exports.isSecurityGroupIds=exports.isComputeFunction=exports.isEnvironment=exports.functionPolicyFromString=exports.isPolicyRef=exports.isFunctionVpcConfiguration=exports.MAX_SUPPORTED_CONCURRENCY=exports.MAX_FUNCTION_LAYERS_COUNT=void 0;const TemplateYamlExtensions_1=require("../../aws/CloudFormation/TemplateYamlExtensions"),Arn_1=require("../../aws/CustomTypes/Arn"),EnvironmentVariableName_1=require("../../aws/CustomTypes/EnvironmentVariableName"),IamRoleName_1=require("../../aws/CustomTypes/IamRoleName"),AwsSamTemplate_1=require("../../aws/SamTemplate/AwsSamTemplate"),IamPolicyDocument_1=require("../../aws/SamTemplate/IamPolicyDocument"),Path_1=require("../../common/CustomTypes/Path"),SecurityGroupId_1=require("../../common/CustomTypes/SecurityGroupId"),SubnetId_1=require("../../common/CustomTypes/SubnetId"),AltoError_1=require("../../common/Errors/AltoError"),StringParsing_1=require("../../common/StringParsing"),type_validations_1=require("@altostra/type-validations"),primitives_1=require("@altostra/type-validations/lib/primitives"),Common_1=require("./Common");exports.MAX_FUNCTION_LAYERS_COUNT=5,exports.MAX_SUPPORTED_CONCURRENCY=1e4,exports.isFunctionVpcConfiguration=(0,type_validations_1.objectOf)({securityGroupIds:isSecurityGroupIds,subnetIds:isSubnetIds}),exports.isPolicyRef=(0,type_validations_1.singleOrArray)((0,type_validations_1.anyOf)((0,AwsSamTemplate_1.isCloudFormationStringValidation)(Arn_1.isArn),(0,AwsSamTemplate_1.isCloudFormationStringValidation)(IamRoleName_1.isIamRoleName),IamPolicyDocument_1.isIamPolicyDocument)),exports.functionPolicyFromString=(0,StringParsing_1.createDataParser)(exports.isPolicyRef,i=>{if(/[^\s,\w\d-]/i.test(i))throw new Error("Invalid policies list");return i?i.split(",").map(i=>i.trim()):[]},TemplateYamlExtensions_1.parseCFNTemplate),exports.isEnvironment=(0,type_validations_1.objectOf)({variables:(0,type_validations_1.recordOf)({value:primitives_1.maybeString,key:EnvironmentVariableName_1.isEnvironmentVariableName})});const isImageConfig=(0,type_validations_1.objectOf)({workingDirectory:primitives_1.maybeString,commands:(0,type_validations_1.maybe)((0,type_validations_1.arrayOf)(primitives_1.string)),entryPoints:(0,type_validations_1.maybe)((0,type_validations_1.arrayOf)(primitives_1.string))}),isPackageType=(0,type_validations_1.enumOf)("image","zip"),isEndpointUrlConfiguration=(0,type_validations_1.objectOf)({enabled:primitives_1.boolean,authenticated:primitives_1.boolean}),baseValidation=Object.assign(Object.assign({},Common_1.resourceBaseValidators),{type:(0,type_validations_1.is)("resource.compute.function"),packageType:(0,type_validations_1.maybe)(isPackageType),entryPoint:primitives_1.maybeString,imageUri:primitives_1.maybeString,imageConfig:(0,type_validations_1.maybe)(isImageConfig),memory:primitives_1.number,timeout:primitives_1.number,runtime:primitives_1.maybeString,code:primitives_1.maybeString,layers:(0,type_validations_1.maybe)((0,type_validations_1.arrayOf)(Arn_1.isArn)),environment:(0,type_validations_1.maybe)(exports.isEnvironment),tags:(0,type_validations_1.maybe)((0,type_validations_1.recordOf)(primitives_1.string)),policies:(0,type_validations_1.maybe)((0,type_validations_1.singleOrArray)(exports.isPolicyRef)),reservedConcurrency:(0,type_validations_1.maybe)(isReservedConcurrency),provisionedConcurrency:(0,type_validations_1.maybe)(isReservedConcurrency),vpcConfig:(0,type_validations_1.maybe)(exports.isFunctionVpcConfiguration),trace:primitives_1.maybeBoolean,endpointUrl:(0,type_validations_1.maybe)(isEndpointUrlConfiguration)}),isZipComputeFunction=(0,type_validations_1.objectOf)(Object.assign(Object.assign({},baseValidation),{packageType:(0,type_validations_1.maybe)((0,type_validations_1.is)("zip")),entryPoint:primitives_1.string,runtime:primitives_1.string,snapStart:primitives_1.maybeBoolean})),isImageComputeFunction=(0,type_validations_1.objectOf)(Object.assign(Object.assign({},baseValidation),{packageType:(0,type_validations_1.is)("image"),imageUri:primitives_1.string,snapStart:(0,type_validations_1.maybe)((0,type_validations_1.is)(!1))}));exports.isComputeFunction=(0,type_validations_1.allOf)((0,type_validations_1.anyOf)(isZipComputeFunction,isImageComputeFunction),(function(i){const{reservedConcurrency:e,provisionedConcurrency:t}=i;return"number"!=typeof e||"number"!=typeof t||t<=e}));const MAX_RESERVED_CONCURRENCY=1e4;function isReservedConcurrency(i){return"number"==typeof i&&Number.isInteger(i)&&i>=0&&i<=1e4}const MAX_SECURITY_GROUPS=5,isArrayOfSecurityGroupId=(0,type_validations_1.arrayOf)(SecurityGroupId_1.isSecurityGroupId);function isSecurityGroupIds(i){return isArrayOfSecurityGroupId(i)&&i.length<=5}exports.isSecurityGroupIds=isSecurityGroupIds;const MAX_SUBNET_IDS=16,isArrayOfSubnetId=(0,type_validations_1.arrayOf)(SubnetId_1.isSubnetId);function isSubnetIds(i){return isArrayOfSubnetId(i)&&i.length<=16}exports.isSubnetIds=isSubnetIds;const entryPointRX=/^(?:(?:(?<path>[^\0?:*"']+)\/)?(?<fileName>[^/\0?:*"']+)\.)?(?<handler>\S+)$/;function parseEntryPoint(i){if(!i)throw AltoError_1.AltoError.create("Entry point cannot be empty");const e=entryPointRX.exec(i);if(!e)throw AltoError_1.AltoError.create("Invalid entry point",{data:{entryPoint:i}});const{path:t,fileName:r,handler:n}=e.groups;if("string"==typeof t&&!(0,Path_1.isPath)(t))throw AltoError_1.AltoError.create("Entry point has an invalid path",{data:{entryPoint:i,path:t}});return{path:t,fileName:r,handler:n}}function isEntryPoint(i){if("string"!=typeof i)return!1;try{return parseEntryPoint(i),!0}catch(i){return!1}}exports.parseEntryPoint=parseEntryPoint,exports.isEntryPoint=isEntryPoint;