serverless-aliyun-function-compute
Version:
Provider plugin for the Serverless Framework v1.x which adds support for Aliyun Function Compute
87 lines (73 loc) • 2.45 kB
JavaScript
'use strict';
const validate = require('../shared/validate');
const utils = require('../shared/utils');
const prepareDeployment = require('../package/lib/prepareDeployment');
const mergeServiceResources = require('../package/lib/mergeServiceResources');
const compileFunction = require('../package/lib/compileFunctions');
const setupService = require('./lib/setupService');
const uploadArtifacts = require('./lib/uploadArtifacts');
const setupFunctions = require('./lib/setupFunctions');
const setupEvents = require('./lib/setupEvents');
const setupRole = require('./lib/setupRole');
const { hooksWrap } = require('../shared/visitor');
class AliyunDeployFunction {
constructor(serverless, options) {
this.serverless = serverless;
this.options = options;
this.provider = this.serverless.getProvider('aliyun');
Object.assign(
this,
validate,
utils,
prepareDeployment,
compileFunction,
mergeServiceResources,
setupService,
uploadArtifacts,
setupFunctions,
setupEvents,
setupRole
);
this.hooks = hooksWrap({
'deploy:function:initialize': async () => {
await this.validate();
this.setDefaults();
// TODO: verify this.options.function
},
'deploy:function:packageFunction': async () => {
await this.packageFunction();
await this.compileTemplates();
},
'deploy:function:deploy': async () => {
await this.setupService();
await this.uploadArtifacts();
await this.setupFunctions();
await this.setupEvents();
},
}, 'deploy:function');
}
packageFunction() {
return this.serverless.pluginManager.spawn('package:function');
}
async compileTemplates() {
this.prepareDeployment();
await this.initializeTemplates();
await this.compileFunctionToTemplate();
this.mergeServiceResources();
await this.updateTemplates();
}
initializeTemplates() {
this.templates = {
create: this.serverless.service.provider.compiledConfigurationTemplate
};
}
compileFunctionToTemplate() {
const funcName = this.options.function;
const funcObject = this.serverless.service.getFunction(funcName);
return this.compileFunction(funcName, funcObject);
}
updateTemplates() {
this.templates.update = this.serverless.service.provider.compiledConfigurationTemplate;
}
}
module.exports = AliyunDeployFunction;