UNPKG

af-consul

Version:

A highly specialized function library

89 lines 3.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getConfigHash = void 0; const _ = __importStar(require("lodash")); const XXH = __importStar(require("xxhashjs")); const utils_1 = require("./utils"); const getHash = (data, base = '32', seed = 0xCAFEBABE) => { let stringToHash = ''; if (data === undefined) { stringToHash = '#thisisundefined#'; } else if (data === null) { stringToHash = '#thisisnull#'; } else if (data === '') { stringToHash = '#thisisemptystring#'; } else if (Array.isArray(data)) { const arr = data.map((value) => ([value, getHash(String(value) + (typeof value), '32', seed)])); arr.sort(([, a], [, b]) => { if (a < b) return -1; if (a > b) return 1; return 0; }); stringToHash = JSON.stringify(arr.map(([v]) => v)); } else if ((0, utils_1.isObject)(data)) { const op = Object.prototype.toString.call(data); // === '[object Date]' switch (op) { case '[object Function]': case '[object Date]': stringToHash += data.toString(); break; // case '[object Object]': default: { const keys = Object.keys(data).sort(); keys.forEach((key) => { stringToHash += key + getHash(data[key], base, seed); }); } } } else if (typeof data === 'string') { stringToHash = data; } else if (typeof data === 'number') { stringToHash = `i${String(data)}`; } else if (typeof data === 'boolean') { stringToHash = `b${data ? 1 : 0}`; } else if (typeof data === 'function') { stringToHash = `f${data.toString()}`; } return XXH[`h${base}`](stringToHash, seed).toString(16); }; const getConfigHash = (options) => { const opt = _.pick(options.config, ['consul', 'webServer']); const hash = getHash(opt); options.hash = hash; return hash; }; exports.getConfigHash = getConfigHash; //# sourceMappingURL=hash.js.map