UNPKG

flooent

Version:

Fluent interface to provide an expressive syntax for common manipulations.

128 lines (127 loc) 3.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.slug = exports.capitalize = exports.camel = exports.studly = exports.snake = exports.kebab = exports.title = exports.limit = exports.startWith = exports.endWith = exports.prepend = exports.append = exports.unwrap = exports.wrap = exports.beforeLast = exports.before = exports.afterLast = exports.after = void 0; const utils_1 = require("./utils"); function after(value, part) { const index = value.indexOf(part); if (index === -1) { return value; } return value.slice(index + part.length); } exports.after = after; function afterLast(value, part) { const index = value.lastIndexOf(part); if (index === -1) { return value; } return value.slice(index + part.length); } exports.afterLast = afterLast; function before(value, part) { const index = value.indexOf(part); if (index === -1) { return value; } return value.slice(0, index); } exports.before = before; function beforeLast(value, part) { const index = value.lastIndexOf(part); if (index === -1) { return value; } return value.slice(0, index); } exports.beforeLast = beforeLast; /** * Wraps a string with the given value. */ function wrap(value, start, end = start) { return start + value + end; } exports.wrap = wrap; function unwrap(value, start, end = start) { if (value.startsWith(start)) value = after(value, start); if (value.endsWith(end)) value = beforeLast(value, end); return value; } exports.unwrap = unwrap; function append(value, part) { return value.concat(part); } exports.append = append; /** * Prepends the given value to string. */ function prepend(value, part) { return part + value; } exports.prepend = prepend; function endWith(value, part) { if (value.endsWith(part)) { return value; } else { return append(value, part); } } exports.endWith = endWith; function startWith(value, part) { if (value.startsWith(part)) { return value; } else { return part + value; } } exports.startWith = startWith; function limit(value, n, append = "...") { let truncated = value.slice(0, n); if (value.length > n) { return truncated.concat(append); } return truncated; } exports.limit = limit; function title(value) { const words = utils_1.splitWord(value).map(word => word.substring(0, 1).toUpperCase() + word.substring(1)); return words.join(' '); } exports.title = title; function kebab(value) { return snake(value, '-'); } exports.kebab = kebab; function snake(value, replacement = '_') { return utils_1.splitWord(value).join(replacement).toLowerCase(); } exports.snake = snake; function studly(value) { const words = utils_1.splitWord(value).map(word => word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase()); return words.join(''); } exports.studly = studly; function camel(value) { const studlyCased = studly(value); if (studlyCased.length === 0) return studlyCased; return studlyCased[0].toLowerCase() + studlyCased.substring(1); } exports.camel = camel; function capitalize(value) { if (value.length === 0) return value; return value[0].toUpperCase() + value.substring(1); } exports.capitalize = capitalize; function slug(value, replacement = "-") { const slug = value .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") // e.g. è -> e .replace(/[^a-zA-Z0-9\s]/g, ""); // only keep numbers and alphabet return snake(slug, replacement); } exports.slug = slug;