@enonic/mock-xp
Version:
Mock Enonic XP API JavaScript Library
135 lines (134 loc) • 3.9 kB
JavaScript
;
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;