serverless-plugin-test-helper
Version:
A utility library to help with testing deployed serverless applications
71 lines • 6.9 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.StackOutputPlugin = exports.DEFAULT_OUTPUTS_PATH = void 0;
const assert_1 = require("assert");
const file_1 = require("./file");
exports.DEFAULT_OUTPUTS_PATH = ".serverless/stack-output/outputs.yml";
class StackOutputPlugin {
constructor(serverless, options) {
this.serverless = serverless;
this.options = options;
this.hooks = { "after:deploy:deploy": this.getAndSaveStackOutput.bind(this) };
this.config = serverless.service.custom ? serverless.service.custom.testHelper : {};
}
getAndSaveStackOutput() {
return __awaiter(this, void 0, void 0, function* () {
try {
this.validate();
const output = yield this.getStackOutput();
const formattedOutput = this.formatStackOutput(output);
this.saveStackOutput(formattedOutput);
}
catch (err) {
this.serverless.cli.log(`Cannot process stack output: ${err.message}`);
}
});
}
validate() {
assert_1.ok(this.serverless, "Invalid serverless configuration");
assert_1.ok(this.serverless.service, "Invalid serverless configuration");
assert_1.ok(this.serverless.service.provider, "Invalid serverless configuration");
assert_1.ok(this.serverless.service.provider.name, "Invalid serverless configuration");
assert_1.deepStrictEqual(this.serverless.service.provider.name, "aws", "Only supported for AWS provider");
assert_1.ok(this.options && !this.options.noDeploy, "Skipping deployment with --noDeploy flag");
}
getStackOutput() {
const aws = this.serverless.getProvider("aws");
const stage = aws.getStage();
const region = aws.getRegion();
const StackName = aws.naming.getStackName();
return aws.request("CloudFormation", "describeStacks", { StackName }, stage, region);
}
formatStackOutput(data) {
const stack = data.Stacks.pop() || { Outputs: [] };
const output = stack.Outputs || [];
return output.reduce((obj, item) => Object.assign(obj, { [item.OutputKey]: item.OutputValue }), {});
}
// eslint-disable-next-line @typescript-eslint/ban-types
saveStackOutput(data) {
if (this.config && this.config.path) {
this.saveStackOutputToPath(this.config.path, data);
}
this.saveStackOutputToPath(exports.DEFAULT_OUTPUTS_PATH, data);
}
// eslint-disable-next-line @typescript-eslint/ban-types
saveStackOutputToPath(path, data) {
const file = new file_1.StackOutputFile(path, data);
file.save();
this.serverless.cli.log(`Stack Output saved to file: ${path}`);
}
}
exports.StackOutputPlugin = StackOutputPlugin;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YWNrLW91dHB1dC9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQTZDO0FBQzdDLGlDQUF5QztBQUU1QixRQUFBLG9CQUFvQixHQUFHLHNDQUFzQyxDQUFDO0FBRTNFLE1BQWEsaUJBQWlCO0lBSzVCLFlBQW9CLFVBQXNCLEVBQVUsT0FBMkI7UUFBM0QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzdFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEYsQ0FBQztJQUVZLHFCQUFxQjs7WUFDaEMsSUFBSTtnQkFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDdkM7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0gsQ0FBQztLQUFBO0lBRU8sUUFBUTtRQUNkLFdBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxF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