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