@react-awesome-query-builder/core
Version:
User-friendly query builder for React. Core
616 lines (606 loc) • 26.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof3 = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.applyToJS = applyToJS;
exports.cleanJSX = void 0;
Object.defineProperty(exports, "clone", {
enumerable: true,
get: function get() {
return _clone["default"];
}
});
exports.logger = exports.isTypeOf = exports.isTruthy = exports.isSafeKeyForObject = exports.isObjectOrArray = exports.isObject = exports.isJsonLogic = exports.isJsonCompatible = exports.isJSX = exports.isImmutableList = exports.isImmutable = exports.isDirtyJSX = exports.hasSafeOwnProperty = exports.getOpCardinality = exports.getLogger = exports.getFirstDefined = exports.escapeRegExp = exports.deepFreeze = exports.deepEqual = void 0;
exports.mergeArraysSmart = mergeArraysSmart;
exports.mergeIn = exports.mergeCustomizerNoArrays = void 0;
Object.defineProperty(exports, "moment", {
enumerable: true,
get: function get() {
return _moment["default"];
}
});
exports.shallowEqual = exports.shallowCopy = exports.setIn = exports.opDefKeysToOmit = exports.omit = void 0;
exports.sleep = sleep;
exports.toImmutableList = toImmutableList;
exports.typeOf = void 0;
Object.defineProperty(exports, "uuid", {
enumerable: true,
get: function get() {
return _uuid["default"];
}
});
exports.widgetDefKeysToOmit = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _immutable = _interopRequireWildcard(require("immutable"));
var _uuid = _interopRequireDefault(require("./uuid"));
var _clone = _interopRequireDefault(require("clone"));
var _moment = _interopRequireDefault(require("moment"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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) { (0, _defineProperty2["default"])(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; }
var widgetDefKeysToOmit = exports.widgetDefKeysToOmit = ["formatValue", "mongoFormatValue", "sqlFormatValue", "jsonLogic", "elasticSearchFormatValue", "spelFormatValue", "spelImportFuncs", "spelImportValue"];
var opDefKeysToOmit = exports.opDefKeysToOmit = ["formatOp", "mongoFormatOp", "sqlFormatOp", "jsonLogic", "spelFormatOp"];
var isObject = exports.isObject = function isObject(v) {
return (0, _typeof2["default"])(v) === "object" && v !== null && Object.prototype.toString.call(v) === "[object Object]";
};
// export const isObject = (v) => (typeof v == "object" && v !== null && !Array.isArray(v));
var isObjectOrArray = exports.isObjectOrArray = function isObjectOrArray(v) {
return (0, _typeof2["default"])(v) === "object" && v !== null;
};
var typeOf = exports.typeOf = function typeOf(v) {
var t = (0, _typeof2["default"])(v);
if (t && v !== null && Array.isArray(v)) return "array";else return t;
};
var isTypeOf = exports.isTypeOf = function isTypeOf(v, type) {
if (typeOf(v) === type) return true;
if (type === "number" && !isNaN(v)) return true; //can be casted
return false;
};
var isTruthy = exports.isTruthy = function isTruthy(value) {
return !!value;
};
var shallowCopy = exports.shallowCopy = function shallowCopy(v) {
if ((0, _typeof2["default"])(v) === "object" && v !== null) {
if (Array.isArray(v)) {
return (0, _toConsumableArray2["default"])(v);
} else if (isObject(v)) {
return _objectSpread({}, v);
}
}
return v;
};
var isSafeKeyForObject = exports.isSafeKeyForObject = function isSafeKeyForObject(k) {
return !["__proto__", "constructor", "prototype"].includes(k);
};
var hasSafeOwnProperty = exports.hasSafeOwnProperty = function hasSafeOwnProperty(obj, k) {
return Object.prototype.hasOwnProperty.call(obj, k) && isSafeKeyForObject(k);
};
var setIn = exports.setIn = function setIn(obj, path, newValue, opts) {
var defaultOpts = {
canCreate: false,
canIgnore: false,
canChangeType: false
};
opts = _objectSpread(_objectSpread({}, defaultOpts), opts !== null && opts !== void 0 ? opts : {});
var _opts = opts,
canCreate = _opts.canCreate,
canIgnore = _opts.canIgnore,
canChangeType = _opts.canChangeType;
if (!Array.isArray(path)) {
throw new Error("path is not an array");
}
if (!path.length) {
throw new Error("path is empty");
}
var expectedObjType = typeof path[0] === "number" ? "array" : "object";
if (!isTypeOf(obj, expectedObjType)) {
throw new Error("obj is not of type ".concat(expectedObjType));
}
var newObj = shallowCopy(obj);
var target = newObj;
var pathToTarget = (0, _toConsumableArray2["default"])(path);
var targetKey = pathToTarget.pop();
var goodPath = [];
var _iterator = _createForOfIteratorHelper(pathToTarget),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var k = _step.value;
if (!isSafeKeyForObject(k)) {
throw new Error("path contains unsafe ".concat(k));
}
var nextKey = path[goodPath.length];
var expectedType = typeof nextKey === "number" ? "array" : "object";
if (!isTypeOf(target[k], expectedType)) {
// value at path has another type
if (target[k] ? canChangeType : canCreate) {
target[k] = expectedType === "array" ? [] : {};
} else if (canIgnore) {
target = undefined;
newObj = obj; // return initial obj as-is
break;
} else {
throw new Error("Value by path ".concat(goodPath.join("."), " should have type ").concat(expectedType, " but got ").concat(typeOf(target[k])));
}
}
goodPath.push(k);
target[k] = shallowCopy(target[k]);
target = target[k];
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
if (target) {
if (newValue === undefined) {
delete target[targetKey];
} else {
var oldValue = target[targetKey];
if (typeof newValue === "function") {
target[targetKey] = newValue(oldValue);
} else {
target[targetKey] = newValue;
}
}
}
return newObj;
};
var mergeIn = exports.mergeIn = function mergeIn(obj, mixin, opts) {
var defaultOpts = {
canCreate: true,
canChangeType: true,
deepCopyObj: false,
deepCopyMixin: false,
arrayMergeMode: "merge",
// "merge" | "join" | "joinMissing" | "joinRespectOrder" | "overwrite"
circularRefs: false,
specialSymbols: true
};
opts = _objectSpread(_objectSpread({}, defaultOpts), opts !== null && opts !== void 0 ? opts : {});
var _opts2 = opts,
deepCopyObj = _opts2.deepCopyObj,
deepCopyMixin = _opts2.deepCopyMixin,
circularRefs = _opts2.circularRefs,
specialSymbols = _opts2.specialSymbols;
if (!isTypeOf(obj, "object")) {
throw new Error("obj is not an object");
}
if (!isTypeOf(mixin, "object")) {
throw new Error("mixin is not an object");
}
// symbols
var $v = Symbol["for"]("_v");
var $type = Symbol["for"]("_type");
var $canCreate = Symbol["for"]("_canCreate");
var $canChangeType = Symbol["for"]("_canChangeType");
var $arrayMergeMode = Symbol["for"]("_arrayMergeMode");
var newObj = deepCopyObj ? (0, _clone["default"])(obj, circularRefs) : shallowCopy(obj);
var newObjChanged = false;
var _process2 = function _process(path, targetMix, target) {
var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},
isMixingArray = _ref.isMixingArray,
isMixingRealArray = _ref.isMixingRealArray;
var indexDelta = 0;
var _loop = function _loop() {
if (!isSafeKeyForObject(mk)) {
throw new Error("mixin contains unsafe key ".concat(mk));
// newObjChanged = false;
// break;
}
if (!hasSafeOwnProperty(targetMix, mk)) {
return 0; // continue
}
var k = isMixingArray ? Number(mk) + indexDelta : mk;
var useSymbols = specialSymbols && isObjectOrArray(targetMix[mk]);
var canCreate = opts.canCreate,
canChangeType = opts.canChangeType,
arrayMergeMode = opts.arrayMergeMode;
var targetMixValue = targetMix[mk];
var isMixValueExplicit = false;
var expectedType = typeOf(targetMixValue);
if (useSymbols) {
var _targetMix$mk, _targetMix$mk$$canCre, _targetMix$mk2, _targetMix$mk$$canCha, _targetMix$mk3, _targetMix$mk$$arrayM, _targetMix$mk4;
if ($v in targetMix[mk]) {
isMixValueExplicit = true;
targetMixValue = targetMix[mk][$v];
}
expectedType = ((_targetMix$mk = targetMix[mk]) === null || _targetMix$mk === void 0 ? void 0 : _targetMix$mk[$type]) || typeOf(targetMixValue);
canCreate = (_targetMix$mk$$canCre = (_targetMix$mk2 = targetMix[mk]) === null || _targetMix$mk2 === void 0 ? void 0 : _targetMix$mk2[$canCreate]) !== null && _targetMix$mk$$canCre !== void 0 ? _targetMix$mk$$canCre : canCreate;
canChangeType = (_targetMix$mk$$canCha = (_targetMix$mk3 = targetMix[mk]) === null || _targetMix$mk3 === void 0 ? void 0 : _targetMix$mk3[$canChangeType]) !== null && _targetMix$mk$$canCha !== void 0 ? _targetMix$mk$$canCha : canChangeType;
arrayMergeMode = (_targetMix$mk$$arrayM = (_targetMix$mk4 = targetMix[mk]) === null || _targetMix$mk4 === void 0 ? void 0 : _targetMix$mk4[$arrayMergeMode]) !== null && _targetMix$mk$$arrayM !== void 0 ? _targetMix$mk$$arrayM : arrayMergeMode;
if (expectedType === "array" && arrayMergeMode === "overwrite") {
isMixValueExplicit = true;
}
}
if (expectedType !== "array") {
arrayMergeMode = undefined;
}
if (!isTypeOf(target[k], expectedType)) {
// value at path has another type
if (target[k] ? canChangeType : canCreate) {
if (expectedType === "array" || expectedType === "object") {
target[k] = expectedType === "array" ? [] : {};
newObjChanged = true;
} else {
// primitive
}
} else {
return 0; // continue
}
}
if (expectedType === "array" || expectedType === "object") {
if (isMixValueExplicit) {
// deep copy from mix to target
newObjChanged = true;
target[k] = deepCopyMixin ? (0, _clone["default"])(targetMixValue, circularRefs) : shallowCopy(targetMixValue);
} else {
if (arrayMergeMode && ["join", "joinMissing", "joinRespectOrder"].includes(arrayMergeMode)) {
// join 2 arrays
newObjChanged = true;
var left = deepCopyObj ? target[k] : (0, _clone["default"])(target[k], circularRefs);
var right = deepCopyMixin ? (0, _clone["default"])(targetMixValue, circularRefs) : targetMixValue;
if (arrayMergeMode === "joinRespectOrder") {
target[k] = mergeArraysSmart(left, right);
} else {
if (arrayMergeMode === "joinMissing") {
right = right.filter(function (v) {
return !left.includes(v);
});
}
target[k] = [].concat((0, _toConsumableArray2["default"])(left), (0, _toConsumableArray2["default"])(right));
}
} else {
var _targetMix$mk5;
// recursive merge
if (!deepCopyObj) {
target[k] = shallowCopy(target[k]);
}
_process2([].concat((0, _toConsumableArray2["default"])(path), [mk]), targetMixValue, target[k], {
isMixingArray: expectedType === "array",
isMixingRealArray: expectedType === "array" && !((_targetMix$mk5 = targetMix[mk]) !== null && _targetMix$mk5 !== void 0 && _targetMix$mk5[$type])
});
}
}
} else {
var needDelete = targetMixValue === undefined && !isMixingRealArray && !isMixValueExplicit;
var valueExists = k in target;
if (needDelete) {
if (valueExists) {
newObjChanged = true;
if (Array.isArray(target)) {
target.splice(k, 1);
indexDelta--;
} else {
delete target[k];
}
}
} else {
newObjChanged = true;
target[k] = targetMixValue;
}
}
},
_ret;
for (var mk in targetMix) {
_ret = _loop();
if (_ret === 0) continue;
}
};
_process2([], mixin, newObj);
return newObjChanged ? newObj : obj;
};
var omit = exports.omit = function omit(obj, keys) {
return Object.fromEntries(Object.entries(obj).filter(function (_ref2) {
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 1),
k = _ref3[0];
return !keys.includes(k);
}));
};
// RegExp.quote = function (str) {
// return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
// };
var getOpCardinality = exports.getOpCardinality = function getOpCardinality(opDef) {
var _opDef$cardinality;
return (_opDef$cardinality = opDef === null || opDef === void 0 ? void 0 : opDef.cardinality) !== null && _opDef$cardinality !== void 0 ? _opDef$cardinality : 1;
};
// const immutableEqual = function(v1, v2) {
// if (v1 === v2) {
// return true;
// } else {
// return v1.equals(v2);
// }
// };
var deepEqual = exports.deepEqual = function deepEqual(v1, v2) {
if (v1 === v2) {
return true;
} else if (_immutable.Map.isMap(v1)) {
return v1.equals(v2);
} else {
return JSON.stringify(v1) == JSON.stringify(v2);
}
};
// //Do sets have same values?
// const eqSet = function (as, bs) {
// if (as.size !== bs.size) return false;
// for (var a of as) if (!bs.has(a)) return false;
// return true;
// };
// //Do arrays have same values?
// const eqArrSet = function (arr1, arr2) {
// return eqSet(new Set(arr1), new Set(arr2));
// };
var shallowEqual = exports.shallowEqual = function shallowEqual(a, b) {
var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (a === b) {
return true;
} else if (Array.isArray(a)) return shallowEqualArrays(a, b, deep);else if (_immutable.Map.isMap(a)) return a.equals(b);else if ((0, _typeof2["default"])(a) == "object") return shallowEqualObjects(a, b, deep);else return a === b;
};
function shallowEqualArrays(arrA, arrB) {
var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (arrA === arrB) {
return true;
}
if (!arrA || !arrB) {
return false;
}
var len = arrA.length;
if (arrB.length !== len) {
return false;
}
for (var i = 0; i < len; i++) {
var isEqual = deep ? shallowEqual(arrA[i], arrB[i], deep) : arrA[i] === arrB[i];
if (!isEqual) {
return false;
}
}
return true;
}
function shallowEqualObjects(objA, objB) {
var deep = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (objA === objB) {
return true;
}
if (!objA || !objB) {
return false;
}
var aKeys = Object.keys(objA);
var bKeys = Object.keys(objB);
var len = aKeys.length;
if (bKeys.length !== len) {
return false;
}
for (var i = 0; i < len; i++) {
var key = aKeys[i];
var isEqual = deep ? shallowEqual(objA[key], objB[key], deep) : objA[key] === objB[key];
if (!isEqual) {
return false;
}
}
return true;
}
var isImmutable = exports.isImmutable = function isImmutable(v) {
return (0, _typeof2["default"])(v) === "object" && v !== null && typeof v.toJS === "function";
};
var isImmutableList = exports.isImmutableList = function isImmutableList(v) {
return isImmutable(v) && _immutable["default"].isList(v); // Immutable.isIndexed(v)
};
function toImmutableList(v) {
return isImmutableList(v) ? v : new _immutable["default"].List(v);
}
function applyToJS(v) {
return isImmutable(v) ? v.toJS() : v;
}
var escapeRegExp = exports.escapeRegExp = function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\/]/g, "\\$&"); // $& means the whole matched string
};
var mergeCustomizerNoArrays = exports.mergeCustomizerNoArrays = function mergeCustomizerNoArrays(objValue, srcValue, _key, _object, _source, _stack) {
if (Array.isArray(objValue)) {
return srcValue;
}
};
var _cleanJSX = exports.cleanJSX = function cleanJSX(jsx) {
var jsxKeys = ["$$typeof", "_owner", "_store", "ref", "key"];
var getName = function getName(val) {
if (typeof val === "string") {
return val;
} else if (typeof val === "function") {
return val.name;
}
return val;
};
if (jsx instanceof Array) {
return jsx.map(function (el, _i) {
return _cleanJSX(el);
});
} else if ((0, _typeof2["default"])(jsx) === "object" && jsx !== null) {
if (isDirtyJSX(jsx)) {
var _cleaned$props;
var cleaned = omit(jsx, jsxKeys);
if (cleaned.type) {
cleaned.type = getName(cleaned.type);
}
if (cleaned !== null && cleaned !== void 0 && (_cleaned$props = cleaned.props) !== null && _cleaned$props !== void 0 && _cleaned$props.children) {
cleaned.props.children = _cleanJSX(cleaned.props.children);
}
return cleaned;
}
}
return jsx;
};
var isDirtyJSX = exports.isDirtyJSX = function isDirtyJSX(jsx) {
return (0, _typeof2["default"])(jsx) === "object" && jsx !== null && !Array.isArray(jsx) && Object.keys(jsx).includes("type") && Object.keys(jsx).includes("props") // even if {}
&& Object.keys(jsx).includes("key") // even if null
&& Object.keys(jsx).includes("ref") // even if null
&& Object.keys(jsx).includes("$$typeof"); // Symbol(react.element)
};
var isJSX = exports.isJSX = function isJSX(jsx) {
return (0, _typeof2["default"])(jsx) === "object" && jsx !== null && !Array.isArray(jsx) && typeof jsx["type"] === "string" && Object.keys(jsx).includes("props");
};
var isJsonLogic = exports.isJsonLogic = function isJsonLogic(logic) {
var isJL = (0, _typeof2["default"])(logic) === "object" // An object
&& logic !== null // but not null
&& !Array.isArray(logic) // and not an array
&& Object.keys(logic).length === 1; // with exactly one key
if (isJL) {
// additional checks ?
}
return isJL;
};
function sleep(delay) {
return new Promise(function (resolve) {
setTimeout(resolve, delay);
});
}
// [1, 4, 9] + [1, 5, 9] => [1, 4, 5, 9]
// Used for merging arrays of operators for different widgets of 1 type
function mergeArraysSmart(arr1, arr2) {
if (!arr1) arr1 = [];
if (!arr2) arr2 = [];
return arr2.map(function (op) {
return [op, arr1.indexOf(op)];
}).map(function (_ref4, i, orig) {
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
op = _ref5[0],
ind = _ref5[1];
if (ind == -1) {
var next = orig.slice(i + 1);
var prevs = orig.slice(0, i);
var after = (0, _toConsumableArray2["default"])(prevs).reverse().find(function (_ref6) {
var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
_cop = _ref7[0],
ci = _ref7[1];
return ci != -1;
});
var prev = prevs[prevs.length - 1];
var before = next.find(function (_ref8) {
var _ref9 = (0, _slicedToArray2["default"])(_ref8, 2),
_cop = _ref9[0],
ci = _ref9[1];
return ci != -1;
});
var isAfterDirectly = after && after === prevs[prevs.length - 1];
var isBeforeDirectly = before && next === next[0];
if (isAfterDirectly) {
return [op, "after", after[0]];
} else if (isBeforeDirectly) {
return [op, "before", before[0]];
} else if (after) {
if (prev) {
return [op, "after", prev[0]];
}
return [op, "after", after[0]];
} else if (before) {
return [op, "before", before[0]];
} else {
return [op, "append", null];
}
} else {
// already exists
return null;
}
}).filter(function (x) {
return x !== null;
}).reduce(function (acc, _ref10) {
var _ref11 = (0, _slicedToArray2["default"])(_ref10, 3),
newOp = _ref11[0],
rel = _ref11[1],
relOp = _ref11[2];
var ind = acc.indexOf(relOp);
if (acc.indexOf(newOp) === -1) {
if (ind > -1) {
// insert after or before
var offset = rel === "after" ? 1 : 0;
acc.splice(ind + offset, 0, newOp);
} else {
// insert to end or start
acc.splice(rel === "append" ? Infinity : 0, 0, newOp);
}
}
return acc;
}, arr1.slice());
}
var _deepFreeze = exports.deepFreeze = function deepFreeze(obj) {
if ((0, _typeof2["default"])(obj) === "object" && obj !== null && !isDirtyJSX(obj)) {
Object.keys(obj).forEach(function (prop) {
if (prop !== "__cache") {
_deepFreeze(obj[prop]);
}
});
Object.freeze(obj);
}
};
var _isJsonCompatible = exports.isJsonCompatible = function isJsonCompatible(tpl, obj) {
var bag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
if (isObject(tpl)) {
if (tpl["var"]) {
bag[tpl["var"]] = obj;
return true;
}
if (!isObject(obj)) return false;
for (var k in tpl) {
var tv = tpl[k];
var ov = obj[k];
if (!_isJsonCompatible(tv, ov, bag, [].concat((0, _toConsumableArray2["default"])(path), [k]))) return false;
}
return true;
} else if (Array.isArray(tpl)) {
if (!Array.isArray(obj)) return false;
for (var i = 0; i < tpl.length; i++) {
var _tv = tpl[i];
var _ov = obj[i];
if (!_isJsonCompatible(_tv, _ov, bag, [].concat((0, _toConsumableArray2["default"])(path), [i]))) return false;
}
return true;
} else {
return tpl === obj;
}
};
var isDev = function isDev() {
var _process3;
return typeof process !== "undefined" && ((_process3 = process) === null || _process3 === void 0 || (_process3 = _process3.env) === null || _process3 === void 0 ? void 0 : _process3.NODE_ENV) == "development";
};
var isTest = function isTest() {
var _process4;
return typeof process !== "undefined" && ((_process4 = process) === null || _process4 === void 0 || (_process4 = _process4.env) === null || _process4 === void 0 ? void 0 : _process4.NODE_ENV_TEST) == "true";
};
var getLogger = exports.getLogger = function getLogger(devMode) {
if (isTest()) {
return _objectSpread(_objectSpread({}, console), {}, {
log: function log() {},
debug: function debug() {},
info: function info() {}
});
}
var verbose = devMode != undefined ? devMode : isDev();
return verbose ? console : {
error: function error() {},
log: function log() {},
warn: function warn() {},
debug: function debug() {},
info: function info() {}
};
};
var getFirstDefined = exports.getFirstDefined = function getFirstDefined() {
var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var ret;
for (var i = 0; i < arr.length; i++) {
var v = arr[i];
if (v !== undefined) {
ret = v;
break;
}
}
return ret;
};
var logger = exports.logger = getLogger();