UNPKG

serverless

Version:

Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more

146 lines (141 loc) 4.49 kB
'use strict'; const functionNamePattern = '^[a-zA-Z0-9-_]+$'; const schema = { type: 'object', properties: { /* * Modes for config validation: * - error: the error is thrown * - warn: logs error to console without throwing an error * - off: disables validation at all * * The default is `warn`, and will be set to `error` in v2 */ configValidationMode: { enum: ['error', 'warn', 'off'] }, custom: { type: 'object', properties: {}, required: [], // User is free to add any properties for its own purpose }, disabledDeprecations: { anyOf: [ { const: '*' }, { type: 'array', items: { $ref: '#/definitions/errorCode' }, }, ], }, enableLocalInstallationFallback: { type: 'boolean' }, frameworkVersion: { type: 'string' }, functions: { type: 'object', patternProperties: { [functionNamePattern]: { type: 'object', properties: { name: { type: 'string' }, // name property is added by service class events: { type: 'array', items: { /* * `anyOf` array by JSON schema spec cannot be empty, threfore we start * with one dummy item as workaround to ensure it validates against * any undefined function events. */ anyOf: [ { type: 'object', properties: { __schemaWorkaround__: { const: null } }, required: ['__schemaWorkaround__'], additionalProperties: false, }, ], }, }, }, /* * Schema for function properties is extended by a provider plugin. * For example, in the context of AWS provider props like * provisionedConcurrency, memorySize, reservedConcurrency, etc. * should be extended by awsProvider plugin. */ additionalProperties: false, }, }, additionalProperties: false, }, package: { type: 'object', properties: { individually: { type: 'boolean' }, path: { type: 'string' }, artifact: { type: 'string' }, exclude: { type: 'array', items: { type: 'string' } }, include: { type: 'array', items: { type: 'string' } }, excludeDevDependencies: { type: 'boolean' }, }, additionalProperties: false, }, plugins: { anyOf: [ { type: 'object', properties: { localPath: { type: 'string' }, modules: { type: 'array', items: { type: 'string' } }, }, additionalProperties: false, required: ['modules'], }, { type: 'array', items: { type: 'string' } }, ], }, /* * Provider specific properties are extended in respected provider plugins. */ provider: { type: 'object', properties: { // "name" is configured as const by loaded provider }, required: ['name'], additionalProperties: false, }, service: { anyOf: [ { $ref: '#/definitions/serviceName' }, { type: 'object', properties: { name: { $ref: '#/definitions/serviceName' }, awsKmsKeyArn: { $ref: '#/definitions/awsKmsArn' }, }, additionalProperties: false, required: ['name'], }, ], }, useDotenv: { const: true }, }, additionalProperties: false, required: ['provider', 'service'], definitions: { // TODO: awsKmsArn definition to be moved to lib/plugins/aws/provider/awsProvider.js once service.awsKmsKeyArn removed with v3.0.0, see https://github.com/serverless/serverless/issues/8261 // TODO: awsKmsArn to include #/definitions/awsCfFunction instead of type: object as one of the possible definition, see https://github.com/serverless/serverless/issues/8261 awsKmsArn: { anyOf: [{ type: 'object' }, { type: 'string', pattern: '^arn:aws[a-z-]*:kms' }], }, errorCode: { type: 'string', pattern: '^[A-Z0-9_]+$', }, functionName: { type: 'string', pattern: functionNamePattern, }, serviceName: { type: 'string', pattern: '^[a-zA-Z][0-9a-zA-Z-]+$' }, }, }; module.exports = schema;