decode_lobster_java_unicode.mjs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
  2. import { dirname, join } from 'node:path';
  3. import { fileURLToPath } from 'node:url';
  4. const scriptDir = dirname(fileURLToPath(import.meta.url));
  5. const root = join(scriptDir, '../..');
  6. const svc = join(root, 'fs-service/src/main/java/com/fs/company/service/workflow');
  7. const srcDir = join(scriptDir, 'lobster_utf8_sources');
  8. function decodeJavaUnicode(text) {
  9. return text.replace(/\\u([0-9a-fA-F]{4})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));
  10. }
  11. function writeUtf8(path, content) {
  12. writeFileSync(path, content.replace(/\r\n/g, '\n'), 'utf8');
  13. }
  14. function fixFile(path) {
  15. const raw = readFileSync(path, 'utf8');
  16. const decoded = decodeJavaUnicode(raw);
  17. if (decoded === raw) {
  18. console.log('skip (no \\u):', path.split(/[/\\]/).pop());
  19. return;
  20. }
  21. writeUtf8(path, decoded);
  22. console.log('decoded:', path.split(/[/\\]/).pop());
  23. }
  24. const javaFiles = [
  25. join(svc, 'execution/LobsterOutboundQualityGate.java'),
  26. join(svc, 'execution/ProductKnowledgeBoundaryPolicy.java'),
  27. join(svc, 'execution/TenantProductClaimSemanticAnalyzer.java'),
  28. join(svc, 'execution/LobsterProactiveGreetingService.java'),
  29. join(svc, 'execution/LobsterMessageTemplateRenderer.java'),
  30. join(svc, 'deepdialogue/GeneralKnowledgeDialoguePolicy.java'),
  31. join(svc, 'deepdialogue/CustomerFacingMessageSplitter.java'),
  32. ];
  33. for (const path of javaFiles) {
  34. fixFile(path);
  35. }
  36. for (const name of readdirSync(srcDir).filter((f) => f.endsWith('.java'))) {
  37. fixFile(join(srcDir, name));
  38. }
  39. console.log('done');