Compare commits
2 Commits
08de63b448
...
204b813ecc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
204b813ecc | ||
|
|
499852b2a7 |
@@ -85,8 +85,7 @@ npm install
|
||||
# 개발 (ts-node)
|
||||
npm run dev
|
||||
|
||||
# 빌드 후 실행 (ts-cleaner가 dist/를 스캔하므로 먼저 만들어야 함)
|
||||
mkdir -p dist
|
||||
# 빌드 후 실행 (build 스크립트가 dist 디렉터리를 자동 생성)
|
||||
npm run build
|
||||
npm start
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"type": "commonjs",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"build": "ts-cleaner && tsc",
|
||||
"build": "node -e \"require('fs').mkdirSync('dist',{recursive:true})\" && ts-cleaner && tsc",
|
||||
"start": "node .",
|
||||
"dev": "ts-node src/index.ts",
|
||||
"prod": "ts-node src/utils/Prod-commands.ts",
|
||||
|
||||
@@ -35,7 +35,12 @@ export class SignatureClient {
|
||||
}
|
||||
|
||||
get regex() {
|
||||
const escaped = [...this.nameSet].map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
||||
const names = [...this.nameSet];
|
||||
// 빈 목록이면 new RegExp("()", "g")가 모든 위치에서 매칭돼
|
||||
// text.split() 결과가 글자 단위로 쪼개진다. 절대 매칭되지 않는
|
||||
// 패턴을 돌려줘 split 호출자가 원문을 그대로 받게 한다.
|
||||
if (names.length === 0) return /$^/g;
|
||||
const escaped = names.map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
||||
return new RegExp(`(${escaped.join("|")})`, "g");
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +92,11 @@ export class TTSClient {
|
||||
|
||||
|
||||
private async getSource(text: string): Promise<Buffer | null> {
|
||||
const parts = text.split(signature.regex);
|
||||
// 시그니처 목록이 비어 있으면 split을 건너뛰고 원문을 한 번에 합성한다.
|
||||
// (SignatureClient.regex가 빈 목록일 때 never-match 패턴을 돌려주지만,
|
||||
// 소비자 측에서도 명시적으로 가드해 의도를 분명히 한다.)
|
||||
const names = signature.nameSet;
|
||||
const parts = names.size === 0 ? [text] : text.split(signature.regex);
|
||||
const bufferList: Buffer[] = [];
|
||||
|
||||
for (const part of parts) {
|
||||
|
||||
Reference in New Issue
Block a user