angular-odata
Version:
Client side OData typescript library for Angular
136 lines • 16.3 kB
JavaScript
function cloneSymbol(targe) {
return Object(Symbol.prototype.valueOf.call(targe));
}
function cloneReg(targe) {
const reFlags = /\w*$/;
const result = new targe.constructor(targe.source, reFlags.exec(targe));
result.lastIndex = targe.lastIndex;
return result;
}
export const Types = {
rawType(value) {
return Object.prototype.toString.call(value).slice(8, -1);
},
isObject(value) {
return typeof value === 'object' && value !== null;
},
isPlainObject(value) {
if (this.rawType(value) !== 'Object') {
return false;
}
const prototype = Object.getPrototypeOf(value);
return prototype === null || prototype === Object.prototype;
},
isFunction(value) {
return typeof value === 'function';
},
isArray(value) {
return Array.isArray(value);
},
isMap(value) {
return this.rawType(value) === 'Map';
},
isEmpty(value) {
return (value === undefined ||
value === null ||
(typeof value === 'string' && !value.length) ||
(value instanceof Date && isNaN(value.valueOf())) ||
(Types.isMap(value) && !value.size) ||
(Types.isArray(value) && !value.length) ||
(Types.isFunction(value.isEmpty) && value.isEmpty()) ||
(Types.isArray(value) &&
value.every((v) => Types.isEmpty(v))) ||
(Types.isPlainObject(value) &&
!Object.keys(value).filter((k) => value.hasOwnProperty(k)).length));
},
isEqual(value1, value2) {
function getType(obj) {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
function areDatesEqual() {
return value1.getTime() === value2.getTime();
}
function areArraysBufferEqual() {
if (value1.byteLength !== value2.byteLength) {
return false;
}
var view1 = new DataView(value1);
var view2 = new DataView(value2);
var i = value1.byteLength;
while (i--) {
if (view1.getUint8(i) !== view2.getUint8(i)) {
return false;
}
}
return true;
}
function areArraysEqual() {
// Check length
if (value1.length !== value2.length)
return false;
// Check each item in the array
for (let i = 0; i < value1.length; i++) {
if (!Types.isEqual(value1[i], value2[i]))
return false;
}
// If no errors, return true
return true;
}
function areObjectsEqual() {
if (Object.keys(value1).length !== Object.keys(value2).length)
return false;
// Check each item in the object
for (let key in value1) {
if (Object.prototype.hasOwnProperty.call(value1, key)) {
if (!Types.isEqual(value1[key], value2[key]))
return false;
}
}
// If no errors, return true
return true;
}
function areFunctionsEqual() {
return value1.toString() === value2.toString();
}
function arePrimativesEqual() {
return value1 === value2;
}
// Get the object type
let type = getType(value1);
// If the two items are not the same type, return false
if (type !== getType(value2))
return false;
// Compare based on type
if (type === 'date')
return areDatesEqual();
if (type === 'arraybuffer')
return areArraysBufferEqual();
if (type === 'array')
return areArraysEqual();
if (type === 'object')
return areObjectsEqual();
if (type === 'function')
return areFunctionsEqual();
return arePrimativesEqual();
},
clone(target) {
const constrFun = target.constructor;
switch (this.rawType(target)) {
case 'Boolean':
case 'Number':
case 'String':
case 'Error':
case 'Date':
return new constrFun(target);
case 'RegExp':
return cloneReg(target);
case 'Symbol':
return cloneSymbol(target);
case 'Function':
return target;
default:
return null;
}
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvdXRpbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxXQUFXLENBQUMsS0FBVTtJQUM3QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBVTtJQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxj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QUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGNsb25lU3ltYm9sKHRhcmdlOiBhbnkpIHtcbiAgcmV0dXJuIE9iamVjdChTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh0YXJnZSkpO1xufVxuXG5mdW5jdGlvbiBjbG9uZVJlZyh0YXJnZTogYW55KSB7XG4gIGNvbnN0IHJlRmxhZ3MgPSAvXFx3KiQvO1xuICBjb25zdCByZXN1bHQgPSBuZXcgdGFyZ2UuY29uc3RydWN0b3IodGFyZ2Uuc291cmNlLCByZUZsYWdzLmV4ZWModGFyZ2UpKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHRhcmdlLmxhc3RJbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IFR5cGVzID0ge1xuICByYXdUeXBlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSk7XG4gIH0sXG5cbiAgaXNPYmplY3QodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xuICB9LFxuXG4gIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnJhd1R5cGUodmFsdWUpICE9PSAnT2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0sXG5cbiAgaXNGdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfSxcblxuICBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH0sXG5cbiAgaXNNYXAodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJhd1R5cGUodmFsdWUpID09PSAnTWFwJztcbiAgfSxcblxuICBpc0VtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIGlzTmFOKHZhbHVlLnZhbHVlT2YoKSkpIHx8XG4gICAgICAoVHlwZXMuaXNNYXAodmFsdWUpICYmICF2YWx1ZS5zaXplKSB8fFxuICAgICAgKFR5cGVzLmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAoVHlwZXMuaXNGdW5jdGlvbih2YWx1ZS5pc0VtcHR5KSAmJiB2YWx1ZS5pc0VtcHR5KCkpIHx8XG4gICAgICAoVHlwZXMuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICAgKHZhbHVlIGFzIGFueVtdKS5ldmVyeSgodikgPT4gVHlwZXMuaXNFbXB0eSh2KSkpIHx8XG4gICAgICAoVHlwZXMuaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiZcbiAgICAgICAgIU9iamVjdC5rZXlzKHZhbHVlKS5maWx0ZXIoKGspID0+IHZhbHVlLmhhc093blByb3BlcnR5KGspKS5sZW5ndGgpXG4gICAgKTtcbiAgfSxcblxuICBpc0VxdWFsKHZhbHVlMTogYW55LCB2YWx1ZTI6IGFueSkge1xuICAgIGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVEYXRlc0VxdWFsKCkge1xuICAgICAgcmV0dXJuIHZhbHVlMS5nZXRUaW1lKCkgPT09IHZhbHVlMi5nZXRUaW1lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXJlQXJyYXlzQnVmZmVyRXF1YWwoKSB7XG4gICAgICBpZiAodmFsdWUxLmJ5dGVMZW5ndGggIT09IHZhbHVlMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZpZXcxID0gbmV3IERhdGFWaWV3KHZhbHVlMSk7XG4gICAgICB2YXIgdmlldzIgPSBuZXcgRGF0YVZpZXcodmFsdWUyKTtcblxuICAgICAgdmFyIGkgPSB2YWx1ZTEuYnl0ZUxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKHZpZXcxLmdldFVpbnQ4KGkpICE9PSB2aWV3Mi5nZXRVaW50OChpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbCgpIHtcbiAgICAgIC8vIENoZWNrIGxlbmd0aFxuICAgICAgaWYgKHZhbHVlMS5sZW5ndGggIT09IHZhbHVlMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFUeXBlcy5pc0VxdWFsKHZhbHVlMVtpXSwgdmFsdWUyW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVPYmplY3RzRXF1YWwoKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKHZhbHVlMikubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIENoZWNrIGVhY2ggaXRlbSBpbiB0aGUgb2JqZWN0XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdmFsdWUxKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUxLCBrZXkpKSB7XG4gICAgICAgICAgaWYgKCFUeXBlcy5pc0VxdWFsKHZhbHVlMVtrZXldLCB2YWx1ZTJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcmVGdW5jdGlvbnNFcXVhbCgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTEudG9TdHJpbmcoKSA9PT0gdmFsdWUyLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXJlUHJpbWF0aXZlc0VxdWFsKCkge1xuICAgICAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb2JqZWN0IHR5cGVcbiAgICBsZXQgdHlwZSA9IGdldFR5cGUodmFsdWUxKTtcblxuICAgIC8vIElmIHRoZSB0d28gaXRlbXMgYXJlIG5vdCB0aGUgc2FtZSB0eXBlLCByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZSAhPT0gZ2V0VHlwZSh2YWx1ZTIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDb21wYXJlIGJhc2VkIG9uIHR5cGVcbiAgICBpZiAodHlwZSA9PT0gJ2RhdGUnKSByZXR1cm4gYXJlRGF0ZXNFcXVhbCgpO1xuICAgIGlmICh0eXBlID09PSAnYXJyYXlidWZmZXInKSByZXR1cm4gYXJlQXJyYXlzQnVmZmVyRXF1YWwoKTtcbiAgICBpZiAodHlwZSA9PT0gJ2FycmF5JykgcmV0dXJuIGFyZUFycmF5c0VxdWFsKCk7XG4gICAgaWYgKHR5cGUgPT09ICdvYmplY3QnKSByZXR1cm4gYXJlT2JqZWN0c0VxdWFsKCk7XG4gICAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHJldHVybiBhcmVGdW5jdGlvbnNFcXVhbCgpO1xuICAgIHJldHVybiBhcmVQcmltYXRpdmVzRXF1YWwoKTtcbiAgfSxcbiAgY2xvbmUodGFyZ2V0OiBhbnkpIHtcbiAgICBjb25zdCBjb25zdHJGdW4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgc3dpdGNoICh0aGlzLnJhd1R5cGUodGFyZ2V0KSkge1xuICAgICAgY2FzZSAnQm9vbGVhbic6XG4gICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICByZXR1cm4gbmV3IGNvbnN0ckZ1bih0YXJnZXQpO1xuICAgICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgICAgcmV0dXJuIGNsb25lUmVnKHRhcmdldCk7XG4gICAgICBjYXNlICdTeW1ib2wnOlxuICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wodGFyZ2V0KTtcbiAgICAgIGNhc2UgJ0Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSxcbn07XG4iXX0=