fix-lib-workers.mjs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { readdir, readFile, stat, writeFile } from 'node:fs/promises'
  2. import { join, resolve } from 'node:path'
  3. const distDir = process.env.FILE_VIEWER_DIST_DIR
  4. ? resolve(process.env.FILE_VIEWER_DIST_DIR)
  5. : join(process.cwd(), 'dist')
  6. const inlineWorkerBlobRE = /new Blob\(\[atob\(([^)]+)\)\],/g
  7. async function collectJavaScriptFiles(dir, files = []) {
  8. const entries = await readdir(dir)
  9. for (const entry of entries) {
  10. const filePath = join(dir, entry)
  11. const fileStat = await stat(filePath)
  12. if (fileStat.isDirectory()) {
  13. await collectJavaScriptFiles(filePath, files)
  14. } else if (/\.(mjs|js)$/.test(entry)) {
  15. files.push(filePath)
  16. }
  17. }
  18. return files
  19. }
  20. for (const filePath of await collectJavaScriptFiles(distDir)) {
  21. const source = await readFile(filePath, 'utf8')
  22. let replacementCount = 0
  23. const fixed = source.replace(inlineWorkerBlobRE, (_match, base64Source) => {
  24. replacementCount += 1
  25. return `new Blob([Uint8Array.from(atob(${base64Source}), byte => byte.charCodeAt(0))],`
  26. })
  27. if (!replacementCount) continue
  28. await writeFile(filePath, fixed, 'utf8')
  29. console.log(`fixed ${replacementCount} inline worker blob(s) in ${filePath.replace(`${process.cwd()}/`, '')}`)
  30. }