UNPKG

@specifai-net/appsync-template-tester

Version:

Unit test AppSync VTL resolvers, with popular frameworks such as Jest

94 lines 8.85 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); // eslint-disable-next-line max-classes-per-file const velocityjs_1 = require("velocityjs"); const mapper_1 = require("./value-mapper/mapper"); const utilCore = __importStar(require("./util")); const time = __importStar(require("./util-time")); const dynamodb = __importStar(require("./util-dynamodb")); const map = __importStar(require("./util-map")); class Parser { constructor(template) { this.internalStash = {}; this.template = template; } get stash() { return this.internalStash; } /** * Resolve as a string */ resolve(context, additionalUtil) { const clonedContext = JSON.parse(JSON.stringify(context)); if (!clonedContext.stash) clonedContext.stash = {}; clonedContext.args = clonedContext.arguments; const util = { ...utilCore, time, dynamodb, map, ...additionalUtil, }; const params = { context: clonedContext, ctx: clonedContext, util, utils: util, }; const macros = { return(value) { this.stop(); return value !== undefined ? JSON.stringify(value) : "null"; }, }; const res = (0, velocityjs_1.render)(this.template, params, macros, { valueMapper: mapper_1.valueMapper }); // Keep stash value this.internalStash = clonedContext.stash; // Remove preceding and trailing whitespace const resWithoutWhitespace = res .replace(/^[\n\s\r]*/, "") .replace(/[\n\s\r]*$/, ""); // Typecast Booleans if (res === "false") return false; if (res === "true") return true; // Typecast Null if (res === "null") return null; // Typecast Numbers // eslint-disable-next-line no-restricted-globals if (!isNaN(res)) return parseFloat(res); // Typecast JSON to Object try { return JSON.parse(res); // eslint-disable-next-line no-empty } catch (e) { } // Return a string otherwise return resWithoutWhitespace; } } exports.default = Parser; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWdEO0FBQ2hELDJDQUFvQztBQUNwQyxrREFBb0Q7QUFDcEQsaURBQW1DO0FBQ25DLGtEQUFvQztBQUNwQywwREFBNEM7QUFDNUMsZ0RBQWtDO0FBRWxDLE1BQXFCLE1BQU07SUFTekIsWUFBWSxRQUFnQjtRQU5wQixrQkFBYSxHQUEyQixFQUFFLENBQUM7UUFPakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQU5ELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBTUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsT0FBZ0IsRUFBRSxjQUF1QjtRQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFBRSxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxhQUFhLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFFN0MsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLFFBQVE7WUFDWCxJQUFJO1lBQ0osUUFBUTtZQUNSLEdBQUc7WUFDSCxHQUFHLGNBQWM7U0FDbEIsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsT0FBTyxFQUFFLGFBQWE7WUFDdEIsR0FBRyxFQUFFLGFBQWE7WUFDbEIsSUFBSTtZQUNKLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHO1lBQ2IsTUFBTSxDQUF5QixLQUEwQjtnQkFDdkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNaLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzlELENBQUM7U0FDRixDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsSUFBQSxtQkFBTSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBWCxvQkFBVyxFQUFFLENBQUMsQ0FBQztRQUVuRSxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBRXpDLDJDQUEyQztRQUMzQyxNQUFNLG9CQUFvQixHQUFHLEdBQUc7YUFDN0IsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7YUFDekIsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3QixvQkFBb0I7UUFDcEIsSUFBSSxHQUFHLEtBQUssT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xDLElBQUksR0FBRyxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUVoQyxnQkFBZ0I7UUFDaEIsSUFBSSxHQUFHLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWhDLG1CQUFtQjtRQUNuQixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUF3QixDQUFDO1lBQUUsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0QsMEJBQTBCO1FBQzFCLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsb0NBQW9DO1NBQ3JDO1FBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtRQUVkLDRCQUE0QjtRQUM1QixPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQXpFRCx5QkF5RUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWNsYXNzZXMtcGVyLWZpbGVcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gXCJ2ZWxvY2l0eWpzXCI7XG5pbXBvcnQgeyB2YWx1ZU1hcHBlciB9IGZyb20gXCIuL3ZhbHVlLW1hcHBlci9tYXBwZXJcIjtcbmltcG9ydCAqIGFzIHV0aWxDb3JlIGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCAqIGFzIHRpbWUgZnJvbSBcIi4vdXRpbC10aW1lXCI7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tIFwiLi91dGlsLWR5bmFtb2RiXCI7XG5pbXBvcnQgKiBhcyBtYXAgZnJvbSBcIi4vdXRpbC1tYXBcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VyIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxTdGFzaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHB1YmxpYyBnZXQgc3Rhc2goKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxTdGFzaDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhcyBhIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIHJlc29sdmUoY29udGV4dDogQ29udGV4dCwgYWRkaXRpb25hbFV0aWw/OiBvYmplY3QpOiBhbnkge1xuICAgIGNvbnN0IGNsb25lZENvbnRleHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRleHQpKTtcbiAgICBpZiAoIWNsb25lZENvbnRleHQuc3Rhc2gpIGNsb25lZENvbnRleHQuc3Rhc2ggPSB7fTtcbiAgICBjbG9uZWRDb250ZXh0LmFyZ3MgPSBjbG9uZWRDb250ZXh0LmFyZ3VtZW50cztcblxuICAgIGNvbnN0IHV0aWwgPSB7XG4gICAgICAuLi51dGlsQ29yZSxcbiAgICAgIHRpbWUsXG4gICAgICBkeW5hbW9kYixcbiAgICAgIG1hcCxcbiAgICAgIC4uLmFkZGl0aW9uYWxVdGlsLFxuICAgIH07XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBjb250ZXh0OiBjbG9uZWRDb250ZXh0LFxuICAgICAgY3R4OiBjbG9uZWRDb250ZXh0LFxuICAgICAgdXRpbCxcbiAgICAgIHV0aWxzOiB1dGlsLFxuICAgIH07XG5cbiAgICBjb25zdCBtYWNyb3MgPSB7XG4gICAgICByZXR1cm4odGhpczogeyBzdG9wKCk6IHZvaWQgfSwgdmFsdWU6IHVua25vd24gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogXCJudWxsXCI7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXMgPSByZW5kZXIodGhpcy50ZW1wbGF0ZSwgcGFyYW1zLCBtYWNyb3MsIHsgdmFsdWVNYXBwZXIgfSk7XG5cbiAgICAvLyBLZWVwIHN0YXNoIHZhbHVlXG4gICAgdGhpcy5pbnRlcm5hbFN0YXNoID0gY2xvbmVkQ29udGV4dC5zdGFzaDtcblxuICAgIC8vIFJlbW92ZSBwcmVjZWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2VcbiAgICBjb25zdCByZXNXaXRob3V0V2hpdGVzcGFjZSA9IHJlc1xuICAgICAgLnJlcGxhY2UoL15bXFxuXFxzXFxyXSovLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoL1tcXG5cXHNcXHJdKiQvLCBcIlwiKTtcblxuICAgIC8vIFR5cGVjYXN0IEJvb2xlYW5zXG4gICAgaWYgKHJlcyA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlcyA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVHlwZWNhc3QgTnVsbFxuICAgIGlmIChyZXMgPT09IFwibnVsbFwiKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFR5cGVjYXN0IE51bWJlcnNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgaWYgKCFpc05hTihyZXMgYXMgdW5rbm93biBhcyBudW1iZXIpKSByZXR1cm4gcGFyc2VGbG9hdChyZXMpO1xuXG4gICAgLy8gVHlwZWNhc3QgSlNPTiB0byBPYmplY3RcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAvLyBSZXR1cm4gYSBzdHJpbmcgb3RoZXJ3aXNlXG4gICAgcmV0dXJuIHJlc1dpdGhvdXRXaGl0ZXNwYWNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHQgPSB7XG4gIGFyZ3VtZW50cz86IG9iamVjdDtcbiAgc291cmNlPzogb2JqZWN0O1xuICByZXN1bHQ/OiBvYmplY3QgfCBzdHJpbmc7XG4gIGlkZW50aXR5Pzogb2JqZWN0O1xuICByZXF1ZXN0Pzogb2JqZWN0O1xuICBpbmZvPzogb2JqZWN0O1xuICBlcnJvcj86IG9iamVjdDtcbiAgcHJldj86IG9iamVjdDtcbiAgc3Rhc2g/OiBvYmplY3Q7XG59O1xuXG5leHBvcnQgdHlwZSBWZWxvY2l0eVBhcmFtcyA9IHsgW2Jsb2NrTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9O1xuIl19