web-doc 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +148 -0
  4. package/THIRD_PARTY_NOTICES.md +20 -0
  5. package/bin/copy-assets.mjs +27 -0
  6. package/dist/abort.d.ts +1 -0
  7. package/dist/abort.js +18 -0
  8. package/dist/adapters/bitmap.d.ts +9 -0
  9. package/dist/adapters/bitmap.js +63 -0
  10. package/dist/adapters/csv-parser.d.ts +7 -0
  11. package/dist/adapters/csv-parser.js +124 -0
  12. package/dist/adapters/csv.d.ts +26 -0
  13. package/dist/adapters/csv.js +231 -0
  14. package/dist/adapters/image.d.ts +41 -0
  15. package/dist/adapters/image.js +198 -0
  16. package/dist/adapters/office.d.ts +211 -0
  17. package/dist/adapters/office.js +672 -0
  18. package/dist/adapters/pdf.d.ts +32 -0
  19. package/dist/adapters/pdf.js +429 -0
  20. package/dist/adapters/svg.d.ts +17 -0
  21. package/dist/adapters/svg.js +123 -0
  22. package/dist/assets/image/index.d.ts +75 -0
  23. package/dist/assets/image/index.js +289 -0
  24. package/dist/assets/image/index_bg.wasm +0 -0
  25. package/dist/assets/image/index_bg.wasm.d.ts +12 -0
  26. package/dist/assets/legacy/index.d.ts +54 -0
  27. package/dist/assets/legacy/index.js +306 -0
  28. package/dist/assets/legacy/index_bg.wasm +0 -0
  29. package/dist/assets/legacy/index_bg.wasm.d.ts +9 -0
  30. package/dist/assets/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  31. package/dist/assets/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  32. package/dist/assets/pdfjs/cmaps/78-H.bcmap +0 -0
  33. package/dist/assets/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  34. package/dist/assets/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  35. package/dist/assets/pdfjs/cmaps/78-V.bcmap +0 -0
  36. package/dist/assets/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  37. package/dist/assets/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  38. package/dist/assets/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  39. package/dist/assets/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  40. package/dist/assets/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  41. package/dist/assets/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  42. package/dist/assets/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  43. package/dist/assets/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  44. package/dist/assets/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  45. package/dist/assets/pdfjs/cmaps/Add-H.bcmap +0 -0
  46. package/dist/assets/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  47. package/dist/assets/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  48. package/dist/assets/pdfjs/cmaps/Add-V.bcmap +0 -0
  49. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  50. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  51. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  52. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  53. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  54. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  55. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  56. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  57. package/dist/assets/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  58. package/dist/assets/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  59. package/dist/assets/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  60. package/dist/assets/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  61. package/dist/assets/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  62. package/dist/assets/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  63. package/dist/assets/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  64. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  65. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  66. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  67. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  68. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  69. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  70. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  71. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  72. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  73. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  74. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  75. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  76. package/dist/assets/pdfjs/cmaps/B5-H.bcmap +0 -0
  77. package/dist/assets/pdfjs/cmaps/B5-V.bcmap +0 -0
  78. package/dist/assets/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  79. package/dist/assets/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  80. package/dist/assets/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  81. package/dist/assets/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  82. package/dist/assets/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  83. package/dist/assets/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  84. package/dist/assets/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  85. package/dist/assets/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  86. package/dist/assets/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  87. package/dist/assets/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  88. package/dist/assets/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  89. package/dist/assets/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  90. package/dist/assets/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  91. package/dist/assets/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  92. package/dist/assets/pdfjs/cmaps/EUC-H.bcmap +0 -0
  93. package/dist/assets/pdfjs/cmaps/EUC-V.bcmap +0 -0
  94. package/dist/assets/pdfjs/cmaps/Ext-H.bcmap +0 -0
  95. package/dist/assets/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  96. package/dist/assets/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  97. package/dist/assets/pdfjs/cmaps/Ext-V.bcmap +0 -0
  98. package/dist/assets/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  99. package/dist/assets/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  100. package/dist/assets/pdfjs/cmaps/GB-H.bcmap +4 -0
  101. package/dist/assets/pdfjs/cmaps/GB-V.bcmap +0 -0
  102. package/dist/assets/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  103. package/dist/assets/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  104. package/dist/assets/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  105. package/dist/assets/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  106. package/dist/assets/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  107. package/dist/assets/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  108. package/dist/assets/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  109. package/dist/assets/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  110. package/dist/assets/pdfjs/cmaps/GBT-H.bcmap +0 -0
  111. package/dist/assets/pdfjs/cmaps/GBT-V.bcmap +0 -0
  112. package/dist/assets/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  113. package/dist/assets/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  114. package/dist/assets/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  115. package/dist/assets/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  116. package/dist/assets/pdfjs/cmaps/H.bcmap +0 -0
  117. package/dist/assets/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  118. package/dist/assets/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  119. package/dist/assets/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  120. package/dist/assets/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  121. package/dist/assets/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  122. package/dist/assets/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  123. package/dist/assets/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  124. package/dist/assets/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  125. package/dist/assets/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  126. package/dist/assets/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  127. package/dist/assets/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  128. package/dist/assets/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  129. package/dist/assets/pdfjs/cmaps/Hankaku.bcmap +0 -0
  130. package/dist/assets/pdfjs/cmaps/Hiragana.bcmap +0 -0
  131. package/dist/assets/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  132. package/dist/assets/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  133. package/dist/assets/pdfjs/cmaps/KSC-H.bcmap +0 -0
  134. package/dist/assets/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  135. package/dist/assets/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  136. package/dist/assets/pdfjs/cmaps/KSC-V.bcmap +0 -0
  137. package/dist/assets/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  138. package/dist/assets/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  139. package/dist/assets/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  140. package/dist/assets/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  141. package/dist/assets/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  142. package/dist/assets/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  143. package/dist/assets/pdfjs/cmaps/Katakana.bcmap +0 -0
  144. package/dist/assets/pdfjs/cmaps/LICENSE +36 -0
  145. package/dist/assets/pdfjs/cmaps/NWP-H.bcmap +0 -0
  146. package/dist/assets/pdfjs/cmaps/NWP-V.bcmap +0 -0
  147. package/dist/assets/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  148. package/dist/assets/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  149. package/dist/assets/pdfjs/cmaps/Roman.bcmap +0 -0
  150. package/dist/assets/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  151. package/dist/assets/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  152. package/dist/assets/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  153. package/dist/assets/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  154. package/dist/assets/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  155. package/dist/assets/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  156. package/dist/assets/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  157. package/dist/assets/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  158. package/dist/assets/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  159. package/dist/assets/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  160. package/dist/assets/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  161. package/dist/assets/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  162. package/dist/assets/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  163. package/dist/assets/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  164. package/dist/assets/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  165. package/dist/assets/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  166. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  167. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  168. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  169. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  170. package/dist/assets/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  171. package/dist/assets/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  172. package/dist/assets/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  173. package/dist/assets/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  174. package/dist/assets/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  175. package/dist/assets/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  176. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  177. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  178. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  179. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  180. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  181. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  182. package/dist/assets/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  183. package/dist/assets/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  184. package/dist/assets/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  185. package/dist/assets/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  186. package/dist/assets/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  187. package/dist/assets/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  188. package/dist/assets/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  189. package/dist/assets/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  190. package/dist/assets/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  191. package/dist/assets/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  192. package/dist/assets/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  193. package/dist/assets/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  194. package/dist/assets/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  195. package/dist/assets/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  196. package/dist/assets/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  197. package/dist/assets/pdfjs/cmaps/V.bcmap +0 -0
  198. package/dist/assets/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  199. package/dist/assets/pdfjs/iccs/CGATS001Compat-v2-micro.icc +0 -0
  200. package/dist/assets/pdfjs/iccs/LICENSE +116 -0
  201. package/dist/assets/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  202. package/dist/assets/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  203. package/dist/assets/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  204. package/dist/assets/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  205. package/dist/assets/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  206. package/dist/assets/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  207. package/dist/assets/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  208. package/dist/assets/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  209. package/dist/assets/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  210. package/dist/assets/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  211. package/dist/assets/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  212. package/dist/assets/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
  213. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  214. package/dist/assets/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  215. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  216. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  217. package/dist/assets/pdfjs/wasm/LICENSE_JBIG2 +196 -0
  218. package/dist/assets/pdfjs/wasm/LICENSE_OPENJPEG +39 -0
  219. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  220. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  221. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_QCMS +22 -0
  222. package/dist/assets/pdfjs/wasm/LICENSE_QCMS +21 -0
  223. package/dist/assets/pdfjs/wasm/jbig2.wasm +0 -0
  224. package/dist/assets/pdfjs/wasm/jbig2_nowasm_fallback.js +15 -0
  225. package/dist/assets/pdfjs/wasm/openjpeg.wasm +0 -0
  226. package/dist/assets/pdfjs/wasm/openjpeg_nowasm_fallback.js +17 -0
  227. package/dist/assets/pdfjs/wasm/qcms_bg.wasm +0 -0
  228. package/dist/assets/pdfjs/wasm/quickjs-eval.js +16 -0
  229. package/dist/assets/pdfjs/wasm/quickjs-eval.wasm +0 -0
  230. package/dist/client.d.ts +20 -0
  231. package/dist/client.js +82 -0
  232. package/dist/contracts.d.ts +379 -0
  233. package/dist/contracts.js +22 -0
  234. package/dist/csv-worker.d.ts +1 -0
  235. package/dist/csv-worker.js +17 -0
  236. package/dist/detect.d.ts +15 -0
  237. package/dist/detect.js +290 -0
  238. package/dist/errors.d.ts +14 -0
  239. package/dist/errors.js +40 -0
  240. package/dist/font-manifest.d.ts +11 -0
  241. package/dist/font-manifest.js +31 -0
  242. package/dist/fonts/OFL-1.1.txt +88 -0
  243. package/dist/fonts/THIRD_PARTY_NOTICES.md +10 -0
  244. package/dist/fonts/manifest.json +83 -0
  245. package/dist/fonts/noto-sans-arabic.woff2 +0 -0
  246. package/dist/fonts/noto-sans-bengali.woff2 +0 -0
  247. package/dist/fonts/noto-sans-cjk.woff2 +0 -0
  248. package/dist/fonts/noto-sans-devanagari.woff2 +0 -0
  249. package/dist/fonts/noto-sans-gujarati.woff2 +0 -0
  250. package/dist/fonts/noto-sans-gurmukhi.woff2 +0 -0
  251. package/dist/fonts/noto-sans-japanese.woff2 +0 -0
  252. package/dist/fonts/noto-sans-kannada.woff2 +0 -0
  253. package/dist/fonts/noto-sans-korean.woff2 +0 -0
  254. package/dist/fonts/noto-sans-latin-cyrillic.woff2 +0 -0
  255. package/dist/fonts/noto-sans-malayalam.woff2 +0 -0
  256. package/dist/fonts/noto-sans-odia.woff2 +0 -0
  257. package/dist/fonts/noto-sans-tamil.woff2 +0 -0
  258. package/dist/fonts/noto-sans-telugu.woff2 +0 -0
  259. package/dist/fonts.d.ts +20 -0
  260. package/dist/fonts.js +238 -0
  261. package/dist/format.d.ts +1 -0
  262. package/dist/format.js +1 -0
  263. package/dist/headless.d.ts +18 -0
  264. package/dist/headless.js +18 -0
  265. package/dist/i18n.d.ts +4 -0
  266. package/dist/i18n.js +55 -0
  267. package/dist/image-worker.d.ts +1 -0
  268. package/dist/image-worker.js +41 -0
  269. package/dist/index.d.ts +27 -0
  270. package/dist/index.js +29 -0
  271. package/dist/interaction.d.ts +24 -0
  272. package/dist/interaction.js +183 -0
  273. package/dist/legacy-converter-worker.d.ts +1 -0
  274. package/dist/legacy-converter-worker.js +19 -0
  275. package/dist/limits.d.ts +4 -0
  276. package/dist/limits.js +162 -0
  277. package/dist/registry.d.ts +8 -0
  278. package/dist/registry.js +35 -0
  279. package/dist/render-scheduler.d.ts +8 -0
  280. package/dist/render-scheduler.js +63 -0
  281. package/dist/source.d.ts +14 -0
  282. package/dist/source.js +116 -0
  283. package/dist/spreadsheet-viewport.d.ts +34 -0
  284. package/dist/spreadsheet-viewport.js +1035 -0
  285. package/dist/styles.css +137 -0
  286. package/dist/ui-styles.d.ts +1 -0
  287. package/dist/ui-styles.js +139 -0
  288. package/dist/ui.d.ts +8 -0
  289. package/dist/ui.js +390 -0
  290. package/dist/viewer.d.ts +52 -0
  291. package/dist/viewer.js +901 -0
  292. package/dist/viewport.d.ts +54 -0
  293. package/dist/viewport.js +907 -0
  294. package/dist/worker-adapter.d.ts +24 -0
  295. package/dist/worker-adapter.js +97 -0
  296. package/dist/worker-client.d.ts +23 -0
  297. package/dist/worker-client.js +105 -0
  298. package/dist/worker-endpoint.d.ts +13 -0
  299. package/dist/worker-endpoint.js +57 -0
  300. package/dist/worker-protocol.d.ts +48 -0
  301. package/dist/worker-protocol.js +14 -0
  302. package/dist/worker.d.ts +4 -0
  303. package/dist/worker.js +4 -0
  304. package/dist/workers/csv-worker.js +160 -0
  305. package/dist/workers/image-worker.js +41 -0
  306. package/dist/workers/legacy-converter-worker.js +19 -0
  307. package/dist/workers/pdf.worker.min.mjs +28 -0
  308. package/package.json +74 -0
@@ -0,0 +1,4 @@
1
+ import type { DocumentFormat, ResourceLimits } from "./contracts.js";
2
+ export declare const defaultResourceLimits: Readonly<ResourceLimits>;
3
+ export declare function resolveLimits(base?: Partial<ResourceLimits>, override?: Partial<ResourceLimits>): ResourceLimits;
4
+ export declare function enforceContainerLimits(data: Uint8Array, format: DocumentFormat, limits: ResourceLimits): void;
package/dist/limits.js ADDED
@@ -0,0 +1,162 @@
1
+ import { ViewerError } from "./errors.js";
2
+ export const defaultResourceLimits = Object.freeze({
3
+ maxInputBytes: 100 * 1024 * 1024,
4
+ maxExpandedOfficeBytes: 512 * 1024 * 1024,
5
+ maxZipEntryBytes: 64 * 1024 * 1024,
6
+ maxDecodedPixels: 100_000_000,
7
+ maxSvgBytes: 16 * 1024 * 1024,
8
+ maxCsvCells: 1_000_000,
9
+ maxTextMapBytes: 64 * 1024 * 1024,
10
+ maxDocumentUnits: 100_000,
11
+ maxConcurrentRenders: 2,
12
+ maxOperationMs: 30_000,
13
+ });
14
+ export function resolveLimits(base = {}, override = {}) {
15
+ const result = { ...defaultResourceLimits, ...base, ...override };
16
+ for (const [name, value] of Object.entries(result)) {
17
+ if (!Number.isSafeInteger(value) || value <= 0)
18
+ throw new ViewerError("resource-limit", `Invalid resource limit ${name}: ${value}`);
19
+ }
20
+ return result;
21
+ }
22
+ export function enforceContainerLimits(data, format, limits) {
23
+ if (data.byteLength > limits.maxInputBytes)
24
+ throw limitError("Input exceeds maxInputBytes", data.byteLength, limits.maxInputBytes);
25
+ if (isZipOffice(format))
26
+ enforceZipLimits(data, limits);
27
+ if (format === "svg" && data.byteLength > limits.maxSvgBytes)
28
+ throw limitError("SVG exceeds maxSvgBytes", data.byteLength, limits.maxSvgBytes);
29
+ const dimensions = imageDimensions(data, format);
30
+ if (dimensions) {
31
+ const pixels = dimensions.width * dimensions.height;
32
+ if (!Number.isSafeInteger(pixels) || pixels > limits.maxDecodedPixels)
33
+ throw limitError("Decoded image exceeds maxDecodedPixels", pixels, limits.maxDecodedPixels);
34
+ }
35
+ }
36
+ function enforceZipLimits(data, limits) {
37
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
38
+ let expanded = 0;
39
+ let entries = 0;
40
+ for (let offset = 0; offset + 46 <= data.byteLength; offset += 1) {
41
+ if (view.getUint32(offset, true) !== 0x02014b50)
42
+ continue;
43
+ const uncompressed = view.getUint32(offset + 24, true);
44
+ if (uncompressed === 0xffffffff)
45
+ throw new ViewerError("resource-limit", "ZIP64 entries require explicit production support");
46
+ if (uncompressed > limits.maxZipEntryBytes)
47
+ throw limitError("ZIP entry exceeds maxZipEntryBytes", uncompressed, limits.maxZipEntryBytes);
48
+ expanded += uncompressed;
49
+ if (expanded > limits.maxExpandedOfficeBytes)
50
+ throw limitError("Office package exceeds maxExpandedOfficeBytes", expanded, limits.maxExpandedOfficeBytes);
51
+ const nameLength = view.getUint16(offset + 28, true);
52
+ const extraLength = view.getUint16(offset + 30, true);
53
+ const commentLength = view.getUint16(offset + 32, true);
54
+ offset += 45 + nameLength + extraLength + commentLength;
55
+ entries += 1;
56
+ }
57
+ if (entries === 0)
58
+ throw new ViewerError("invalid-file", "OOXML ZIP has no central-directory entries");
59
+ }
60
+ function imageDimensions(data, format) {
61
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
62
+ if (format === "png" && data.byteLength >= 24)
63
+ return { width: view.getUint32(16), height: view.getUint32(20) };
64
+ if (format === "gif" && data.byteLength >= 10)
65
+ return { width: view.getUint16(6, true), height: view.getUint16(8, true) };
66
+ if (format === "bmp" && data.byteLength >= 26)
67
+ return {
68
+ width: Math.abs(view.getInt32(18, true)),
69
+ height: Math.abs(view.getInt32(22, true)),
70
+ };
71
+ if (format === "jpeg")
72
+ return jpegDimensions(data);
73
+ if (format === "webp")
74
+ return webpDimensions(data);
75
+ if (format === "tiff")
76
+ return tiffDimensions(data);
77
+ return undefined;
78
+ }
79
+ function webpDimensions(data) {
80
+ if (data.byteLength < 25)
81
+ return undefined;
82
+ const chunk = ascii(data, 12, 16);
83
+ if (chunk === "VP8X" && data.byteLength >= 30)
84
+ return {
85
+ width: 1 + data[24] + (data[25] << 8) + (data[26] << 16),
86
+ height: 1 + data[27] + (data[28] << 8) + (data[29] << 16),
87
+ };
88
+ if (chunk === "VP8 " && data.byteLength >= 30)
89
+ return {
90
+ width: (data[26] | (data[27] << 8)) & 0x3fff,
91
+ height: (data[28] | (data[29] << 8)) & 0x3fff,
92
+ };
93
+ if (chunk === "VP8L" && data[20] === 0x2f) {
94
+ const bits = data[21] | (data[22] << 8) | (data[23] << 16) | (data[24] << 24);
95
+ return {
96
+ width: (bits & 0x3fff) + 1,
97
+ height: ((bits >>> 14) & 0x3fff) + 1,
98
+ };
99
+ }
100
+ return undefined;
101
+ }
102
+ function tiffDimensions(data) {
103
+ if (data.byteLength < 10)
104
+ return undefined;
105
+ const littleEndian = ascii(data, 0, 2) === "II";
106
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
107
+ const ifdOffset = view.getUint32(4, littleEndian);
108
+ if (ifdOffset + 2 > data.byteLength)
109
+ return undefined;
110
+ const count = view.getUint16(ifdOffset, littleEndian);
111
+ let width;
112
+ let height;
113
+ for (let index = 0; index < count; index += 1) {
114
+ const offset = ifdOffset + 2 + index * 12;
115
+ if (offset + 12 > data.byteLength)
116
+ return undefined;
117
+ const tag = view.getUint16(offset, littleEndian);
118
+ if (tag !== 256 && tag !== 257)
119
+ continue;
120
+ const type = view.getUint16(offset + 2, littleEndian);
121
+ const itemCount = view.getUint32(offset + 4, littleEndian);
122
+ if (itemCount !== 1 || (type !== 3 && type !== 4))
123
+ continue;
124
+ const value = type === 3
125
+ ? view.getUint16(offset + 8, littleEndian)
126
+ : view.getUint32(offset + 8, littleEndian);
127
+ if (tag === 256)
128
+ width = value;
129
+ else
130
+ height = value;
131
+ }
132
+ return width && height ? { width, height } : undefined;
133
+ }
134
+ function jpegDimensions(data) {
135
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
136
+ for (let offset = 2; offset + 9 < data.byteLength;) {
137
+ if (data[offset] !== 0xff)
138
+ return undefined;
139
+ const marker = data[offset + 1];
140
+ const length = view.getUint16(offset + 2);
141
+ if (marker >= 0xc0 && marker <= 0xc3)
142
+ return {
143
+ width: view.getUint16(offset + 7),
144
+ height: view.getUint16(offset + 5),
145
+ };
146
+ if (length < 2)
147
+ return undefined;
148
+ offset += 2 + length;
149
+ }
150
+ return undefined;
151
+ }
152
+ function isZipOffice(format) {
153
+ return ["docx", "docm", "xlsx", "xlsm", "pptx", "pptm", "ppsx"].includes(format);
154
+ }
155
+ function ascii(data, start, end) {
156
+ return String.fromCharCode(...data.subarray(start, end));
157
+ }
158
+ function limitError(message, actual, limit) {
159
+ return new ViewerError("resource-limit", message, {
160
+ details: { actual, limit },
161
+ });
162
+ }
@@ -0,0 +1,8 @@
1
+ import type { DocumentAdapter, DocumentFormat } from "./contracts.js";
2
+ export declare class AdapterRegistry {
3
+ #private;
4
+ constructor(adapters?: readonly DocumentAdapter[]);
5
+ register(adapter: DocumentAdapter): () => void;
6
+ resolve(format: DocumentFormat): DocumentAdapter;
7
+ destroy(): Promise<void>;
8
+ }
@@ -0,0 +1,35 @@
1
+ import { ViewerError } from "./errors.js";
2
+ export class AdapterRegistry {
3
+ #adapters = new Map();
4
+ constructor(adapters = []) {
5
+ for (const adapter of adapters)
6
+ this.register(adapter);
7
+ }
8
+ register(adapter) {
9
+ if (!adapter.id.trim())
10
+ throw new ViewerError("internal", "Adapter id must not be empty");
11
+ for (const format of adapter.formats) {
12
+ if (this.#adapters.has(format))
13
+ throw new ViewerError("internal", `An adapter is already registered for ${format}`);
14
+ this.#adapters.set(format, adapter);
15
+ }
16
+ return () => {
17
+ for (const format of adapter.formats)
18
+ if (this.#adapters.get(format) === adapter)
19
+ this.#adapters.delete(format);
20
+ };
21
+ }
22
+ resolve(format) {
23
+ const adapter = this.#adapters.get(format);
24
+ if (!adapter)
25
+ throw new ViewerError("unsupported-format", `No adapter is registered for ${format}`, {
26
+ details: { format },
27
+ });
28
+ return adapter;
29
+ }
30
+ async destroy() {
31
+ const unique = new Set(this.#adapters.values());
32
+ this.#adapters.clear();
33
+ await Promise.all([...unique].map(async (adapter) => adapter.destroy?.()));
34
+ }
35
+ }
@@ -0,0 +1,8 @@
1
+ export type RenderPriority = "visible" | "adjacent" | "background";
2
+ export declare class RenderScheduler {
3
+ #private;
4
+ constructor(concurrency: number);
5
+ get active(): number;
6
+ get queued(): number;
7
+ run<T>(priority: RenderPriority, signal: AbortSignal, task: () => Promise<T>): Promise<T>;
8
+ }
@@ -0,0 +1,63 @@
1
+ import { abortError } from "./errors.js";
2
+ const priorities = {
3
+ visible: 0,
4
+ adjacent: 1,
5
+ background: 2,
6
+ };
7
+ export class RenderScheduler {
8
+ #concurrency;
9
+ #queue = [];
10
+ #active = 0;
11
+ #sequence = 0;
12
+ constructor(concurrency) {
13
+ this.#concurrency = Math.max(1, Math.trunc(concurrency));
14
+ }
15
+ get active() {
16
+ return this.#active;
17
+ }
18
+ get queued() {
19
+ return this.#queue.length;
20
+ }
21
+ run(priority, signal, task) {
22
+ if (signal.aborted)
23
+ return Promise.reject(abortError());
24
+ return new Promise((resolve, reject) => {
25
+ const queued = {
26
+ priority: priorities[priority],
27
+ sequence: this.#sequence++,
28
+ signal,
29
+ task,
30
+ resolve,
31
+ reject,
32
+ };
33
+ this.#queue.push(queued);
34
+ this.#queue.sort((left, right) => left.priority - right.priority || left.sequence - right.sequence);
35
+ const onAbort = () => {
36
+ const index = this.#queue.indexOf(queued);
37
+ if (index < 0)
38
+ return;
39
+ this.#queue.splice(index, 1);
40
+ reject(abortError());
41
+ };
42
+ signal.addEventListener("abort", onAbort, { once: true });
43
+ void this.#drain();
44
+ });
45
+ }
46
+ async #drain() {
47
+ while (this.#active < this.#concurrency && this.#queue.length > 0) {
48
+ const queued = this.#queue.shift();
49
+ if (queued.signal.aborted) {
50
+ queued.reject(abortError());
51
+ continue;
52
+ }
53
+ this.#active += 1;
54
+ void queued
55
+ .task()
56
+ .then(queued.resolve, queued.reject)
57
+ .finally(() => {
58
+ this.#active -= 1;
59
+ void this.#drain();
60
+ });
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,14 @@
1
+ import type { DocumentSource, ViewerFetch, ViewerProgress } from "./contracts.js";
2
+ export interface LoadedSource {
3
+ readonly bytes: Uint8Array;
4
+ readonly fileName?: string;
5
+ readonly contentType?: string;
6
+ }
7
+ export interface SourceLoadOptions {
8
+ readonly fetch: ViewerFetch;
9
+ readonly signal: AbortSignal;
10
+ readonly maxBytes: number;
11
+ readonly reportProgress: (progress: ViewerProgress) => void;
12
+ }
13
+ export declare function loadDocumentSource(source: DocumentSource, options: SourceLoadOptions): Promise<LoadedSource>;
14
+ export declare function sourceToBytes(source: DocumentSource, signal?: AbortSignal): Promise<Uint8Array>;
package/dist/source.js ADDED
@@ -0,0 +1,116 @@
1
+ import { abortError, normalizeError, ViewerError } from "./errors.js";
2
+ export async function loadDocumentSource(source, options) {
3
+ throwIfAborted(options.signal);
4
+ if (source instanceof Uint8Array)
5
+ return binary(source, options.maxBytes);
6
+ if (source instanceof ArrayBuffer)
7
+ return binary(new Uint8Array(source), options.maxBytes);
8
+ if (typeof Blob !== "undefined" && source instanceof Blob) {
9
+ enforceSize(source.size, options.maxBytes);
10
+ const bytes = new Uint8Array(await source.arrayBuffer());
11
+ throwIfAborted(options.signal);
12
+ return {
13
+ bytes,
14
+ ...(source.type ? { contentType: source.type } : {}),
15
+ ...("name" in source && typeof source.name === "string"
16
+ ? { fileName: source.name }
17
+ : {}),
18
+ };
19
+ }
20
+ if (typeof source !== "string" && !(source instanceof URL))
21
+ throw new ViewerError("invalid-file", "Unsupported document source object");
22
+ const url = source instanceof URL
23
+ ? source
24
+ : new URL(source, globalThis.location?.href ?? "http://localhost/");
25
+ let response;
26
+ try {
27
+ response = await options.fetch(url, { signal: options.signal });
28
+ }
29
+ catch (error) {
30
+ if (options.signal.aborted)
31
+ throw abortError();
32
+ throw new ViewerError("network-error", `Failed to fetch ${url.href}`, {
33
+ cause: error,
34
+ });
35
+ }
36
+ if (!response.ok)
37
+ throw new ViewerError("network-error", `Failed to fetch document: HTTP ${response.status}`, {
38
+ details: { status: response.status, url: url.href },
39
+ });
40
+ const declaredLength = Number(response.headers.get("content-length"));
41
+ if (Number.isFinite(declaredLength) && declaredLength >= 0)
42
+ enforceSize(declaredLength, options.maxBytes);
43
+ const bytes = await readLimitedBody(response, options);
44
+ const fileName = url.pathname.split("/").at(-1);
45
+ const contentType = response.headers.get("content-type");
46
+ return {
47
+ bytes,
48
+ ...(fileName ? { fileName } : {}),
49
+ ...(contentType ? { contentType } : {}),
50
+ };
51
+ }
52
+ export async function sourceToBytes(source, signal) {
53
+ const controller = signal ? undefined : new AbortController();
54
+ const loaded = await loadDocumentSource(source, {
55
+ fetch: globalThis.fetch.bind(globalThis),
56
+ signal: signal ?? controller.signal,
57
+ maxBytes: Number.MAX_SAFE_INTEGER,
58
+ reportProgress: () => { },
59
+ });
60
+ return loaded.bytes;
61
+ }
62
+ async function readLimitedBody(response, options) {
63
+ if (!response.body) {
64
+ const bytes = new Uint8Array(await response.arrayBuffer());
65
+ enforceSize(bytes.byteLength, options.maxBytes);
66
+ return bytes;
67
+ }
68
+ const reader = response.body.getReader();
69
+ const chunks = [];
70
+ let loaded = 0;
71
+ const total = Number(response.headers.get("content-length")) || undefined;
72
+ try {
73
+ while (true) {
74
+ const result = await reader.read();
75
+ if (result.done)
76
+ break;
77
+ loaded += result.value.byteLength;
78
+ enforceSize(loaded, options.maxBytes);
79
+ chunks.push(result.value);
80
+ options.reportProgress({
81
+ phase: "loading",
82
+ loaded,
83
+ ...(total ? { total, ratio: loaded / total } : {}),
84
+ });
85
+ }
86
+ }
87
+ catch (error) {
88
+ if (options.signal.aborted)
89
+ throw abortError();
90
+ throw normalizeError(error, "network-error");
91
+ }
92
+ finally {
93
+ reader.releaseLock();
94
+ }
95
+ const bytes = new Uint8Array(loaded);
96
+ let offset = 0;
97
+ for (const chunk of chunks) {
98
+ bytes.set(chunk, offset);
99
+ offset += chunk.byteLength;
100
+ }
101
+ return bytes;
102
+ }
103
+ function binary(bytes, maxBytes) {
104
+ enforceSize(bytes.byteLength, maxBytes);
105
+ return { bytes };
106
+ }
107
+ function enforceSize(actual, limit) {
108
+ if (actual > limit)
109
+ throw new ViewerError("resource-limit", "Input exceeds maxInputBytes", {
110
+ details: { actual, limit },
111
+ });
112
+ }
113
+ function throwIfAborted(signal) {
114
+ if (signal.aborted)
115
+ throw abortError();
116
+ }
@@ -0,0 +1,34 @@
1
+ import type { DocumentInfo, SearchMatch, TextRun } from "./contracts.js";
2
+ import type { ViewportHost } from "./viewport.js";
3
+ interface CellAddress {
4
+ readonly row: number;
5
+ readonly column: number;
6
+ }
7
+ export interface SpreadsheetSearchCell extends CellAddress {
8
+ readonly active: boolean;
9
+ }
10
+ export declare class AxisGeometry {
11
+ #private;
12
+ constructor(count: number, defaultSize: number, overrides?: Readonly<Record<number, number>>);
13
+ get count(): number;
14
+ get totalSize(): number;
15
+ sizeOf(index: number): number;
16
+ /** Offset of a 1-based band; count + 1 returns the full extent. */
17
+ offsetOf(index: number): number;
18
+ /** Band containing an unscaled logical offset. Hidden zero-sized bands skip. */
19
+ indexAt(offset: number): number;
20
+ }
21
+ export declare class SpreadsheetViewport {
22
+ #private;
23
+ constructor(container: HTMLElement, host: ViewportHost);
24
+ setDocument(info: DocumentInfo | undefined): void;
25
+ update(): void;
26
+ panBy(deltaX: number, deltaY: number): void;
27
+ goToPage(pageIndex: number): void;
28
+ fitWidth(): number;
29
+ fitPage(): number;
30
+ schedule(): void;
31
+ destroy(): void;
32
+ }
33
+ export declare function spreadsheetSearchCells(runs: readonly TextRun[], matches: readonly SearchMatch[], activeMatch?: SearchMatch): readonly SpreadsheetSearchCell[];
34
+ export {};