const { URL } = require('url') const httpVerbs = [ 'GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH' ] const requestRegex = new RegExp(`(${httpVerbs.join('|')})\\s(.*)`, 'i') const replacementRegex = /(?:\\?)\$([a-zA-Z\.\d\-\_\:]+)/g const dynamicValueRegex = /\$\[(\w+\((?:.|[\n\r])*?\))\]/g const UpperCaseKeys = function (obj) { let result = {} Object.entries(obj).forEach(([k, v]) => (result[k.toUpperCase()] = v)) return result } const isEmptyObject = (obj) => Object.keys(obj).length === 0 && obj.constructor === Object const removeOptionalKeys = function (obj, optionalValues) { let result = {} Object.entries(obj).forEach(([key, value]) => { if (optionalValues.includes(key) && isEmptyObject(value)) { return } result[key] = value }) return result } const toKebabCase = function (str) { return str .trim() .replace(/([a-z])([A-Z])/g, '$1-$2') .toLowerCase() } const replaceInObject = function (obj, fn) { if (obj === null) { return null } switch (typeof obj) { case 'undefined': return {} case 'string': return fn(obj) case 'object': obj = Object.assign({}, obj) Object.entries(obj).forEach( ([key, value]) => (obj[key] = replaceInObject(value, fn)) ) default: return obj } } const moduleVersion = () => parseInt(require('../package.json').version, 10) const isUrl = function (str) { try { new URL(str) return true } catch (e) { return false } } module.exports = { requestRegex, replacementRegex, dynamicValueRegex, UpperCaseKeys, removeOptionalKeys, toKebabCase, replaceInObject, moduleVersion, isUrl }