UNPKG

@enonic/mock-xp

Version:

Mock Enonic XP API JavaScript Library

135 lines (134 loc) 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Objects = void 0; var tslib_1 = require("tslib"); var String_1 = require("../String"); function hash() { var e_1, _a; var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var hash = 0; try { for (var args_1 = tslib_1.__values(args), args_1_1 = args_1.next(); !args_1_1.done; args_1_1 = args_1.next()) { var arg = args_1_1.value; if (arg === null || arg === undefined) { hash = 31 * hash; } else if (typeof arg === 'object') { hash = 31 * hash + hashObject(arg); } else { hash = 31 * hash + (typeof arg === 'string' ? (0, String_1.stringHashCode)(arg) : arg); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (args_1_1 && !args_1_1.done && (_a = args_1.return)) _a.call(args_1); } finally { if (e_1) throw e_1.error; } } return hash; } function hashObject(obj) { if (Array.isArray(obj)) { return hashArray(obj); } else if (typeof obj === 'function') { return (0, String_1.stringHashCode)(obj.name); } else { var int = 0; for (var key in obj) { if (obj.hasOwnProperty(key)) { int = 31 * int + hash([key, obj[key]]); } } return int; } } function hashArray(arr) { var e_2, _a; var int = 0; try { for (var arr_1 = tslib_1.__values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) { var item = arr_1_1.value; int = 31 * int + hash(item); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1); } finally { if (e_2) throw e_2.error; } } return int; } function hashCode(obj) { var e_3, _a; if (obj === null || obj === undefined) { return 0; } else if (typeof obj === 'number') { var bits = Float64Array.of(obj); var intHash = bits[0]; return intHash ^ (intHash >> 32); } else if (typeof obj === 'string') { var hash_1 = 0; for (var i = 0; i < obj.length; i++) { hash_1 = (hash_1 << 5) - hash_1 + obj.charCodeAt(i); hash_1 = hash_1 & hash_1; } return hash_1; } else if (typeof obj === 'boolean') { return obj ? 1231 : 1237; } else if (Array.isArray(obj)) { var hash_2 = 1; try { for (var obj_1 = tslib_1.__values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { var item = obj_1_1.value; hash_2 = 31 * hash_2 + hashCode(item); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); } finally { if (e_3) throw e_3.error; } } return hash_2; } else { var hash_3 = 0; for (var key in obj) { if (obj.hasOwnProperty(key)) { hash_3 = 31 * hash_3 + hashCode([key, obj[key]]); } } return hash_3; } } var Objects = (function () { function Objects() { } Objects.hash = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return hash.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(args), false)); }; Objects.hashCode = function (obj) { return hashCode(obj); }; return Objects; }()); exports.Objects = Objects;