sync-viewer-assets.mjs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { cp, mkdir, readdir, rm } from 'node:fs/promises'
  2. import { existsSync } from 'node:fs'
  3. import { dirname, resolve } from 'node:path'
  4. import { fileURLToPath } from 'node:url'
  5. const demoDir = resolve(dirname(fileURLToPath(import.meta.url)), '..')
  6. const repoDir = resolve(demoDir, '../..')
  7. const sourceDir = resolve(repoDir, 'packages/components/web/viewer')
  8. const targetDirs = [
  9. resolve(demoDir, 'public/file-viewer'),
  10. resolve(demoDir, 'public/vendor/file-viewer')
  11. ]
  12. const helperSourceDir = resolve(repoDir, 'packages/components/web/dist')
  13. const helperTargetDir = resolve(demoDir, 'public/vendor/file-viewer-web')
  14. const helperFiles = ['flyfish-file-viewer-web.iife.js']
  15. const exampleSourceDir = resolve(repoDir, 'apps/viewer-demo/public/example')
  16. const exampleTargetDir = resolve(demoDir, 'public/example')
  17. if (!existsSync(resolve(sourceDir, 'flyfish-viewer-assets.json'))) {
  18. throw new Error('缺少 packages/components/web/viewer/flyfish-viewer-assets.json,请先运行 pnpm build:viewer-assets')
  19. }
  20. const removeMacMetadata = async dir => {
  21. const entries = await readdir(dir, { withFileTypes: true })
  22. await Promise.all(entries.map(entry => {
  23. const path = resolve(dir, entry.name)
  24. if (entry.name === '.DS_Store') {
  25. return rm(path, { force: true })
  26. }
  27. if (entry.isDirectory()) {
  28. return removeMacMetadata(path)
  29. }
  30. return undefined
  31. }))
  32. }
  33. for (const targetDir of targetDirs) {
  34. await rm(targetDir, { force: true, recursive: true })
  35. await mkdir(targetDir, { recursive: true })
  36. await cp(sourceDir, targetDir, { recursive: true })
  37. await removeMacMetadata(targetDir)
  38. console.log(`[file-viewer-demo] viewer assets copied to ${targetDir}`)
  39. }
  40. for (const assetRoot of ['vendor', 'wasm']) {
  41. const sourceAssetRoot = resolve(sourceDir, assetRoot)
  42. if (!existsSync(sourceAssetRoot)) {
  43. continue
  44. }
  45. const targetAssetRoot = resolve(demoDir, 'public', assetRoot)
  46. await mkdir(targetAssetRoot, { recursive: true })
  47. const entries = await readdir(sourceAssetRoot, { withFileTypes: true })
  48. await Promise.all(entries.map(entry => rm(resolve(targetAssetRoot, entry.name), { force: true, recursive: true })))
  49. await cp(sourceAssetRoot, targetAssetRoot, { recursive: true })
  50. await removeMacMetadata(targetAssetRoot)
  51. console.log(`[file-viewer-demo] viewer root ${assetRoot} assets copied to ${targetAssetRoot}`)
  52. }
  53. await rm(helperTargetDir, { force: true, recursive: true })
  54. await mkdir(helperTargetDir, { recursive: true })
  55. for (const helperFile of helperFiles) {
  56. const sourceFile = resolve(helperSourceDir, helperFile)
  57. if (!existsSync(sourceFile)) {
  58. throw new Error(`缺少 ${sourceFile},请先运行 pnpm --filter @file-viewer/web build`)
  59. }
  60. await cp(sourceFile, resolve(helperTargetDir, helperFile))
  61. }
  62. console.log(`[file-viewer-demo] web helper assets copied to ${helperTargetDir}`)
  63. await mkdir(exampleTargetDir, { recursive: true })
  64. await cp(resolve(exampleSourceDir, 'word.docx'), resolve(exampleTargetDir, 'word.docx'))
  65. console.log(`[file-viewer-demo] docx example copied to ${exampleTargetDir}`)