UNPKG

ts-hashcode

Version:

A module for generating a hashcode, written in TypeScript.

60 lines (59 loc) 1.94 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "typeof-util"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var typeof_util_1 = require("typeof-util"); /** * Generate a HashCode for a given string * @param value */ var HashCodeFromString = function (value) { var result = 0; for (var i = 0; i < value.length; i++) { result = (((result << 5) - result) + value.charCodeAt(i)) & 0xFFFFFFFF; } return result; }; /** * Generate a HashCode for a given object * @param value */ var HashCodeFromObject = function (value) { if (typeof_util_1.default(value.getTime) === 'function') { return value.getTime(); } var result = 0; for (var property in value) { if (Object.prototype.hasOwnProperty.call(value, property)) { result += HashCodeFromString(property + HashCode(value[property])); } } return result; }; /** * Generate a HashCode for a given value * @param value */ var HashCode = function (value) { var type = typeof_util_1.default(value); if (type === 'string' || type === 'number' || type === 'boolean') { return HashCodeFromString(value.toString()) + HashCodeFromString(type); } else if (type === 'object' || type === 'array') { return HashCodeFromObject(value) + HashCodeFromString(type); } else { return 0; } }; exports.default = HashCode; });