UNPKG

somod-schema

Version:

Schema to validate yaml files in somod modules

1,776 lines 44.9 kB
{ "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://somod.json-schema.sodaru.com/serverless-template/index.json", "title": "JSON Schema for Serverless Template in SOMOD", "definitions": { "somodAjvCompile": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::AjvCompile" ], "properties": { "SOMOD::AjvCompile": { "anyOf": [ { "$ref": "http://json-schema.org/draft-07/schema" }, { "$ref": "#/definitions/somodFunctions" } ] } } }, "somodAnd": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::And" ], "properties": { "SOMOD::And": { "type": "array", "items": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/somodFunctions" } ] }, "minItems": 1 } } }, "somodEquals": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Equals" ], "properties": { "SOMOD::Equals": { "type": "array", "items": { "anyOf": [ true, { "$ref": "#/definitions/somodFunctions" } ] }, "minItems": 2, "maxItems": 2 } } }, "somodFunctions": { "if": { "type": "object", "propertyNames": { "enum": [ "SOMOD::AjvCompile", "SOMOD::And", "SOMOD::Or", "SOMOD::Equals", "SOMOD::If", "SOMOD::JsonParse", "SOMOD::JsonStringify", "SOMOD::Key", "SOMOD::Parameter" ] } }, "then": { "oneOf": [ { "$ref": "#/definitions/somodAjvCompile" }, { "$ref": "#/definitions/somodAnd" }, { "$ref": "#/definitions/somodOr" }, { "$ref": "#/definitions/somodEquals" }, { "$ref": "#/definitions/somodIf" }, { "$ref": "#/definitions/somodJsonParse" }, { "$ref": "#/definitions/somodJsonStringify" }, { "$ref": "#/definitions/somodKey" }, { "$ref": "#/definitions/somodParameter" } ] }, "else": true }, "somodIf": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::If" ], "properties": { "SOMOD::If": { "type": "array", "additionalItems": { "anyOf": [ true, { "$ref": "#/definitions/somodFunctions" } ] }, "items": [ { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/somodFunctions" } ] } ], "minItems": 2, "maxItems": 3 } } }, "somodJsonParse": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::JsonParse" ], "properties": { "SOMOD::JsonParse": { "anyOf": [ { "type": "string" }, { "$ref": "#/definitions/somodFunctions" } ] } } }, "somodJsonStringify": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::JsonStringify" ], "properties": { "SOMOD::JsonStringify": { "anyOf": [ true, { "$ref": "#/definitions/somodFunctions" } ] } } }, "somodKey": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Key" ], "properties": { "SOMOD::Key": { "type": "array", "additionalItems": false, "items": [ { "anyOf": [ { "type": "object" }, { "type": "array" }, { "$ref": "#/definitions/somodFunctions" } ] }, { "anyOf": [ { "type": "string" }, { "type": "number" }, { "$ref": "#/definitions/somodFunctions" } ] } ], "minItems": 2, "maxItems": 2 } } }, "somodOr": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Or" ], "properties": { "SOMOD::Or": { "type": "array", "items": { "anyOf": [ { "type": "boolean" }, { "$ref": "#/definitions/somodFunctions" } ] }, "minItems": 1 } } }, "somodParameter": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Parameter" ], "properties": { "SOMOD::Parameter": { "type": "string", "description": "Must refer the parameter available for this module" } } }, "arrayLike": { "oneOf": [ { "$ref": "#/definitions/samCidr" }, { "$ref": "#/definitions/samGetAZs" }, { "$ref": "#/definitions/samSplit" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodParameter" }, { "$ref": "#/definitions/somodIf" }, { "$ref": "#/definitions/somodJsonParse" }, { "$ref": "#/definitions/somodKey" } ] }, "booleanLike": { "oneOf": [ { "$ref": "#/definitions/samBoolean" }, { "$ref": "#/definitions/samAnd" }, { "$ref": "#/definitions/samOr" }, { "$ref": "#/definitions/samEquals" }, { "$ref": "#/definitions/samNot" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodParameter" }, { "$ref": "#/definitions/somodAnd" }, { "$ref": "#/definitions/somodOr" }, { "$ref": "#/definitions/somodEquals" }, { "$ref": "#/definitions/somodIf" }, { "$ref": "#/definitions/somodKey" } ] }, "numberLike": { "oneOf": [ { "$ref": "#/definitions/samNumber" }, { "$ref": "#/definitions/samSelect" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodParameter" }, { "$ref": "#/definitions/somodIf" }, { "$ref": "#/definitions/somodKey" } ] }, "samAnd": { "type": "object", "additionalProperties": false, "properties": { "Fn::And": { "type": "array", "items": { "$ref": "#/definitions/booleanLike" }, "minItems": 1, "maxItems": 10 } } }, "samBase64": { "type": "object", "additionalProperties": false, "properties": { "Fn::Base64": { "$ref": "#/definitions/stringLike" } } }, "samBoolean": { "type": "boolean" }, "samCidr": { "type": "object", "additionalProperties": false, "properties": { "Fn::Cidr": { "type": "array", "items": [ { "$ref": "#/definitions/stringLike", "description": "ipBlock" }, { "$ref": "#/definitions/numberLike", "description": "count" }, { "$ref": "#/definitions/numberLike", "description": "cidrBits" } ], "minItems": 3, "maxItems": 3, "additionalItems": false } } }, "samEquals": { "type": "object", "additionalProperties": false, "properties": { "Fn::Equals": { "type": "array", "items": [ { "anyOf": [ { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/numberLike" }, { "$ref": "#/definitions/booleanLike" }, { "$ref": "#/definitions/arrayLike" } ] }, { "anyOf": [ { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/numberLike" }, { "$ref": "#/definitions/booleanLike" }, { "$ref": "#/definitions/arrayLike" } ] } ], "maxItems": 2, "minItems": 2, "additionalItems": false } } }, "samFindInMap": { "type": "object", "additionalProperties": false, "properties": { "Fn::FindInMap": { "type": "array", "items": [ { "$ref": "#/definitions/samString" }, { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/stringLike" } ], "minItems": 3, "maxItems": 3, "additionalItems": false } } }, "samGetAZs": { "type": "object", "additionalProperties": false, "properties": { "Fn::GetAZs": { "anyOf": [ { "$ref": "#/definitions/samString" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodFunctions" } ] } } }, "samIf": { "type": "object", "additionalProperties": false, "properties": { "Fn::If": { "type": "array", "items": [ { "$ref": "#/definitions/samString" }, { "anyOf": [ { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/numberLike" }, { "$ref": "#/definitions/booleanLike" }, { "$ref": "#/definitions/arrayLike" } ] }, { "anyOf": [ { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/numberLike" }, { "$ref": "#/definitions/booleanLike" }, { "$ref": "#/definitions/arrayLike" } ] } ], "maxItems": 3, "minItems": 3, "additionalItems": false } } }, "samJoin": { "type": "object", "additionalProperties": false, "properties": { "Fn::Join": { "type": "array", "items": [ { "$ref": "#/definitions/samString" }, { "anyOf": [ { "type": "array", "items": { "anyOf": [ { "$ref": "#/definitions/stringLike" }, { "$ref": "#/definitions/numberLike" } ] }, "minItems": 1 }, { "$ref": "#/definitions/samGetAZs" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samSplit" }, { "$ref": "#/definitions/samSelect" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodFunctions" } ] } ], "minItems": 2, "maxItems": 2, "additionalItems": false } } }, "samNot": { "type": "object", "additionalProperties": false, "properties": { "Fn::Not": { "type": "array", "items": [ { "$ref": "#/definitions/booleanLike" } ], "maxItems": 1, "minItems": 1, "additionalItems": false } } }, "samNumber": { "type": "number" }, "samOr": { "type": "object", "additionalProperties": false, "properties": { "Fn::Or": { "type": "array", "items": { "$ref": "#/definitions/booleanLike" }, "minItems": 1, "maxItems": 10 } } }, "samRef": { "type": "object", "additionalProperties": false, "properties": { "Ref": { "enum": [ "AWS::AccountId", "AWS::NotificationARNs", "AWS::NoValue", "AWS::Partition", "AWS::Region", "AWS::StackId", "AWS::StackName", "AWS::URLSuffix" ] } } }, "samSelect": { "type": "object", "additionalProperties": false, "properties": { "Fn::Select": { "type": "array", "items": [ { "anyOf": [ { "$ref": "#/definitions/samNumber" }, { "$ref": "#/definitions/somodFunctions" }, { "$ref": "#/definitions/samFindInMap" } ] }, { "anyOf": [ { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samGetAZs" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samSplit" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodFunctions" } ] } ], "minItems": 2, "maxItems": 2, "additionalItems": false } } }, "samSplit": { "type": "object", "additionalProperties": false, "properties": { "Fn::Split": { "type": "array", "items": [ { "$ref": "#/definitions/samString" }, { "anyOf": [ { "$ref": "#/definitions/samString" }, { "$ref": "#/definitions/samBase64" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samGetAZs" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samJoin" }, { "$ref": "#/definitions/samSelect" }, { "$ref": "#/definitions/samSub" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodFunctions" }, { "$ref": "#/definitions/somodModuleName" } ] } ], "minItems": 2, "maxItems": 2, "additionalItems": false } } }, "samString": { "type": "string" }, "samSub": { "type": "object", "additionalProperties": false, "properties": { "Fn::Sub": { "oneOf": [ { "type": "string", "maxLength": 1024 }, { "type": "array", "items": [ { "$ref": "#/definitions/samString" }, { "type": "object", "additionalProperties": false, "patternProperties": { "^[a-zA-Z0-9]+$": { "anyOf": [ { "$ref": "#/definitions/samString" }, { "$ref": "#/definitions/samBase64" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samGetAZs" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samJoin" }, { "$ref": "#/definitions/samSelect" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodFunctions" } ] } } } ], "minItems": 2, "maxItems": 2, "additionalItems": false } ] } } }, "stringLike": { "oneOf": [ { "$ref": "#/definitions/samString" }, { "$ref": "#/definitions/samBase64" }, { "$ref": "#/definitions/samIf" }, { "$ref": "#/definitions/samFindInMap" }, { "$ref": "#/definitions/samJoin" }, { "$ref": "#/definitions/samSelect" }, { "$ref": "#/definitions/samSub" }, { "$ref": "#/definitions/samRef" }, { "$ref": "#/definitions/somodRef" }, { "$ref": "#/definitions/somodParameter" }, { "$ref": "#/definitions/somodModuleName" }, { "$ref": "#/definitions/somodAjvCompile" }, { "$ref": "#/definitions/somodIf" }, { "$ref": "#/definitions/somodJsonStringify" }, { "$ref": "#/definitions/somodKey" } ] }, "somodAccess": { "type": "object", "properties": { "SOMOD::Access": { "enum": [ "module", "scope", "public" ] } } }, "somodCreateIf": { "type": "object", "properties": { "SOMOD::CreateIf": { "$ref": "#/definitions/booleanLike" } } }, "somodDependsOn": { "type": "object", "properties": { "SOMOD::DependsOn": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "resource" ], "properties": { "module": { "$ref": "#/definitions/somodModuleNamePattern" }, "resource": { "$ref": "#/definitions/somodResourceLogicalIdPattern" } } }, "minItems": 1, "maxItems": 20 } } }, "somodExtend": { "type": "object", "properties": { "SOMOD::Extend": { "type": "object", "additionalProperties": false, "required": [ "module", "resource" ], "properties": { "module": { "$ref": "#/definitions/somodModuleNamePattern" }, "resource": { "$ref": "#/definitions/somodResourceLogicalIdPattern" }, "rules": { "type": "object", "additionalProperties": { "enum": [ "REPLACE", "COMBINE", "APPEND", "PREPEND" ] } } } } } }, "somodModuleName": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::ModuleName" ], "properties": { "SOMOD::ModuleName": { "const": true } } }, "somodModuleNamePattern": { "type": "string", "pattern": "^(@[a-z0-9-]+\\/)?[a-z0-9-]+$", "maxLength": 128 }, "somodOutput": { "type": "object", "properties": { "SOMOD::Output": { "type": "object", "additionalProperties": false, "properties": { "default": { "type": "boolean" }, "attributes": { "type": "array", "items": { "type": "string", "pattern": "^[a-zA-Z0-9]+$" } } } } } }, "somodRef": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Ref" ], "properties": { "SOMOD::Ref": { "type": "object", "additionalProperties": false, "required": [ "resource" ], "properties": { "resource": { "$ref": "#/definitions/somodResourceLogicalIdPattern" }, "module": { "$ref": "#/definitions/somodModuleNamePattern" }, "attribute": { "type": "string", "pattern": "^[a-zA-Z0-9]+$" } } } } }, "somodResourceLogicalIdPattern": { "type": "string", "pattern": "^[a-zA-Z0-9]{1,64}$" }, "somodResourceName": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::ResourceName" ], "properties": { "SOMOD::ResourceName": { "type": "string", "pattern": "^[a-zA-Z]+[a-zA-Z0-9]*$", "maxLength": 64 } } }, "allResource": { "allOf": [ { "type": "object", "required": [ "Type", "Properties" ], "properties": { "Type": { "type": "string" }, "Properties": { "type": "object" } } }, { "$ref": "#/definitions/somodExtend" }, { "$ref": "#/definitions/somodAccess" }, { "$ref": "#/definitions/somodDependsOn" }, { "$ref": "#/definitions/somodOutput" }, { "$ref": "#/definitions/somodCreateIf" }, { "if": { "type": "object", "required": [ "SOMOD::Extend" ] }, "then": { "type": "object", "propertyNames": { "not": { "enum": [ "SOMOD::Access", "SOMOD::DependsOn", "SOMOD::Output", "SOMOD::CreateIf" ] }, "errorMessage": "Extended Resource can not have Access, DependsOn, Output or CreateIf keywords" } }, "errorMessage": { "if": "Extended Resource can not have Access, DependsOn, Output or CreateIf keywords" } } ] }, "customResource": { "type": "object", "required": [ "Type", "Properties" ], "anyOf": [ { "type": "object", "required": [ "SOMOD::Extend" ] }, { "type": "object", "properties": { "Properties": { "type": "object", "required": [ "ServiceToken" ] } } } ], "errorMessage": { "anyOf": "When not extended, Properties must have ServiceToken" }, "properties": { "Type": { "type": "string", "pattern": "^Custom::[A-Z][a-zA-Z0-9]{0,63}$" }, "Properties": { "type": "object", "properties": { "ServiceToken": { "$ref": "#/definitions/somodRef" } } } } }, "functionTypes": { "anyOf": [ { "enum": [ "S3", "SNS", "Kinesis", "DynamoDB", "SQS", "Api", "Schedule", "EventBridgeRule", "CloudWatchLogs", "IoTRule", "AlexaSkill", "Cognito", "HttpApi", "MSK", "MQ", "SelfManagedKafka", "CFNCustomResource" ] }, { "type": "string", "minLength": 1, "maxLength": 32, "pattern": "^[a-zA-Z0-9]*$" } ] }, "functionApiEvent": { "type": "object", "additionalProperties": false, "required": [ "Type", "Properties" ], "properties": { "Type": { "const": "Api" }, "Properties": { "type": "object", "required": [ "Method", "Path", "RestApiId" ], "properties": { "Method": { "anyOf": [ { "enum": [ "GET", "POST", "PUT", "DELETE", "ANY" ] }, { "type": "string", "pattern": "^[A-Z]+$" } ] }, "Path": { "type": "string" }, "RestApiId": { "$ref": "#/definitions/somodRef" } } } } }, "functionHttpApiEvent": { "type": "object", "additionalProperties": false, "required": [ "Type", "Properties" ], "properties": { "Type": { "const": "HttpApi" }, "Properties": { "type": "object", "required": [ "Method", "Path", "ApiId" ], "properties": { "Method": { "anyOf": [ { "enum": [ "GET", "POST", "PUT", "DELETE", "ANY" ] }, { "type": "string", "pattern": "^[A-Z]+$" } ] }, "Path": { "type": "string" }, "ApiId": { "$ref": "#/definitions/somodRef" } } } } }, "functionEvent": { "type": "object", "additionalProperties": false, "required": [ "Type", "Properties" ], "properties": { "Type": { "$ref": "#/definitions/functionTypes" }, "Properties": { "type": "object" } } }, "functionEventSource": { "allOf": [ { "$ref": "#/definitions/functionEvent" }, { "if": { "type": "object", "properties": { "Type": { "const": "HttpApi" } } }, "then": { "$ref": "#/definitions/functionHttpApiEvent" } }, { "if": { "type": "object", "properties": { "Type": { "const": "Api" } } }, "then": { "$ref": "#/definitions/functionApiEvent" } } ] }, "functionResource": { "title": "JSON Schema for Function Resource in Serverless Template of SOMOD", "type": "object", "required": [ "Type", "Properties" ], "anyOf": [ { "type": "object", "required": [ "SOMOD::Extend" ] }, { "type": "object", "properties": { "Properties": { "type": "object", "oneOf": [ { "required": [ "CodeUri" ] }, { "required": [ "InlineCode" ] } ], "properties": { "CodeUri": { "type": "object", "properties": { "SOMOD::Function": { "type": "object", "required": [ "type", "name" ] } } } } } } } ], "errorMessage": { "anyOf": "When not extended, Properties must have either CodeUri or InlineCode" }, "properties": { "Type": { "const": "AWS::Serverless::Function" }, "Properties": { "type": "object", "properties": { "CodeUri": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::Function" ], "properties": { "SOMOD::Function": { "type": "object", "additionalProperties": false, "properties": { "type": { "$ref": "#/definitions/functionTypes" }, "name": { "type": "string", "description": "The name of the function, this is the file name of es module under 'serverless/functions' directory (without file extension)", "pattern": "^[a-zA-Z]+[a-zA-Z0-9]*$" }, "customResources": { "type": "object", "description": "Define the Schema for the custom resources handled by this function. Schema is indexed by Custom Resource Type with `Custom::` removed. Schema no need to define `ServiceToken` Property", "additionalProperties": false, "maxProperties": 25, "patternProperties": { "^[A-Z][a-zA-Z0-9]{0,63}$": { "$ref": "http://json-schema.org/draft-07/schema" } } }, "middlewares": { "type": "array", "description": "Middlewares to be added to this function. Middlewares are applied in the order specified in this Property", "minItems": 1, "maxItems": 16, "items": { "type": "object", "additionalProperties": false, "required": [ "resource" ], "properties": { "resource": { "$ref": "#/definitions/somodResourceLogicalIdPattern" }, "module": { "$ref": "#/definitions/somodModuleNamePattern" } } } } } } } }, "InlineCode": { "type": "string" }, "Layers": { "type": "array", "description": "Layers attached to the funtion, If a layer are refered using SOMOD::Ref, the npm packages in the layer are excluded from the function bundle", "items": { "$ref": "#/definitions/stringLike" }, "maxItems": 5, "uniqueItems": true }, "Events": { "type": "object", "additionalProperties": false, "patternProperties": { "^[a-zA-Z0-9]+$": { "$ref": "#/definitions/functionEventSource" } } } } } } }, "functionLayerResource": { "type": "object", "required": [ "Type", "Properties" ], "anyOf": [ { "type": "object", "required": [ "SOMOD::Extend" ] }, { "type": "object", "properties": { "Properties": { "type": "object", "required": [ "RetentionPolicy", "ContentUri" ], "properties": { "ContentUri": { "type": "object", "properties": { "SOMOD::FunctionLayer": { "type": "object", "required": [ "name" ], "anyOf": [ { "type": "object", "required": [ "libraries" ] }, { "type": "object", "required": [ "content" ] } ] } } } } } } } ], "errorMessage": { "anyOf": "When not extended, Properties must have RetentionPolicy and ContentUri" }, "properties": { "Type": { "const": "AWS::Serverless::LayerVersion" }, "Properties": { "type": "object", "properties": { "RetentionPolicy": { "const": "Delete" }, "ContentUri": { "type": "object", "additionalProperties": false, "required": [ "SOMOD::FunctionLayer" ], "properties": { "SOMOD::FunctionLayer": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "description": "The name of the function layer", "pattern": "^[a-zA-Z]+[a-zA-Z0-9]*$" }, "libraries": { "type": "array", "description": "All dependent libraries to be installed in the layer", "items": { "type": "string", "pattern": "^(@[a-z0-9\\-]+\\/){0,1}[a-z0-9\\-]+$" }, "minItems": 1, "maxItems": 32 }, "content": { "type": "object", "description": "The Layer Content, map of file-path to file-content", "additionalProperties": false, "patternProperties": { ".*": { "$ref": "#/definitions/stringLike" } }, "minProperties": 1, "maxProperties": 32 }, "allowedTypes": { "type": "array", "description": "Type of the funtion to which this layer can be applied to. If not specified or left empty, the layer is allowed for all type of functions", "items": { "$ref": "#/definitions/functionTypes" } } } } } } } } } }, "functionMiddlewareResource": { "type": "object", "required": [ "Type", "Properties" ], "anyOf": [ { "type": "object", "required": [ "SOMOD::Extend" ] }, { "type": "object", "properties": { "Properties": { "type": "object", "required": [ "CodeUri" ], "properties": { "CodeUri": { "type": "object", "properties": { "SOMOD::FunctionMiddleware": { "type": "object", "required": [ "name" ] } } } } } } } ], "errorMessage": { "anyOf": "When not extended, Properties must have CodeUri" }, "properties": { "Type": { "const": "SOMOD::Serverless::FunctionMiddleware" }, "Properties": { "type": "object", "properties": { "CodeUri": { "type": "object", "required": [ "SOMOD::FunctionMiddleware" ], "additionalProperties": false, "properties": { "SOMOD::FunctionMiddleware": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the function middleware, this is the file name of es module under 'serverless/functions/middlewares' directory (without file extension)", "pattern": "^[a-zA-Z]+[a-zA-Z0-9]*$" }, "allowedTypes": { "type": "array", "description": "Type of the funtion to which this middleware can be applied to. If not specified or left empty, the middleware is allowed for all type of functions", "items": { "$ref": "#/definitions/functionTypes" } } } } } }, "Environment": { "type": "object", "additionalProperties": false, "properties": { "Variables": { "type": "object", "additionalProperties": { "$ref": "#/definitions/stringLike" }, "propertyNames": { "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" } } } }, "Layers": { "type": "array", "description": "Functions Layers to be added to applied functions, If a layer are refered using SOMOD::Ref, the npm packages in the layer are excluded from the function bundle", "items": { "$ref": "#/definitions/stringLike" }, "maxItems": 5, "uniqueItems": true } } } } } }, "type": "object", "required": [ "Resources" ], "properties": { "Resources": { "type": "object", "additionalProperties": { "allOf": [ { "$ref": "#/definitions/allResource" }, { "if": { "type": "object", "properties": { "Type": { "enum": [ "AWS::Serverless::Function", "AWS::Serverless::LayerVersion", "SOMOD::Serverless::FunctionMiddleware" ] } } }, "then": { "oneOf": [ { "$ref": "#/definitions/functionResource" }, { "$ref": "#/definitions/functionLayerResource" }, { "$ref": "#/definitions/functionMiddlewareResource" } ] } }, { "if": { "type": "object", "properties": { "Type": { "type": "string", "pattern": "^Custom::[A-Z][a-zA-Z0-9]{0,63}$" } } }, "then": { "$ref": "#/definitions/customResource" } } ] }, "propertyNames": { "type": "string", "pattern": "^[a-zA-Z0-9]{1,64}$" } }, "Outputs": { "type": "object", "additionalProperties": { "$ref": "#/definitions/stringLike" }, "propertyNames": { "$ref": "#/definitions/somodParameter/properties/SOMOD::Parameter" } } }, "additionalProperties": false }