yaclt
Version:
Yet Another Change Log Tool
58 lines (51 loc) • 1.64 kB
text/typescript
import { compileTemplate } from "../utils/template-utils";
export const StringFormatParams = {
changeType: "changeType",
changeTypes: "changeTypes",
message: "message",
issueId: "issueId",
};
export const regexIndexOf = (
string: string,
regex: RegExp,
startpos?: number
): number => {
const indexOf = string.slice(Math.max(0, startpos || 0)).search(regex);
return indexOf >= 0 ? indexOf + (startpos || 0) : indexOf;
};
export const formatToChangeTypeTemplate = (
format: string
): HandlebarsTemplateDelegate<Record<string, unknown>> | undefined => {
const changeTypeTemplatePattern = /{{\s*changeType\s*}}/;
const hasChangeType = changeTypeTemplatePattern.test(format);
if (!hasChangeType) {
return undefined;
}
const indexOfChangeType = format.search(changeTypeTemplatePattern);
const changeTypeHandlebars = format.slice(
Math.max(0, regexIndexOf(format, changeTypeTemplatePattern)),
Math.min(
format.length,
indexOfChangeType +
StringFormatParams.changeType.length +
Math.max(
format
.slice(indexOfChangeType + StringFormatParams.changeType.length)
.indexOf("}}") + 3,
0
)
)
);
return compileTemplate(changeTypeHandlebars);
};
export const camelToKebabCase = (str: string): string =>
str
.split("")
.map((letter, idx) =>
letter.toUpperCase() === letter
? `${idx !== 0 ? "-" : ""}${letter.toLowerCase()}`
: letter
)
.join("");
export const kebabToCamelCase = (str: string): string =>
str.replace(/-./g, (match: string) => match.charAt(1).toUpperCase());