ag-charts-community
Version:
Advanced Charting / Charts supporting Javascript / Typescript / React / Angular / Vue
140 lines • 4.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Creates a new object with a `parent` as its prototype
* and copies properties from the `child` into it.
* @param parent
* @param child
*/
function chainObjects(parent, child) {
var obj = Object.create(parent);
for (var prop in child) {
if (child.hasOwnProperty(prop)) {
obj[prop] = child[prop];
}
}
return obj;
}
exports.chainObjects = chainObjects;
function getValue(object, path, defaultValue) {
var parts = Array.isArray(path) ? path : path.split('.');
var value = object;
try {
parts.forEach(function (part) {
value = value[part];
});
}
catch (e) {
if (arguments.length === 3) {
value = defaultValue;
}
else {
throw e;
}
}
return value;
}
exports.getValue = getValue;
function emptyTarget(value) {
return Array.isArray(value) ? [] : {};
}
function cloneUnlessOtherwiseSpecified(value, options) {
return (options.clone !== false && options.isMergeableObject(value))
? deepMerge(emptyTarget(value), value, options)
: value;
}
exports.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
function defaultArrayMerge(target, source, options) {
return target.concat(source).map(function (element) {
return cloneUnlessOtherwiseSpecified(element, options);
});
}
exports.defaultArrayMerge = defaultArrayMerge;
function getMergeFunction(key, options) {
if (!options.customMerge) {
return deepMerge;
}
var customMerge = options.customMerge(key);
return typeof customMerge === 'function' ? customMerge : deepMerge;
}
function getEnumerableOwnPropertySymbols(target) {
return Object.getOwnPropertySymbols
? Object.getOwnPropertySymbols(target).filter(function (symbol) {
return target.propertyIsEnumerable(symbol);
})
: [];
}
function getKeys(target) {
return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));
}
function propertyIsOnObject(object, property) {
try {
return property in object;
}
catch (_) {
return false;
}
}
// Protects from prototype poisoning and unexpected merging up the prototype chain.
function propertyIsUnsafe(target, key) {
return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
&& Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable.
}
function mergeObject(target, source, options) {
var destination = {};
if (options.isMergeableObject(target)) {
getKeys(target).forEach(function (key) {
destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
});
}
getKeys(source).forEach(function (key) {
if (propertyIsUnsafe(target, key)) {
return;
}
if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
}
else {
destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
}
});
return destination;
}
function defaultIsMergeableObject(value) {
return isNonNullObject(value) && !isSpecial(value);
}
exports.defaultIsMergeableObject = defaultIsMergeableObject;
function isNonNullObject(value) {
return !!value && typeof value === 'object';
}
function isSpecial(value) {
var stringValue = Object.prototype.toString.call(value);
return stringValue === '[object RegExp]' || stringValue === '[object Date]';
}
function deepMerge(target, source, options) {
options = options || {};
options.arrayMerge = options.arrayMerge || defaultArrayMerge;
options.isMergeableObject = options.isMergeableObject || defaultIsMergeableObject;
// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
// implementations can use it. The caller may not replace it.
options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;
var sourceIsArray = Array.isArray(source);
var targetIsArray = Array.isArray(target);
var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
if (!sourceAndTargetTypesMatch) {
return cloneUnlessOtherwiseSpecified(source, options);
}
else if (sourceIsArray) {
return options.arrayMerge(target, source, options);
}
else {
return mergeObject(target, source, options);
}
}
exports.deepMerge = deepMerge;
function isObject(value) {
return typeof value === 'object' && !Array.isArray(value);
}
exports.isObject = isObject;
//# sourceMappingURL=object.js.map