verify-vite-plugin-format-coverage.mjs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { existsSync } from 'node:fs'
  2. import { dirname, resolve } from 'node:path'
  3. import { fileURLToPath, pathToFileURL } from 'node:url'
  4. const root = resolve(dirname(fileURLToPath(import.meta.url)), '..')
  5. const pluginDist = resolve(root, 'packages/presets/vite-plugin/dist/index.js')
  6. const coreDist = resolve(root, 'packages/core/dist/index.js')
  7. function assert(condition, message) {
  8. if (!condition) {
  9. throw new Error(message)
  10. }
  11. }
  12. assert(
  13. existsSync(pluginDist),
  14. 'packages/presets/vite-plugin/dist/index.js is missing; run pnpm --filter @file-viewer/vite-plugin build first.'
  15. )
  16. assert(
  17. existsSync(coreDist),
  18. 'packages/core/dist/index.js is missing; run pnpm --filter @file-viewer/core build first.'
  19. )
  20. const plugin = await import(`${pathToFileURL(pluginDist).href}?t=${Date.now()}`)
  21. const core = await import(`${pathToFileURL(coreDist).href}?t=${Date.now()}`)
  22. const { resolveFileViewerRendererSelection } = plugin
  23. const { DEFAULT_RENDERER_DEFINITIONS } = core
  24. const expectedPackageByRendererId = new Map([
  25. ['pdf', '@file-viewer/renderer-pdf'],
  26. ['ofd', '@file-viewer/renderer-ofd'],
  27. ['typst', '@file-viewer/renderer-typst'],
  28. ['office-word-openxml', '@file-viewer/renderer-word'],
  29. ['office-word-binary', '@file-viewer/renderer-word'],
  30. ['open-document', '@file-viewer/renderer-word'],
  31. ['office-presentation', '@file-viewer/renderer-presentation'],
  32. ['spreadsheet-openxml', '@file-viewer/renderer-spreadsheet'],
  33. ['cad', '@file-viewer/renderer-cad'],
  34. ['model', '@file-viewer/renderer-3d'],
  35. ['drawing', '@file-viewer/renderer-drawing'],
  36. ['mindmap', '@file-viewer/renderer-mindmap'],
  37. ['geo', '@file-viewer/renderer-geo'],
  38. ['archive', '@file-viewer/renderer-archive'],
  39. ['email', '@file-viewer/renderer-email'],
  40. ['epub', '@file-viewer/renderer-epub'],
  41. ['code', '@file-viewer/renderer-text'],
  42. ['markdown', '@file-viewer/renderer-text'],
  43. ['image', '@file-viewer/renderer-image'],
  44. ['audio', '@file-viewer/renderer-media'],
  45. ['video', '@file-viewer/renderer-media'],
  46. ['data-asset', '@file-viewer/renderer-data'],
  47. ['eda', '@file-viewer/renderer-eda'],
  48. ])
  49. const checked = []
  50. for (const definition of DEFAULT_RENDERER_DEFINITIONS) {
  51. const expectedPackage = expectedPackageByRendererId.get(definition.id)
  52. if (!expectedPackage) {
  53. continue
  54. }
  55. for (const extension of definition.extensions) {
  56. const selection = resolveFileViewerRendererSelection({ formats: [extension] }, root)
  57. assert(
  58. selection.packages.includes(expectedPackage),
  59. `${extension} (${definition.id}) should select ${expectedPackage}; got ${selection.packages.join(', ') || 'no packages'}`
  60. )
  61. checked.push(extension)
  62. }
  63. }
  64. for (const [rendererId, expectedPackage] of expectedPackageByRendererId) {
  65. const selection = resolveFileViewerRendererSelection({ renderers: [rendererId] }, root)
  66. assert(
  67. selection.packages.includes(expectedPackage),
  68. `renderer id ${rendererId} should select ${expectedPackage}; got ${selection.packages.join(', ') || 'no packages'}`
  69. )
  70. }
  71. console.log(
  72. `[vite-plugin-format-coverage] Verified ${checked.length} extracted renderer extensions and ${expectedPackageByRendererId.size} renderer ids against @file-viewer/core.`
  73. )