UNPKG

@react-awesome-query-builder/core

Version:
538 lines (531 loc) 27.3 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray"; function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import { getOpCardinality, widgetDefKeysToOmit, opDefKeysToOmit, omit, isObject } from "../utils/stuff"; import { getFieldConfig, getOperatorConfig, getFieldWidgetConfig, getFuncConfig, getFieldParts, getWidgetForFieldOp } from "../utils/configUtils"; import { extendConfig } from "../utils/configExtend"; import { getFieldPathLabels, formatFieldName, completeValue, getOneChildOrDescendant } from "../utils/ruleUtils"; import { defaultConjunction } from "../utils/defaultUtils"; import { mongoFieldEscape } from "../utils/mongoUtils"; import pick from "lodash/pick"; import { List, Map } from "immutable"; export var mongodbFormat = function mongodbFormat(tree, config) { return _mongodbFormat(tree, config, false); }; export var _mongodbFormat = function _mongodbFormat(tree, config) { var returnErrors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; //meta is mutable var meta = { errors: [] }; var extendedConfig = extendConfig(config, undefined, false); var res = formatItem([], tree, extendedConfig, meta); if (returnErrors) { return [res, meta.errors]; } else { if (meta.errors.length) console.warn("Errors while exporting to MongoDb:", meta.errors); return res; } }; var formatItem = function formatItem(parents, item, config, meta) { var _not = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var _canWrapExpr = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; var _formatFieldName = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined; var _value = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined; if (!item) return undefined; var type = item.get("type"); if (type === "group" || type === "rule_group") { return formatGroup(parents, item, config, meta, _not, _canWrapExpr, _formatFieldName, _value); } else if (type === "rule") { return formatRule(parents, item, config, meta, _not, _canWrapExpr, _formatFieldName, _value); } return undefined; }; var formatGroup = function formatGroup(parents, item, config, meta) { var _parents$filter, _groupOperatorDef$car, _groupOperatorDef, _groupOperatorDef2, _groupOperatorDef3, _reversedGroupOpDef, _reversedGroupOpDef2, _getOneChildOrDescend, _conjunction; var _not = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var _canWrapExpr = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; var _formatFieldName = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined; var _value = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined; var type = item.get("type"); var properties = item.get("properties") || new Map(); var origNot = !!properties.get("not"); var children = item.get("children1") || new List(); var _config$settings = config.settings, canShortMongoQuery = _config$settings.canShortMongoQuery, fieldSeparator = _config$settings.fieldSeparator, exportPreserveGroups = _config$settings.exportPreserveGroups, reverseOperatorsForNot = _config$settings.reverseOperatorsForNot; var sep = fieldSeparator; var parentRuleGroup = (_parents$filter = parents.filter(function (it) { return it.get("type") == "rule_group"; })) === null || _parents$filter === void 0 || (_parents$filter = _parents$filter.slice(-1)) === null || _parents$filter === void 0 ? void 0 : _parents$filter.pop(); var isInsideRuleGroup = !!parentRuleGroup; var parentRuleGroupField = parentRuleGroup === null || parentRuleGroup === void 0 ? void 0 : parentRuleGroup.get("properties").get("field"); var isInsideRuleGroupArray = isInsideRuleGroup && parentRuleGroup.get("properties").get("mode") == "array"; var isRuleGroup = type === "rule_group"; var groupField = isRuleGroup ? properties.get("field") : null; var groupOperator = isRuleGroup ? properties.get("operator") : null; var groupOperatorDef = groupOperator && getOperatorConfig(config, groupOperator, groupField) || null; var groupOperatorCardinality = groupOperator ? (_groupOperatorDef$car = (_groupOperatorDef = groupOperatorDef) === null || _groupOperatorDef === void 0 ? void 0 : _groupOperatorDef.cardinality) !== null && _groupOperatorDef$car !== void 0 ? _groupOperatorDef$car : 1 : undefined; var groupFieldName = formatFieldName(groupField, config, meta, parentRuleGroupField); var groupFieldDef = getFieldConfig(config, groupField) || {}; var mode = groupFieldDef.mode; //properties.get("mode"); var canHaveEmptyChildren = groupField && mode === "array" && groupOperatorCardinality >= 1; var isRuleGroupArray = isRuleGroup && mode != "struct"; var isRuleGroupWithChildren = isRuleGroup && (children === null || children === void 0 ? void 0 : children.size) > 0; var isRuleGroupWithoutChildren = isRuleGroup && !(children !== null && children !== void 0 && children.size); // rev var revChildren = false; var not = origNot; var filterNot = false; if (isRuleGroupWithChildren) { // for rule_group `not` there should be 2 NOTs: from properties (for children) and from parent group (_not) filterNot = origNot; not = _not; } else { if (_not) { not = !not; } } var reversedGroupOp = (_groupOperatorDef2 = groupOperatorDef) === null || _groupOperatorDef2 === void 0 ? void 0 : _groupOperatorDef2.reversedOp; var reversedGroupOpDef = getOperatorConfig(config, reversedGroupOp, groupField); var groupOpNeedsReverse = !((_groupOperatorDef3 = groupOperatorDef) !== null && _groupOperatorDef3 !== void 0 && _groupOperatorDef3.mongoFormatOp) && !!((_reversedGroupOpDef = reversedGroupOpDef) !== null && _reversedGroupOpDef !== void 0 && _reversedGroupOpDef.mongoFormatOp); var groupOpCanReverse = !!((_reversedGroupOpDef2 = reversedGroupOpDef) !== null && _reversedGroupOpDef2 !== void 0 && _reversedGroupOpDef2.mongoFormatOp); var oneChildType = (_getOneChildOrDescend = getOneChildOrDescendant(item)) === null || _getOneChildOrDescend === void 0 ? void 0 : _getOneChildOrDescend.get("type"); var isSimpleGroupWithOneChild = !isRuleGroup && oneChildType === "rule"; var canRevChildren = (not && isSimpleGroupWithOneChild || filterNot && (children === null || children === void 0 ? void 0 : children.size) === 1) && !exportPreserveGroups; // && !!reverseOperatorsForNot; if (canRevChildren) { if (isSimpleGroupWithOneChild) { not = !not; } else { filterNot = !filterNot; } revChildren = true; } var canRevGroupOp = not && isRuleGroup && groupOpCanReverse && (!!reverseOperatorsForNot && !exportPreserveGroups || groupOpNeedsReverse); if (canRevGroupOp) { not = !not; var _ref = [reversedGroupOp, groupOperator]; groupOperator = _ref[0]; reversedGroupOp = _ref[1]; var _ref2 = [reversedGroupOpDef, groupOperatorDef]; groupOperatorDef = _ref2[0]; reversedGroupOpDef = _ref2[1]; } // conj var conjunction = properties.get("conjunction"); if (!conjunction) conjunction = defaultConjunction(config); var conjunctionDefinition = config.conjunctions[conjunction]; if (!conjunctionDefinition) return undefined; // rev conj var reversedConj = conjunctionDefinition.reversedConj; var canRev = not && ((_conjunction = conjunction) === null || _conjunction === void 0 ? void 0 : _conjunction.toLowerCase()) === "or" && reversedConj && !isRuleGroup && !!reverseOperatorsForNot && !exportPreserveGroups; if (canRev) { conjunction = reversedConj; conjunctionDefinition = config.conjunctions[conjunction]; not = !not; revChildren = true; } var mongoConj = conjunctionDefinition.mongoConj; // tip: can't use "$expr" inside "$filter"."cond" or inside "$elemMatch" var canWrapExpr = !isRuleGroup && !isInsideRuleGroup; var formatFieldNameFn = mode == "array" ? function (f) { return "$$el".concat(sep).concat(f); } : _formatFieldName; var list = children.map(function (currentChild) { return formatItem([].concat(_toConsumableArray(parents), [item]), currentChild, config, meta, revChildren, canWrapExpr, formatFieldNameFn); }).filter(function (formattedChild) { return typeof formattedChild !== "undefined"; }); if (!canHaveEmptyChildren && !list.size) { return undefined; } var resultQuery; var shortQuery; if (list.size == 1) { resultQuery = list.first(); } else if (list.size > 1) { var rules = list.toList().toJS(); var canShort = canShortMongoQuery && mongoConj == "$and" && !exportPreserveGroups; if (canShort) { resultQuery = rules.reduce(function (acc, rule) { if (!acc) return undefined; for (var k in rule) { if (k[0] == "$") { acc = undefined; break; } if (acc[k] == undefined) { acc[k] = rule[k]; } else { // https://github.com/ukrbublik/react-awesome-query-builder/issues/182 var prev = acc[k], next = rule[k]; if (!isObject(prev)) { prev = { "$eq": prev }; } if (!isObject(next)) { next = { "$eq": next }; } var prevOp = Object.keys(prev)[0], nextOp = Object.keys(next)[0]; if (prevOp == nextOp) { acc = undefined; break; } acc[k] = Object.assign({}, prev, next); } } return acc; }, {}); } if (resultQuery) { shortQuery = true; } else { // can't be shorten shortQuery = false; resultQuery = _defineProperty({}, mongoConj, rules); } } if (groupField) { if (mode == "array") { var totalQuery = { "$size": { "$ifNull": ["$" + mongoFieldEscape(groupFieldName), []] } }; if (filterNot && resultQuery) { resultQuery = { "$not": resultQuery }; filterNot = false; } var filterQuery = resultQuery ? { "$size": { "$ifNull": [{ "$filter": { input: "$" + mongoFieldEscape(groupFieldName), as: "el", cond: resultQuery } }, []] } } : totalQuery; var notForRule = !exportPreserveGroups ? not : false; resultQuery = formatItem(parents, item.set("type", "rule"), config, meta, notForRule, false, function (_f) { return filterQuery; }, totalQuery); if (notForRule) { not = false; } resultQuery = { "$expr": resultQuery }; } else { // tip: $elemMatch can't have $not and $expr inside BUT can have $nor resultQuery = _defineProperty({}, mongoFieldEscape(groupFieldName), { "$elemMatch": resultQuery }); } } if (not) { // tip: $nor can't be inside $filter.cond or $expr if (isInsideRuleGroupArray) { // inside $filter.cond resultQuery = { "$not": resultQuery }; } else { resultQuery = { "$nor": [resultQuery] }; } } return resultQuery; }; var formatRule = function formatRule(parents, item, config, meta) { var _parents$filter2, _operatorDefinition, _operatorDefinition2, _revOperatorDefinitio, _operatorDefinition3, _revOperatorDefinitio2, _revOperatorDefinitio3, _operatorDefinition4; var _not = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var _canWrapExpr = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; var _formatFieldName = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined; var _value = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined; var properties = item.get("properties") || new Map(); var parentRuleGroup = (_parents$filter2 = parents.filter(function (it) { return it.get("type") == "rule_group"; })) === null || _parents$filter2 === void 0 || (_parents$filter2 = _parents$filter2.slice(-1)) === null || _parents$filter2 === void 0 ? void 0 : _parents$filter2.pop(); var parentRuleGroupField = parentRuleGroup === null || parentRuleGroup === void 0 ? void 0 : parentRuleGroup.get("properties").get("field"); var operator = properties.get("operator"); var operatorOptions = properties.get("operatorOptions"); var field = properties.get("field"); var fieldSrc = properties.get("fieldSrc"); var iValue = properties.get("value"); var iValueSrc = properties.get("valueSrc"); var iValueType = properties.get("valueType"); var asyncListValues = properties.get("asyncListValues"); if (field == null || operator == null || iValue === undefined) return undefined; var fieldDef = getFieldConfig(config, field); // check op var operatorDefinition = getOperatorConfig(config, operator, field); var reversedOp = (_operatorDefinition = operatorDefinition) === null || _operatorDefinition === void 0 ? void 0 : _operatorDefinition.reversedOp; var revOperatorDefinition = getOperatorConfig(config, reversedOp, field); var cardinality = getOpCardinality(operatorDefinition); if (!((_operatorDefinition2 = operatorDefinition) !== null && _operatorDefinition2 !== void 0 && _operatorDefinition2.mongoFormatOp) && !((_revOperatorDefinitio = revOperatorDefinition) !== null && _revOperatorDefinitio !== void 0 && _revOperatorDefinitio.mongoFormatOp)) { meta.errors.push("Operator ".concat(operator, " is not supported")); return undefined; } // try reverse var not = _not; var opNeedsReverse = !((_operatorDefinition3 = operatorDefinition) !== null && _operatorDefinition3 !== void 0 && _operatorDefinition3.mongoFormatOp) && !!((_revOperatorDefinitio2 = revOperatorDefinition) !== null && _revOperatorDefinitio2 !== void 0 && _revOperatorDefinitio2.mongoFormatOp); var opCanReverse = !!((_revOperatorDefinitio3 = revOperatorDefinition) !== null && _revOperatorDefinitio3 !== void 0 && _revOperatorDefinitio3.mongoFormatOp); var canRev = opCanReverse && (!!config.settings.reverseOperatorsForNot || opNeedsReverse); var needRev = canRev && not || opNeedsReverse; var isRev = false; if (needRev) { var _ref3 = [reversedOp, operator]; operator = _ref3[0]; reversedOp = _ref3[1]; var _ref4 = [revOperatorDefinition, operatorDefinition]; operatorDefinition = _ref4[0]; revOperatorDefinition = _ref4[1]; not = !not; isRev = true; } var formattedField; var useExpr = false; if (fieldSrc == "func") { var _formatFunc = formatFunc(meta, config, field, parentRuleGroupField); var _formatFunc2 = _slicedToArray(_formatFunc, 2); formattedField = _formatFunc2[0]; useExpr = _formatFunc2[1]; } else { formattedField = formatFieldName(field, config, meta, parentRuleGroupField); formattedField = mongoFieldEscape(formattedField); if (_formatFieldName) { useExpr = true; formattedField = _formatFieldName(formattedField); } } if (formattedField == undefined) return undefined; //format value var valueSrcs = []; var valueTypes = []; var formattedValue; if (iValue != undefined) { var fvalue = iValue.map(function (currentValue, ind) { var valueSrc = iValueSrc ? iValueSrc.get(ind) : null; var valueType = iValueType ? iValueType.get(ind) : null; var cValue = completeValue(currentValue, valueSrc, config); var widget = getWidgetForFieldOp(config, field, operator, valueSrc); var fieldWidgetDef = getFieldWidgetConfig(config, field, operator, widget, valueSrc, { forExport: true }); var _formatValue = formatValue(meta, config, cValue, valueSrc, valueType, fieldWidgetDef, fieldDef, parentRuleGroupField, operator, operatorDefinition, asyncListValues), _formatValue2 = _slicedToArray(_formatValue, 2), fv = _formatValue2[0], fvUseExpr = _formatValue2[1]; if (fv !== undefined) { useExpr = useExpr || fvUseExpr; valueSrcs.push(valueSrc); valueTypes.push(valueType); } return fv; }); var hasUndefinedValues = fvalue.filter(function (v) { return v === undefined; }).size > 0; if (fvalue.size < cardinality || hasUndefinedValues) return undefined; formattedValue = cardinality > 1 ? fvalue.toArray() : cardinality == 1 ? fvalue.first() : null; } var wrapExpr = useExpr && _canWrapExpr; //build rule var fn = (_operatorDefinition4 = operatorDefinition) === null || _operatorDefinition4 === void 0 ? void 0 : _operatorDefinition4.mongoFormatOp; var args = [formattedField, operator, _value !== undefined && formattedValue == null ? _value : formattedValue, not, useExpr, valueSrcs.length > 1 ? valueSrcs : valueSrcs[0], valueTypes.length > 1 ? valueTypes : valueTypes[0], omit(operatorDefinition, opDefKeysToOmit), operatorOptions, fieldDef]; // `mongoFormatOp` function SHOULD handle `not` var ruleQuery = fn.call.apply(fn, [config.ctx].concat(args)); if (wrapExpr) { // if (not) { // ruleQuery = { "$not": ruleQuery }; // } ruleQuery = { "$expr": ruleQuery }; } else { // if (not) { // ruleQuery = { "$nor": [ ruleQuery ] }; // } } return ruleQuery; }; var formatValue = function formatValue(meta, config, currentValue, valueSrc, valueType, fieldWidgetDef, fieldDef, parentPath, operator, operatorDef, asyncListValues) { if (currentValue === undefined) return [undefined, false]; var ret; var useExpr = false; if (valueSrc == "field") { var _formatRightField = formatRightField(meta, config, currentValue, parentPath); var _formatRightField2 = _slicedToArray(_formatRightField, 2); ret = _formatRightField2[0]; useExpr = _formatRightField2[1]; } else if (valueSrc == "func") { var _formatFunc3 = formatFunc(meta, config, currentValue, parentPath); var _formatFunc4 = _slicedToArray(_formatFunc3, 2); ret = _formatFunc4[0]; useExpr = _formatFunc4[1]; } else { var _ret; if (typeof (fieldWidgetDef === null || fieldWidgetDef === void 0 ? void 0 : fieldWidgetDef.mongoFormatValue) === "function") { var fn = fieldWidgetDef.mongoFormatValue; var args = [currentValue, _objectSpread(_objectSpread({}, fieldDef ? pick(fieldDef, ["fieldSettings", "listValues"]) : {}), {}, { asyncListValues: asyncListValues }), //useful options: valueFormat for date/time omit(fieldWidgetDef, widgetDefKeysToOmit)]; if (operator) { args.push(operator); args.push(operatorDef); } ret = fn.call.apply(fn, [config.ctx].concat(args)); } else { ret = currentValue; } if ((_ret = ret) !== null && _ret !== void 0 && _ret["$dateFromString"]) { // $dateFromString (or $toDate) is an aggregation operator only useExpr = true; } } return [ret, useExpr]; }; var formatRightField = function formatRightField(meta, config, rightField, parentPath) { var fieldSeparator = config.settings.fieldSeparator; var ret; var useExpr = true; if (rightField) { var rightFieldDefinition = getFieldConfig(config, rightField) || {}; var fieldParts = getFieldParts(rightField, config); var fieldPartsLabels = getFieldPathLabels(rightField, config); var fieldFullLabel = fieldPartsLabels ? fieldPartsLabels.join(fieldSeparator) : null; var formatFieldFn = config.settings.formatField; var rightFieldName = formatFieldName(rightField, config, meta, parentPath); var formattedField = formatFieldFn(rightFieldName, fieldParts, fieldFullLabel, rightFieldDefinition, config, false); ret = "$" + mongoFieldEscape(formattedField); } return [ret, useExpr]; }; var formatFunc = function formatFunc(meta, config, currentValue, parentPath) { var _currentValue$get, _currentValue$get2; var useExpr = true; var ret; var funcKey = (_currentValue$get = currentValue.get) === null || _currentValue$get === void 0 ? void 0 : _currentValue$get.call(currentValue, "func"); var args = (_currentValue$get2 = currentValue.get) === null || _currentValue$get2 === void 0 ? void 0 : _currentValue$get2.call(currentValue, "args"); var funcConfig = getFuncConfig(config, funcKey); if (!funcConfig) { meta.errors.push("Func ".concat(funcKey, " is not defined in config")); return [undefined, false]; } var funcParts = getFieldParts(funcKey, config); var funcLastKey = funcParts[funcParts.length - 1]; var funcName = funcConfig.mongoFunc || funcLastKey; var mongoArgsAsObject = funcConfig.mongoArgsAsObject; var formattedArgs = {}; var argsCnt = 0; var lastArg = undefined; var gaps = []; var missingArgKeys = []; for (var argKey in funcConfig.args) { var _argValue; argsCnt++; var argConfig = funcConfig.args[argKey]; var fieldDef = getFieldConfig(config, argConfig); var defaultValue = argConfig.defaultValue, isOptional = argConfig.isOptional; var defaultValueSrc = defaultValue !== null && defaultValue !== void 0 && defaultValue.func ? "func" : "value"; var argVal = args ? args.get(argKey) : undefined; var argValue = argVal ? argVal.get("value") : undefined; var argValueSrc = argVal ? argVal.get("valueSrc") : undefined; if (argValueSrc !== "func" && (_argValue = argValue) !== null && _argValue !== void 0 && _argValue.toJS) { // value should not be Immutable argValue = argValue.toJS(); } var argAsyncListValues = argVal ? argVal.get("asyncListValues") : undefined; var operator = null; var widget = getWidgetForFieldOp(config, argConfig, operator, argValueSrc); var fieldWidgetDef = getFieldWidgetConfig(config, argConfig, operator, widget, argValueSrc, { forExport: true }); var _formatValue3 = formatValue(meta, config, argValue, argValueSrc, argConfig.type, fieldWidgetDef, fieldDef, parentPath, null, null, argAsyncListValues), _formatValue4 = _slicedToArray(_formatValue3, 2), formattedArgVal = _formatValue4[0], _argUseExpr = _formatValue4[1]; if (argValue != undefined && formattedArgVal === undefined) { if (argValueSrc != "func") // don't triger error if args value is another incomplete function meta.errors.push("Can't format value of arg ".concat(argKey, " for func ").concat(funcKey)); return [undefined, false]; } var formattedDefaultVal = void 0; if (formattedArgVal === undefined && !isOptional && defaultValue != undefined) { var defaultWidget = getWidgetForFieldOp(config, argConfig, operator, defaultValueSrc); var defaultFieldWidgetDef = getFieldWidgetConfig(config, argConfig, operator, defaultWidget, defaultValueSrc, { forExport: true }); var _ = void 0; var _formatValue5 = formatValue(meta, config, defaultValue, defaultValueSrc, argConfig.type, defaultFieldWidgetDef, fieldDef, parentPath, null, null, argAsyncListValues); var _formatValue6 = _slicedToArray(_formatValue5, 2); formattedDefaultVal = _formatValue6[0]; _ = _formatValue6[1]; if (formattedDefaultVal === undefined) { if (defaultValueSrc != "func") // don't triger error if args value is another incomplete function meta.errors.push("Can't format default value of arg ".concat(argKey, " for func ").concat(funcKey)); return [undefined, false]; } } var finalFormattedVal = formattedArgVal !== null && formattedArgVal !== void 0 ? formattedArgVal : formattedDefaultVal; if (finalFormattedVal !== undefined) { if (gaps.length) { var _iterator = _createForOfIteratorHelper(gaps), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var missedArgKey = _step.value; formattedArgs[missedArgKey] = undefined; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } gaps = []; } formattedArgs[argKey] = finalFormattedVal; lastArg = finalFormattedVal; } else { if (!isOptional) missingArgKeys.push(argKey); gaps.push(argKey); } } if (missingArgKeys.length) { //meta.errors.push(`Missing vals for args ${missingArgKeys.join(", ")} for func ${funcKey}`); return [undefined, false]; // incomplete } if (typeof funcConfig.mongoFormatFunc === "function") { var fn = funcConfig.mongoFormatFunc; var _args = [formattedArgs]; ret = fn.call.apply(fn, [config.ctx].concat(_args)); } else if (funcConfig.mongoFormatFunc === null) { meta.errors.push("Functon ".concat(funcName, " is not supported")); return [undefined, false]; } else { if (mongoArgsAsObject) ret = _defineProperty({}, funcName, formattedArgs);else if (argsCnt == 1 && lastArg !== undefined) ret = _defineProperty({}, funcName, lastArg);else ret = _defineProperty({}, funcName, Object.values(formattedArgs)); } return [ret, useExpr]; };