export function html(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
export function javascript(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
export function typescript(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
export function string(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
export function tsql(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
export function mysql(strings: TemplateStringsArray, ...values: any[]) {
return _trimmed(String.raw(strings, ...values));
}
function _trimmed(full: string) {
// 줄 분해
const lines = full.split("\n");
// 첫 줄 공백-only 라인 제거
if (lines.length && lines[0].trim() === "") {
lines.shift();
}
// 마지막 줄 공백-only 라인 제거
if (lines.length && lines[lines.length - 1].trim() === "") {
lines.pop();
}
// 최소 들여쓰기 계산
const minIndent = lines
.filter((line) => line.trim() !== "")
.reduce((min, line) => {
if (line.trim() === "") return min;
const indent = line.match(/^ */)?.[0].length ?? 0;
return Math.min(min, indent);
}, Infinity);
// 들여쓰기 제거
const result = lines.map((line) => {
if (line.trim() === "") return "";
return line.slice(minIndent);
});
return result.join("\n");
}