build-viewer-workers.mjs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { copyFile, mkdir } from 'node:fs/promises'
  2. import { createRequire } from 'node:module'
  3. import { dirname, resolve } from 'node:path'
  4. import { fileURLToPath, pathToFileURL } from 'node:url'
  5. const root = resolve(fileURLToPath(new URL('..', import.meta.url)))
  6. const require = createRequire(import.meta.url)
  7. const wordRendererRequire = createRequire(resolve(root, 'packages/renderers/word/package.json'))
  8. const resolveViteEntrypoint = () => {
  9. try {
  10. return require.resolve('vite')
  11. } catch {
  12. const demoRequire = createRequire(resolve(root, 'apps/viewer-demo/package.json'))
  13. return demoRequire.resolve('vite')
  14. }
  15. }
  16. const { build } = await import(pathToFileURL(resolveViteEntrypoint()).href)
  17. const rawArgs = process.argv.slice(2)
  18. const readArgValue = name => {
  19. const index = rawArgs.indexOf(name)
  20. if (index === -1) {
  21. return undefined
  22. }
  23. const value = rawArgs[index + 1]
  24. return value && !value.startsWith('--') ? value : undefined
  25. }
  26. const outputDir = resolve(
  27. root,
  28. readArgValue('--out-dir') ||
  29. process.env.FILE_VIEWER_DEMO_OUTPUT_DIR ||
  30. process.env.DEMO_OUTPUT_DIR ||
  31. 'apps/viewer-demo/dist'
  32. )
  33. const docxVendorDir = resolve(outputDir, 'vendor/docx')
  34. const docxPackageDir = dirname(wordRendererRequire.resolve('@file-viewer/docx/package.json'))
  35. await mkdir(docxVendorDir, { recursive: true })
  36. await copyFile(
  37. resolve(docxPackageDir, 'dist/docx-preview.worker.js'),
  38. resolve(docxVendorDir, 'docx.worker.js')
  39. )
  40. await copyFile(
  41. resolve(docxPackageDir, 'dist/jszip.min.js'),
  42. resolve(docxVendorDir, 'jszip.min.js')
  43. )
  44. console.log(`[file-viewer] Copied @file-viewer/docx worker assets to ${docxVendorDir}`)
  45. const workerBuilds = [
  46. {
  47. label: 'spreadsheet',
  48. entry: resolve(root, 'packages/renderers/spreadsheet/src/spreadsheet/worker/sheetjs/sheet.worker.ts'),
  49. outDir: resolve(outputDir, 'vendor/xlsx'),
  50. fileName: 'sheet.worker.js'
  51. }
  52. ]
  53. for (const worker of workerBuilds) {
  54. await mkdir(worker.outDir, { recursive: true })
  55. await build({
  56. configFile: false,
  57. publicDir: false,
  58. logLevel: 'warn',
  59. build: {
  60. emptyOutDir: false,
  61. minify: true,
  62. codeSplitting: false,
  63. outDir: worker.outDir,
  64. target: 'es2019',
  65. lib: {
  66. entry: worker.entry,
  67. formats: ['es'],
  68. fileName: () => worker.fileName
  69. },
  70. rollupOptions: {}
  71. }
  72. })
  73. console.log(`[file-viewer] Built ${worker.label} worker to ${worker.outDir}/${worker.fileName}`)
  74. }