merge-deep-ts
Version:
Deep fast merge JavaScript objects with circular references handling and TypeScript support
41 lines (40 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ERROR_NOT_ARRAY = exports.getCounter = exports.getType = exports.isMergeable = exports.isNullable = exports.isSet = exports.isMap = exports.isArray = exports.isObject = void 0;
const types_js_1 = require("./types.js");
const isObject = (obj) => Object.prototype.toString.call(obj) === "[object Object]";
exports.isObject = isObject;
const isArray = (obj) => Array.isArray(obj);
exports.isArray = isArray;
const isMap = (obj) => !!obj && Object.getPrototypeOf(obj) === Map.prototype;
exports.isMap = isMap;
const isSet = (obj) => !!obj && Object.getPrototypeOf(obj) === Set.prototype;
exports.isSet = isSet;
const isNullable = (obj) => obj === null || obj === undefined;
exports.isNullable = isNullable;
const isMergeable = (obj) => (0, exports.isObject)(obj) || (0, exports.isArray)(obj) || (0, exports.isMap)(obj) || (0, exports.isSet)(obj);
exports.isMergeable = isMergeable;
const getType = (obj) => {
if ((0, exports.isObject)(obj)) {
return types_js_1.MergeableType.Object;
}
if ((0, exports.isArray)(obj)) {
return types_js_1.MergeableType.Array;
}
if ((0, exports.isMap)(obj)) {
return types_js_1.MergeableType.Map;
}
if ((0, exports.isSet)(obj)) {
return types_js_1.MergeableType.Set;
}
if ((0, exports.isNullable)(obj)) {
return types_js_1.MergeableType.Nullable;
}
return types_js_1.MergeableType.NonMergeable;
};
exports.getType = getType;
exports.getCounter = (() => {
let counter = -1;
return (reset = false) => reset ? counter = 0 : ++counter;
})();
exports.ERROR_NOT_ARRAY = "Argument must be an array";