escape-prompt-catalog.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /**
  2. * Re-emit promptCatalog.js using \\u escapes so webpack/babel on Windows never mis-reads encoding.
  3. */
  4. const fs = require('fs')
  5. const paths = [
  6. 'd:/ylrz_saas_new/saas-companyui/src/utils/lobster/promptCatalog.js',
  7. 'd:/ylrz_saas_new/saas-mgnui/src/utils/lobster/promptCatalog.js',
  8. 'd:/ylrz_saas_new/adminui/src/utils/lobster/promptCatalog.js'
  9. ]
  10. function escapeNonAscii(str) {
  11. let out = ''
  12. for (let i = 0; i < str.length; i++) {
  13. const code = str.charCodeAt(i)
  14. if (code <= 0x7f) {
  15. out += str[i]
  16. } else {
  17. out += '\\u' + code.toString(16).padStart(4, '0')
  18. }
  19. }
  20. return out
  21. }
  22. function escapeJsSingleQuotedStrings(source) {
  23. return source.replace(/'([^'\\]|\\.)*'/g, match => {
  24. const inner = match.slice(1, -1)
  25. return "'" + escapeNonAscii(inner) + "'"
  26. })
  27. }
  28. paths.forEach(p => {
  29. const raw = fs.readFileSync(p, 'utf8')
  30. const out = escapeJsSingleQuotedStrings(raw)
  31. fs.writeFileSync(p, out, 'ascii')
  32. console.log('escaped', p, 'ascii-only:', /^[\x00-\x7f]*$/.test(out))
  33. })