UNPKG

@coolio/http

Version:
66 lines 2.48 kB
import isArray from 'lodash/isArray'; import isPlainObject from 'lodash/isPlainObject'; export var BodyCasing; (function (BodyCasing) { BodyCasing["CAMEL_CASE"] = "CAMEL_CASE"; BodyCasing["SNAKE_CASE"] = "SNAKE_CASE"; BodyCasing["SCREAMING_SNAKE_CASE"] = "SCREAMING_SNAKE_CASE"; BodyCasing["PASCAL_CASE"] = "PASCAL_CASE"; BodyCasing["KEBAB_CASE"] = "KEBAB_CASE"; })(BodyCasing || (BodyCasing = {})); export const splitWords = (text) => { const words = (text.toUpperCase() === text ? text.split(/(?:[ _-]+)/) : text.split(/(?:[ _-]+)|(?=[A-Z]+)/)).filter(Boolean); return words.length === 0 ? [text] : words; }; export const deepKeyMap = (object, mapper) => { if (isArray(object)) { return object.map(value => deepKeyMap(value, mapper)); } if (isPlainObject(object)) { const result = {}; for (const key in object) { if (object.hasOwnProperty(key)) { result[mapper(key)] = deepKeyMap(object[key], mapper); } } return result; } return object; }; export const toCamelCase = (object) => deepKeyMap(object, key => splitWords(key) .map((word, index) => index > 0 ? word[0].toUpperCase() + word.slice(1).toLowerCase() : word.toLowerCase()) .join('')); export const toPascalCase = (object) => deepKeyMap(object, key => splitWords(key) .map(word => word[0].toUpperCase() + word.slice(1).toLowerCase()) .join('')); export const toSnakeCase = (object) => deepKeyMap(object, key => splitWords(key) .map(word => word.toLowerCase()) .join('_')); export const toScreamingSnakeCase = (object) => deepKeyMap(object, key => splitWords(key) .map(word => word.toUpperCase()) .join('_')); export const toKebabCase = (object) => deepKeyMap(object, key => splitWords(key) .map(word => word.toLowerCase()) .join('-')); export const noConversion = (object) => object; export const getCaseConverter = (bodyCasing) => { switch (bodyCasing) { case BodyCasing.CAMEL_CASE: return toCamelCase; case BodyCasing.PASCAL_CASE: return toPascalCase; case BodyCasing.SNAKE_CASE: return toSnakeCase; case BodyCasing.SCREAMING_SNAKE_CASE: return toScreamingSnakeCase; case BodyCasing.KEBAB_CASE: return toKebabCase; default: return noConversion; } }; //# sourceMappingURL=caseConversion.helper.js.map