typia
Version:
Superfast runtime validators with only one line
32 lines (31 loc) • 1.13 kB
JavaScript
//#region src/internal/_notationSnake.ts
const _notationSnakeWord = (str) => {
const indexes = [];
for (let i = 0; i < str.length; i++) {
const code = str.charCodeAt(i);
if (65 <= code && code <= 90) indexes.push(i);
}
for (let i = indexes.length - 1; i > 0; --i) if (indexes[i] - indexes[i - 1] === 1) indexes.splice(i, 1);
if (indexes.length !== 0 && indexes[0] === 0) indexes.splice(0, 1);
if (indexes.length === 0) return str.toLowerCase();
let ret = "";
for (let i = 0; i < indexes.length; i++) {
const first = i === 0 ? 0 : indexes[i - 1];
const last = indexes[i];
ret += str.substring(first, last).toLowerCase();
ret += "_";
}
ret += str.substring(indexes[indexes.length - 1]).toLowerCase();
return ret;
};
const _notationSnake = (str) => {
if (str.length === 0) return str;
let prefix = "";
for (let i = 0; i < str.length; i++) if (str[i] === "_") prefix += "_";
else break;
if (prefix.length !== 0) str = str.substring(prefix.length);
return `${prefix}${str.split("_").map(_notationSnakeWord).join("_")}`;
};
//#endregion
export { _notationSnake };
//# sourceMappingURL=_notationSnake.mjs.map