UNPKG

af-consul

Version:

A highly specialized function library

202 lines 6.63 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.isObject = exports.sleep = exports.getPackageJson = exports.toMills = exports.minimizeCache = exports.serviceConfigDiff = exports.parseTags = exports.parseMeta = exports.substitute = exports.substitutePercentBracket = exports.parseBoolean = exports.removeAroundQuotas = void 0; const fs = __importStar(require("fs")); const removeAroundQuotas = (str) => { if (!str) { return str; } const re = /^(["'])([^\r\n]+)(\1)$/; while (re.test(str)) { str = str.replace(re, '$2'); } return str; }; exports.removeAroundQuotas = removeAroundQuotas; const parseBoolean = (bv) => { if (typeof bv === 'boolean' || typeof bv === 'number') { return !!bv; } if (typeof bv !== 'string') { bv = String(bv); } return !/^(false|no|0)$/i.test(bv.trim().toLowerCase()); }; exports.parseBoolean = parseBoolean; const substitutePercentBracket = (v, data) => { const re = /%?{([^}]+)}/g; let result = v; const matches = [...v.matchAll(re)]; matches.forEach(([found, propName]) => { const substitution = String(data[propName] || ''); result = result.replace(found, substitution); }); return result; }; exports.substitutePercentBracket = substitutePercentBracket; const substitute = (meta, data) => { Object.entries(meta).forEach(([k, v]) => { if (typeof v === 'string') { meta[k] = (0, exports.substitutePercentBracket)(v, data); } }); }; exports.substitute = substitute; const parseMeta = (m, data) => { const metaData = {}; if (!m) { return metaData; } const fillMetaData = (o) => { Object.entries(o).forEach(([k, v]) => { if (!['string', 'number'].includes(typeof v)) { v = String(v); } if (/^[A-Z][A-Z_\d]+$/i.test(k)) { metaData[k] = v; } }); }; if (typeof m === 'string') { m = (0, exports.removeAroundQuotas)(m); if (m.startsWith('{')) { try { fillMetaData(JSON.parse(m)); } catch (e) { // } } else if (m.includes('=')) { m.split(/;/g).forEach((pair) => { const i = pair.indexOf('='); if (i < 0) { return; } const k = pair.substring(0, i).trim(); const v = pair.substring(i + 1).trim(); if (k) { metaData[k] = v; } }); } } else if (typeof m === 'object' && !Array.isArray(m)) { fillMetaData(m); } (0, exports.substitute)(metaData, data); return metaData; }; exports.parseMeta = parseMeta; const parseTags = (t) => { if (typeof t === 'string') { t = (0, exports.removeAroundQuotas)(t); return t.split(/;/g).map((v) => v.trim()).filter((v) => v); } if (typeof t === 'number') { return [String(t)]; } if (Array.isArray(t)) { return t.map((v) => String(v).trim()).filter((v) => v); } return []; }; exports.parseTags = parseTags; const serviceConfigDiff = (registerConfig, serviceInfo) => { if (!serviceInfo) { return ['id', registerConfig.id, 'ID', undefined]; } const mastBeEquals = [['id', 'ID'], ['name', 'Service'], ['port', 'Port'], ['address', 'Address']]; let diff = []; mastBeEquals.some(([p1, p2]) => { if (registerConfig[p1] !== serviceInfo[p2]) { diff = [p1, registerConfig[p1], p2, serviceInfo[p2]]; return true; } return false; }); if (!diff.length) { const { meta } = registerConfig; const { Meta = {} } = serviceInfo; Object.entries(meta).some(([p, v]) => { if (v !== Meta[p]) { diff = [`meta.${p}`, v, `Meta.${p}`, Meta[p]]; return true; } return false; }); } return diff; }; exports.serviceConfigDiff = serviceConfigDiff; const minimizeCache = (cache, maxItems) => { const len = Object.keys(cache).length; if (len >= maxItems) { const sortedDesc = Object.entries(cache) .sort((a, b) => b[1].created - a[1].created); sortedDesc.splice(0, maxItems - 1); sortedDesc.map(([h]) => h).forEach((h) => { delete cache[h]; }); } }; exports.minimizeCache = minimizeCache; /** * String in format \d+(s|m) in milliseconds */ const toMills = (timeStr = '') => { const re = /^(\d+)([sm])$/; const matches = re.exec(timeStr); if (!matches) { return 0; } return Number(matches[1]) * 1000 * (matches[2] === 's' ? 1 : 60); }; exports.toMills = toMills; const getPackageJson = (relPathToProjRoot = '') => { try { const rootDir = process.cwd(); const packageJson = `${rootDir}${relPathToProjRoot}/package.json`; if (fs.existsSync(packageJson)) { return JSON.parse(fs.readFileSync(packageJson, { encoding: 'utf8' })); } } catch (err) { // } }; exports.getPackageJson = getPackageJson; const sleep = async (timeOut) => new Promise((resolve) => { setTimeout(resolve, timeOut); }); exports.sleep = sleep; const isObject = (v) => v != null && typeof v === 'object' && !Array.isArray(v) && !(v instanceof Date) && !(v instanceof Set) && !(v instanceof Map); exports.isObject = isObject; //# sourceMappingURL=utils.js.map