@sync-in/server 2.0.0 → 2.1.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 (232) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +38 -28
  3. package/environment/environment.dist.yaml +4 -0
  4. package/package.json +17 -17
  5. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -1
  6. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  7. package/server/applications/files/utils/files.js +37 -24
  8. package/server/applications/files/utils/files.js.map +1 -1
  9. package/server/applications/notifications/i18n/index.js +5 -0
  10. package/server/applications/notifications/i18n/index.js.map +1 -1
  11. package/server/applications/notifications/i18n/nl.js +54 -0
  12. package/server/applications/notifications/i18n/nl.js.map +1 -0
  13. package/server/applications/sync/services/sync-clients-manager.service.js +1 -1
  14. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  15. package/server/authentication/providers/oidc/auth-oidc.config.js +5 -0
  16. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -1
  17. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +10 -7
  18. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -1
  19. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +16 -0
  20. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -1
  21. package/server/common/i18n.js +1 -0
  22. package/server/common/i18n.js.map +1 -1
  23. package/server/infrastructure/database/database.module.js +7 -0
  24. package/server/infrastructure/database/database.module.js.map +1 -1
  25. package/server/infrastructure/database/scripts/check-db.js +20 -0
  26. package/server/infrastructure/database/scripts/check-db.js.map +1 -0
  27. package/static/3rdpartylicenses.txt +391 -391
  28. package/static/assets/pdfjs/build/pdf.mjs +512 -417
  29. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  30. package/static/assets/pdfjs/build/pdf.sandbox.mjs +390 -4
  31. package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
  32. package/static/assets/pdfjs/build/pdf.worker.mjs +2378 -401
  33. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  34. package/static/assets/pdfjs/version +1 -1
  35. package/static/assets/pdfjs/web/debugger.mjs +6 -15
  36. package/static/assets/pdfjs/web/locale/be/viewer.ftl +78 -0
  37. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +82 -0
  38. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +90 -0
  39. package/static/assets/pdfjs/web/locale/de/viewer.ftl +75 -0
  40. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +82 -0
  41. package/static/assets/pdfjs/web/locale/el/viewer.ftl +74 -0
  42. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +74 -0
  43. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +81 -0
  44. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +14 -14
  45. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +74 -0
  46. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +74 -0
  47. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +74 -0
  48. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +74 -0
  49. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +75 -0
  50. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +74 -0
  51. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +74 -0
  52. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +81 -0
  53. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +74 -0
  54. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +77 -0
  55. package/static/assets/pdfjs/web/locale/he/viewer.ftl +81 -0
  56. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +87 -0
  57. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +74 -0
  58. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +10 -10
  59. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +75 -0
  60. package/static/assets/pdfjs/web/locale/it/viewer.ftl +81 -0
  61. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +58 -0
  62. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +74 -0
  63. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +81 -0
  64. package/static/assets/pdfjs/web/locale/km/viewer.ftl +44 -0
  65. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +65 -0
  66. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +74 -0
  67. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +81 -0
  68. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +75 -0
  69. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +74 -0
  70. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +78 -0
  71. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +74 -0
  72. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +81 -3
  73. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +85 -0
  74. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +83 -1
  75. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +82 -0
  76. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +81 -0
  77. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +74 -0
  78. package/static/assets/pdfjs/web/locale/th/viewer.ftl +58 -0
  79. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +74 -0
  80. package/static/assets/pdfjs/web/locale/uk/viewer.ftl +144 -0
  81. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +65 -0
  82. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +61 -3
  83. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +65 -0
  84. package/static/assets/pdfjs/web/viewer.css +292 -152
  85. package/static/assets/pdfjs/web/viewer.html +14 -21
  86. package/static/assets/pdfjs/web/viewer.mjs +782 -327
  87. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  88. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  89. package/static/{chunk-7WOPGQXB.js → chunk-25XD7GNL.js} +1 -1
  90. package/static/{chunk-E5WI5725.js → chunk-2W4Z5VTY.js} +1 -1
  91. package/static/chunk-2XNPCG4F.js +1 -0
  92. package/static/chunk-3B2RHO2H.js +1 -0
  93. package/static/{chunk-UMDRE4S7.js → chunk-3DNAFXGN.js} +1 -1
  94. package/static/{chunk-OANZITPM.js → chunk-3EPN4WD7.js} +1 -1
  95. package/static/chunk-4L2WBHB6.js +1 -0
  96. package/static/chunk-4RYZNAIZ.js +1 -0
  97. package/static/chunk-5C77PEFA.js +1 -0
  98. package/static/chunk-5JA3DZWQ.js +1 -0
  99. package/static/chunk-5MSTJGPE.js +1 -0
  100. package/static/{chunk-VSBFNFOM.js → chunk-5O7KTREI.js} +1 -1
  101. package/static/chunk-6KORLSUZ.js +1 -0
  102. package/static/chunk-6LIHQVPW.js +2 -0
  103. package/static/{chunk-2CKLZ3FM.js → chunk-72BXGTUG.js} +1 -1
  104. package/static/chunk-7423QJQN.js +1 -0
  105. package/static/chunk-77HB4DE6.js +1 -0
  106. package/static/{chunk-RWAAC3A4.js → chunk-7PVTMTWH.js} +1 -1
  107. package/static/{chunk-IWWBV6EM.js → chunk-7UIOW5AD.js} +1 -1
  108. package/static/chunk-7YMONFZZ.js +1 -0
  109. package/static/chunk-AUPNSQGJ.js +1 -0
  110. package/static/chunk-AYF6ZI6L.js +5 -0
  111. package/static/chunk-BEESW4BF.js +1 -0
  112. package/static/{chunk-2R6IBBPZ.js → chunk-BI3VI6XG.js} +1 -1
  113. package/static/chunk-BMGKB3JK.js +4 -0
  114. package/static/chunk-CFXAKPPB.js +563 -0
  115. package/static/chunk-CGYZG6CB.js +2 -0
  116. package/static/{chunk-K25E7YGG.js → chunk-CHAYERHQ.js} +1 -1
  117. package/static/chunk-CLNKPQMZ.js +1 -0
  118. package/static/{chunk-ISV3BO6R.js → chunk-CVLSRA2W.js} +1 -1
  119. package/static/chunk-D373HBMN.js +1 -0
  120. package/static/{chunk-MTRXBVWZ.js → chunk-D43PHZEY.js} +1 -1
  121. package/static/chunk-D44RAVFK.js +1 -0
  122. package/static/chunk-DFVVEGWC.js +1 -0
  123. package/static/chunk-E43LXI27.js +1 -0
  124. package/static/{chunk-GQFMWVFD.js → chunk-E5M4ZDID.js} +1 -1
  125. package/static/chunk-F7JS3YWP.js +2 -0
  126. package/static/chunk-FRWEEOOM.js +1 -0
  127. package/static/chunk-HIZGSP7R.js +1 -0
  128. package/static/chunk-HX6ZWXQD.js +1 -0
  129. package/static/chunk-HZ6LLXLE.js +1 -0
  130. package/static/{chunk-RLL634K4.js → chunk-IFHFPV5W.js} +1 -1
  131. package/static/{chunk-KJD3KFF3.js → chunk-JICKUOQ6.js} +1 -1
  132. package/static/chunk-KY2BW2LP.js +1 -0
  133. package/static/{chunk-CWYHOPOP.js → chunk-KYA3HPDX.js} +1 -1
  134. package/static/{chunk-RWCNTCU5.js → chunk-KYLATNX5.js} +1 -1
  135. package/static/chunk-LCZNSV4Z.js +1 -0
  136. package/static/{chunk-GVNTC564.js → chunk-MA6DYTMQ.js} +1 -1
  137. package/static/{chunk-KZS7CTNR.js → chunk-MXH5XYBD.js} +1 -1
  138. package/static/{chunk-NMTBMHUL.js → chunk-MXIJGSDQ.js} +1 -1
  139. package/static/{chunk-RS2OFKWP.js → chunk-NE75E3GD.js} +1 -1
  140. package/static/{chunk-MZQK6LNV.js → chunk-NJKIHMOH.js} +1 -1
  141. package/static/chunk-NMDGST45.js +1 -0
  142. package/static/{chunk-CU76ATCF.js → chunk-OF7P4LTI.js} +1 -1
  143. package/static/chunk-OK5K5CYJ.js +13 -0
  144. package/static/chunk-OZ6LXMUH.js +1 -0
  145. package/static/chunk-PFY6YUPS.js +2 -0
  146. package/static/chunk-PQ2YFCVM.js +1 -0
  147. package/static/{chunk-Y4AUYQTG.js → chunk-QPX34S6P.js} +4 -4
  148. package/static/{chunk-27ATUHBH.js → chunk-QQO7S2VY.js} +1 -1
  149. package/static/chunk-RANZZPRG.js +1 -0
  150. package/static/{chunk-WN4WXCVK.js → chunk-RNQB2QJB.js} +1 -1
  151. package/static/{chunk-Q3EGCMF5.js → chunk-S7QYAKG5.js} +1 -1
  152. package/static/chunk-SCEWOW5C.js +2 -0
  153. package/static/chunk-SQ2KIOJ7.js +1 -0
  154. package/static/{chunk-QVRVFYJH.js → chunk-SW5GCGOI.js} +1 -1
  155. package/static/chunk-SWCYWB2T.js +1 -0
  156. package/static/{chunk-4FIGEBNL.js → chunk-SWZ3L2LK.js} +1 -1
  157. package/static/{chunk-TWCGKSYE.js → chunk-TDK62XEQ.js} +1 -1
  158. package/static/chunk-TH4L5H6P.js +1 -0
  159. package/static/chunk-U3ZGYOLA.js +1 -0
  160. package/static/chunk-U6V4Y234.js +1 -0
  161. package/static/chunk-U7KNV64D.js +2 -0
  162. package/static/chunk-UC66HJV4.js +1 -0
  163. package/static/{chunk-7GWW6MJO.js → chunk-V4HAIERK.js} +1 -1
  164. package/static/chunk-V55LDRV7.js +1 -0
  165. package/static/{chunk-5CZOSAMZ.js → chunk-WF6D7CQ4.js} +1 -1
  166. package/static/chunk-WJPVHM7T.js +1 -0
  167. package/static/chunk-WM4XBDC2.js +1 -0
  168. package/static/chunk-X2EKQYMZ.js +1 -0
  169. package/static/{chunk-L5IHUVXL.js → chunk-XEDABMM5.js} +1 -1
  170. package/static/{chunk-OGE4SAHU.js → chunk-Y3YKVK3K.js} +1 -1
  171. package/static/{chunk-QIGUDEZF.js → chunk-YEOAMYRK.js} +1 -1
  172. package/static/{chunk-A4UGPSWX.js → chunk-ZLTL7I7D.js} +1 -1
  173. package/static/chunk-ZYNBYM7I.js +3 -0
  174. package/static/index.html +2 -2
  175. package/static/main-KFUSRCP5.js +5 -0
  176. package/static/media/inter-cyrillic-ext-wght-normal-IYF56FF6.woff2 +0 -0
  177. package/static/media/inter-cyrillic-wght-normal-JEOLYBOO.woff2 +0 -0
  178. package/static/media/inter-greek-ext-wght-normal-EOVOK2B5.woff2 +0 -0
  179. package/static/media/inter-greek-wght-normal-IRE366VL.woff2 +0 -0
  180. package/static/media/inter-latin-ext-wght-normal-HA22NDSG.woff2 +0 -0
  181. package/static/media/inter-latin-wght-normal-NRMW37G5.woff2 +0 -0
  182. package/static/media/inter-vietnamese-wght-normal-CE5GGD3W.woff2 +0 -0
  183. package/static/styles-66AEF62D.css +1 -0
  184. package/static/chunk-22TZP6HW.js +0 -1
  185. package/static/chunk-2QZPX7LO.js +0 -1
  186. package/static/chunk-4P3JABAP.js +0 -13
  187. package/static/chunk-677WUBCT.js +0 -1
  188. package/static/chunk-74CAHBFM.js +0 -1
  189. package/static/chunk-AHO37FKW.js +0 -1
  190. package/static/chunk-AQCXMKP3.js +0 -1
  191. package/static/chunk-B6PDYCRO.js +0 -3
  192. package/static/chunk-FC5HTKVM.js +0 -1
  193. package/static/chunk-FOSM7EYI.js +0 -1
  194. package/static/chunk-GAZO25PI.js +0 -1
  195. package/static/chunk-GB7ABR5N.js +0 -1
  196. package/static/chunk-GEHFKZQ5.js +0 -2
  197. package/static/chunk-HGL3NYP2.js +0 -2
  198. package/static/chunk-HLIWPWRA.js +0 -1
  199. package/static/chunk-HNYB3M4S.js +0 -1
  200. package/static/chunk-HUXAUQMN.js +0 -1
  201. package/static/chunk-I2XA6PPK.js +0 -1
  202. package/static/chunk-JV3AGU5B.js +0 -1
  203. package/static/chunk-K46PUTZB.js +0 -1
  204. package/static/chunk-KERFLJ56.js +0 -1
  205. package/static/chunk-KPKSI23S.js +0 -1
  206. package/static/chunk-L7RRX2M3.js +0 -1
  207. package/static/chunk-LGWJ2WKU.js +0 -1
  208. package/static/chunk-LUSVISM6.js +0 -1
  209. package/static/chunk-MLC7JK2H.js +0 -2
  210. package/static/chunk-MOHNYW2A.js +0 -1
  211. package/static/chunk-NCDUOVMW.js +0 -1
  212. package/static/chunk-NGUAJIGI.js +0 -1
  213. package/static/chunk-NIPP6JDI.js +0 -1
  214. package/static/chunk-O4XXMZFX.js +0 -4
  215. package/static/chunk-OI3ME22C.js +0 -1
  216. package/static/chunk-QF2NSHZA.js +0 -1
  217. package/static/chunk-QJVC3SRJ.js +0 -562
  218. package/static/chunk-QKN6LAAA.js +0 -1
  219. package/static/chunk-QRFESU5O.js +0 -2
  220. package/static/chunk-RFJIPIOK.js +0 -2
  221. package/static/chunk-S5Y64DDS.js +0 -1
  222. package/static/chunk-SLG5KDU6.js +0 -1
  223. package/static/chunk-TJ4CVFEL.js +0 -1
  224. package/static/chunk-VRIOLRYR.js +0 -5
  225. package/static/chunk-VS4O2XDP.js +0 -1
  226. package/static/chunk-WX7RXW7K.js +0 -1
  227. package/static/chunk-XC4POKR3.js +0 -2
  228. package/static/chunk-Y67J3BOL.js +0 -1
  229. package/static/chunk-YMIXHRJQ.js +0 -1
  230. package/static/chunk-ZUNKFAKP.js +0 -1
  231. package/static/main-QN4UCOC5.js +0 -5
  232. package/static/styles-46GLIE7Y.css +0 -1
@@ -21,8 +21,8 @@
21
21
  */
22
22
 
23
23
  /**
24
- * pdfjsVersion = 5.4.624
25
- * pdfjsBuild = 384c6208b
24
+ * pdfjsVersion = 5.5.207
25
+ * pdfjsBuild = 527964698
26
26
  */
27
27
  /******/ // The require scope
28
28
  /******/ var __webpack_require__ = {};
@@ -125,7 +125,7 @@ const TextRenderingMode = {
125
125
  FILL_STROKE_MASK: 3,
126
126
  ADD_TO_PATH_FLAG: 4
127
127
  };
128
- const util_ImageKind = {
128
+ const ImageKind = {
129
129
  GRAYSCALE_1BPP: 1,
130
130
  RGB_24BPP: 2,
131
131
  RGBA_32BPP: 3
@@ -408,6 +408,9 @@ function updateUrlHash(url, hash, allowRel = false) {
408
408
  }
409
409
  return "";
410
410
  }
411
+ function stripPath(str) {
412
+ return str.substring(str.lastIndexOf("/") + 1);
413
+ }
411
414
  function shadow(obj, prop, value, nonSerializable = false) {
412
415
  Object.defineProperty(obj, prop, {
413
416
  value,
@@ -508,7 +511,7 @@ function isEvalSupported() {
508
511
  return false;
509
512
  }
510
513
  }
511
- class util_FeatureTest {
514
+ class FeatureTest {
512
515
  static get isLittleEndian() {
513
516
  return shadow(this, "isLittleEndian", isLittleEndian());
514
517
  }
@@ -894,6 +897,9 @@ function _isValidExplicitDest(validRef, validName, dest) {
894
897
  }
895
898
  return true;
896
899
  }
900
+ const makeArr = () => [];
901
+ const makeMap = () => new Map();
902
+ const makeObj = () => Object.create(null);
897
903
  function MathClamp(v, min, max) {
898
904
  return Math.min(Math.max(v, min), max);
899
905
  }
@@ -1173,10 +1179,10 @@ async function fetchData(url, type = "text") {
1173
1179
  throw new Error(response.statusText);
1174
1180
  }
1175
1181
  switch (type) {
1176
- case "arraybuffer":
1177
- return response.arrayBuffer();
1178
1182
  case "blob":
1179
1183
  return response.blob();
1184
+ case "bytes":
1185
+ return response.bytes();
1180
1186
  case "json":
1181
1187
  return response.json();
1182
1188
  }
@@ -1185,14 +1191,16 @@ async function fetchData(url, type = "text") {
1185
1191
  return new Promise((resolve, reject) => {
1186
1192
  const request = new XMLHttpRequest();
1187
1193
  request.open("GET", url, true);
1188
- request.responseType = type;
1194
+ request.responseType = type === "bytes" ? "arraybuffer" : type;
1189
1195
  request.onreadystatechange = () => {
1190
1196
  if (request.readyState !== XMLHttpRequest.DONE) {
1191
1197
  return;
1192
1198
  }
1193
1199
  if (request.status === 200 || request.status === 0) {
1194
1200
  switch (type) {
1195
- case "arraybuffer":
1201
+ case "bytes":
1202
+ resolve(new Uint8Array(request.response));
1203
+ return;
1196
1204
  case "blob":
1197
1205
  case "json":
1198
1206
  resolve(request.response);
@@ -1342,7 +1350,7 @@ function isPdfFile(filename) {
1342
1350
  }
1343
1351
  function getFilenameFromUrl(url) {
1344
1352
  [url] = url.split(/[#?]/, 1);
1345
- return url.substring(url.lastIndexOf("/") + 1);
1353
+ return stripPath(url);
1346
1354
  }
1347
1355
  function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
1348
1356
  if (typeof url !== "string") {
@@ -1379,11 +1387,10 @@ function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
1379
1387
  try {
1380
1388
  let decoded = decodeURIComponent(name);
1381
1389
  if (decoded.includes("/")) {
1382
- decoded = decoded.split("/").at(-1);
1383
- if (decoded.test(/^\.pdf$/i)) {
1384
- return decoded;
1390
+ decoded = stripPath(decoded);
1391
+ if (/^\.pdf$/i.test(decoded)) {
1392
+ return name;
1385
1393
  }
1386
- return name;
1387
1394
  }
1388
1395
  return decoded;
1389
1396
  } catch {
@@ -1391,22 +1398,15 @@ function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
1391
1398
  }
1392
1399
  };
1393
1400
  const pdfRegex = /\.pdf$/i;
1394
- const filename = newURL.pathname.split("/").at(-1);
1401
+ const filename = stripPath(newURL.pathname);
1395
1402
  if (pdfRegex.test(filename)) {
1396
1403
  return decode(filename);
1397
1404
  }
1398
1405
  if (newURL.searchParams.size > 0) {
1399
- const values = Array.from(newURL.searchParams.values()).reverse();
1400
- for (const value of values) {
1401
- if (pdfRegex.test(value)) {
1402
- return decode(value);
1403
- }
1404
- }
1405
- const keys = Array.from(newURL.searchParams.keys()).reverse();
1406
- for (const key of keys) {
1407
- if (pdfRegex.test(key)) {
1408
- return decode(key);
1409
- }
1406
+ const getLast = iterator => [...iterator].findLast(v => pdfRegex.test(v));
1407
+ const name = getLast(newURL.searchParams.values()) ?? getLast(newURL.searchParams.keys());
1408
+ if (name) {
1409
+ return decode(name);
1410
1410
  }
1411
1411
  }
1412
1412
  if (newURL.hash) {
@@ -1458,7 +1458,7 @@ class StatTimer {
1458
1458
  }
1459
1459
  function isValidFetchUrl(url, baseUrl) {
1460
1460
  const res = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);
1461
- return res?.protocol === "http:" || res?.protocol === "https:";
1461
+ return /https?:/.test(res?.protocol ?? "");
1462
1462
  }
1463
1463
  function noContextMenu(e) {
1464
1464
  e.preventDefault();
@@ -1583,7 +1583,7 @@ function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true)
1583
1583
  const {
1584
1584
  style
1585
1585
  } = div;
1586
- const useRound = util_FeatureTest.isCSSRoundSupported;
1586
+ const useRound = FeatureTest.isCSSRoundSupported;
1587
1587
  const w = `var(--total-scale-factor) * ${pageWidth}px`,
1588
1588
  h = `var(--total-scale-factor) * ${pageHeight}px`;
1589
1589
  const widthStr = useRound ? `round(down, ${w}, var(--scale-round-x))` : `calc(${w})`,
@@ -1670,7 +1670,7 @@ class CSSConstants {
1670
1670
  }
1671
1671
  }
1672
1672
  function applyOpacity(r, g, b, opacity) {
1673
- opacity = Math.min(Math.max(opacity ?? 1, 0), 1);
1673
+ opacity = MathClamp(opacity ?? 1, 0, 1);
1674
1674
  const white = 255 * (1 - opacity);
1675
1675
  r = Math.round(r * opacity + white);
1676
1676
  g = Math.round(g * opacity + white);
@@ -1855,58 +1855,74 @@ function makePathFromDrawOPS(data) {
1855
1855
  return path;
1856
1856
  }
1857
1857
  class PagesMapper {
1858
- static #idToPageNumber = null;
1859
- static #pageNumberToId = null;
1860
- static #prevIdToPageNumber = null;
1861
- static #pagesNumber = 0;
1862
- static #listeners = [];
1858
+ #idToPageNumber = null;
1859
+ #pageNumberToId = null;
1860
+ #prevPageNumbers = null;
1861
+ #pagesNumber = 0;
1862
+ #listeners = [];
1863
+ #copiedPageIds = null;
1864
+ #copiedPageNumbers = null;
1863
1865
  get pagesNumber() {
1864
- return PagesMapper.#pagesNumber;
1866
+ return this.#pagesNumber;
1865
1867
  }
1866
1868
  set pagesNumber(n) {
1867
- if (PagesMapper.#pagesNumber === n) {
1869
+ if (this.#pagesNumber === n) {
1868
1870
  return;
1869
1871
  }
1870
- PagesMapper.#pagesNumber = n;
1871
- if (n === 0) {
1872
- PagesMapper.#pageNumberToId = null;
1873
- PagesMapper.#idToPageNumber = null;
1874
- }
1872
+ this.#pagesNumber = n;
1873
+ this.#reset();
1874
+ }
1875
+ #reset() {
1876
+ this.#pageNumberToId = null;
1877
+ this.#idToPageNumber = null;
1875
1878
  }
1876
1879
  addListener(listener) {
1877
- PagesMapper.#listeners.push(listener);
1880
+ this.#listeners.push(listener);
1878
1881
  }
1879
1882
  removeListener(listener) {
1880
- const index = PagesMapper.#listeners.indexOf(listener);
1883
+ const index = this.#listeners.indexOf(listener);
1881
1884
  if (index >= 0) {
1882
- PagesMapper.#listeners.splice(index, 1);
1885
+ this.#listeners.splice(index, 1);
1883
1886
  }
1884
1887
  }
1885
- #updateListeners() {
1886
- for (const listener of PagesMapper.#listeners) {
1887
- listener();
1888
+ #updateListeners(data) {
1889
+ for (const listener of this.#listeners) {
1890
+ listener(data);
1888
1891
  }
1889
1892
  }
1890
1893
  #init(mustInit) {
1891
- if (PagesMapper.#pageNumberToId) {
1894
+ if (this.#pageNumberToId) {
1892
1895
  return;
1893
1896
  }
1894
- const n = PagesMapper.#pagesNumber;
1895
- const array = new Uint32Array(3 * n);
1896
- const pageNumberToId = PagesMapper.#pageNumberToId = array.subarray(0, n);
1897
- const idToPageNumber = PagesMapper.#idToPageNumber = array.subarray(n, 2 * n);
1897
+ const n = this.#pagesNumber;
1898
+ const pageNumberToId = this.#pageNumberToId = new Uint32Array(n);
1899
+ this.#prevPageNumbers = new Int32Array(pageNumberToId);
1900
+ const idToPageNumber = this.#idToPageNumber = new Map();
1898
1901
  if (mustInit) {
1899
- for (let i = 0; i < n; i++) {
1900
- pageNumberToId[i] = idToPageNumber[i] = i + 1;
1902
+ for (let i = 1; i <= n; i++) {
1903
+ pageNumberToId[i - 1] = i;
1904
+ idToPageNumber.set(i, [i]);
1905
+ }
1906
+ }
1907
+ }
1908
+ #updateIdToPageNumber() {
1909
+ const idToPageNumber = this.#idToPageNumber;
1910
+ const pageNumberToId = this.#pageNumberToId;
1911
+ idToPageNumber.clear();
1912
+ for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {
1913
+ const id = pageNumberToId[i];
1914
+ const pageNumbers = idToPageNumber.get(id);
1915
+ if (pageNumbers) {
1916
+ pageNumbers.push(i + 1);
1917
+ } else {
1918
+ idToPageNumber.set(id, [i + 1]);
1901
1919
  }
1902
1920
  }
1903
- PagesMapper.#prevIdToPageNumber = array.subarray(2 * n);
1904
1921
  }
1905
1922
  movePages(selectedPages, pagesToMove, index) {
1906
1923
  this.#init(true);
1907
- const pageNumberToId = PagesMapper.#pageNumberToId;
1908
- const idToPageNumber = PagesMapper.#idToPageNumber;
1909
- PagesMapper.#prevIdToPageNumber.set(idToPageNumber);
1924
+ const pageNumberToId = this.#pageNumberToId;
1925
+ const idToPageNumber = this.#idToPageNumber;
1910
1926
  const movedCount = pagesToMove.length;
1911
1927
  const mappedPagesToMove = new Uint32Array(movedCount);
1912
1928
  let removedBeforeTarget = 0;
@@ -1917,7 +1933,7 @@ class PagesMapper {
1917
1933
  removedBeforeTarget += 1;
1918
1934
  }
1919
1935
  }
1920
- const pagesNumber = PagesMapper.#pagesNumber;
1936
+ const pagesNumber = this.#pagesNumber;
1921
1937
  let adjustedTarget = index - removedBeforeTarget;
1922
1938
  const remainingLen = pagesNumber - movedCount;
1923
1939
  adjustedTarget = MathClamp(adjustedTarget, 0, remainingLen);
@@ -1928,39 +1944,135 @@ class PagesMapper {
1928
1944
  }
1929
1945
  pageNumberToId.copyWithin(adjustedTarget + movedCount, adjustedTarget, remainingLen);
1930
1946
  pageNumberToId.set(mappedPagesToMove, adjustedTarget);
1931
- let hasChanged = false;
1932
- for (let i = 0, ii = pagesNumber; i < ii; i++) {
1933
- const id = pageNumberToId[i];
1934
- hasChanged ||= id !== i + 1;
1935
- idToPageNumber[id - 1] = i + 1;
1947
+ this.#setPrevPageNumbers(idToPageNumber, null);
1948
+ this.#updateIdToPageNumber();
1949
+ this.#updateListeners({
1950
+ type: "move"
1951
+ });
1952
+ if (pageNumberToId.every((id, i) => id === i + 1)) {
1953
+ this.#reset();
1936
1954
  }
1937
- this.#updateListeners();
1938
- if (!hasChanged) {
1939
- this.pagesNumber = 0;
1955
+ }
1956
+ deletePages(pagesToDelete) {
1957
+ this.#init(true);
1958
+ const pageNumberToId = this.#pageNumberToId;
1959
+ const prevIdToPageNumber = this.#idToPageNumber;
1960
+ this.pagesNumber -= pagesToDelete.length;
1961
+ this.#init(false);
1962
+ const newPageNumberToId = this.#pageNumberToId;
1963
+ let sourceIndex = 0;
1964
+ let destIndex = 0;
1965
+ for (const pageNumber of pagesToDelete) {
1966
+ const pageIndex = pageNumber - 1;
1967
+ if (pageIndex !== sourceIndex) {
1968
+ newPageNumberToId.set(pageNumberToId.subarray(sourceIndex, pageIndex), destIndex);
1969
+ destIndex += pageIndex - sourceIndex;
1970
+ }
1971
+ sourceIndex = pageIndex + 1;
1972
+ }
1973
+ if (sourceIndex < pageNumberToId.length) {
1974
+ newPageNumberToId.set(pageNumberToId.subarray(sourceIndex), destIndex);
1975
+ }
1976
+ this.#setPrevPageNumbers(prevIdToPageNumber, null);
1977
+ this.#updateIdToPageNumber();
1978
+ this.#updateListeners({
1979
+ type: "delete",
1980
+ pageNumbers: pagesToDelete
1981
+ });
1982
+ }
1983
+ copyPages(pagesToCopy) {
1984
+ this.#init(true);
1985
+ this.#copiedPageNumbers = pagesToCopy;
1986
+ this.#copiedPageIds = pagesToCopy.map(pageNumber => this.#pageNumberToId[pageNumber - 1]);
1987
+ this.#updateListeners({
1988
+ type: "copy",
1989
+ pageNumbers: pagesToCopy
1990
+ });
1991
+ }
1992
+ pastePages(index) {
1993
+ this.#init(true);
1994
+ const pageNumberToId = this.#pageNumberToId;
1995
+ const prevIdToPageNumber = this.#idToPageNumber;
1996
+ const copiedPageNumbers = this.#copiedPageNumbers;
1997
+ const copiedPageMapping = new Map();
1998
+ let base = index;
1999
+ for (const pageNumber of copiedPageNumbers) {
2000
+ copiedPageMapping.set(++base, pageNumber);
2001
+ }
2002
+ this.pagesNumber += copiedPageNumbers.length;
2003
+ this.#init(false);
2004
+ const newPageNumberToId = this.#pageNumberToId;
2005
+ newPageNumberToId.set(pageNumberToId.subarray(0, index), 0);
2006
+ newPageNumberToId.set(this.#copiedPageIds, index);
2007
+ newPageNumberToId.set(pageNumberToId.subarray(index), index + copiedPageNumbers.length);
2008
+ this.#setPrevPageNumbers(prevIdToPageNumber, copiedPageMapping);
2009
+ this.#updateIdToPageNumber();
2010
+ this.#updateListeners({
2011
+ type: "paste"
2012
+ });
2013
+ this.#copiedPageIds = null;
2014
+ }
2015
+ #setPrevPageNumbers(prevIdToPageNumber, copiedPageMapping) {
2016
+ const prevPageNumbers = this.#prevPageNumbers;
2017
+ const newPageNumberToId = this.#pageNumberToId;
2018
+ const idsIndices = new Map();
2019
+ for (let i = 0, ii = this.#pagesNumber; i < ii; i++) {
2020
+ const oldPageNumber = copiedPageMapping?.get(i + 1);
2021
+ if (oldPageNumber) {
2022
+ prevPageNumbers[i] = -oldPageNumber;
2023
+ continue;
2024
+ }
2025
+ const id = newPageNumberToId[i];
2026
+ const j = idsIndices.get(id) || 0;
2027
+ prevPageNumbers[i] = prevIdToPageNumber.get(id)?.[j];
2028
+ idsIndices.set(id, j + 1);
1940
2029
  }
1941
2030
  }
1942
2031
  hasBeenAltered() {
1943
- return PagesMapper.#pageNumberToId !== null;
2032
+ return this.#pageNumberToId !== null;
1944
2033
  }
1945
2034
  getPageMappingForSaving() {
1946
- return {
1947
- pageIndices: PagesMapper.#idToPageNumber ? PagesMapper.#idToPageNumber.map(x => x - 1) : null
1948
- };
2035
+ const idToPageNumber = this.#idToPageNumber;
2036
+ let nCopy = 0;
2037
+ for (const pageNumbers of idToPageNumber.values()) {
2038
+ nCopy = Math.max(nCopy, pageNumbers.length);
2039
+ }
2040
+ const extractParams = new Array(nCopy);
2041
+ for (let i = 0; i < nCopy; i++) {
2042
+ extractParams[i] = {
2043
+ document: null,
2044
+ pageIndices: [],
2045
+ includePages: []
2046
+ };
2047
+ }
2048
+ for (const [id, pageNumbers] of idToPageNumber) {
2049
+ for (let i = 0, ii = pageNumbers.length; i < ii; i++) {
2050
+ extractParams[i].includePages.push([id - 1, pageNumbers[i] - 1]);
2051
+ }
2052
+ }
2053
+ for (const {
2054
+ includePages,
2055
+ pageIndices
2056
+ } of extractParams) {
2057
+ includePages.sort((a, b) => a[0] - b[0]);
2058
+ for (let i = 0, ii = includePages.length; i < ii; i++) {
2059
+ pageIndices.push(includePages[i][1]);
2060
+ includePages[i] = includePages[i][0];
2061
+ }
2062
+ }
2063
+ return extractParams;
1949
2064
  }
1950
2065
  getPrevPageNumber(pageNumber) {
1951
- return PagesMapper.#prevIdToPageNumber[PagesMapper.#pageNumberToId[pageNumber - 1] - 1];
2066
+ return this.#prevPageNumbers[pageNumber - 1] ?? 0;
1952
2067
  }
1953
2068
  getPageNumber(id) {
1954
- return PagesMapper.#idToPageNumber?.[id - 1] ?? id;
2069
+ return this.#idToPageNumber ? this.#idToPageNumber.get(id)?.[0] ?? 0 : id;
1955
2070
  }
1956
2071
  getPageId(pageNumber) {
1957
- return PagesMapper.#pageNumberToId?.[pageNumber - 1] ?? pageNumber;
1958
- }
1959
- static get instance() {
1960
- return shadow(this, "instance", new PagesMapper());
2072
+ return this.#pageNumberToId?.[pageNumber - 1] ?? pageNumber;
1961
2073
  }
1962
2074
  getMapping() {
1963
- return PagesMapper.#pageNumberToId.subarray(0, this.pagesNumber);
2075
+ return this.#pageNumberToId.subarray(0, this.pagesNumber);
1964
2076
  }
1965
2077
  }
1966
2078
 
@@ -2607,7 +2719,7 @@ class KeyboardManager {
2607
2719
  this.allKeys = new Set();
2608
2720
  const {
2609
2721
  isMac
2610
- } = util_FeatureTest.platform;
2722
+ } = FeatureTest.platform;
2611
2723
  for (const [keys, callback, options = {}] of callbacks) {
2612
2724
  for (const key of keys) {
2613
2725
  const isMacKey = key.startsWith("mac+");
@@ -2843,9 +2955,6 @@ class AnnotationEditorUIManager {
2843
2955
  eventBus._on("switchannotationeditorparams", evt => this.updateParams(evt.type, evt.value), {
2844
2956
  signal
2845
2957
  });
2846
- eventBus._on("pagesedited", this.onPagesEdited.bind(this), {
2847
- signal
2848
- });
2849
2958
  window.addEventListener("pointerdown", () => {
2850
2959
  this.#isPointerDown = true;
2851
2960
  }, {
@@ -2858,6 +2967,10 @@ class AnnotationEditorUIManager {
2858
2967
  capture: true,
2859
2968
  signal
2860
2969
  });
2970
+ window.addEventListener("beforeunload", this.#beforeUnload.bind(this), {
2971
+ capture: true,
2972
+ signal
2973
+ });
2861
2974
  this.#addSelectionListener();
2862
2975
  this.#addDragAndDropListeners();
2863
2976
  this.#addKeyboardManager();
@@ -3084,29 +3197,20 @@ class AnnotationEditorUIManager {
3084
3197
  break;
3085
3198
  }
3086
3199
  }
3087
- onPagesEdited({
3088
- pagesMapper
3089
- }) {
3090
- for (const editor of this.#allEditors.values()) {
3091
- editor.updatePageIndex(pagesMapper.getPrevPageNumber(editor.pageIndex + 1) - 1);
3092
- }
3093
- const allLayers = this.#allLayers;
3094
- const newAllLayers = this.#allLayers = new Map();
3095
- for (const [pageIndex, layer] of allLayers) {
3096
- const prevPageIndex = pagesMapper.getPrevPageNumber(pageIndex + 1) - 1;
3097
- if (prevPageIndex === -1) {
3098
- layer.destroy();
3099
- continue;
3100
- }
3101
- newAllLayers.set(prevPageIndex, layer);
3102
- layer.updatePageIndex(prevPageIndex);
3103
- }
3104
- }
3105
3200
  onPageChanging({
3106
3201
  pageNumber
3107
3202
  }) {
3108
3203
  this.#currentPageIndex = pageNumber - 1;
3109
3204
  }
3205
+ deletePage(id) {
3206
+ for (const editor of this.getEditors(id)) {
3207
+ editor.remove();
3208
+ }
3209
+ this.#allLayers.delete(id);
3210
+ if (this.#currentPageIndex === id) {
3211
+ this.#currentPageIndex = 0;
3212
+ }
3213
+ }
3110
3214
  focusMainContainer() {
3111
3215
  this.#container.focus();
3112
3216
  }
@@ -3218,6 +3322,10 @@ class AnnotationEditorUIManager {
3218
3322
  commentSelection(methodOfCreation = "") {
3219
3323
  this.highlightSelection(methodOfCreation, true);
3220
3324
  }
3325
+ #beforeUnload(e) {
3326
+ this.commitOrRemove();
3327
+ this.currentLayer?.endDrawingSession(false);
3328
+ }
3221
3329
  #displayFloatingToolbar() {
3222
3330
  const selection = document.getSelection();
3223
3331
  if (!selection || selection.isCollapsed) {
@@ -5562,7 +5670,7 @@ class AnnotationEditor {
5562
5670
  event.preventDefault();
5563
5671
  const {
5564
5672
  isMac
5565
- } = util_FeatureTest.platform;
5673
+ } = FeatureTest.platform;
5566
5674
  if (event.button !== 0 || event.ctrlKey && isMac) {
5567
5675
  return;
5568
5676
  }
@@ -6056,7 +6164,7 @@ class AnnotationEditor {
6056
6164
  pointerdown(event) {
6057
6165
  const {
6058
6166
  isMac
6059
- } = util_FeatureTest.platform;
6167
+ } = FeatureTest.platform;
6060
6168
  if (event.button !== 0 || event.ctrlKey && isMac) {
6061
6169
  event.preventDefault();
6062
6170
  return;
@@ -6071,7 +6179,7 @@ class AnnotationEditor {
6071
6179
  #selectOnPointerEvent(event) {
6072
6180
  const {
6073
6181
  isMac
6074
- } = util_FeatureTest.platform;
6182
+ } = FeatureTest.platform;
6075
6183
  if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) {
6076
6184
  this.parent.toggleSelected(this);
6077
6185
  } else {
@@ -6838,11 +6946,9 @@ class AnnotationStorage {
6838
6946
  #modifiedIds = null;
6839
6947
  #editorsMap = null;
6840
6948
  #storage = new Map();
6841
- constructor() {
6842
- this.onSetModified = null;
6843
- this.onResetModified = null;
6844
- this.onAnnotationEditor = null;
6845
- }
6949
+ onSetModified = null;
6950
+ onResetModified = null;
6951
+ onAnnotationEditor = null;
6846
6952
  getValue(key, defaultValue) {
6847
6953
  const value = this.#storage.get(key);
6848
6954
  if (value === undefined) {
@@ -6994,13 +7100,8 @@ class AnnotationStorage {
6994
7100
  if (key === "type") {
6995
7101
  continue;
6996
7102
  }
6997
- let counters = map.get(key);
6998
- if (!counters) {
6999
- counters = new Map();
7000
- map.set(key, counters);
7001
- }
7002
- const count = counters.get(val) ?? 0;
7003
- counters.set(val, count + 1);
7103
+ const counters = map.getOrInsertComputed(key, makeMap);
7104
+ counters.set(val, (counters.get(val) ?? 0) + 1);
7004
7105
  }
7005
7106
  }
7006
7107
  if (numberOfDeletedComments > 0 || numberOfEditedComments > 0) {
@@ -7055,21 +7156,27 @@ class AnnotationStorage {
7055
7156
  }
7056
7157
  }
7057
7158
  class PrintAnnotationStorage extends AnnotationStorage {
7058
- #serializable;
7159
+ #serializable = SerializableEmpty;
7059
7160
  constructor(parent) {
7060
7161
  super();
7162
+ const {
7163
+ serializable
7164
+ } = parent;
7165
+ if (serializable === SerializableEmpty) {
7166
+ return;
7167
+ }
7061
7168
  const {
7062
7169
  map,
7063
7170
  hash,
7064
7171
  transfer
7065
- } = parent.serializable;
7172
+ } = serializable;
7066
7173
  const clone = structuredClone(map, transfer ? {
7067
7174
  transfer
7068
7175
  } : null);
7069
7176
  this.#serializable = {
7070
7177
  map: clone,
7071
7178
  hash,
7072
- transfer
7179
+ transfer: []
7073
7180
  };
7074
7181
  }
7075
7182
  get print() {
@@ -7197,7 +7304,7 @@ class FontLoader {
7197
7304
  return shadow(this, "isFontLoadingAPISupported", hasFonts);
7198
7305
  }
7199
7306
  get isSyncFontLoadingSupported() {
7200
- return shadow(this, "isSyncFontLoadingSupported", isNodeJS || util_FeatureTest.platform.isFirefox);
7307
+ return shadow(this, "isSyncFontLoadingSupported", isNodeJS || FeatureTest.platform.isFirefox);
7201
7308
  }
7202
7309
  _queueLoadingCallback(callback) {
7203
7310
  function completeRequest() {
@@ -8092,7 +8199,7 @@ class FontPathInfo {
8092
8199
  static write(path) {
8093
8200
  let data;
8094
8201
  let buffer;
8095
- if (util_FeatureTest.isFloat16ArraySupported) {
8202
+ if (FeatureTest.isFloat16ArraySupported) {
8096
8203
  buffer = new ArrayBuffer(path.length * 2);
8097
8204
  data = new Float16Array(buffer);
8098
8205
  } else {
@@ -8107,7 +8214,7 @@ class FontPathInfo {
8107
8214
  this.#buffer = buffer;
8108
8215
  }
8109
8216
  get path() {
8110
- if (util_FeatureTest.isFloat16ArraySupported) {
8217
+ if (FeatureTest.isFloat16ArraySupported) {
8111
8218
  return new Float16Array(this.#buffer);
8112
8219
  }
8113
8220
  return new Float32Array(this.#buffer);
@@ -8118,15 +8225,19 @@ class FontPathInfo {
8118
8225
 
8119
8226
  function getUrlProp(val) {
8120
8227
  if (val instanceof URL) {
8121
- return val.href;
8228
+ return val;
8122
8229
  }
8123
8230
  if (typeof val === "string") {
8124
8231
  if (isNodeJS) {
8125
- return val;
8232
+ if (/^[a-z][a-z0-9\-+.]+:/i.test(val)) {
8233
+ return new URL(val);
8234
+ }
8235
+ const url = process.getBuiltinModule("url");
8236
+ return new URL(url.pathToFileURL(val));
8126
8237
  }
8127
8238
  const url = URL.parse(val, window.location);
8128
8239
  if (url) {
8129
- return url.href;
8240
+ return url;
8130
8241
  }
8131
8242
  }
8132
8243
  throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
@@ -8701,8 +8812,8 @@ class BaseCMapReaderFactory {
8701
8812
  }
8702
8813
  class DOMCMapReaderFactory extends BaseCMapReaderFactory {
8703
8814
  async _fetch(url) {
8704
- const data = await fetchData(url, this.isCompressed ? "arraybuffer" : "text");
8705
- return data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data);
8815
+ const data = await fetchData(url, this.isCompressed ? "bytes" : "text");
8816
+ return data instanceof Uint8Array ? data : stringToBytes(data);
8706
8817
  }
8707
8818
  }
8708
8819
 
@@ -9071,8 +9182,7 @@ class BaseStandardFontDataFactory {
9071
9182
  }
9072
9183
  class DOMStandardFontDataFactory extends BaseStandardFontDataFactory {
9073
9184
  async _fetch(url) {
9074
- const data = await fetchData(url, "arraybuffer");
9075
- return new Uint8Array(data);
9185
+ return fetchData(url, "bytes");
9076
9186
  }
9077
9187
  }
9078
9188
 
@@ -9105,8 +9215,7 @@ class BaseWasmFactory {
9105
9215
  }
9106
9216
  class DOMWasmFactory extends BaseWasmFactory {
9107
9217
  async _fetch(url) {
9108
- const data = await fetchData(url, "arraybuffer");
9109
- return new Uint8Array(data);
9218
+ return fetchData(url, "bytes");
9110
9219
  }
9111
9220
  }
9112
9221
 
@@ -9189,20 +9298,10 @@ class BBoxReader {
9189
9298
  return (this.#coords[i * 4 + 3] + 1) / 256;
9190
9299
  }
9191
9300
  }
9192
- const ensureDebugMetadata = (map, key) => {
9193
- if (!map) {
9194
- return undefined;
9195
- }
9196
- let value = map.get(key);
9197
- if (!value) {
9198
- value = {
9199
- dependencies: new Set(),
9200
- isRenderingOperation: false
9201
- };
9202
- map.set(key, value);
9203
- }
9204
- return value;
9205
- };
9301
+ const ensureDebugMetadata = (map, key) => map?.getOrInsertComputed(key, () => ({
9302
+ dependencies: new Set(),
9303
+ isRenderingOperation: false
9304
+ }));
9206
9305
  class CanvasDependencyTracker {
9207
9306
  #simple = {
9208
9307
  __proto__: null
@@ -10250,12 +10349,14 @@ class TilingPattern {
10250
10349
  }
10251
10350
 
10252
10351
  ;// ./src/shared/image_utils.js
10352
+ /* unused harmony import specifier */ var image_utils_ImageKind;
10353
+ /* unused harmony import specifier */ var image_utils_FeatureTest;
10253
10354
 
10254
10355
  function convertToRGBA(params) {
10255
10356
  switch (params.kind) {
10256
- case ImageKind.GRAYSCALE_1BPP:
10357
+ case image_utils_ImageKind.GRAYSCALE_1BPP:
10257
10358
  return convertBlackAndWhiteToRGBA(params);
10258
- case ImageKind.RGB_24BPP:
10359
+ case image_utils_ImageKind.RGB_24BPP:
10259
10360
  return convertRGBToRGBA(params);
10260
10361
  }
10261
10362
  return null;
@@ -10269,31 +10370,32 @@ function convertBlackAndWhiteToRGBA({
10269
10370
  nonBlackColor = 0xffffffff,
10270
10371
  inverseDecode = false
10271
10372
  }) {
10272
- const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
10373
+ const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
10273
10374
  const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor];
10274
10375
  const widthInSource = width >> 3;
10275
10376
  const widthRemainder = width & 7;
10377
+ const xorMask = zeroMapping ^ oneMapping;
10276
10378
  const srcLength = src.length;
10277
10379
  dest = new Uint32Array(dest.buffer);
10278
10380
  let destPos = 0;
10279
- for (let i = 0; i < height; i++) {
10280
- for (const max = srcPos + widthInSource; srcPos < max; srcPos++) {
10281
- const elem = srcPos < srcLength ? src[srcPos] : 255;
10282
- dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping;
10283
- dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping;
10284
- dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping;
10285
- dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping;
10286
- dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping;
10287
- dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping;
10288
- dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping;
10289
- dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping;
10381
+ for (let i = 0; i < height; ++i) {
10382
+ for (const max = srcPos + widthInSource; srcPos < max; ++srcPos, destPos += 8) {
10383
+ const elem = src[srcPos];
10384
+ dest[destPos] = zeroMapping ^ -(elem >> 7 & 1) & xorMask;
10385
+ dest[destPos + 1] = zeroMapping ^ -(elem >> 6 & 1) & xorMask;
10386
+ dest[destPos + 2] = zeroMapping ^ -(elem >> 5 & 1) & xorMask;
10387
+ dest[destPos + 3] = zeroMapping ^ -(elem >> 4 & 1) & xorMask;
10388
+ dest[destPos + 4] = zeroMapping ^ -(elem >> 3 & 1) & xorMask;
10389
+ dest[destPos + 5] = zeroMapping ^ -(elem >> 2 & 1) & xorMask;
10390
+ dest[destPos + 6] = zeroMapping ^ -(elem >> 1 & 1) & xorMask;
10391
+ dest[destPos + 7] = zeroMapping ^ -(elem & 1) & xorMask;
10290
10392
  }
10291
10393
  if (widthRemainder === 0) {
10292
10394
  continue;
10293
10395
  }
10294
10396
  const elem = srcPos < srcLength ? src[srcPos++] : 255;
10295
- for (let j = 0; j < widthRemainder; j++) {
10296
- dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping;
10397
+ for (let j = 0; j < widthRemainder; ++j, ++destPos) {
10398
+ dest[destPos] = zeroMapping ^ -(elem >> 7 - j & 1) & xorMask;
10297
10399
  }
10298
10400
  }
10299
10401
  return {
@@ -10313,31 +10415,32 @@ function convertRGBToRGBA({
10313
10415
  const len = width * height * 3;
10314
10416
  const len32 = len >> 2;
10315
10417
  const src32 = new Uint32Array(src.buffer, srcPos, len32);
10316
- if (FeatureTest.isLittleEndian) {
10418
+ const alphaMask = image_utils_FeatureTest.isLittleEndian ? 0xff000000 : 0xff;
10419
+ if (image_utils_FeatureTest.isLittleEndian) {
10317
10420
  for (; i < len32 - 2; i += 3, destPos += 4) {
10318
- const s1 = src32[i];
10319
- const s2 = src32[i + 1];
10320
- const s3 = src32[i + 2];
10321
- dest[destPos] = s1 | 0xff000000;
10322
- dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000;
10323
- dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000;
10324
- dest[destPos + 3] = s3 >>> 8 | 0xff000000;
10421
+ const s1 = src32[i],
10422
+ s2 = src32[i + 1],
10423
+ s3 = src32[i + 2];
10424
+ dest[destPos] = s1 | alphaMask;
10425
+ dest[destPos + 1] = s1 >>> 24 | s2 << 8 | alphaMask;
10426
+ dest[destPos + 2] = s2 >>> 16 | s3 << 16 | alphaMask;
10427
+ dest[destPos + 3] = s3 >>> 8 | alphaMask;
10325
10428
  }
10326
10429
  for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {
10327
- dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000;
10430
+ dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | alphaMask;
10328
10431
  }
10329
10432
  } else {
10330
10433
  for (; i < len32 - 2; i += 3, destPos += 4) {
10331
- const s1 = src32[i];
10332
- const s2 = src32[i + 1];
10333
- const s3 = src32[i + 2];
10334
- dest[destPos] = s1 | 0xff;
10335
- dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff;
10336
- dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff;
10337
- dest[destPos + 3] = s3 << 8 | 0xff;
10434
+ const s1 = src32[i],
10435
+ s2 = src32[i + 1],
10436
+ s3 = src32[i + 2];
10437
+ dest[destPos] = s1 | alphaMask;
10438
+ dest[destPos + 1] = s1 << 24 | s2 >>> 8 | alphaMask;
10439
+ dest[destPos + 2] = s2 << 16 | s3 >>> 16 | alphaMask;
10440
+ dest[destPos + 3] = s3 << 8 | alphaMask;
10338
10441
  }
10339
10442
  for (let j = i * 4, jj = srcPos + len; j < jj; j += 3) {
10340
- dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff;
10443
+ dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | alphaMask;
10341
10444
  }
10342
10445
  }
10343
10446
  return {
@@ -10346,7 +10449,7 @@ function convertRGBToRGBA({
10346
10449
  };
10347
10450
  }
10348
10451
  function grayToRGBA(src, dest) {
10349
- if (FeatureTest.isLittleEndian) {
10452
+ if (image_utils_FeatureTest.isLittleEndian) {
10350
10453
  for (let i = 0, ii = src.length; i < ii; i++) {
10351
10454
  dest[i] = src[i] * 0x10101 | 0xff000000;
10352
10455
  }
@@ -10615,13 +10718,13 @@ function putBinaryImageData(ctx, imgData) {
10615
10718
  const src = imgData.data;
10616
10719
  const dest = chunkImgData.data;
10617
10720
  let i, j, thisChunkHeight, elemsInThisChunk;
10618
- if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) {
10721
+ if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {
10619
10722
  const srcLength = src.byteLength;
10620
10723
  const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
10621
10724
  const dest32DataLength = dest32.length;
10622
10725
  const fullSrcDiff = width + 7 >> 3;
10623
10726
  const white = 0xffffffff;
10624
- const black = util_FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
10727
+ const black = FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff;
10625
10728
  for (i = 0; i < totalChunks; i++) {
10626
10729
  thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
10627
10730
  destPos = 0;
@@ -10657,7 +10760,7 @@ function putBinaryImageData(ctx, imgData) {
10657
10760
  }
10658
10761
  ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
10659
10762
  }
10660
- } else if (imgData.kind === util_ImageKind.RGBA_32BPP) {
10763
+ } else if (imgData.kind === ImageKind.RGBA_32BPP) {
10661
10764
  j = 0;
10662
10765
  elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
10663
10766
  for (i = 0; i < fullChunks; i++) {
@@ -10671,7 +10774,7 @@ function putBinaryImageData(ctx, imgData) {
10671
10774
  dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
10672
10775
  ctx.putImageData(chunkImgData, 0, j);
10673
10776
  }
10674
- } else if (imgData.kind === util_ImageKind.RGB_24BPP) {
10777
+ } else if (imgData.kind === ImageKind.RGB_24BPP) {
10675
10778
  thisChunkHeight = FULL_CHUNK_HEIGHT;
10676
10779
  elemsInThisChunk = width * thisChunkHeight;
10677
10780
  for (i = 0; i < totalChunks; i++) {
@@ -10776,8 +10879,6 @@ class CanvasGraphics {
10776
10879
  this.stateStack = [];
10777
10880
  this.pendingClip = null;
10778
10881
  this.pendingEOFill = false;
10779
- this.res = null;
10780
- this.xobjs = null;
10781
10882
  this.commonObjs = commonObjs;
10782
10883
  this.objs = objs;
10783
10884
  this.canvasFactory = canvasFactory;
@@ -10984,11 +11085,7 @@ class CanvasGraphics {
10984
11085
  if ((img.bitmap || img.data) && img.count > 1) {
10985
11086
  const mainKey = img.bitmap || img.data.buffer;
10986
11087
  cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]);
10987
- cache = this._cachedBitmapsMap.get(mainKey);
10988
- if (!cache) {
10989
- cache = new Map();
10990
- this._cachedBitmapsMap.set(mainKey, cache);
10991
- }
11088
+ cache = this._cachedBitmapsMap.getOrInsertComputed(mainKey, makeMap);
10992
11089
  const cachedImage = cache.get(cacheKey);
10993
11090
  if (cachedImage && !isPatternFill) {
10994
11091
  const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]);
@@ -12026,7 +12123,7 @@ class CanvasGraphics {
12026
12123
  copyCtxState(currentCtx, groupCtx);
12027
12124
  this.ctx = groupCtx;
12028
12125
  this.dependencyTracker?.inheritSimpleDataAsFutureForcedDependencies(["fillAlpha", "strokeAlpha", "globalCompositeOperation"]).pushBaseTransform(currentCtx);
12029
- this.setGState(opIdx, [["BM", "source-over"], ["ca", 1], ["CA", 1]]);
12126
+ this.setGState(opIdx, [["BM", "source-over"], ["ca", 1], ["CA", 1], ["TR", null]]);
12030
12127
  this.groupStack.push(currentCtx);
12031
12128
  this.groupLevel++;
12032
12129
  }
@@ -12834,6 +12931,12 @@ class BasePDFStreamReader {
12834
12931
  constructor(stream) {
12835
12932
  this._stream = stream;
12836
12933
  }
12934
+ _callOnProgress() {
12935
+ this.onProgress?.({
12936
+ loaded: this._loaded,
12937
+ total: this._contentLength
12938
+ });
12939
+ }
12837
12940
  get headersReady() {
12838
12941
  return this._headersCapability.promise;
12839
12942
  }
@@ -12876,6 +12979,15 @@ class BasePDFStreamRangeReader {
12876
12979
  function getArrayBuffer(val) {
12877
12980
  return val instanceof Uint8Array && val.byteLength === val.buffer.byteLength ? val.buffer : new Uint8Array(val).buffer;
12878
12981
  }
12982
+ function endRequests() {
12983
+ for (const capability of this._requests) {
12984
+ capability.resolve({
12985
+ value: undefined,
12986
+ done: true
12987
+ });
12988
+ }
12989
+ this._requests.length = 0;
12990
+ }
12879
12991
  class PDFDataTransportStream extends BasePDFStream {
12880
12992
  _progressiveDone = false;
12881
12993
  _queuedChunks = [];
@@ -12896,14 +13008,6 @@ class PDFDataTransportStream extends BasePDFStream {
12896
13008
  pdfDataRangeTransport.addRangeListener((begin, chunk) => {
12897
13009
  this.#onReceiveData(begin, chunk);
12898
13010
  });
12899
- pdfDataRangeTransport.addProgressListener((loaded, total) => {
12900
- if (total !== undefined) {
12901
- this._fullReader?.onProgress?.({
12902
- loaded,
12903
- total
12904
- });
12905
- }
12906
- });
12907
13011
  pdfDataRangeTransport.addProgressiveReadListener(chunk => {
12908
13012
  this.#onReceiveData(undefined, chunk);
12909
13013
  });
@@ -12946,6 +13050,7 @@ class PDFDataTransportStream extends BasePDFStream {
12946
13050
  }
12947
13051
  }
12948
13052
  class PDFDataTransportStreamReader extends BasePDFStreamReader {
13053
+ #endRequests = endRequests.bind(this);
12949
13054
  _done = false;
12950
13055
  _queuedChunks = null;
12951
13056
  _requests = [];
@@ -12972,6 +13077,12 @@ class PDFDataTransportStreamReader extends BasePDFStreamReader {
12972
13077
  this._filename = contentDispositionFilename;
12973
13078
  }
12974
13079
  this._headersCapability.resolve();
13080
+ const loaded = this._loaded;
13081
+ Promise.resolve().then(() => {
13082
+ if (loaded > 0 && this._loaded === loaded) {
13083
+ this._callOnProgress();
13084
+ }
13085
+ });
12975
13086
  }
12976
13087
  _enqueue(chunk) {
12977
13088
  if (this._done) {
@@ -12987,6 +13098,7 @@ class PDFDataTransportStreamReader extends BasePDFStreamReader {
12987
13098
  this._queuedChunks.push(chunk);
12988
13099
  }
12989
13100
  this._loaded += chunk.byteLength;
13101
+ this._callOnProgress();
12990
13102
  }
12991
13103
  async read() {
12992
13104
  if (this._queuedChunks.length > 0) {
@@ -13008,19 +13120,17 @@ class PDFDataTransportStreamReader extends BasePDFStreamReader {
13008
13120
  }
13009
13121
  cancel(reason) {
13010
13122
  this._done = true;
13011
- for (const capability of this._requests) {
13012
- capability.resolve({
13013
- value: undefined,
13014
- done: true
13015
- });
13016
- }
13017
- this._requests.length = 0;
13123
+ this.#endRequests();
13018
13124
  }
13019
13125
  progressiveDone() {
13020
13126
  this._done ||= true;
13127
+ if (this._queuedChunks.length === 0) {
13128
+ this.#endRequests();
13129
+ }
13021
13130
  }
13022
13131
  }
13023
13132
  class PDFDataTransportStreamRangeReader extends BasePDFStreamRangeReader {
13133
+ #endRequests = endRequests.bind(this);
13024
13134
  onDone = null;
13025
13135
  _begin = -1;
13026
13136
  _done = false;
@@ -13037,18 +13147,12 @@ class PDFDataTransportStreamRangeReader extends BasePDFStreamRangeReader {
13037
13147
  if (this._requests.length === 0) {
13038
13148
  this._queuedChunk = chunk;
13039
13149
  } else {
13040
- const firstCapability = this._requests.shift();
13041
- firstCapability.resolve({
13150
+ const capability = this._requests.shift();
13151
+ capability.resolve({
13042
13152
  value: chunk,
13043
13153
  done: false
13044
13154
  });
13045
- for (const capability of this._requests) {
13046
- capability.resolve({
13047
- value: undefined,
13048
- done: true
13049
- });
13050
- }
13051
- this._requests.length = 0;
13155
+ this.#endRequests();
13052
13156
  }
13053
13157
  this._done = true;
13054
13158
  this.onDone?.();
@@ -13074,13 +13178,7 @@ class PDFDataTransportStreamRangeReader extends BasePDFStreamRangeReader {
13074
13178
  }
13075
13179
  cancel(reason) {
13076
13180
  this._done = true;
13077
- for (const capability of this._requests) {
13078
- capability.resolve({
13079
- value: undefined,
13080
- done: true
13081
- });
13082
- }
13083
- this._requests.length = 0;
13181
+ this.#endRequests();
13084
13182
  this.onDone?.();
13085
13183
  }
13086
13184
  }
@@ -13283,7 +13381,7 @@ function extractFilenameFromHeader(responseHeaders) {
13283
13381
  return null;
13284
13382
  }
13285
13383
  function createResponseError(status, url) {
13286
- return new ResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status, status === 404 || status === 0 && url.startsWith("file:"));
13384
+ return new ResponseException(`Unexpected server response (${status}) while retrieving PDF "${url.href}".`, status, status === 404 || status === 0 && url.protocol === "file:");
13287
13385
  }
13288
13386
  function ensureResponseOrigin(rangeOrigin, origin) {
13289
13387
  if (rangeOrigin !== origin) {
@@ -13317,15 +13415,18 @@ function fetch_stream_getArrayBuffer(val) {
13317
13415
  if (val instanceof ArrayBuffer) {
13318
13416
  return val;
13319
13417
  }
13320
- warn(`getArrayBuffer - unexpected data format: ${val}`);
13321
- return new Uint8Array(val).buffer;
13418
+ throw new Error(`getArrayBuffer - unexpected data: ${val}`);
13322
13419
  }
13323
13420
  class PDFFetchStream extends BasePDFStream {
13324
13421
  _responseOrigin = null;
13325
13422
  constructor(source) {
13326
13423
  super(source, PDFFetchStreamReader, PDFFetchStreamRangeReader);
13327
- this.isHttp = /^https?:/i.test(source.url);
13328
- this.headers = createHeaders(this.isHttp, source.httpHeaders);
13424
+ const {
13425
+ httpHeaders,
13426
+ url
13427
+ } = source;
13428
+ assert(/https?:/.test(url.protocol), "PDFFetchStream only supports http(s):// URLs.");
13429
+ this.headers = createHeaders(true, httpHeaders);
13329
13430
  }
13330
13431
  }
13331
13432
  class PDFFetchStreamReader extends BasePDFStreamReader {
@@ -13355,7 +13456,7 @@ class PDFFetchStreamReader extends BasePDFStreamReader {
13355
13456
  suggestedLength
13356
13457
  } = validateRangeRequestCapabilities({
13357
13458
  responseHeaders,
13358
- isHttp: stream.isHttp,
13459
+ isHttp: true,
13359
13460
  rangeChunkSize,
13360
13461
  disableRange
13361
13462
  });
@@ -13381,10 +13482,7 @@ class PDFFetchStreamReader extends BasePDFStreamReader {
13381
13482
  };
13382
13483
  }
13383
13484
  this._loaded += value.byteLength;
13384
- this.onProgress?.({
13385
- loaded: this._loaded,
13386
- total: this._contentLength
13387
- });
13485
+ this._callOnProgress();
13388
13486
  return {
13389
13487
  value: fetch_stream_getArrayBuffer(value),
13390
13488
  done: false
@@ -13442,6 +13540,7 @@ class PDFFetchStreamRangeReader extends BasePDFStreamRangeReader {
13442
13540
 
13443
13541
 
13444
13542
 
13543
+
13445
13544
  const OK_RESPONSE = 200;
13446
13545
  const PARTIAL_CONTENT_RESPONSE = 206;
13447
13546
  function network_getArrayBuffer(val) {
@@ -13452,9 +13551,13 @@ class PDFNetworkStream extends BasePDFStream {
13452
13551
  _responseOrigin = null;
13453
13552
  constructor(source) {
13454
13553
  super(source, PDFNetworkStreamReader, PDFNetworkStreamRangeReader);
13455
- this.url = source.url;
13456
- this.isHttp = /^https?:/i.test(this.url);
13457
- this.headers = createHeaders(this.isHttp, source.httpHeaders);
13554
+ const {
13555
+ httpHeaders,
13556
+ url
13557
+ } = source;
13558
+ this.url = url;
13559
+ this.isHttp = /https?:/.test(url.protocol);
13560
+ this.headers = createHeaders(this.isHttp, httpHeaders);
13458
13561
  }
13459
13562
  _request(args) {
13460
13563
  const xhr = new XMLHttpRequest();
@@ -13544,6 +13647,7 @@ class PDFNetworkStream extends BasePDFStream {
13544
13647
  }
13545
13648
  }
13546
13649
  class PDFNetworkStreamReader extends BasePDFStreamReader {
13650
+ #endRequests = endRequests.bind(this);
13547
13651
  _cachedChunks = [];
13548
13652
  _done = false;
13549
13653
  _requests = [];
@@ -13604,16 +13708,9 @@ class PDFNetworkStreamReader extends BasePDFStreamReader {
13604
13708
  this._cachedChunks.push(chunk);
13605
13709
  }
13606
13710
  this._done = true;
13607
- if (this._cachedChunks.length > 0) {
13608
- return;
13609
- }
13610
- for (const capability of this._requests) {
13611
- capability.resolve({
13612
- value: undefined,
13613
- done: true
13614
- });
13711
+ if (this._cachedChunks.length === 0) {
13712
+ this.#endRequests();
13615
13713
  }
13616
- this._requests.length = 0;
13617
13714
  }
13618
13715
  #onError(status) {
13619
13716
  this._storedError = createResponseError(status, this._stream.url);
@@ -13655,18 +13752,13 @@ class PDFNetworkStreamReader extends BasePDFStreamReader {
13655
13752
  cancel(reason) {
13656
13753
  this._done = true;
13657
13754
  this._headersCapability.reject(reason);
13658
- for (const capability of this._requests) {
13659
- capability.resolve({
13660
- value: undefined,
13661
- done: true
13662
- });
13663
- }
13664
- this._requests.length = 0;
13755
+ this.#endRequests();
13665
13756
  this._stream._abortRequest(this._fullRequestXhr);
13666
13757
  this._fullRequestXhr = null;
13667
13758
  }
13668
13759
  }
13669
13760
  class PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {
13761
+ #endRequests = endRequests.bind(this);
13670
13762
  onClosed = null;
13671
13763
  _done = false;
13672
13764
  _queuedChunk = null;
@@ -13703,13 +13795,7 @@ class PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {
13703
13795
  this._queuedChunk = chunk;
13704
13796
  }
13705
13797
  this._done = true;
13706
- for (const capability of this._requests) {
13707
- capability.resolve({
13708
- value: undefined,
13709
- done: true
13710
- });
13711
- }
13712
- this._requests.length = 0;
13798
+ this.#endRequests();
13713
13799
  this.onClosed?.();
13714
13800
  }
13715
13801
  #onError(status) {
@@ -13744,13 +13830,7 @@ class PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {
13744
13830
  }
13745
13831
  cancel(reason) {
13746
13832
  this._done = true;
13747
- for (const capability of this._requests) {
13748
- capability.resolve({
13749
- value: undefined,
13750
- done: true
13751
- });
13752
- }
13753
- this._requests.length = 0;
13833
+ this.#endRequests();
13754
13834
  this._stream._abortRequest(this._requestXhr);
13755
13835
  this.onClosed?.();
13756
13836
  }
@@ -13760,14 +13840,7 @@ class PDFNetworkStreamRangeReader extends BasePDFStreamRangeReader {
13760
13840
 
13761
13841
 
13762
13842
 
13763
- const urlRegex = /^[a-z][a-z0-9\-+.]+:/i;
13764
- function parseUrlOrPath(sourceUrl) {
13765
- if (urlRegex.test(sourceUrl)) {
13766
- return new URL(sourceUrl);
13767
- }
13768
- const url = process.getBuiltinModule("url");
13769
- return new URL(url.pathToFileURL(sourceUrl));
13770
- }
13843
+
13771
13844
  function getReadableStream(readStream) {
13772
13845
  const {
13773
13846
  Readable
@@ -13779,21 +13852,13 @@ function getReadableStream(readStream) {
13779
13852
  const polyfill = require("node-readable-to-web-readable-stream");
13780
13853
  return polyfill.makeDefaultReadableStreamFromNodeReadable(readStream);
13781
13854
  }
13782
- function node_stream_getArrayBuffer(val) {
13783
- if (val instanceof Uint8Array) {
13784
- return val.buffer;
13785
- }
13786
- if (val instanceof ArrayBuffer) {
13787
- return val;
13788
- }
13789
- warn(`getArrayBuffer - unexpected data format: ${val}`);
13790
- return new Uint8Array(val).buffer;
13791
- }
13792
13855
  class PDFNodeStream extends BasePDFStream {
13793
13856
  constructor(source) {
13794
13857
  super(source, PDFNodeStreamReader, PDFNodeStreamRangeReader);
13795
- this.url = parseUrlOrPath(source.url);
13796
- assert(this.url.protocol === "file:", "PDFNodeStream only supports file:// URLs.");
13858
+ const {
13859
+ url
13860
+ } = source;
13861
+ assert(url.protocol === "file:", "PDFNodeStream only supports file:// URLs.");
13797
13862
  }
13798
13863
  }
13799
13864
  class PDFNodeStreamReader extends BasePDFStreamReader {
@@ -13804,12 +13869,12 @@ class PDFNodeStreamReader extends BasePDFStreamReader {
13804
13869
  disableRange,
13805
13870
  disableStream,
13806
13871
  length,
13807
- rangeChunkSize
13872
+ rangeChunkSize,
13873
+ url
13808
13874
  } = stream._source;
13809
13875
  this._contentLength = length;
13810
13876
  this._isStreamingSupported = !disableStream;
13811
13877
  this._isRangeSupported = !disableRange;
13812
- const url = stream.url;
13813
13878
  const fs = process.getBuiltinModule("fs");
13814
13879
  fs.promises.lstat(url).then(stat => {
13815
13880
  const readStream = fs.createReadStream(url);
@@ -13828,7 +13893,7 @@ class PDFNodeStreamReader extends BasePDFStreamReader {
13828
13893
  this._headersCapability.resolve();
13829
13894
  }).catch(error => {
13830
13895
  if (error.code === "ENOENT") {
13831
- error = createResponseError(0, url.href);
13896
+ error = createResponseError(0, url);
13832
13897
  }
13833
13898
  this._headersCapability.reject(error);
13834
13899
  });
@@ -13845,13 +13910,10 @@ class PDFNodeStreamReader extends BasePDFStreamReader {
13845
13910
  done
13846
13911
  };
13847
13912
  }
13848
- this._loaded += value.length;
13849
- this.onProgress?.({
13850
- loaded: this._loaded,
13851
- total: this._contentLength
13852
- });
13913
+ this._loaded += value.byteLength;
13914
+ this._callOnProgress();
13853
13915
  return {
13854
- value: node_stream_getArrayBuffer(value),
13916
+ value: fetch_stream_getArrayBuffer(value),
13855
13917
  done: false
13856
13918
  };
13857
13919
  }
@@ -13864,7 +13926,9 @@ class PDFNodeStreamRangeReader extends BasePDFStreamRangeReader {
13864
13926
  _reader = null;
13865
13927
  constructor(stream, begin, end) {
13866
13928
  super(stream, begin, end);
13867
- const url = stream.url;
13929
+ const {
13930
+ url
13931
+ } = stream._source;
13868
13932
  const fs = process.getBuiltinModule("fs");
13869
13933
  try {
13870
13934
  const readStream = fs.createReadStream(url, {
@@ -13891,7 +13955,7 @@ class PDFNodeStreamRangeReader extends BasePDFStreamRangeReader {
13891
13955
  };
13892
13956
  }
13893
13957
  return {
13894
- value: node_stream_getArrayBuffer(value),
13958
+ value: fetch_stream_getArrayBuffer(value),
13895
13959
  done: false
13896
13960
  };
13897
13961
  }
@@ -13902,13 +13966,14 @@ class PDFNodeStreamRangeReader extends BasePDFStreamRangeReader {
13902
13966
 
13903
13967
  ;// ./src/display/pdf_objects.js
13904
13968
  const INITIAL_DATA = Symbol("INITIAL_DATA");
13969
+ const dataObj = () => ({
13970
+ ...Promise.withResolvers(),
13971
+ data: INITIAL_DATA
13972
+ });
13905
13973
  class PDFObjects {
13906
- #objs = Object.create(null);
13974
+ #objs = new Map();
13907
13975
  #ensureObj(objId) {
13908
- return this.#objs[objId] ||= {
13909
- ...Promise.withResolvers(),
13910
- data: INITIAL_DATA
13911
- };
13976
+ return this.#objs.getOrInsertComputed(objId, dataObj);
13912
13977
  }
13913
13978
  get(objId, callback = null) {
13914
13979
  if (callback) {
@@ -13916,22 +13981,22 @@ class PDFObjects {
13916
13981
  obj.promise.then(() => callback(obj.data));
13917
13982
  return null;
13918
13983
  }
13919
- const obj = this.#objs[objId];
13984
+ const obj = this.#objs.get(objId);
13920
13985
  if (!obj || obj.data === INITIAL_DATA) {
13921
13986
  throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
13922
13987
  }
13923
13988
  return obj.data;
13924
13989
  }
13925
13990
  has(objId) {
13926
- const obj = this.#objs[objId];
13991
+ const obj = this.#objs.get(objId);
13927
13992
  return !!obj && obj.data !== INITIAL_DATA;
13928
13993
  }
13929
13994
  delete(objId) {
13930
- const obj = this.#objs[objId];
13995
+ const obj = this.#objs.get(objId);
13931
13996
  if (!obj || obj.data === INITIAL_DATA) {
13932
13997
  return false;
13933
13998
  }
13934
- delete this.#objs[objId];
13999
+ this.#objs.delete(objId);
13935
14000
  return true;
13936
14001
  }
13937
14002
  resolve(objId, data = null) {
@@ -13940,23 +14005,20 @@ class PDFObjects {
13940
14005
  obj.resolve();
13941
14006
  }
13942
14007
  clear() {
13943
- for (const objId in this.#objs) {
13944
- const {
13945
- data
13946
- } = this.#objs[objId];
14008
+ for (const {
14009
+ data
14010
+ } of this.#objs.values()) {
13947
14011
  data?.bitmap?.close();
13948
14012
  }
13949
- this.#objs = Object.create(null);
14013
+ this.#objs.clear();
13950
14014
  }
13951
14015
  *[Symbol.iterator]() {
13952
- for (const objId in this.#objs) {
13953
- const {
13954
- data
13955
- } = this.#objs[objId];
13956
- if (data === INITIAL_DATA) {
13957
- continue;
14016
+ for (const [objId, {
14017
+ data
14018
+ }] of this.#objs) {
14019
+ if (data !== INITIAL_DATA) {
14020
+ yield [objId, data];
13958
14021
  }
13959
- yield [objId, data];
13960
14022
  }
13961
14023
  }
13962
14024
  }
@@ -14037,7 +14099,7 @@ class TextLayer {
14037
14099
  const {
14038
14100
  isWindows,
14039
14101
  isFirefox
14040
- } = util_FeatureTest.platform;
14102
+ } = FeatureTest.platform;
14041
14103
  return shadow(this, "fontFamilyMap", new Map([["sans-serif", `${isWindows && isFirefox ? "Calibri, " : ""}sans-serif`], ["monospace", `${isWindows && isFirefox ? "Lucida Console, " : ""}monospace`]]));
14042
14104
  }
14043
14105
  render() {
@@ -14303,7 +14365,7 @@ class TextLayer {
14303
14365
  if (ascent) {
14304
14366
  ratio = ascent / (ascent + descent);
14305
14367
  } else {
14306
- if (util_FeatureTest.platform.isFirefox) {
14368
+ if (FeatureTest.platform.isFirefox) {
14307
14369
  warn("Enable the `dom.textMetrics.fontBoundingBox.enabled` preference " + "in `about:config` to improve TextLayer rendering.");
14308
14370
  }
14309
14371
  if (style.ascent) {
@@ -14380,7 +14442,7 @@ function getDocument(src = {}) {
14380
14442
  const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1;
14381
14443
  const isEvalSupported = src.isEvalSupported !== false;
14382
14444
  const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS;
14383
- const isImageDecoderSupported = typeof src.isImageDecoderSupported === "boolean" ? src.isImageDecoderSupported : !isNodeJS && (util_FeatureTest.platform.isFirefox || !globalThis.chrome);
14445
+ const isImageDecoderSupported = typeof src.isImageDecoderSupported === "boolean" ? src.isImageDecoderSupported : !isNodeJS && (FeatureTest.platform.isFirefox || !globalThis.chrome);
14384
14446
  const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1;
14385
14447
  const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS;
14386
14448
  const fontExtraProperties = src.fontExtraProperties === true;
@@ -14394,6 +14456,7 @@ function getDocument(src = {}) {
14394
14456
  const FilterFactory = src.FilterFactory || (isNodeJS ? NodeFilterFactory : DOMFilterFactory);
14395
14457
  const enableHWA = src.enableHWA === true;
14396
14458
  const useWasm = src.useWasm !== false;
14459
+ const pagesMapper = src.pagesMapper || new PagesMapper();
14397
14460
  const length = rangeTransport ? rangeTransport.length : src.length ?? NaN;
14398
14461
  const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace;
14399
14462
  const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : !!(CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && WasmFactory === DOMWasmFactory && cMapUrl && standardFontDataUrl && wasmUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI) && isValidFetchUrl(wasmUrl, document.baseURI));
@@ -14428,7 +14491,7 @@ function getDocument(src = {}) {
14428
14491
  }
14429
14492
  const docParams = {
14430
14493
  docId,
14431
- apiVersion: "5.4.624",
14494
+ apiVersion: "5.5.207",
14432
14495
  data,
14433
14496
  password,
14434
14497
  disableAutoFetch,
@@ -14502,7 +14565,7 @@ function getDocument(src = {}) {
14502
14565
  throw new Error("Worker was destroyed");
14503
14566
  }
14504
14567
  const messageHandler = new MessageHandler(docId, workerId, worker.port);
14505
- const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory);
14568
+ const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory, pagesMapper);
14506
14569
  task._transport = transport;
14507
14570
  messageHandler.send("Ready", null);
14508
14571
  });
@@ -14546,20 +14609,21 @@ class PDFDataRangeTransport {
14546
14609
  #capability = Promise.withResolvers();
14547
14610
  #progressiveDoneListeners = [];
14548
14611
  #progressiveReadListeners = [];
14549
- #progressListeners = [];
14550
14612
  #rangeListeners = [];
14551
14613
  constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {
14552
14614
  this.length = length;
14553
14615
  this.initialData = initialData;
14554
14616
  this.progressiveDone = progressiveDone;
14555
14617
  this.contentDispositionFilename = contentDispositionFilename;
14618
+ Object.defineProperty(this, "onDataProgress", {
14619
+ value: () => {
14620
+ deprecated("`PDFDataRangeTransport.prototype.onDataProgress` - method was " + "removed, since loading progress is now reported automatically " + "through the `PDFDataTransportStream` class (and related code).");
14621
+ }
14622
+ });
14556
14623
  }
14557
14624
  addRangeListener(listener) {
14558
14625
  this.#rangeListeners.push(listener);
14559
14626
  }
14560
- addProgressListener(listener) {
14561
- this.#progressListeners.push(listener);
14562
- }
14563
14627
  addProgressiveReadListener(listener) {
14564
14628
  this.#progressiveReadListeners.push(listener);
14565
14629
  }
@@ -14571,13 +14635,6 @@ class PDFDataRangeTransport {
14571
14635
  listener(begin, chunk);
14572
14636
  }
14573
14637
  }
14574
- onDataProgress(loaded, total) {
14575
- this.#capability.promise.then(() => {
14576
- for (const listener of this.#progressListeners) {
14577
- listener(loaded, total);
14578
- }
14579
- });
14580
- }
14581
14638
  onDataProgressiveRead(chunk) {
14582
14639
  this.#capability.promise.then(() => {
14583
14640
  for (const listener of this.#progressiveReadListeners) {
@@ -14605,6 +14662,9 @@ class PDFDocumentProxy {
14605
14662
  this._pdfInfo = pdfInfo;
14606
14663
  this._transport = transport;
14607
14664
  }
14665
+ get pagesMapper() {
14666
+ return this._transport.pagesMapper;
14667
+ }
14608
14668
  get annotationStorage() {
14609
14669
  return this._transport.annotationStorage;
14610
14670
  }
@@ -14721,8 +14781,8 @@ class PDFDocumentProxy {
14721
14781
  }
14722
14782
  class PDFPageProxy {
14723
14783
  #pendingCleanup = false;
14724
- #pagesMapper = PagesMapper.instance;
14725
- constructor(pageIndex, pageInfo, transport, pdfBug = false) {
14784
+ #pagesMapper = null;
14785
+ constructor(pageIndex, pageInfo, transport, pagesMapper, pdfBug = false) {
14726
14786
  this._pageIndex = pageIndex;
14727
14787
  this._pageInfo = pageInfo;
14728
14788
  this._transport = transport;
@@ -14733,6 +14793,7 @@ class PDFPageProxy {
14733
14793
  this._intentStates = new Map();
14734
14794
  this.destroyed = false;
14735
14795
  this.recordedBBoxes = null;
14796
+ this.#pagesMapper = pagesMapper;
14736
14797
  }
14737
14798
  get pageNumber() {
14738
14799
  return this._pageIndex + 1;
@@ -14813,11 +14874,7 @@ class PDFPageProxy {
14813
14874
  } = intentArgs;
14814
14875
  this.#pendingCleanup = false;
14815
14876
  optionalContentConfigPromise ||= this._transport.getOptionalContentConfig(renderingIntent);
14816
- let intentState = this._intentStates.get(cacheKey);
14817
- if (!intentState) {
14818
- intentState = Object.create(null);
14819
- this._intentStates.set(cacheKey, intentState);
14820
- }
14877
+ const intentState = this._intentStates.getOrInsertComputed(cacheKey, makeObj);
14821
14878
  if (intentState.streamReaderCancelTimeout) {
14822
14879
  clearTimeout(intentState.streamReaderCancelTimeout);
14823
14880
  intentState.streamReaderCancelTimeout = null;
@@ -14925,11 +14982,7 @@ class PDFPageProxy {
14925
14982
  }
14926
14983
  }
14927
14984
  const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true);
14928
- let intentState = this._intentStates.get(intentArgs.cacheKey);
14929
- if (!intentState) {
14930
- intentState = Object.create(null);
14931
- this._intentStates.set(intentArgs.cacheKey, intentState);
14932
- }
14985
+ const intentState = this._intentStates.getOrInsertComputed(intentArgs.cacheKey, makeObj);
14933
14986
  let opListTask;
14934
14987
  if (!intentState.opListReadCapability) {
14935
14988
  opListTask = Object.create(null);
@@ -14964,35 +15017,22 @@ class PDFPageProxy {
14964
15017
  }
14965
15018
  });
14966
15019
  }
14967
- getTextContent(params = {}) {
15020
+ async getTextContent(params = {}) {
14968
15021
  if (this._transport._htmlForXfa) {
14969
15022
  return this.getXfa().then(xfa => XfaText.textContent(xfa));
14970
15023
  }
14971
15024
  const readableStream = this.streamTextContent(params);
14972
- return new Promise(function (resolve, reject) {
14973
- function pump() {
14974
- reader.read().then(function ({
14975
- value,
14976
- done
14977
- }) {
14978
- if (done) {
14979
- resolve(textContent);
14980
- return;
14981
- }
14982
- textContent.lang ??= value.lang;
14983
- Object.assign(textContent.styles, value.styles);
14984
- textContent.items.push(...value.items);
14985
- pump();
14986
- }, reject);
14987
- }
14988
- const reader = readableStream.getReader();
14989
- const textContent = {
14990
- items: [],
14991
- styles: Object.create(null),
14992
- lang: null
14993
- };
14994
- pump();
14995
- });
15025
+ const textContent = {
15026
+ items: [],
15027
+ styles: Object.create(null),
15028
+ lang: null
15029
+ };
15030
+ for await (const value of readableStream) {
15031
+ textContent.lang ??= value.lang;
15032
+ Object.assign(textContent.styles, value.styles);
15033
+ textContent.items.push(...value.items);
15034
+ }
15035
+ return textContent;
14996
15036
  }
14997
15037
  getStructTree() {
14998
15038
  return this._transport.getStructTree(this._pageIndex);
@@ -15082,7 +15122,7 @@ class PDFPageProxy {
15082
15122
  cacheKey,
15083
15123
  annotationStorage: map,
15084
15124
  modifiedIds
15085
- }, transfer);
15125
+ }, undefined, transfer);
15086
15126
  const reader = readableStream.getReader();
15087
15127
  const intentState = this._intentStates.get(cacheKey);
15088
15128
  intentState.streamReader = reader;
@@ -15390,8 +15430,8 @@ class WorkerTransport {
15390
15430
  #pagePromises = new Map();
15391
15431
  #pageRefCache = new Map();
15392
15432
  #passwordCapability = null;
15393
- #pagesMapper = PagesMapper.instance;
15394
- constructor(messageHandler, loadingTask, networkStream, params, factory) {
15433
+ #copiedPageInfo = null;
15434
+ constructor(messageHandler, loadingTask, networkStream, params, factory, pagesMapper) {
15395
15435
  this.messageHandler = messageHandler;
15396
15436
  this.loadingTask = loadingTask;
15397
15437
  this.#networkStream = networkStream;
@@ -15411,13 +15451,50 @@ class WorkerTransport {
15411
15451
  this.destroyed = false;
15412
15452
  this.destroyCapability = null;
15413
15453
  this.setupMessageHandler();
15414
- this.#pagesMapper.addListener(this.#updateCaches.bind(this));
15454
+ this.pagesMapper = pagesMapper;
15455
+ this.pagesMapper.addListener(this.#updateCaches.bind(this));
15415
15456
  }
15416
- #updateCaches() {
15457
+ #updateCaches({
15458
+ type,
15459
+ pageNumbers
15460
+ }) {
15461
+ if (type === "copy") {
15462
+ this.#copiedPageInfo = new Map();
15463
+ for (const pageNum of pageNumbers) {
15464
+ this.#copiedPageInfo.set(pageNum, {
15465
+ proxy: this.#pageCache.get(pageNum - 1) || null,
15466
+ promise: this.#pagePromises.get(pageNum - 1) || null
15467
+ });
15468
+ }
15469
+ return;
15470
+ }
15471
+ if (type === "delete") {
15472
+ for (const pageNum of pageNumbers) {
15473
+ this.#pageCache.delete(pageNum - 1);
15474
+ this.#pagePromises.delete(pageNum - 1);
15475
+ }
15476
+ }
15417
15477
  const newPageCache = new Map();
15418
15478
  const newPromiseCache = new Map();
15419
- for (let i = 0, ii = this.#pagesMapper.pagesNumber; i < ii; i++) {
15420
- const prevPageIndex = this.#pagesMapper.getPrevPageNumber(i + 1) - 1;
15479
+ const {
15480
+ pagesMapper
15481
+ } = this;
15482
+ for (let i = 0, ii = pagesMapper.pagesNumber; i < ii; i++) {
15483
+ const prevPageNumber = pagesMapper.getPrevPageNumber(i + 1);
15484
+ if (prevPageNumber < 0) {
15485
+ const {
15486
+ proxy,
15487
+ promise
15488
+ } = this.#copiedPageInfo?.get(-prevPageNumber) || {};
15489
+ if (proxy) {
15490
+ newPageCache.set(i, proxy);
15491
+ }
15492
+ if (promise) {
15493
+ newPromiseCache.set(i, promise);
15494
+ }
15495
+ continue;
15496
+ }
15497
+ const prevPageIndex = prevPageNumber - 1;
15421
15498
  const page = this.#pageCache.get(prevPageIndex);
15422
15499
  if (page) {
15423
15500
  newPageCache.set(i, page);
@@ -15431,13 +15508,7 @@ class WorkerTransport {
15431
15508
  this.#pagePromises = newPromiseCache;
15432
15509
  }
15433
15510
  #cacheSimpleMethod(name, data = null) {
15434
- const cachedPromise = this.#methodPromises.get(name);
15435
- if (cachedPromise) {
15436
- return cachedPromise;
15437
- }
15438
- const promise = this.messageHandler.sendWithPromise(name, data);
15439
- this.#methodPromises.set(name, promise);
15440
- return promise;
15511
+ return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, data));
15441
15512
  }
15442
15513
  #onProgress({
15443
15514
  loaded,
@@ -15619,7 +15690,7 @@ class WorkerTransport {
15619
15690
  messageHandler.on("GetDoc", ({
15620
15691
  pdfInfo
15621
15692
  }) => {
15622
- this.#pagesMapper.pagesNumber = pdfInfo.numPages;
15693
+ this.pagesMapper.pagesNumber = pdfInfo.numPages;
15623
15694
  this._numPages = pdfInfo.numPages;
15624
15695
  this._htmlForXfa = pdfInfo.htmlForXfa;
15625
15696
  delete pdfInfo.htmlForXfa;
@@ -15787,11 +15858,11 @@ class WorkerTransport {
15787
15858
  });
15788
15859
  }
15789
15860
  getPage(pageNumber) {
15790
- if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.#pagesMapper.pagesNumber) {
15861
+ if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.pagesMapper.pagesNumber) {
15791
15862
  return Promise.reject(new Error("Invalid page request."));
15792
15863
  }
15793
15864
  const pageIndex = pageNumber - 1;
15794
- const newPageIndex = this.#pagesMapper.getPageId(pageNumber) - 1;
15865
+ const newPageIndex = this.pagesMapper.getPageId(pageNumber) - 1;
15795
15866
  const cachedPromise = this.#pagePromises.get(pageIndex);
15796
15867
  if (cachedPromise) {
15797
15868
  return cachedPromise;
@@ -15805,7 +15876,7 @@ class WorkerTransport {
15805
15876
  if (pageInfo.refStr) {
15806
15877
  this.#pageRefCache.set(pageInfo.refStr, newPageIndex);
15807
15878
  }
15808
- const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
15879
+ const page = new PDFPageProxy(pageIndex, pageInfo, this, this.pagesMapper, this._params.pdfBug);
15809
15880
  this.#pageCache.set(pageIndex, page);
15810
15881
  return page;
15811
15882
  });
@@ -15820,11 +15891,15 @@ class WorkerTransport {
15820
15891
  num: ref.num,
15821
15892
  gen: ref.gen
15822
15893
  });
15823
- return this.#pagesMapper.getPageNumber(index + 1) - 1;
15894
+ const pageNumber = this.pagesMapper.getPageNumber(index + 1);
15895
+ if (pageNumber === 0) {
15896
+ throw new Error("GetPageIndex: page has been removed.");
15897
+ }
15898
+ return pageNumber - 1;
15824
15899
  }
15825
15900
  getAnnotations(pageIndex, intent) {
15826
15901
  return this.messageHandler.sendWithPromise("GetAnnotations", {
15827
- pageIndex: this.#pagesMapper.getPageId(pageIndex + 1) - 1,
15902
+ pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1,
15828
15903
  intent
15829
15904
  });
15830
15905
  }
@@ -15877,12 +15952,12 @@ class WorkerTransport {
15877
15952
  }
15878
15953
  getPageJSActions(pageIndex) {
15879
15954
  return this.messageHandler.sendWithPromise("GetPageJSActions", {
15880
- pageIndex: this.#pagesMapper.getPageId(pageIndex + 1) - 1
15955
+ pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1
15881
15956
  });
15882
15957
  }
15883
15958
  getStructTree(pageIndex) {
15884
15959
  return this.messageHandler.sendWithPromise("GetStructTree", {
15885
- pageIndex: this.#pagesMapper.getPageId(pageIndex + 1) - 1
15960
+ pageIndex: this.pagesMapper.getPageId(pageIndex + 1) - 1
15886
15961
  });
15887
15962
  }
15888
15963
  getOutline() {
@@ -15895,20 +15970,14 @@ class WorkerTransport {
15895
15970
  return this.messageHandler.sendWithPromise("GetPermissions", null);
15896
15971
  }
15897
15972
  getMetadata() {
15898
- const name = "GetMetadata",
15899
- cachedPromise = this.#methodPromises.get(name);
15900
- if (cachedPromise) {
15901
- return cachedPromise;
15902
- }
15903
- const promise = this.messageHandler.sendWithPromise(name, null).then(results => ({
15973
+ const name = "GetMetadata";
15974
+ return this.#methodPromises.getOrInsertComputed(name, () => this.messageHandler.sendWithPromise(name, null).then(results => ({
15904
15975
  info: results[0],
15905
15976
  metadata: results[1] ? new Metadata(results[1]) : null,
15906
15977
  contentDispositionFilename: this.#fullReader?.filename ?? null,
15907
15978
  contentLength: this.#fullReader?.contentLength ?? null,
15908
15979
  hasStructTree: results[2]
15909
- }));
15910
- this.#methodPromises.set(name, promise);
15911
- return promise;
15980
+ })));
15912
15981
  }
15913
15982
  getMarkInfo() {
15914
15983
  return this.messageHandler.sendWithPromise("GetMarkInfo", null);
@@ -15938,7 +16007,13 @@ class WorkerTransport {
15938
16007
  }
15939
16008
  const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`;
15940
16009
  const pageIndex = this.#pageRefCache.get(refStr);
15941
- return pageIndex >= 0 ? this.#pagesMapper.getPageNumber(pageIndex + 1) : null;
16010
+ if (pageIndex >= 0) {
16011
+ const pageNumber = this.pagesMapper.getPageNumber(pageIndex + 1);
16012
+ if (pageNumber !== 0) {
16013
+ return pageNumber;
16014
+ }
16015
+ }
16016
+ return null;
15942
16017
  }
15943
16018
  }
15944
16019
  class RenderTask {
@@ -16120,8 +16195,8 @@ class InternalRenderTask {
16120
16195
  }
16121
16196
  }
16122
16197
  }
16123
- const version = "5.4.624";
16124
- const build = "384c6208b";
16198
+ const version = "5.5.207";
16199
+ const build = "527964698";
16125
16200
 
16126
16201
  ;// ./src/display/editor/color_picker.js
16127
16202
 
@@ -17542,7 +17617,7 @@ class WidgetAnnotationElement extends AnnotationElement {
17542
17617
  }
17543
17618
  }
17544
17619
  _getKeyModifier(event) {
17545
- return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;
17620
+ return FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey;
17546
17621
  }
17547
17622
  _setEventListener(element, elementData, baseName, eventName, valueGetter) {
17548
17623
  if (baseName.includes("mouse")) {
@@ -19543,7 +19618,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
19543
19618
  this.#trigger = trigger;
19544
19619
  const {
19545
19620
  isMac
19546
- } = util_FeatureTest.platform;
19621
+ } = FeatureTest.platform;
19547
19622
  container.addEventListener("keydown", evt => {
19548
19623
  if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) {
19549
19624
  this.#download();
@@ -19656,12 +19731,7 @@ class AnnotationLayer {
19656
19731
  if (!isPopupAnnotation) {
19657
19732
  this.#elements.push(element);
19658
19733
  if (data.popupRef) {
19659
- const elements = popupToElements.get(data.popupRef);
19660
- if (!elements) {
19661
- popupToElements.set(data.popupRef, [element]);
19662
- } else {
19663
- elements.push(element);
19664
- }
19734
+ popupToElements.getOrInsertComputed(data.popupRef, makeArr).push(element);
19665
19735
  }
19666
19736
  }
19667
19737
  const rendered = element.render();
@@ -25384,7 +25454,30 @@ class AnnotationEditorLayer {
25384
25454
  this.#uiManager.addLayer(this);
25385
25455
  }
25386
25456
  updatePageIndex(newPageIndex) {
25457
+ for (const editor of this.#allEditorsIterator) {
25458
+ editor.updatePageIndex(newPageIndex);
25459
+ }
25387
25460
  this.pageIndex = newPageIndex;
25461
+ this.#uiManager.addLayer(this);
25462
+ }
25463
+ async setClonedFrom(clonedFrom) {
25464
+ if (!clonedFrom) {
25465
+ return;
25466
+ }
25467
+ const promises = [];
25468
+ for (const editor of clonedFrom.#allEditorsIterator) {
25469
+ const serialized = editor.serialize(true);
25470
+ if (!serialized) {
25471
+ continue;
25472
+ }
25473
+ serialized.isCopy = false;
25474
+ promises.push(this.deserialize(serialized).then(deserialized => {
25475
+ if (deserialized) {
25476
+ this.addOrRebuild(deserialized);
25477
+ }
25478
+ }));
25479
+ }
25480
+ await Promise.all(promises);
25388
25481
  }
25389
25482
  get isEmpty() {
25390
25483
  return this.#editors.size === 0;
@@ -25651,7 +25744,7 @@ class AnnotationEditorLayer {
25651
25744
  if (target === this.#textLayer.div || (target.getAttribute("role") === "img" || target.classList.contains("endOfContent")) && this.#textLayer.div.contains(target)) {
25652
25745
  const {
25653
25746
  isMac
25654
- } = util_FeatureTest.platform;
25747
+ } = FeatureTest.platform;
25655
25748
  if (event.button !== 0 || event.ctrlKey && isMac) {
25656
25749
  return;
25657
25750
  }
@@ -25897,7 +25990,7 @@ class AnnotationEditorLayer {
25897
25990
  pointerup(event) {
25898
25991
  const {
25899
25992
  isMac
25900
- } = util_FeatureTest.platform;
25993
+ } = FeatureTest.platform;
25901
25994
  if (event.button !== 0 || event.ctrlKey && isMac) {
25902
25995
  return;
25903
25996
  }
@@ -25932,7 +26025,7 @@ class AnnotationEditorLayer {
25932
26025
  }
25933
26026
  const {
25934
26027
  isMac
25935
- } = util_FeatureTest.platform;
26028
+ } = FeatureTest.platform;
25936
26029
  if (event.button !== 0 || event.ctrlKey && isMac) {
25937
26030
  return;
25938
26031
  }
@@ -26321,7 +26414,7 @@ globalThis.pdfjsLib = {
26321
26414
  CSSConstants: CSSConstants,
26322
26415
  DOMSVGFactory: DOMSVGFactory,
26323
26416
  DrawLayer: DrawLayer,
26324
- FeatureTest: util_FeatureTest,
26417
+ FeatureTest: FeatureTest,
26325
26418
  fetchData: fetchData,
26326
26419
  findContrastColor: findContrastColor,
26327
26420
  getDocument: getDocument,
@@ -26331,17 +26424,19 @@ globalThis.pdfjsLib = {
26331
26424
  getUuid: getUuid,
26332
26425
  getXfaPageViewport: getXfaPageViewport,
26333
26426
  GlobalWorkerOptions: GlobalWorkerOptions,
26334
- ImageKind: util_ImageKind,
26427
+ ImageKind: ImageKind,
26335
26428
  InvalidPDFException: InvalidPDFException,
26336
26429
  isDataScheme: isDataScheme,
26337
26430
  isPdfFile: isPdfFile,
26338
26431
  isValidExplicitDest: isValidExplicitDest,
26432
+ makeArr: makeArr,
26433
+ makeMap: makeMap,
26434
+ makeObj: makeObj,
26339
26435
  MathClamp: MathClamp,
26340
26436
  noContextMenu: noContextMenu,
26341
26437
  normalizeUnicode: normalizeUnicode,
26342
26438
  OPS: OPS,
26343
26439
  OutputScale: OutputScale,
26344
- PagesMapper: PagesMapper,
26345
26440
  PasswordResponses: PasswordResponses,
26346
26441
  PDFDataRangeTransport: PDFDataRangeTransport,
26347
26442
  PDFDateString: PDFDateString,
@@ -26365,6 +26460,6 @@ globalThis.pdfjsLib = {
26365
26460
  XfaLayer: XfaLayer
26366
26461
  };
26367
26462
 
26368
- export { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, CSSConstants, ColorPicker, DOMSVGFactory, DrawLayer, util_FeatureTest as FeatureTest, GlobalWorkerOptions, util_ImageKind as ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PagesMapper, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TouchManager, Util, VerbosityLevel, XfaLayer, applyOpacity, build, createValidAbsoluteUrl, fetchData, findContrastColor, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getRGB, getUuid, getXfaPageViewport, isDataScheme, isPdfFile, isValidExplicitDest, noContextMenu, normalizeUnicode, renderRichText, setLayerDimensions, shadow, stopEvent, updateUrlHash, version };
26463
+ export { AbortException, AnnotationEditorLayer, AnnotationEditorParamsType, AnnotationEditorType, AnnotationEditorUIManager, AnnotationLayer, AnnotationMode, AnnotationType, CSSConstants, ColorPicker, DOMSVGFactory, DrawLayer, FeatureTest, GlobalWorkerOptions, ImageKind, InvalidPDFException, MathClamp, OPS, OutputScale, PDFDataRangeTransport, PDFDateString, PDFWorker, PasswordResponses, PermissionFlag, PixelsPerInch, RenderingCancelledException, ResponseException, SignatureExtractor, SupportedImageMimeTypes, TextLayer, TouchManager, Util, VerbosityLevel, XfaLayer, applyOpacity, build, createValidAbsoluteUrl, fetchData, findContrastColor, getDocument, getFilenameFromUrl, getPdfFilenameFromUrl, getRGB, getUuid, getXfaPageViewport, isDataScheme, isPdfFile, isValidExplicitDest, makeArr, makeMap, makeObj, noContextMenu, normalizeUnicode, renderRichText, setLayerDimensions, shadow, stopEvent, updateUrlHash, version };
26369
26464
 
26370
26465
  //# sourceMappingURL=pdf.mjs.map