UNPKG

aws-sf-choice

Version:
326 lines (325 loc) 16.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Choice = void 0; const lodash_1 = __importDefault(require("lodash")); const uuid_1 = require("uuid"); const jsonpath_1 = __importDefault(require("jsonpath")); const events_1 = require("events"); const eventEmitter = new events_1.EventEmitter.EventEmitter(); class Choice { constructor(condition, data) { this.typeId = {}; this.posId = {}; this.IdinId = {}; this.IdLength = {}; this.IdResult = {}; this.nexts = []; this.sampleData = {}; this.condition = {}; this.status = true; this.typeId = {}; this.posId = {}; this.IdinId = {}; this.IdLength = {}; this.IdResult = {}; this.condition = condition; this.sampleData = data; this.IdLength["orig"] = this.condition.Choices.length; this.status = true; } start() { return new Promise((resolve, rejet) => { eventEmitter.on("scream", (d) => { this.status = false; d = d.filter((item) => { return item !== undefined; }); if (d.length == 0) { this.nexts = []; resolve(this.condition.Default); } else { this.nexts = []; resolve(d[0]); } }); this.condition.Choices.map((item) => { if (this.status) { if (lodash_1.default.has(item, "Or")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Or"; this.posId[item.Id] = "root"; this.IdLength[item.Id] = item.Or.length; this.checkFunction(item.Or, "Or", item.Id); } else if (lodash_1.default.has(item, "And")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "And"; this.posId[item.Id] = "root"; this.IdLength[item.Id] = item.And.length; this.checkFunction(item.And, "And", item.Id); } else if (lodash_1.default.has(item, "Not")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Not"; this.posId[item.Id] = "root"; this.checkFunction(item.Not, "Not", item.Id); } else { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Simple"; this.posId[item.Id] = "root"; this.IdResult[item.Id] = this.simpleHandler(this.sampleData, item); this.resultTracker(item.Id); } } else return this.status; }); }); } checkFunction(arr, type, upperId) { if (type == "And" || type == "Or") { arr.map((item) => { if (lodash_1.default.has(item, "Or")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Or"; this.IdinId[item.Id] = upperId; this.IdLength[item.Id] = item.Or.length; this.checkFunction(item.Or, "Or", item.Id); } else if (lodash_1.default.has(item, "And")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "And"; this.IdinId[item.Id] = upperId; this.IdLength[item.Id] = arr.length; this.checkFunction(item.And, "And", item.Id); } else if (lodash_1.default.has(item, "Not")) { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Not"; this.IdinId[item.Id] = upperId; this.checkFunction(item.Not, "Not", item.Id); } else { item.Id = (0, uuid_1.v4)(); this.typeId[item.Id] = "Simple"; this.IdinId[item.Id] = upperId; this.IdResult[item.Id] = this.simpleHandler(this.sampleData, item); this.resultTracker(item.Id); } }); } else if (type == "Not") { if (lodash_1.default.has(arr, "Or")) { arr.Id = (0, uuid_1.v4)(); this.typeId[arr.Id] = "Or"; this.IdinId[arr.Id] = upperId; this.IdLength[arr.Id] = arr.Or.length; this.checkFunction(arr.Or, "Or", arr.Id); } else if (lodash_1.default.has(arr, "And")) { arr.Id = (0, uuid_1.v4)(); this.typeId[arr.Id] = "And"; this.IdinId[arr.Id] = upperId; this.IdLength[arr.Id] = arr.And.length; this.checkFunction(arr.And, "And", arr.Id); } else if (lodash_1.default.has(arr, "Not")) { arr.Id = (0, uuid_1.v4)(); this.typeId[arr.Id] = "Not"; this.IdinId[arr.Id] = upperId; this.checkFunction(arr.Not, "Not", arr.Id); } else { arr.Id = (0, uuid_1.v4)(); this.typeId[arr.Id] = "Simple"; this.IdinId[arr.Id] = upperId; this.IdResult[arr.Id] = this.simpleHandler(this.sampleData, arr); this.resultTracker(arr.Id); } } } emptyData() { eventEmitter.on("scream", (d) => { this.typeId = {}; this.posId = {}; this.IdinId = {}; this.IdLength = {}; this.IdResult = {}; this.sampleData = {}; this.condition = {}; }); } getObjKey(obj, value) { let t = []; Object.keys(obj).forEach(item => { if (obj[item] == value) t.push(item); }); return t; } resultTracker(Id) { // check for condition for root state if (Object.keys(this.posId).includes(Id)) { if (this.IdResult[Id]) { let next = lodash_1.default.find(this.condition.Choices, function (o) { return o.Id == Id; }).Next; this.nexts.push(next); eventEmitter.emit("scream", this.nexts); } else { this.nexts.push(undefined); if (this.nexts.length == this.IdLength["orig"]) { eventEmitter.emit("scream", this.nexts); } } } else { // check for condition if upper condition is Not var upperId = this.IdinId[Id]; if (this.typeId[upperId] == "Not") { this.IdResult[upperId] = !this.IdResult[Id]; this.resultTracker(upperId); } // check for condition if upper condition is And if (this.typeId[upperId] == "And") { var and_result = this.getObjKey(this.IdinId, upperId); if (and_result.length == this.IdLength[upperId]) { and_result = and_result.map((item) => this.IdResult[item]); this.IdResult[upperId] = and_result.includes(false); this.resultTracker(upperId); } } // check for condition if upper condition is Or if (this.typeId[upperId] == "Or") { var or_result = this.getObjKey(this.IdinId, upperId); if (or_result.length == this.IdLength[upperId]) { or_result = or_result.map((item) => this.IdResult[item]); this.IdResult[upperId] = or_result.includes(true); this.resultTracker(upperId); } } } } simpleHandler(data, condition) { if (lodash_1.default.has(condition, "IsTimestamp")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]).getTime() > 0 && new Date(jsonpath_1.default.query(data, condition.Variable)[0]).getTime() != NaN; } else if (lodash_1.default.has(condition, "IsPresent")) { return jsonpath_1.default.query(data, condition.Variable)[0] !== undefined; } else if (lodash_1.default.has(condition, "IsNumeric")) { return jsonpath_1.default.query(typeof data, condition.Variable)[0] == "number"; } else if (lodash_1.default.has(condition, "IsBoolean")) { return jsonpath_1.default.query(typeof data, condition.Variable)[0] == "boolean"; } else if (lodash_1.default.has(condition, "IsString")) { return jsonpath_1.default.query(typeof data, condition.Variable)[0] == "string"; } else if (lodash_1.default.has(condition, "IsNull")) { return jsonpath_1.default.query(data, condition.Variable)[0] !== null; } else if (lodash_1.default.has(condition, "NumericEquals")) { return jsonpath_1.default.query(data, condition.Variable)[0] == condition.NumericEquals; } else if (lodash_1.default.has(condition, "StringEquals")) { return jsonpath_1.default.query(data, condition.Variable)[0] == condition.StringEquals; } else if (lodash_1.default.has(condition, "TimestampEquals")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) == new Date(condition.TimestampEquals); } else if (lodash_1.default.has(condition, "NumericGreaterThan")) { return jsonpath_1.default.query(data, condition.Variable)[0] > condition.NumericGreaterThan; } else if (lodash_1.default.has(condition, "StringGreaterThan")) { return jsonpath_1.default.query(data, condition.Variable)[0].includes(condition.StringGreaterThan) && jsonpath_1.default.query(data, condition.Variable)[0] != condition.StringGreaterThan; } else if (lodash_1.default.has(condition, "TimestampGreaterThan")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) > condition.TimestampGreaterThan; } else if (lodash_1.default.has(condition, "NumericGreaterThanEquals")) { return jsonpath_1.default.query(data, condition.Variable)[0] >= condition.NumericGreaterThanEquals; } else if (lodash_1.default.has(condition, "StringGreaterThanEquals")) { return jsonpath_1.default.query(data, condition.Variable)[0].includes(condition.StringGreaterThanEquals); } else if (lodash_1.default.has(condition, "TimestampGreaterThanEquals")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) >= new Date(condition.TimestampGreaterThanEquals); } else if (lodash_1.default.has(condition, "NumericLessThan")) { return jsonpath_1.default.query(data, condition.Variable)[0] < condition.NumericLessThan; } else if (lodash_1.default.has(condition, "StringLessThan")) { return condition.StringLessThan.includes(jsonpath_1.default.query(data, condition.Variable)[0]) && condition.StringLessThan != jsonpath_1.default.query(data, condition.Variable)[0]; } else if (lodash_1.default.has(condition, "TimestampLessThan")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) < new Date(condition.TimestampLessThan); } else if (lodash_1.default.has(condition, "NumericLessThanEquals")) { return jsonpath_1.default.query(data, condition.Variable)[0] <= condition.NumericLessThanEquals; } else if (lodash_1.default.has(condition, "StringLessThanEquals")) { return condition.StringLessThanEquals.includes(jsonpath_1.default.query(data, condition.Variable)[0]); } else if (lodash_1.default.has(condition, "TimestampLessThanEquals")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) <= new Date(condition.TimestampLessThanEquals); } else if (lodash_1.default.has(condition, "NumericEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] == jsonpath_1.default.query(data, condition.NumericEqualsPath)[0]; } else if (lodash_1.default.has(condition, "StringEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] == jsonpath_1.default.query(data, condition.StringEqualsPath)[0]; } else if (lodash_1.default.has(condition, "TimestampEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] == jsonpath_1.default.query(data, condition.TimestampEqualsPath)[0]; } else if (lodash_1.default.has(condition, "NumericGreaterThanPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] > jsonpath_1.default.query(data, condition.NumericGreaterThanPath)[0]; } else if (lodash_1.default.has(condition, "StringGreaterThanPath")) { return jsonpath_1.default.query(data, condition.Variable)[0].includes(jsonpath_1.default.query(data, condition.StringGreaterThanPath)[0]) && jsonpath_1.default.query(data, condition.Variable)[0] != jsonpath_1.default.query(data, condition.StringGreaterThanPath)[0]; } else if (lodash_1.default.has(condition, "TimestampGreaterThanPath")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) > new Date(jsonpath_1.default.query(data, condition.TimestampGreaterThanPath)[0]); } else if (lodash_1.default.has(condition, "NumericGreaterThanEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] >= jsonpath_1.default.query(data, condition.NumericGreaterThanEqualsPath)[0]; } else if (lodash_1.default.has(condition, "StringGreaterThanEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0].includes(jsonpath_1.default.query(data, condition.StringGreaterThanEqualsPath)[0]); } else if (lodash_1.default.has(condition, "TimestampGreaterThanEqualsPath")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) >= new Date(jsonpath_1.default.query(data, condition.TimestampGreaterThanEqualsPath)[0]); } else if (lodash_1.default.has(condition, "NumericLessThanPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] < jsonpath_1.default.query(data, condition.NumericLessThanPath)[0]; } else if (lodash_1.default.has(condition, "StringLessThanPath")) { return jsonpath_1.default.query(data, condition.StringLessThanPath)[0].includes(jsonpath_1.default.query(data, condition.Variable)[0]) && jsonpath_1.default.query(data, condition.StringLessThanPath)[0] != jsonpath_1.default.query(data, condition.Variable)[0]; } else if (lodash_1.default.has(condition, "TimestampLessThanPath")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) < new Date(jsonpath_1.default.query(data, condition.TimestampLessThanPath)[0]); } else if (lodash_1.default.has(condition, "NumericLessThanEqualsPath")) { return jsonpath_1.default.query(data, condition.Variable)[0] <= jsonpath_1.default.query(data, condition.NumericLessThanEqualsPath)[0]; } else if (lodash_1.default.has(condition, "StringLessThanEqualsPath")) { return jsonpath_1.default.query(data, condition.StringLessThanEqualsPath)[0].includes(jsonpath_1.default.query(data, condition.Variable)[0]); } else if (lodash_1.default.has(condition, "TimestampLessThanEqualsPath")) { return new Date(jsonpath_1.default.query(data, condition.Variable)[0]) <= new Date(data, jsonpath_1.default.query(data, condition.TimestampLessThanEqualsPath)[0]); } } ; } exports.Choice = Choice;