UNPKG

serverless-plugin-test-helper

Version:

A utility library to help with testing deployed serverless applications

71 lines 6.9 kB
"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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