diff --git a/tools/gen-cardhand.mjs b/tools/gen-cardhand.mjs index 1653e88..e63652b 100644 --- a/tools/gen-cardhand.mjs +++ b/tools/gen-cardhand.mjs @@ -231,17 +231,20 @@ if (txt.includes('/ui/DefaultGroup/CardHand')) { process.exit(0); } -const matches = txt.match(/\n {4}\]/g); // Entities 닫는 대괄호(4-space indent)는 파일 내 유일 -if (!matches || matches.length !== 1) { - console.error(`Expected exactly one Entities closing bracket, found ${matches ? matches.length : 0}. Aborting.`); +const eol = txt.includes('\r\n') ? '\r\n' : '\n'; // 기존 파일의 줄바꿈 보존 +const splicePoint = `${eol} ]`; // Entities 닫는 대괄호(4-space indent) + +const count = txt.split(splicePoint).length - 1; +if (count !== 1) { + console.error(`Expected exactly one Entities closing bracket, found ${count}. Aborting.`); process.exit(1); } const blocks = ents - .map((e) => JSON.stringify(e, null, 2).split('\n').map((l) => ' ' + l).join('\n')) - .join(',\n'); + .map((e) => JSON.stringify(e, null, 2).split('\n').map((l) => ' ' + l).join(eol)) + .join(',' + eol); -txt = txt.replace('\n ]', ',\n' + blocks + '\n ]'); +txt = txt.replace(splicePoint, ',' + eol + blocks + eol + ' ]'); JSON.parse(txt); // 유효성 검증 (실패 시 throw)