@specifai-net/appsync-template-tester
Version:
Unit test AppSync VTL resolvers, with popular frameworks such as Jest
94 lines • 8.85 kB
JavaScript
;
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