UNPKG

@azure-tools/codegen

Version:
120 lines 6.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Style = void 0; const text_manipulation_1 = require("../text-manipulation"); function capitalize(s) { return s ? `${s.charAt(0).toUpperCase()}${s.slice(1)}` : s; } function uncapitalize(s) { return s ? `${s.charAt(0).toLowerCase()}${s.slice(1)}` : s; } function IsFullyUpperCase(identifier, maxUppercasePreserve) { const len = identifier.length; if (len > 1) { if (len <= maxUppercasePreserve && identifier === identifier.toUpperCase()) { return true; } if (len <= maxUppercasePreserve + 1 && identifier.endsWith("s")) { const i = identifier.substring(0, len - 1); if (i.toUpperCase() === i) { return true; } } } return false; } function deconstruct(identifier, maxUppercasePreserve) { if (Array.isArray(identifier)) { return [...identifier.flatMap((each) => deconstruct(each, maxUppercasePreserve))]; } return `${identifier}` .replace(/([a-z]+)([A-Z])/g, "$1 $2") // Add a space in between camelCase words(e.g. fooBar => foo Bar) .replace(/(\d+)/g, " $1 ") // Adds a space after numbers(e.g. foo123 => foo123 bar) .replace(/\b([A-Z]+)([A-Z])s([^a-z])(.*)/g, "$1$2« $3$4") // Add a space after a plural uppper cased word(e.g. MBsFoo => MBs Foo) .replace(/\b([A-Z]+)([A-Z])([a-z]+)/g, "$1 $2$3") // Add a space between an upper case word(2 char+) and the last captial case.(e.g. SQLConnection -> SQL Connection) .replace(/«/g, "s") .trim() .split(/[\W|_]+/) .map((each) => (IsFullyUpperCase(each, maxUppercasePreserve) ? each : each.toLowerCase())); } function wrap(prefix, postfix, style, maxUppercasePreserve) { if (postfix || prefix) { return (i, r, o) => typeof i === "string" && typeof o === "object" ? o[i.toLowerCase()] || `${prefix}${style(i, r, o, maxUppercasePreserve)}${postfix}` : `${prefix}${style(i, r, o, maxUppercasePreserve)}${postfix}`; } return (i, r, o) => style(i, r, o, maxUppercasePreserve); } function applyFormat(normalizedContent, overrides = {}, separator = "", formatter = (s, i) => s) { return normalizedContent .map((each, index) => overrides[each.toLowerCase()] || formatter(each, index)) .join(separator); } function normalize(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { if (!identifier || identifier.length === 0) { return [""]; } return typeof identifier === "string" ? normalize((0, text_manipulation_1.fixLeadingNumber)(deconstruct(identifier, maxUppercasePreserve)), removeDuplicates, overrides, maxUppercasePreserve) : removeDuplicates ? (0, text_manipulation_1.removeSequentialDuplicates)(identifier) : identifier; } class Style { static select(style, fallback, maxUppercasePreserve) { if (style) { const styles = /^([a-zA-Z0-9_]*?\+?)([a-zA-Z]+)(\+?[a-zA-Z0-9_]*)$/g.exec(style.replace(/\s*/g, "")); if (styles) { const prefix = styles[1] ? styles[1].substring(0, styles[1].length - 1) : ""; const postfix = styles[3] ? styles[3].substring(1) : ""; switch (styles[2]) { case "camelcase": case "camel": return wrap(prefix, postfix, Style.camel, maxUppercasePreserve); case "pascalcase": case "pascal": return wrap(prefix, postfix, Style.pascal, maxUppercasePreserve); case "snakecase": case "snake": return wrap(prefix, postfix, Style.snake, maxUppercasePreserve); case "uppercase": case "upper": return wrap(prefix, postfix, Style.upper, maxUppercasePreserve); case "kebabcase": case "kebab": return wrap(prefix, postfix, Style.kebab, maxUppercasePreserve); case "spacecase": case "space": return wrap(prefix, postfix, Style.space, maxUppercasePreserve); } } } return wrap("", "", fallback, maxUppercasePreserve); } static kebab(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, "-").replace(/([^\d])-(\d+)/g, "$1$2")); } static space(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, " ").replace(/([^\d]) (\d+)/g, "$1$2")); } static snake(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, "_").replace(/([^\d])_(\d+)/g, "$1$2")); } static upper(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, "_", (each) => each.toUpperCase()).replace(/([^\d])_(\d+)/g, "$1$2")); } static pascal(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, "", (each) => capitalize(each))); } static camel(identifier, removeDuplicates = true, overrides = {}, maxUppercasePreserve = 0) { return (overrides[identifier] || applyFormat(normalize(identifier, removeDuplicates, overrides, maxUppercasePreserve), overrides, "", (each, index) => index ? capitalize(each) : IsFullyUpperCase(each, maxUppercasePreserve) ? each : uncapitalize(each))); } } exports.Style = Style; //# sourceMappingURL=formatter.js.map