@react-awesome-query-builder/core
Version:
User-friendly query builder for React. Core
538 lines (531 loc) • 27.3 kB
JavaScript
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];
};