import { readFileSync, writeFileSync, readdirSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; const scriptDir = dirname(fileURLToPath(import.meta.url)); const root = join(scriptDir, '../..'); const svc = join(root, 'fs-service/src/main/java/com/fs/company/service/workflow'); const srcDir = join(scriptDir, 'lobster_utf8_sources'); function decodeJavaUnicode(text) { return text.replace(/\\u([0-9a-fA-F]{4})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16))); } function writeUtf8(path, content) { writeFileSync(path, content.replace(/\r\n/g, '\n'), 'utf8'); } function fixFile(path) { const raw = readFileSync(path, 'utf8'); const decoded = decodeJavaUnicode(raw); if (decoded === raw) { console.log('skip (no \\u):', path.split(/[/\\]/).pop()); return; } writeUtf8(path, decoded); console.log('decoded:', path.split(/[/\\]/).pop()); } const javaFiles = [ join(svc, 'execution/LobsterOutboundQualityGate.java'), join(svc, 'execution/ProductKnowledgeBoundaryPolicy.java'), join(svc, 'execution/TenantProductClaimSemanticAnalyzer.java'), join(svc, 'execution/LobsterProactiveGreetingService.java'), join(svc, 'execution/LobsterMessageTemplateRenderer.java'), join(svc, 'deepdialogue/GeneralKnowledgeDialoguePolicy.java'), join(svc, 'deepdialogue/CustomerFacingMessageSplitter.java'), ]; for (const path of javaFiles) { fixFile(path); } for (const name of readdirSync(srcDir).filter((f) => f.endsWith('.java'))) { fixFile(join(srcDir, name)); } console.log('done');