UNPKG

@emealscom/packer

Version:

* cups * grams * pounds * liters * mililiters * pint * quart * ounces * tablespoons * teaspoons * unit * each * package * slices * bunck * fz

122 lines (121 loc) 5.7 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateQuantity = void 0; var constants_1 = require("./constants"); var library_1 = __importDefault(require("./library")); var findException = function (request) { var conditionResult = true; var rules = request.rules ? request.rules.sort(function (a, b) { return a.prior > b.prior ? 1 : -1; }) : []; for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) { var rule = rules_1[_i]; conditionResult = true; var condition = rule.condition, convertion = rule.convertion; Object.keys(condition).forEach(function (key) { var typeCondition = eval("typeof condition.".concat(key)); switch (typeCondition) { case "string": case "undefined": conditionResult = conditionResult && eval("request.".concat(key, " === condition.").concat(key)); break; case "number": conditionResult = conditionResult && eval("request.".concat(key, " === condition.").concat(key)); break; case "object": var convertFunction = eval("condition.".concat(key)); var name_1 = convertFunction.name, value = convertFunction.value; var result = library_1.default[name_1](eval("request.".concat(key)), value); if (typeof result === "boolean") { conditionResult = conditionResult && result; } break; } }); if (conditionResult) { Object.keys(convertion).forEach(function (key) { var typeCondition = eval("typeof convertion.".concat(key)); switch (typeCondition) { case "string": case "undefined": eval("request.".concat(key, " = convertion.").concat(key)); break; case "number": eval("request.".concat(key, " = convertion.").concat(key)); break; case "object": var convertFunction = eval("convertion.".concat(key)); var name_2 = convertFunction.name, value = convertFunction.value; var result = void 0; if (typeof value !== "object") { result = library_1.default[name_2](eval("request.".concat(key)), value); } else { var args = [eval("request.".concat(key)), eval("request.".concat(value[0]))].concat(value.slice(1)); result = library_1.default[name_2].apply(library_1.default, __spreadArray([eval("request.".concat(key)), eval("request.".concat(value[0]))], value.slice(1), false)); } if (typeof result !== "boolean") { eval("request.".concat(key, " = result")); } break; } }); break; } } return request; }; var calculateQuantity = function (quantity, packageQuantity) { var tolerance = 0.15 * quantity; var result = (quantity - tolerance) / packageQuantity; return Math.ceil(result); }; exports.calculateQuantity = calculateQuantity; var convert = function (request) { var result = { estimatedQuantity: 1, status: true }; if (request.staple) { result.estimatedQuantity = 1; result.status = true; return result; } request = findException(request); var description = request.description, unitQuantity = request.unitQuantity, packageUnitMeasure = request.packageUnitMeasure, packageUnitQuantity = request.packageUnitQuantity; var unitMeasure = request.unitMeasure ? request.unitMeasure : 'unit'; if (description && unitMeasure && unitQuantity && packageUnitMeasure && packageUnitQuantity) { if (unitMeasure === packageUnitMeasure) { result.estimatedQuantity = (0, exports.calculateQuantity)(unitQuantity, packageUnitQuantity); result.status = true; } else { var measure = constants_1.conversions.filter(function (conversion) { return conversion.from === unitMeasure; }); if (measure.length > 0) { var factor = measure[0].to.filter(function (f) { return f.to === packageUnitMeasure; }); if (factor.length > 0) { var quantity = factor[0].factor * unitQuantity; result.estimatedQuantity = (0, exports.calculateQuantity)(quantity, packageUnitQuantity); result.status = true; } else { result.status = false; } } } } if (result.status) result.estimatedQuantity = result.estimatedQuantity <= 0 ? 1 : result.estimatedQuantity; return result; }; exports.default = convert;