core-assets.spec.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { describe, expect, it } from 'vitest'
  2. import {
  3. DEFAULT_FILE_VIEWER_ARCHIVE_WORKER_PATH,
  4. DEFAULT_FILE_VIEWER_DATA_SQL_WASM_URL,
  5. DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH,
  6. DEFAULT_FILE_VIEWER_PDF_CMAP_PATH,
  7. DEFAULT_FILE_VIEWER_PDF_STANDARD_FONT_PATH,
  8. DEFAULT_FILE_VIEWER_PDF_WASM_PATH,
  9. DEFAULT_FILE_VIEWER_PDF_WORKER_PATH,
  10. DEFAULT_FILE_VIEWER_SPREADSHEET_WORKER_PATH,
  11. DEFAULT_FILE_VIEWER_TYPST_COMPILER_WASM_URL,
  12. DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_URL,
  13. resolveFileViewerArchiveWasmUrl,
  14. resolveFileViewerArchiveWorkerUrl,
  15. resolveFileViewerAssetUrl,
  16. resolveFileViewerCadAssetUrls,
  17. resolveFileViewerDataSqlWasmUrl,
  18. resolveFileViewerDocxWorkerUrl,
  19. resolveFileViewerPdfAssetUrls,
  20. resolveFileViewerSpreadsheetWorkerUrl,
  21. resolveFileViewerTypstCompilerWasmUrl,
  22. resolveFileViewerTypstRendererWasmUrl
  23. } from '../packages/core/src'
  24. describe('@file-viewer/core asset URL helpers', () => {
  25. it('resolves viewer asset URLs against a directory-style base', () => {
  26. expect(resolveFileViewerAssetUrl('assets/viewer.js', '', {
  27. baseUrl: '/vendor/file-viewer',
  28. documentBaseUrl: 'https://example.com/app/index.html'
  29. })).toBe('https://example.com/vendor/file-viewer/assets/viewer.js')
  30. expect(resolveFileViewerAssetUrl('/wasm/cad/', '', {
  31. documentBaseUrl: 'https://example.com/app/index.html',
  32. trimTrailingSlash: true
  33. })).toBe('https://example.com/wasm/cad')
  34. })
  35. it('resolves archive worker and wasm URLs', () => {
  36. expect(resolveFileViewerArchiveWorkerUrl(undefined, '/file-viewer/')).toBe(
  37. `http://localhost/file-viewer/${DEFAULT_FILE_VIEWER_ARCHIVE_WORKER_PATH}`
  38. )
  39. expect(resolveFileViewerArchiveWorkerUrl({ workerUrl: 'workers/archive.js' })).toBe(
  40. 'http://localhost/workers/archive.js'
  41. )
  42. expect(resolveFileViewerArchiveWasmUrl({ wasmUrl: 'vendor/libarchive/libarchive.wasm' })).toBe(
  43. 'http://localhost/vendor/libarchive/libarchive.wasm'
  44. )
  45. expect(resolveFileViewerArchiveWasmUrl(undefined, '/assets/libarchive.wasm')).toBe('/assets/libarchive.wasm')
  46. })
  47. it('resolves CAD asset defaults and overrides together', () => {
  48. expect(resolveFileViewerCadAssetUrls(undefined, 'https://viewer.example.com/base/index.html')).toEqual({
  49. wasmPath: 'https://viewer.example.com/base/wasm/cad',
  50. workerUrl: 'https://viewer.example.com/base/wasm/cad/dwg-worker.js',
  51. dwfWasmUrl: 'https://viewer.example.com/base/wasm/cad/dwfv-render.wasm'
  52. })
  53. expect(resolveFileViewerCadAssetUrls({
  54. wasmPath: '/static/cad/',
  55. workerUrl: 'https://cdn.example.com/dwg-worker.js',
  56. dwfWasmUrl: '/static/cad/dwf.wasm'
  57. }, 'https://viewer.example.com/app/')).toEqual({
  58. wasmPath: 'https://viewer.example.com/static/cad',
  59. workerUrl: 'https://cdn.example.com/dwg-worker.js',
  60. dwfWasmUrl: 'https://viewer.example.com/static/cad/dwf.wasm'
  61. })
  62. })
  63. it('resolves optional DOCX worker URLs', () => {
  64. expect(resolveFileViewerDocxWorkerUrl(undefined, 'https://viewer.example.com/app/index.html')).toBe(
  65. `https://viewer.example.com/app/${DEFAULT_FILE_VIEWER_DOCX_WORKER_PATH}`
  66. )
  67. expect(resolveFileViewerDocxWorkerUrl({
  68. workerUrl: 'https://cdn.example.com/file-viewer/docx.worker.js'
  69. }, 'https://viewer.example.com/app/index.html')).toBe(
  70. 'https://cdn.example.com/file-viewer/docx.worker.js'
  71. )
  72. })
  73. it('resolves optional Spreadsheet worker URLs', () => {
  74. expect(resolveFileViewerSpreadsheetWorkerUrl(undefined, 'https://viewer.example.com/app/index.html')).toBe(
  75. `https://viewer.example.com/app/${DEFAULT_FILE_VIEWER_SPREADSHEET_WORKER_PATH}`
  76. )
  77. expect(resolveFileViewerSpreadsheetWorkerUrl({
  78. workerUrl: 'https://cdn.example.com/file-viewer/sheet.worker.js'
  79. }, 'https://viewer.example.com/app/index.html')).toBe(
  80. 'https://cdn.example.com/file-viewer/sheet.worker.js'
  81. )
  82. })
  83. it('resolves PDF default assets from the site root instead of router paths', () => {
  84. expect(resolveFileViewerPdfAssetUrls(undefined, 'https://viewer.example.com/dev/file').workerUrl).toBe(
  85. `https://viewer.example.com/${DEFAULT_FILE_VIEWER_PDF_WORKER_PATH}`
  86. )
  87. expect(resolveFileViewerPdfAssetUrls(undefined, 'https://viewer.example.com/dev/file/')).toEqual({
  88. workerUrl: `https://viewer.example.com/${DEFAULT_FILE_VIEWER_PDF_WORKER_PATH}`,
  89. cMapUrl: `https://viewer.example.com/${DEFAULT_FILE_VIEWER_PDF_CMAP_PATH}`,
  90. wasmUrl: `https://viewer.example.com/${DEFAULT_FILE_VIEWER_PDF_WASM_PATH}`,
  91. standardFontDataUrl: `https://viewer.example.com/${DEFAULT_FILE_VIEWER_PDF_STANDARD_FONT_PATH}`
  92. })
  93. expect(resolveFileViewerPdfAssetUrls({
  94. workerUrl: 'assets/pdf.worker.mjs'
  95. }, 'https://viewer.example.com/dev/file/').workerUrl).toBe(
  96. 'https://viewer.example.com/dev/file/assets/pdf.worker.mjs'
  97. )
  98. })
  99. it('resolves Typst compiler WASM URL from explicit, override, then default sources', () => {
  100. expect(resolveFileViewerTypstCompilerWasmUrl({ compilerWasmUrl: '/typst/compiler.wasm' })).toBe('http://localhost/typst/compiler.wasm')
  101. expect(resolveFileViewerTypstCompilerWasmUrl(undefined, [undefined, '/env/compiler.wasm'])).toBe('http://localhost/env/compiler.wasm')
  102. expect(resolveFileViewerTypstCompilerWasmUrl()).toBe(`http://localhost/${DEFAULT_FILE_VIEWER_TYPST_COMPILER_WASM_URL}`)
  103. })
  104. it('resolves Typst renderer WASM URL from explicit, override, then default sources', () => {
  105. expect(resolveFileViewerTypstRendererWasmUrl({ rendererWasmUrl: '/typst/renderer.wasm' })).toBe('http://localhost/typst/renderer.wasm')
  106. expect(resolveFileViewerTypstRendererWasmUrl(undefined, [undefined, '/env/renderer.wasm'])).toBe('http://localhost/env/renderer.wasm')
  107. expect(resolveFileViewerTypstRendererWasmUrl()).toBe(`http://localhost/${DEFAULT_FILE_VIEWER_TYPST_RENDERER_WASM_URL}`)
  108. })
  109. it('resolves data asset SQL WASM URL from explicit, override, then default sources', () => {
  110. expect(resolveFileViewerDataSqlWasmUrl({ sqlWasmUrl: '/sql/sql-wasm.wasm' })).toBe('http://localhost/sql/sql-wasm.wasm')
  111. expect(resolveFileViewerDataSqlWasmUrl(undefined, [undefined, '/env/sql-wasm.wasm'])).toBe('http://localhost/env/sql-wasm.wasm')
  112. expect(resolveFileViewerDataSqlWasmUrl()).toBe(`http://localhost/${DEFAULT_FILE_VIEWER_DATA_SQL_WASM_URL}`)
  113. })
  114. })