pdfjs-dist 2.0.943 → 2.4.456

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.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (192) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/README.md +4 -0
  3. package/bower.json +1 -1
  4. package/build/pdf.js +8286 -14230
  5. package/build/pdf.js.map +1 -1
  6. package/build/pdf.min.js +22 -1
  7. package/build/pdf.worker.entry.js +5 -3
  8. package/build/pdf.worker.js +25500 -26628
  9. package/build/pdf.worker.js.map +1 -1
  10. package/build/pdf.worker.min.js +22 -1
  11. package/es5/build/pdf.js +25473 -0
  12. package/es5/build/pdf.js.map +1 -0
  13. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  14. package/es5/build/pdf.worker.js +57878 -0
  15. package/es5/build/pdf.worker.js.map +1 -0
  16. package/es5/web/images/annotation-check.svg +11 -0
  17. package/es5/web/images/annotation-comment.svg +16 -0
  18. package/es5/web/images/annotation-help.svg +26 -0
  19. package/es5/web/images/annotation-insert.svg +10 -0
  20. package/es5/web/images/annotation-key.svg +11 -0
  21. package/es5/web/images/annotation-newparagraph.svg +11 -0
  22. package/es5/web/images/annotation-noicon.svg +7 -0
  23. package/es5/web/images/annotation-note.svg +42 -0
  24. package/es5/web/images/annotation-paragraph.svg +16 -0
  25. package/es5/web/images/loading-icon.gif +0 -0
  26. package/es5/web/images/shadow.png +0 -0
  27. package/es5/web/images/texture.png +0 -0
  28. package/es5/web/pdf_viewer.css +407 -0
  29. package/es5/web/pdf_viewer.js +7757 -0
  30. package/es5/web/pdf_viewer.js.map +1 -0
  31. package/image_decoders/pdf.image_decoders.js +2887 -4094
  32. package/image_decoders/pdf.image_decoders.js.map +1 -1
  33. package/image_decoders/pdf.image_decoders.min.js +22 -1
  34. package/lib/README.md +7 -0
  35. package/lib/core/annotation.js +855 -778
  36. package/lib/core/arithmetic_decoder.js +325 -311
  37. package/lib/core/bidi.js +117 -50
  38. package/lib/core/ccitt.js +251 -89
  39. package/lib/core/ccitt_stream.js +26 -16
  40. package/lib/core/cff_parser.js +525 -197
  41. package/lib/core/charsets.js +6 -5
  42. package/lib/core/chunked_stream.js +541 -406
  43. package/lib/core/cmap.js +368 -253
  44. package/lib/core/colorspace.js +781 -800
  45. package/lib/core/core_utils.js +152 -0
  46. package/lib/core/crypto.js +609 -422
  47. package/lib/core/document.js +649 -481
  48. package/lib/core/encodings.js +33 -24
  49. package/lib/core/evaluator.js +1471 -736
  50. package/lib/core/font_renderer.js +289 -149
  51. package/lib/core/fonts.js +1067 -413
  52. package/lib/core/function.js +517 -287
  53. package/lib/core/glyphlist.js +4529 -4527
  54. package/lib/core/image.js +232 -114
  55. package/lib/core/image_utils.js +94 -0
  56. package/lib/core/jbig2.js +711 -342
  57. package/lib/core/jbig2_stream.js +31 -19
  58. package/lib/core/jpeg_stream.js +151 -26
  59. package/lib/core/jpg.js +433 -181
  60. package/lib/core/jpx.js +551 -143
  61. package/lib/core/jpx_stream.js +40 -28
  62. package/lib/core/metrics.js +2931 -2931
  63. package/lib/core/murmurhash3.js +104 -97
  64. package/lib/core/obj.js +1561 -1053
  65. package/lib/core/operator_list.js +192 -64
  66. package/lib/core/parser.js +1162 -864
  67. package/lib/core/pattern.js +224 -75
  68. package/lib/core/pdf_manager.js +154 -285
  69. package/lib/core/primitives.js +145 -69
  70. package/lib/core/ps_parser.js +212 -162
  71. package/lib/core/standard_fonts.js +245 -244
  72. package/lib/core/stream.js +353 -81
  73. package/lib/core/type1_parser.js +218 -68
  74. package/lib/core/unicode.js +1682 -1655
  75. package/lib/core/worker.js +233 -302
  76. package/lib/core/worker_stream.js +168 -0
  77. package/lib/display/annotation_layer.js +808 -862
  78. package/lib/display/api.js +1778 -1462
  79. package/lib/display/api_compatibility.js +14 -9
  80. package/lib/display/canvas.js +463 -140
  81. package/lib/display/content_disposition.js +86 -58
  82. package/lib/display/display_utils.js +524 -0
  83. package/lib/display/fetch_stream.js +202 -274
  84. package/lib/display/font_loader.js +311 -333
  85. package/lib/display/metadata.js +98 -88
  86. package/lib/display/network.js +343 -347
  87. package/lib/display/network_utils.js +46 -26
  88. package/lib/display/node_stream.js +326 -404
  89. package/lib/display/pattern_helper.js +168 -69
  90. package/lib/display/svg.js +1296 -885
  91. package/lib/display/text_layer.js +229 -103
  92. package/lib/display/transport_stream.js +290 -250
  93. package/lib/display/webgl.js +116 -83
  94. package/lib/display/worker_options.js +6 -5
  95. package/lib/display/xml_parser.js +358 -337
  96. package/lib/examples/node/domstubs.js +95 -39
  97. package/lib/pdf.js +49 -31
  98. package/lib/pdf.worker.js +7 -5
  99. package/lib/shared/compatibility.js +3 -145
  100. package/lib/shared/is_node.js +8 -7
  101. package/lib/shared/message_handler.js +367 -314
  102. package/lib/shared/util.js +421 -415
  103. package/lib/test/unit/annotation_spec.js +1570 -690
  104. package/lib/test/unit/api_spec.js +855 -493
  105. package/lib/test/unit/bidi_spec.js +12 -12
  106. package/lib/test/unit/cff_parser_spec.js +88 -61
  107. package/lib/test/unit/clitests_helper.js +9 -12
  108. package/lib/test/unit/cmap_spec.js +140 -88
  109. package/lib/test/unit/colorspace_spec.js +204 -152
  110. package/lib/test/unit/core_utils_spec.js +211 -0
  111. package/lib/test/unit/crypto_spec.js +194 -182
  112. package/lib/test/unit/custom_spec.js +50 -64
  113. package/lib/test/unit/display_svg_spec.js +53 -38
  114. package/lib/test/unit/display_utils_spec.js +263 -0
  115. package/lib/test/unit/document_spec.js +17 -22
  116. package/lib/test/unit/encodings_spec.js +15 -57
  117. package/lib/test/unit/evaluator_spec.js +90 -83
  118. package/lib/test/unit/fetch_stream_spec.js +111 -0
  119. package/lib/test/unit/function_spec.js +219 -205
  120. package/lib/test/unit/jasmine-boot.js +68 -39
  121. package/lib/test/unit/message_handler_spec.js +187 -160
  122. package/lib/test/unit/metadata_spec.js +87 -34
  123. package/lib/test/unit/murmurhash3_spec.js +13 -13
  124. package/lib/test/unit/network_spec.js +26 -59
  125. package/lib/test/unit/network_utils_spec.js +187 -121
  126. package/lib/test/unit/node_stream_spec.js +98 -90
  127. package/lib/test/unit/parser_spec.js +173 -131
  128. package/lib/test/unit/pdf_find_controller_spec.js +148 -67
  129. package/lib/test/unit/pdf_find_utils_spec.js +35 -34
  130. package/lib/test/unit/pdf_history_spec.js +45 -33
  131. package/lib/test/unit/primitives_spec.js +161 -126
  132. package/lib/test/unit/stream_spec.js +22 -15
  133. package/lib/test/unit/test_utils.js +149 -98
  134. package/lib/test/unit/testreporter.js +36 -18
  135. package/lib/test/unit/type1_parser_spec.js +46 -44
  136. package/lib/test/unit/ui_utils_spec.js +388 -372
  137. package/lib/test/unit/unicode_spec.js +49 -46
  138. package/lib/test/unit/util_spec.js +144 -248
  139. package/lib/web/annotation_layer_builder.js +75 -95
  140. package/lib/web/app.js +1538 -1147
  141. package/lib/web/app_options.js +116 -104
  142. package/lib/web/base_viewer.js +950 -775
  143. package/lib/web/chromecom.js +217 -225
  144. package/lib/web/debugger.js +236 -148
  145. package/lib/web/download_manager.js +50 -50
  146. package/lib/web/firefox_print_service.js +51 -33
  147. package/lib/web/firefoxcom.js +225 -352
  148. package/lib/web/genericcom.js +30 -93
  149. package/lib/web/genericl10n.js +26 -143
  150. package/lib/web/grab_to_pan.js +57 -33
  151. package/lib/web/interfaces.js +105 -232
  152. package/lib/web/overlay_manager.js +73 -227
  153. package/lib/web/password_prompt.js +44 -62
  154. package/lib/web/pdf_attachment_viewer.js +118 -123
  155. package/lib/web/pdf_cursor_tools.js +89 -93
  156. package/lib/web/pdf_document_properties.js +242 -281
  157. package/lib/web/pdf_find_bar.js +157 -163
  158. package/lib/web/pdf_find_controller.js +598 -454
  159. package/lib/web/pdf_find_utils.js +32 -16
  160. package/lib/web/pdf_history.js +481 -355
  161. package/lib/web/pdf_link_service.js +355 -323
  162. package/lib/web/pdf_outline_viewer.js +167 -152
  163. package/lib/web/pdf_page_view.js +511 -457
  164. package/lib/web/pdf_presentation_mode.js +347 -335
  165. package/lib/web/pdf_print_service.js +133 -103
  166. package/lib/web/pdf_rendering_queue.js +98 -100
  167. package/lib/web/pdf_sidebar.js +323 -299
  168. package/lib/web/pdf_sidebar_resizer.js +107 -108
  169. package/lib/web/pdf_single_page_viewer.js +94 -146
  170. package/lib/web/pdf_thumbnail_view.js +319 -269
  171. package/lib/web/pdf_thumbnail_viewer.js +219 -199
  172. package/lib/web/pdf_viewer.component.js +111 -32
  173. package/lib/web/pdf_viewer.js +61 -101
  174. package/lib/web/preferences.js +87 -272
  175. package/lib/web/secondary_toolbar.js +207 -220
  176. package/lib/web/text_layer_builder.js +322 -322
  177. package/lib/web/toolbar.js +227 -180
  178. package/lib/web/ui_utils.js +476 -421
  179. package/lib/web/view_history.js +59 -208
  180. package/lib/web/viewer_compatibility.js +9 -6
  181. package/package.json +2 -9
  182. package/web/pdf_viewer.css +36 -22
  183. package/web/pdf_viewer.js +4407 -4516
  184. package/web/pdf_viewer.js.map +1 -1
  185. package/webpack.js +14 -5
  186. package/external/streams/streams-lib.js +0 -3962
  187. package/external/url/url-lib.js +0 -627
  188. package/lib/display/dom_utils.js +0 -441
  189. package/lib/shared/streams_polyfill.js +0 -39
  190. package/lib/shared/url_polyfill.js +0 -50
  191. package/lib/test/unit/dom_utils_spec.js +0 -89
  192. package/lib/web/dom_events.js +0 -140
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,206 +19,173 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.build = exports.version = exports.setPDFNetworkStreamFactory = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined;
28
-
29
- var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
30
-
31
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
32
-
33
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
34
-
35
- var _util = require('../shared/util');
36
-
37
- var _dom_utils = require('./dom_utils');
38
-
39
- var _font_loader = require('./font_loader');
27
+ exports.getDocument = getDocument;
28
+ exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
29
+ exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
40
30
 
41
- var _api_compatibility = require('./api_compatibility');
31
+ var _util = require("../shared/util.js");
42
32
 
43
- var _canvas = require('./canvas');
33
+ var _display_utils = require("./display_utils.js");
44
34
 
45
- var _global_scope = require('../shared/global_scope');
35
+ var _font_loader = require("./font_loader.js");
46
36
 
47
- var _global_scope2 = _interopRequireDefault(_global_scope);
37
+ var _api_compatibility = require("./api_compatibility.js");
48
38
 
49
- var _worker_options = require('./worker_options');
39
+ var _canvas = require("./canvas.js");
50
40
 
51
- var _message_handler = require('../shared/message_handler');
41
+ var _worker_options = require("./worker_options.js");
52
42
 
53
- var _metadata = require('./metadata');
43
+ var _is_node = require("../shared/is_node.js");
54
44
 
55
- var _transport_stream = require('./transport_stream');
45
+ var _message_handler = require("../shared/message_handler.js");
56
46
 
57
- var _webgl = require('./webgl');
47
+ var _metadata = require("./metadata.js");
58
48
 
59
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
+ var _transport_stream = require("./transport_stream.js");
60
50
 
61
- function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
51
+ var _webgl = require("./webgl.js");
62
52
 
63
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
53
+ const DEFAULT_RANGE_CHUNK_SIZE = 65536;
54
+ const RENDERING_CANCELLED_TIMEOUT = 100;
55
+ let createPDFNetworkStream;
64
56
 
65
- var DEFAULT_RANGE_CHUNK_SIZE = 65536;
66
- var isWorkerDisabled = false;
67
- var fallbackWorkerSrc = void 0;
68
- var fakeWorkerFilesLoader = null;
69
- {
70
- var useRequireEnsure = false;
71
- if (typeof window === 'undefined') {
72
- isWorkerDisabled = true;
73
- if (typeof require.ensure === 'undefined') {
74
- require.ensure = require('node-ensure');
75
- }
76
- useRequireEnsure = true;
77
- } else if (typeof require !== 'undefined' && typeof require.ensure === 'function') {
78
- useRequireEnsure = true;
79
- }
80
- if (typeof requirejs !== 'undefined' && requirejs.toUrl) {
81
- fallbackWorkerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js');
82
- }
83
- var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load;
84
- fakeWorkerFilesLoader = useRequireEnsure ? function () {
85
- return new Promise(function (resolve, reject) {
86
- require.ensure([], function () {
87
- try {
88
- var worker = void 0;
89
- worker = require('../pdf.worker.js');
90
- resolve(worker.WorkerMessageHandler);
91
- } catch (ex) {
92
- reject(ex);
93
- }
94
- }, reject, 'pdfjsWorker');
95
- });
96
- } : dynamicLoaderSupported ? function () {
97
- return new Promise(function (resolve, reject) {
98
- requirejs(['pdfjs-dist/build/pdf.worker'], function (worker) {
99
- try {
100
- resolve(worker.WorkerMessageHandler);
101
- } catch (ex) {
102
- reject(ex);
103
- }
104
- }, reject);
105
- });
106
- } : null;
107
- if (!fallbackWorkerSrc && typeof document !== 'undefined') {
108
- var pdfjsFilePath = document.currentScript && document.currentScript.src;
109
- if (pdfjsFilePath) {
110
- fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2');
111
- }
112
- }
113
- }
114
- var createPDFNetworkStream;
115
57
  function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
116
58
  createPDFNetworkStream = pdfNetworkStreamFactory;
117
59
  }
60
+
118
61
  function getDocument(src) {
119
- var task = new PDFDocumentLoadingTask();
120
- var source;
121
- if (typeof src === 'string') {
122
- source = { url: src };
62
+ const task = new PDFDocumentLoadingTask();
63
+ let source;
64
+
65
+ if (typeof src === "string") {
66
+ source = {
67
+ url: src
68
+ };
123
69
  } else if ((0, _util.isArrayBuffer)(src)) {
124
- source = { data: src };
70
+ source = {
71
+ data: src
72
+ };
125
73
  } else if (src instanceof PDFDataRangeTransport) {
126
- source = { range: src };
74
+ source = {
75
+ range: src
76
+ };
127
77
  } else {
128
- if ((typeof src === 'undefined' ? 'undefined' : _typeof(src)) !== 'object') {
129
- throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object');
78
+ if (typeof src !== "object") {
79
+ throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object");
130
80
  }
81
+
131
82
  if (!src.url && !src.data && !src.range) {
132
- throw new Error('Invalid parameter object: need either .data, .range or .url');
83
+ throw new Error("Invalid parameter object: need either .data, .range or .url");
133
84
  }
85
+
134
86
  source = src;
135
87
  }
136
- var params = Object.create(null);
137
- var rangeTransport = null;
138
- var worker = null;
139
- for (var key in source) {
140
- if (key === 'url' && typeof window !== 'undefined') {
141
- params[key] = new _util.URL(source[key], window.location).href;
88
+
89
+ const params = Object.create(null);
90
+ let rangeTransport = null,
91
+ worker = null;
92
+
93
+ for (const key in source) {
94
+ if (key === "url" && typeof window !== "undefined") {
95
+ params[key] = new URL(source[key], window.location).href;
142
96
  continue;
143
- } else if (key === 'range') {
97
+ } else if (key === "range") {
144
98
  rangeTransport = source[key];
145
99
  continue;
146
- } else if (key === 'worker') {
100
+ } else if (key === "worker") {
147
101
  worker = source[key];
148
102
  continue;
149
- } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
150
- var pdfBytes = source[key];
151
- if (typeof pdfBytes === 'string') {
103
+ } else if (key === "data" && !(source[key] instanceof Uint8Array)) {
104
+ const pdfBytes = source[key];
105
+
106
+ if (typeof pdfBytes === "string") {
152
107
  params[key] = (0, _util.stringToBytes)(pdfBytes);
153
- } else if ((typeof pdfBytes === 'undefined' ? 'undefined' : _typeof(pdfBytes)) === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) {
108
+ } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
154
109
  params[key] = new Uint8Array(pdfBytes);
155
110
  } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
156
111
  params[key] = new Uint8Array(pdfBytes);
157
112
  } else {
158
- throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.');
113
+ throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property.");
159
114
  }
115
+
160
116
  continue;
161
117
  }
118
+
162
119
  params[key] = source[key];
163
120
  }
121
+
164
122
  params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
165
- params.CMapReaderFactory = params.CMapReaderFactory || _dom_utils.DOMCMapReaderFactory;
123
+ params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
166
124
  params.ignoreErrors = params.stopAtErrors !== true;
167
125
  params.pdfBug = params.pdfBug === true;
168
- var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
126
+ const NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
127
+
169
128
  if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
170
129
  params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE;
171
130
  }
131
+
172
132
  if (!Number.isInteger(params.maxImageSize)) {
173
133
  params.maxImageSize = -1;
174
134
  }
175
- if (typeof params.isEvalSupported !== 'boolean') {
135
+
136
+ if (typeof params.isEvalSupported !== "boolean") {
176
137
  params.isEvalSupported = true;
177
138
  }
178
- if (typeof params.disableFontFace !== 'boolean') {
139
+
140
+ if (typeof params.disableFontFace !== "boolean") {
179
141
  params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
180
142
  }
181
- if (typeof params.disableRange !== 'boolean') {
143
+
144
+ if (typeof params.disableRange !== "boolean") {
182
145
  params.disableRange = false;
183
146
  }
184
- if (typeof params.disableStream !== 'boolean') {
147
+
148
+ if (typeof params.disableStream !== "boolean") {
185
149
  params.disableStream = false;
186
150
  }
187
- if (typeof params.disableAutoFetch !== 'boolean') {
151
+
152
+ if (typeof params.disableAutoFetch !== "boolean") {
188
153
  params.disableAutoFetch = false;
189
154
  }
190
- if (typeof params.disableCreateObjectURL !== 'boolean') {
155
+
156
+ if (typeof params.disableCreateObjectURL !== "boolean") {
191
157
  params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
192
158
  }
159
+
193
160
  (0, _util.setVerbosityLevel)(params.verbosity);
161
+
194
162
  if (!worker) {
195
- var workerParams = {
196
- postMessageTransfers: params.postMessageTransfers,
197
- verbosity: params.verbosity
163
+ const workerParams = {
164
+ verbosity: params.verbosity,
165
+ port: _worker_options.GlobalWorkerOptions.workerPort
198
166
  };
199
- var workerPort = _worker_options.GlobalWorkerOptions.workerPort;
200
- if (workerPort) {
201
- workerParams.port = workerPort;
202
- worker = PDFWorker.fromPort(workerParams);
203
- } else {
204
- worker = new PDFWorker(workerParams);
205
- }
167
+ worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
206
168
  task._worker = worker;
207
169
  }
208
- var docId = task.docId;
170
+
171
+ const docId = task.docId;
209
172
  worker.promise.then(function () {
210
173
  if (task.destroyed) {
211
- throw new Error('Loading aborted');
174
+ throw new Error("Loading aborted");
212
175
  }
176
+
213
177
  return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) {
214
178
  if (task.destroyed) {
215
- throw new Error('Loading aborted');
179
+ throw new Error("Loading aborted");
216
180
  }
217
- var networkStream = void 0;
181
+
182
+ let networkStream;
183
+
218
184
  if (rangeTransport) {
219
185
  networkStream = new _transport_stream.PDFDataTransportStream({
220
186
  length: params.length,
221
187
  initialData: params.initialData,
188
+ progressiveDone: params.progressiveDone,
222
189
  disableRange: params.disableRange,
223
190
  disableStream: params.disableStream
224
191
  }, rangeTransport);
@@ -233,26 +200,31 @@ function getDocument(src) {
233
200
  disableStream: params.disableStream
234
201
  });
235
202
  }
236
- var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
203
+
204
+ const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
237
205
  messageHandler.postMessageTransfers = worker.postMessageTransfers;
238
- var transport = new WorkerTransport(messageHandler, task, networkStream, params);
206
+ const transport = new WorkerTransport(messageHandler, task, networkStream, params);
239
207
  task._transport = transport;
240
- messageHandler.send('Ready', null);
208
+ messageHandler.send("Ready", null);
241
209
  });
242
210
  }).catch(task._capability.reject);
243
211
  return task;
244
212
  }
213
+
245
214
  function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
246
215
  if (worker.destroyed) {
247
- return Promise.reject(new Error('Worker was destroyed'));
216
+ return Promise.reject(new Error("Worker was destroyed"));
248
217
  }
218
+
249
219
  if (pdfDataRangeTransport) {
250
220
  source.length = pdfDataRangeTransport.length;
251
221
  source.initialData = pdfDataRangeTransport.initialData;
222
+ source.progressiveDone = pdfDataRangeTransport.progressiveDone;
252
223
  }
253
- return worker.messageHandler.sendWithPromise('GetDocRequest', {
254
- docId: docId,
255
- apiVersion: '2.0.943',
224
+
225
+ return worker.messageHandler.sendWithPromise("GetDocRequest", {
226
+ docId,
227
+ apiVersion: '2.4.456',
256
228
  source: {
257
229
  data: source.data,
258
230
  url: source.url,
@@ -271,302 +243,242 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
271
243
  isEvalSupported: source.isEvalSupported
272
244
  }).then(function (workerId) {
273
245
  if (worker.destroyed) {
274
- throw new Error('Worker was destroyed');
246
+ throw new Error("Worker was destroyed");
275
247
  }
248
+
276
249
  return workerId;
277
250
  });
278
251
  }
279
- var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
280
- var nextDocumentId = 0;
281
- function PDFDocumentLoadingTask() {
282
- this._capability = (0, _util.createPromiseCapability)();
283
- this._transport = null;
284
- this._worker = null;
285
- this.docId = 'd' + nextDocumentId++;
286
- this.destroyed = false;
287
- this.onPassword = null;
288
- this.onProgress = null;
289
- this.onUnsupportedFeature = null;
290
- }
291
- PDFDocumentLoadingTask.prototype = {
252
+
253
+ const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
254
+ let nextDocumentId = 0;
255
+
256
+ class PDFDocumentLoadingTask {
257
+ constructor() {
258
+ this._capability = (0, _util.createPromiseCapability)();
259
+ this._transport = null;
260
+ this._worker = null;
261
+ this.docId = "d" + nextDocumentId++;
262
+ this.destroyed = false;
263
+ this.onPassword = null;
264
+ this.onProgress = null;
265
+ this.onUnsupportedFeature = null;
266
+ }
267
+
292
268
  get promise() {
293
269
  return this._capability.promise;
294
- },
295
- destroy: function destroy() {
296
- var _this = this;
270
+ }
297
271
 
272
+ destroy() {
298
273
  this.destroyed = true;
299
- var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
300
- return transportDestroyed.then(function () {
301
- _this._transport = null;
302
- if (_this._worker) {
303
- _this._worker.destroy();
304
- _this._worker = null;
274
+ const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
275
+ return transportDestroyed.then(() => {
276
+ this._transport = null;
277
+
278
+ if (this._worker) {
279
+ this._worker.destroy();
280
+
281
+ this._worker = null;
305
282
  }
306
283
  });
307
- },
284
+ }
308
285
 
309
- then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) {
310
- return this.promise.then.apply(this.promise, arguments);
286
+ then(onFulfilled, onRejected) {
287
+ throw new Error("Removed API method: " + "PDFDocumentLoadingTask.then, use the `promise` getter instead.");
311
288
  }
312
- };
289
+
290
+ }
291
+
313
292
  return PDFDocumentLoadingTask;
314
293
  }();
315
294
 
316
- var PDFDataRangeTransport = function () {
317
- function PDFDataRangeTransport(length, initialData) {
318
- _classCallCheck(this, PDFDataRangeTransport);
319
-
295
+ class PDFDataRangeTransport {
296
+ constructor(length, initialData, progressiveDone = false) {
320
297
  this.length = length;
321
298
  this.initialData = initialData;
299
+ this.progressiveDone = progressiveDone;
322
300
  this._rangeListeners = [];
323
301
  this._progressListeners = [];
324
302
  this._progressiveReadListeners = [];
303
+ this._progressiveDoneListeners = [];
325
304
  this._readyCapability = (0, _util.createPromiseCapability)();
326
305
  }
327
306
 
328
- _createClass(PDFDataRangeTransport, [{
329
- key: 'addRangeListener',
330
- value: function addRangeListener(listener) {
331
- this._rangeListeners.push(listener);
332
- }
333
- }, {
334
- key: 'addProgressListener',
335
- value: function addProgressListener(listener) {
336
- this._progressListeners.push(listener);
337
- }
338
- }, {
339
- key: 'addProgressiveReadListener',
340
- value: function addProgressiveReadListener(listener) {
341
- this._progressiveReadListeners.push(listener);
342
- }
343
- }, {
344
- key: 'onDataRange',
345
- value: function onDataRange(begin, chunk) {
346
- var _iteratorNormalCompletion = true;
347
- var _didIteratorError = false;
348
- var _iteratorError = undefined;
307
+ addRangeListener(listener) {
308
+ this._rangeListeners.push(listener);
309
+ }
310
+
311
+ addProgressListener(listener) {
312
+ this._progressListeners.push(listener);
313
+ }
349
314
 
350
- try {
351
- for (var _iterator = this._rangeListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
352
- var listener = _step.value;
315
+ addProgressiveReadListener(listener) {
316
+ this._progressiveReadListeners.push(listener);
317
+ }
353
318
 
354
- listener(begin, chunk);
355
- }
356
- } catch (err) {
357
- _didIteratorError = true;
358
- _iteratorError = err;
359
- } finally {
360
- try {
361
- if (!_iteratorNormalCompletion && _iterator.return) {
362
- _iterator.return();
363
- }
364
- } finally {
365
- if (_didIteratorError) {
366
- throw _iteratorError;
367
- }
368
- }
369
- }
319
+ addProgressiveDoneListener(listener) {
320
+ this._progressiveDoneListeners.push(listener);
321
+ }
322
+
323
+ onDataRange(begin, chunk) {
324
+ for (const listener of this._rangeListeners) {
325
+ listener(begin, chunk);
370
326
  }
371
- }, {
372
- key: 'onDataProgress',
373
- value: function onDataProgress(loaded) {
374
- var _this2 = this;
327
+ }
375
328
 
376
- this._readyCapability.promise.then(function () {
377
- var _iteratorNormalCompletion2 = true;
378
- var _didIteratorError2 = false;
379
- var _iteratorError2 = undefined;
329
+ onDataProgress(loaded, total) {
330
+ this._readyCapability.promise.then(() => {
331
+ for (const listener of this._progressListeners) {
332
+ listener(loaded, total);
333
+ }
334
+ });
335
+ }
380
336
 
381
- try {
382
- for (var _iterator2 = _this2._progressListeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
383
- var listener = _step2.value;
337
+ onDataProgressiveRead(chunk) {
338
+ this._readyCapability.promise.then(() => {
339
+ for (const listener of this._progressiveReadListeners) {
340
+ listener(chunk);
341
+ }
342
+ });
343
+ }
384
344
 
385
- listener(loaded);
386
- }
387
- } catch (err) {
388
- _didIteratorError2 = true;
389
- _iteratorError2 = err;
390
- } finally {
391
- try {
392
- if (!_iteratorNormalCompletion2 && _iterator2.return) {
393
- _iterator2.return();
394
- }
395
- } finally {
396
- if (_didIteratorError2) {
397
- throw _iteratorError2;
398
- }
399
- }
400
- }
401
- });
402
- }
403
- }, {
404
- key: 'onDataProgressiveRead',
405
- value: function onDataProgressiveRead(chunk) {
406
- var _this3 = this;
345
+ onDataProgressiveDone() {
346
+ this._readyCapability.promise.then(() => {
347
+ for (const listener of this._progressiveDoneListeners) {
348
+ listener();
349
+ }
350
+ });
351
+ }
407
352
 
408
- this._readyCapability.promise.then(function () {
409
- var _iteratorNormalCompletion3 = true;
410
- var _didIteratorError3 = false;
411
- var _iteratorError3 = undefined;
353
+ transportReady() {
354
+ this._readyCapability.resolve();
355
+ }
412
356
 
413
- try {
414
- for (var _iterator3 = _this3._progressiveReadListeners[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
415
- var listener = _step3.value;
357
+ requestDataRange(begin, end) {
358
+ (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
359
+ }
416
360
 
417
- listener(chunk);
418
- }
419
- } catch (err) {
420
- _didIteratorError3 = true;
421
- _iteratorError3 = err;
422
- } finally {
423
- try {
424
- if (!_iteratorNormalCompletion3 && _iterator3.return) {
425
- _iterator3.return();
426
- }
427
- } finally {
428
- if (_didIteratorError3) {
429
- throw _iteratorError3;
430
- }
431
- }
432
- }
433
- });
434
- }
435
- }, {
436
- key: 'transportReady',
437
- value: function transportReady() {
438
- this._readyCapability.resolve();
439
- }
440
- }, {
441
- key: 'requestDataRange',
442
- value: function requestDataRange(begin, end) {
443
- (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange');
444
- }
445
- }, {
446
- key: 'abort',
447
- value: function abort() {}
448
- }]);
361
+ abort() {}
449
362
 
450
- return PDFDataRangeTransport;
451
- }();
363
+ }
452
364
 
453
- var PDFDocumentProxy = function () {
454
- function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
455
- _classCallCheck(this, PDFDocumentProxy);
365
+ exports.PDFDataRangeTransport = PDFDataRangeTransport;
456
366
 
457
- this.loadingTask = loadingTask;
367
+ class PDFDocumentProxy {
368
+ constructor(pdfInfo, transport) {
458
369
  this._pdfInfo = pdfInfo;
459
370
  this._transport = transport;
460
371
  }
461
372
 
462
- _createClass(PDFDocumentProxy, [{
463
- key: 'getPage',
464
- value: function getPage(pageNumber) {
465
- return this._transport.getPage(pageNumber);
466
- }
467
- }, {
468
- key: 'getPageIndex',
469
- value: function getPageIndex(ref) {
470
- return this._transport.getPageIndex(ref);
471
- }
472
- }, {
473
- key: 'getDestinations',
474
- value: function getDestinations() {
475
- return this._transport.getDestinations();
476
- }
477
- }, {
478
- key: 'getDestination',
479
- value: function getDestination(id) {
480
- return this._transport.getDestination(id);
481
- }
482
- }, {
483
- key: 'getPageLabels',
484
- value: function getPageLabels() {
485
- return this._transport.getPageLabels();
486
- }
487
- }, {
488
- key: 'getPageMode',
489
- value: function getPageMode() {
490
- return this._transport.getPageMode();
491
- }
492
- }, {
493
- key: 'getAttachments',
494
- value: function getAttachments() {
495
- return this._transport.getAttachments();
496
- }
497
- }, {
498
- key: 'getJavaScript',
499
- value: function getJavaScript() {
500
- return this._transport.getJavaScript();
501
- }
502
- }, {
503
- key: 'getOutline',
504
- value: function getOutline() {
505
- return this._transport.getOutline();
506
- }
507
- }, {
508
- key: 'getPermissions',
509
- value: function getPermissions() {
510
- return this._transport.getPermissions();
511
- }
512
- }, {
513
- key: 'getMetadata',
514
- value: function getMetadata() {
515
- return this._transport.getMetadata();
516
- }
517
- }, {
518
- key: 'getData',
519
- value: function getData() {
520
- return this._transport.getData();
521
- }
522
- }, {
523
- key: 'getDownloadInfo',
524
- value: function getDownloadInfo() {
525
- return this._transport.downloadInfoCapability.promise;
526
- }
527
- }, {
528
- key: 'getStats',
529
- value: function getStats() {
530
- return this._transport.getStats();
531
- }
532
- }, {
533
- key: 'cleanup',
534
- value: function cleanup() {
535
- this._transport.startCleanup();
536
- }
537
- }, {
538
- key: 'destroy',
539
- value: function destroy() {
540
- return this.loadingTask.destroy();
541
- }
542
- }, {
543
- key: 'numPages',
544
- get: function get() {
545
- return this._pdfInfo.numPages;
546
- }
547
- }, {
548
- key: 'fingerprint',
549
- get: function get() {
550
- return this._pdfInfo.fingerprint;
551
- }
552
- }, {
553
- key: 'loadingParams',
554
- get: function get() {
555
- return this._transport.loadingParams;
556
- }
557
- }]);
558
-
559
- return PDFDocumentProxy;
560
- }();
373
+ get numPages() {
374
+ return this._pdfInfo.numPages;
375
+ }
376
+
377
+ get fingerprint() {
378
+ return this._pdfInfo.fingerprint;
379
+ }
380
+
381
+ getPage(pageNumber) {
382
+ return this._transport.getPage(pageNumber);
383
+ }
384
+
385
+ getPageIndex(ref) {
386
+ return this._transport.getPageIndex(ref);
387
+ }
388
+
389
+ getDestinations() {
390
+ return this._transport.getDestinations();
391
+ }
392
+
393
+ getDestination(id) {
394
+ return this._transport.getDestination(id);
395
+ }
396
+
397
+ getPageLabels() {
398
+ return this._transport.getPageLabels();
399
+ }
400
+
401
+ getPageLayout() {
402
+ return this._transport.getPageLayout();
403
+ }
404
+
405
+ getPageMode() {
406
+ return this._transport.getPageMode();
407
+ }
408
+
409
+ getViewerPreferences() {
410
+ return this._transport.getViewerPreferences();
411
+ }
412
+
413
+ getOpenAction() {
414
+ return this._transport.getOpenAction();
415
+ }
416
+
417
+ getOpenActionDestination() {
418
+ (0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
419
+ return this.getOpenAction().then(function (openAction) {
420
+ return openAction && openAction.dest ? openAction.dest : null;
421
+ });
422
+ }
423
+
424
+ getAttachments() {
425
+ return this._transport.getAttachments();
426
+ }
427
+
428
+ getJavaScript() {
429
+ return this._transport.getJavaScript();
430
+ }
431
+
432
+ getOutline() {
433
+ return this._transport.getOutline();
434
+ }
435
+
436
+ getPermissions() {
437
+ return this._transport.getPermissions();
438
+ }
439
+
440
+ getMetadata() {
441
+ return this._transport.getMetadata();
442
+ }
561
443
 
562
- var PDFPageProxy = function PDFPageProxyClosure() {
563
- function PDFPageProxy(pageIndex, pageInfo, transport) {
564
- var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
444
+ getData() {
445
+ return this._transport.getData();
446
+ }
447
+
448
+ getDownloadInfo() {
449
+ return this._transport.downloadInfoCapability.promise;
450
+ }
451
+
452
+ getStats() {
453
+ return this._transport.getStats();
454
+ }
455
+
456
+ cleanup() {
457
+ return this._transport.startCleanup();
458
+ }
459
+
460
+ destroy() {
461
+ return this.loadingTask.destroy();
462
+ }
463
+
464
+ get loadingParams() {
465
+ return this._transport.loadingParams;
466
+ }
467
+
468
+ get loadingTask() {
469
+ return this._transport.loadingTask;
470
+ }
471
+
472
+ }
473
+
474
+ exports.PDFDocumentProxy = PDFDocumentProxy;
565
475
 
566
- this.pageIndex = pageIndex;
476
+ class PDFPageProxy {
477
+ constructor(pageIndex, pageInfo, transport, pdfBug = false) {
478
+ this._pageIndex = pageIndex;
567
479
  this._pageInfo = pageInfo;
568
- this.transport = transport;
569
- this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer;
480
+ this._transport = transport;
481
+ this._stats = pdfBug ? new _display_utils.StatTimer() : null;
570
482
  this._pdfBug = pdfBug;
571
483
  this.commonObjs = transport.commonObjs;
572
484
  this.objs = new PDFObjects();
@@ -575,574 +487,885 @@ var PDFPageProxy = function PDFPageProxyClosure() {
575
487
  this.intentStates = Object.create(null);
576
488
  this.destroyed = false;
577
489
  }
578
- PDFPageProxy.prototype = {
579
- get pageNumber() {
580
- return this.pageIndex + 1;
581
- },
582
- get rotate() {
583
- return this._pageInfo.rotate;
584
- },
585
- get ref() {
586
- return this._pageInfo.ref;
587
- },
588
- get userUnit() {
589
- return this._pageInfo.userUnit;
590
- },
591
- get view() {
592
- return this._pageInfo.view;
593
- },
594
- getViewport: function getViewport(scale) {
595
- var rotate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.rotate;
596
- var dontFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
597
-
598
- return new _dom_utils.PageViewport({
599
- viewBox: this.view,
600
- scale: scale,
601
- rotation: rotate,
602
- dontFlip: dontFlip
603
- });
604
- },
605
490
 
606
- getAnnotations: function PDFPageProxy_getAnnotations(params) {
607
- var intent = params && params.intent || null;
608
- if (!this.annotationsPromise || this.annotationsIntent !== intent) {
609
- this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent);
610
- this.annotationsIntent = intent;
611
- }
612
- return this.annotationsPromise;
613
- },
614
- render: function PDFPageProxy_render(params) {
615
- var _this4 = this;
616
-
617
- var stats = this._stats;
618
- stats.time('Overall');
619
- this.pendingCleanup = false;
620
- var renderingIntent = params.intent === 'print' ? 'print' : 'display';
621
- var canvasFactory = params.canvasFactory || new _dom_utils.DOMCanvasFactory();
622
- var webGLContext = new _webgl.WebGLContext({ enable: params.enableWebGL });
623
- if (!this.intentStates[renderingIntent]) {
624
- this.intentStates[renderingIntent] = Object.create(null);
625
- }
626
- var intentState = this.intentStates[renderingIntent];
627
- if (!intentState.displayReadyCapability) {
628
- intentState.receivingOperatorList = true;
629
- intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
630
- intentState.operatorList = {
631
- fnArray: [],
632
- argsArray: [],
633
- lastChunk: false
634
- };
635
- stats.time('Page Request');
636
- this.transport.messageHandler.send('RenderPageRequest', {
637
- pageIndex: this.pageNumber - 1,
638
- intent: renderingIntent,
639
- renderInteractiveForms: params.renderInteractiveForms === true
640
- });
641
- }
642
- var complete = function complete(error) {
643
- var i = intentState.renderTasks.indexOf(internalRenderTask);
644
- if (i >= 0) {
645
- intentState.renderTasks.splice(i, 1);
646
- }
647
- if (_this4.cleanupAfterRender) {
648
- _this4.pendingCleanup = true;
649
- }
650
- _this4._tryCleanup();
651
- if (error) {
652
- internalRenderTask.capability.reject(error);
653
- } else {
654
- internalRenderTask.capability.resolve();
655
- }
656
- stats.timeEnd('Rendering');
657
- stats.timeEnd('Overall');
658
- };
659
- var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext, this._pdfBug);
660
- internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
661
- if (!intentState.renderTasks) {
662
- intentState.renderTasks = [];
663
- }
664
- intentState.renderTasks.push(internalRenderTask);
665
- var renderTask = internalRenderTask.task;
666
- intentState.displayReadyCapability.promise.then(function (transparency) {
667
- if (_this4.pendingCleanup) {
668
- complete();
669
- return;
670
- }
671
- stats.time('Rendering');
672
- internalRenderTask.initializeGraphics(transparency);
673
- internalRenderTask.operatorListChanged();
674
- }).catch(complete);
675
- return renderTask;
676
- },
677
- getOperatorList: function PDFPageProxy_getOperatorList() {
678
- function operatorListChanged() {
679
- if (intentState.operatorList.lastChunk) {
680
- intentState.opListReadCapability.resolve(intentState.operatorList);
681
- var i = intentState.renderTasks.indexOf(opListTask);
682
- if (i >= 0) {
683
- intentState.renderTasks.splice(i, 1);
684
- }
685
- }
686
- }
687
- var renderingIntent = 'oplist';
688
- if (!this.intentStates[renderingIntent]) {
689
- this.intentStates[renderingIntent] = Object.create(null);
690
- }
691
- var intentState = this.intentStates[renderingIntent];
692
- var opListTask;
693
- if (!intentState.opListReadCapability) {
694
- opListTask = {};
695
- opListTask.operatorListChanged = operatorListChanged;
696
- intentState.receivingOperatorList = true;
697
- intentState.opListReadCapability = (0, _util.createPromiseCapability)();
698
- intentState.renderTasks = [];
699
- intentState.renderTasks.push(opListTask);
700
- intentState.operatorList = {
701
- fnArray: [],
702
- argsArray: [],
703
- lastChunk: false
704
- };
705
- this._stats.time('Page Request');
706
- this.transport.messageHandler.send('RenderPageRequest', {
707
- pageIndex: this.pageIndex,
708
- intent: renderingIntent
709
- });
710
- }
711
- return intentState.opListReadCapability.promise;
712
- },
713
- streamTextContent: function streamTextContent() {
714
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
715
-
716
- var TEXT_CONTENT_CHUNK_SIZE = 100;
717
- return this.transport.messageHandler.sendWithStream('GetTextContent', {
718
- pageIndex: this.pageNumber - 1,
719
- normalizeWhitespace: params.normalizeWhitespace === true,
720
- combineTextItems: params.disableCombineTextItems !== true
721
- }, {
722
- highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
723
- size: function size(textContent) {
724
- return textContent.items.length;
725
- }
726
- });
727
- },
491
+ get pageNumber() {
492
+ return this._pageIndex + 1;
493
+ }
728
494
 
729
- getTextContent: function PDFPageProxy_getTextContent(params) {
730
- params = params || {};
731
- var readableStream = this.streamTextContent(params);
732
- return new Promise(function (resolve, reject) {
733
- function pump() {
734
- reader.read().then(function (_ref) {
735
- var _textContent$items;
495
+ get rotate() {
496
+ return this._pageInfo.rotate;
497
+ }
736
498
 
737
- var value = _ref.value,
738
- done = _ref.done;
499
+ get ref() {
500
+ return this._pageInfo.ref;
501
+ }
739
502
 
740
- if (done) {
741
- resolve(textContent);
742
- return;
743
- }
744
- Object.assign(textContent.styles, value.styles);
745
- (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));
746
- pump();
747
- }, reject);
748
- }
749
- var reader = readableStream.getReader();
750
- var textContent = {
751
- items: [],
752
- styles: Object.create(null)
753
- };
754
- pump();
755
- });
756
- },
757
- _destroy: function PDFPageProxy_destroy() {
758
- this.destroyed = true;
759
- this.transport.pageCache[this.pageIndex] = null;
760
- var waitOn = [];
761
- Object.keys(this.intentStates).forEach(function (intent) {
762
- if (intent === 'oplist') {
763
- return;
764
- }
765
- var intentState = this.intentStates[intent];
766
- intentState.renderTasks.forEach(function (renderTask) {
767
- var renderCompleted = renderTask.capability.promise.catch(function () {});
768
- waitOn.push(renderCompleted);
769
- renderTask.cancel();
770
- });
771
- }, this);
772
- this.objs.clear();
773
- this.annotationsPromise = null;
774
- this.pendingCleanup = false;
775
- return Promise.all(waitOn);
776
- },
777
- cleanup: function cleanup() {
778
- var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
503
+ get userUnit() {
504
+ return this._pageInfo.userUnit;
505
+ }
779
506
 
780
- this.pendingCleanup = true;
781
- this._tryCleanup(resetStats);
782
- },
783
- _tryCleanup: function _tryCleanup() {
784
- var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
507
+ get view() {
508
+ return this._pageInfo.view;
509
+ }
785
510
 
786
- if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) {
787
- var intentState = this.intentStates[intent];
788
- return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList;
789
- }, this)) {
790
- return;
791
- }
792
- Object.keys(this.intentStates).forEach(function (intent) {
793
- delete this.intentStates[intent];
794
- }, this);
795
- this.objs.clear();
796
- this.annotationsPromise = null;
797
- if (resetStats && this._stats instanceof _dom_utils.StatTimer) {
798
- this._stats = new _dom_utils.StatTimer();
799
- }
800
- this.pendingCleanup = false;
801
- },
511
+ getViewport({
512
+ scale,
513
+ rotation = this.rotate,
514
+ offsetX = 0,
515
+ offsetY = 0,
516
+ dontFlip = false
517
+ } = {}) {
518
+ if (arguments.length > 1 || typeof arguments[0] === "number") {
519
+ throw new Error("PDFPageProxy.getViewport is called with obsolete arguments.");
520
+ }
521
+
522
+ return new _display_utils.PageViewport({
523
+ viewBox: this.view,
524
+ scale,
525
+ rotation,
526
+ offsetX,
527
+ offsetY,
528
+ dontFlip
529
+ });
530
+ }
802
531
 
803
- _startRenderPage: function PDFPageProxy_startRenderPage(transparency, intent) {
804
- var intentState = this.intentStates[intent];
805
- if (intentState.displayReadyCapability) {
806
- intentState.displayReadyCapability.resolve(transparency);
807
- }
808
- },
809
- _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) {
810
- var intentState = this.intentStates[intent];
811
- var i, ii;
812
- for (i = 0, ii = operatorListChunk.length; i < ii; i++) {
813
- intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
814
- intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
815
- }
816
- intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
817
- for (i = 0; i < intentState.renderTasks.length; i++) {
818
- intentState.renderTasks[i].operatorListChanged();
819
- }
820
- if (operatorListChunk.lastChunk) {
821
- intentState.receivingOperatorList = false;
822
- this._tryCleanup();
823
- }
824
- },
825
- get stats() {
826
- return this._stats instanceof _dom_utils.StatTimer ? this._stats : null;
532
+ getAnnotations({
533
+ intent = null
534
+ } = {}) {
535
+ if (!this.annotationsPromise || this.annotationsIntent !== intent) {
536
+ this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
537
+ this.annotationsIntent = intent;
827
538
  }
828
- };
829
- return PDFPageProxy;
830
- }();
831
539
 
832
- var LoopbackPort = function () {
833
- function LoopbackPort() {
834
- var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
540
+ return this.annotationsPromise;
541
+ }
835
542
 
836
- _classCallCheck(this, LoopbackPort);
543
+ render({
544
+ canvasContext,
545
+ viewport,
546
+ intent = "display",
547
+ enableWebGL = false,
548
+ renderInteractiveForms = false,
549
+ transform = null,
550
+ imageLayer = null,
551
+ canvasFactory = null,
552
+ background = null
553
+ }) {
554
+ if (this._stats) {
555
+ this._stats.time("Overall");
556
+ }
557
+
558
+ const renderingIntent = intent === "print" ? "print" : "display";
559
+ this.pendingCleanup = false;
837
560
 
838
- this._listeners = [];
839
- this._defer = defer;
840
- this._deferred = Promise.resolve(undefined);
841
- }
561
+ if (!this.intentStates[renderingIntent]) {
562
+ this.intentStates[renderingIntent] = Object.create(null);
563
+ }
842
564
 
843
- _createClass(LoopbackPort, [{
844
- key: 'postMessage',
845
- value: function postMessage(obj, transfers) {
846
- var _this5 = this;
565
+ const intentState = this.intentStates[renderingIntent];
847
566
 
848
- function cloneValue(value) {
849
- if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object' || value === null) {
850
- return value;
851
- }
852
- if (cloned.has(value)) {
853
- return cloned.get(value);
854
- }
855
- var result;
856
- var buffer;
857
- if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
858
- var transferable = transfers && transfers.includes(buffer);
859
- if (value === buffer) {
860
- result = value;
861
- } else if (transferable) {
862
- result = new value.constructor(buffer, value.byteOffset, value.byteLength);
863
- } else {
864
- result = new value.constructor(value);
865
- }
866
- cloned.set(value, result);
867
- return result;
868
- }
869
- result = Array.isArray(value) ? [] : {};
870
- cloned.set(value, result);
871
- for (var i in value) {
872
- var desc,
873
- p = value;
874
- while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
875
- p = Object.getPrototypeOf(p);
876
- }
877
- if (typeof desc.value === 'undefined' || typeof desc.value === 'function') {
878
- continue;
879
- }
880
- result[i] = cloneValue(desc.value);
567
+ if (intentState.streamReaderCancelTimeout) {
568
+ clearTimeout(intentState.streamReaderCancelTimeout);
569
+ intentState.streamReaderCancelTimeout = null;
570
+ }
571
+
572
+ const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
573
+ const webGLContext = new _webgl.WebGLContext({
574
+ enable: enableWebGL
575
+ });
576
+
577
+ if (!intentState.displayReadyCapability) {
578
+ intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
579
+ intentState.operatorList = {
580
+ fnArray: [],
581
+ argsArray: [],
582
+ lastChunk: false
583
+ };
584
+
585
+ if (this._stats) {
586
+ this._stats.time("Page Request");
587
+ }
588
+
589
+ this._pumpOperatorList({
590
+ pageIndex: this._pageIndex,
591
+ intent: renderingIntent,
592
+ renderInteractiveForms: renderInteractiveForms === true
593
+ });
594
+ }
595
+
596
+ const complete = error => {
597
+ const i = intentState.renderTasks.indexOf(internalRenderTask);
598
+
599
+ if (i >= 0) {
600
+ intentState.renderTasks.splice(i, 1);
601
+ }
602
+
603
+ if (this.cleanupAfterRender || renderingIntent === "print") {
604
+ this.pendingCleanup = true;
605
+ }
606
+
607
+ this._tryCleanup();
608
+
609
+ if (error) {
610
+ internalRenderTask.capability.reject(error);
611
+
612
+ this._abortOperatorList({
613
+ intentState,
614
+ reason: error
615
+ });
616
+ } else {
617
+ internalRenderTask.capability.resolve();
618
+ }
619
+
620
+ if (this._stats) {
621
+ this._stats.timeEnd("Rendering");
622
+
623
+ this._stats.timeEnd("Overall");
624
+ }
625
+ };
626
+
627
+ const internalRenderTask = new InternalRenderTask({
628
+ callback: complete,
629
+ params: {
630
+ canvasContext,
631
+ viewport,
632
+ transform,
633
+ imageLayer,
634
+ background
635
+ },
636
+ objs: this.objs,
637
+ commonObjs: this.commonObjs,
638
+ operatorList: intentState.operatorList,
639
+ pageIndex: this._pageIndex,
640
+ canvasFactory: canvasFactoryInstance,
641
+ webGLContext,
642
+ useRequestAnimationFrame: renderingIntent !== "print",
643
+ pdfBug: this._pdfBug
644
+ });
645
+
646
+ if (!intentState.renderTasks) {
647
+ intentState.renderTasks = [];
648
+ }
649
+
650
+ intentState.renderTasks.push(internalRenderTask);
651
+ const renderTask = internalRenderTask.task;
652
+ intentState.displayReadyCapability.promise.then(transparency => {
653
+ if (this.pendingCleanup) {
654
+ complete();
655
+ return;
656
+ }
657
+
658
+ if (this._stats) {
659
+ this._stats.time("Rendering");
660
+ }
661
+
662
+ internalRenderTask.initializeGraphics(transparency);
663
+ internalRenderTask.operatorListChanged();
664
+ }).catch(complete);
665
+ return renderTask;
666
+ }
667
+
668
+ getOperatorList() {
669
+ function operatorListChanged() {
670
+ if (intentState.operatorList.lastChunk) {
671
+ intentState.opListReadCapability.resolve(intentState.operatorList);
672
+ const i = intentState.renderTasks.indexOf(opListTask);
673
+
674
+ if (i >= 0) {
675
+ intentState.renderTasks.splice(i, 1);
881
676
  }
882
- return result;
883
677
  }
884
- if (!this._defer) {
885
- this._listeners.forEach(function (listener) {
886
- listener.call(this, { data: obj });
887
- }, this);
678
+ }
679
+
680
+ const renderingIntent = "oplist";
681
+
682
+ if (!this.intentStates[renderingIntent]) {
683
+ this.intentStates[renderingIntent] = Object.create(null);
684
+ }
685
+
686
+ const intentState = this.intentStates[renderingIntent];
687
+ let opListTask;
688
+
689
+ if (!intentState.opListReadCapability) {
690
+ opListTask = {};
691
+ opListTask.operatorListChanged = operatorListChanged;
692
+ intentState.opListReadCapability = (0, _util.createPromiseCapability)();
693
+ intentState.renderTasks = [];
694
+ intentState.renderTasks.push(opListTask);
695
+ intentState.operatorList = {
696
+ fnArray: [],
697
+ argsArray: [],
698
+ lastChunk: false
699
+ };
700
+
701
+ if (this._stats) {
702
+ this._stats.time("Page Request");
703
+ }
704
+
705
+ this._pumpOperatorList({
706
+ pageIndex: this._pageIndex,
707
+ intent: renderingIntent
708
+ });
709
+ }
710
+
711
+ return intentState.opListReadCapability.promise;
712
+ }
713
+
714
+ streamTextContent({
715
+ normalizeWhitespace = false,
716
+ disableCombineTextItems = false
717
+ } = {}) {
718
+ const TEXT_CONTENT_CHUNK_SIZE = 100;
719
+ return this._transport.messageHandler.sendWithStream("GetTextContent", {
720
+ pageIndex: this._pageIndex,
721
+ normalizeWhitespace: normalizeWhitespace === true,
722
+ combineTextItems: disableCombineTextItems !== true
723
+ }, {
724
+ highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
725
+
726
+ size(textContent) {
727
+ return textContent.items.length;
728
+ }
729
+
730
+ });
731
+ }
732
+
733
+ getTextContent(params = {}) {
734
+ const readableStream = this.streamTextContent(params);
735
+ return new Promise(function (resolve, reject) {
736
+ function pump() {
737
+ reader.read().then(function ({
738
+ value,
739
+ done
740
+ }) {
741
+ if (done) {
742
+ resolve(textContent);
743
+ return;
744
+ }
745
+
746
+ Object.assign(textContent.styles, value.styles);
747
+ textContent.items.push(...value.items);
748
+ pump();
749
+ }, reject);
750
+ }
751
+
752
+ const reader = readableStream.getReader();
753
+ const textContent = {
754
+ items: [],
755
+ styles: Object.create(null)
756
+ };
757
+ pump();
758
+ });
759
+ }
760
+
761
+ _destroy() {
762
+ this.destroyed = true;
763
+ this._transport.pageCache[this._pageIndex] = null;
764
+ const waitOn = [];
765
+ Object.keys(this.intentStates).forEach(intent => {
766
+ const intentState = this.intentStates[intent];
767
+
768
+ this._abortOperatorList({
769
+ intentState,
770
+ reason: new Error("Page was destroyed."),
771
+ force: true
772
+ });
773
+
774
+ if (intent === "oplist") {
888
775
  return;
889
776
  }
890
- var cloned = new WeakMap();
891
- var e = { data: cloneValue(obj) };
892
- this._deferred.then(function () {
893
- _this5._listeners.forEach(function (listener) {
894
- listener.call(this, e);
895
- }, _this5);
777
+
778
+ intentState.renderTasks.forEach(function (renderTask) {
779
+ const renderCompleted = renderTask.capability.promise.catch(function () {});
780
+ waitOn.push(renderCompleted);
781
+ renderTask.cancel();
896
782
  });
783
+ });
784
+ this.objs.clear();
785
+ this.annotationsPromise = null;
786
+ this.pendingCleanup = false;
787
+ return Promise.all(waitOn);
788
+ }
789
+
790
+ cleanup(resetStats = false) {
791
+ this.pendingCleanup = true;
792
+ return this._tryCleanup(resetStats);
793
+ }
794
+
795
+ _tryCleanup(resetStats = false) {
796
+ if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {
797
+ const intentState = this.intentStates[intent];
798
+ return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
799
+ })) {
800
+ return false;
897
801
  }
898
- }, {
899
- key: 'addEventListener',
900
- value: function addEventListener(name, listener) {
901
- this._listeners.push(listener);
802
+
803
+ Object.keys(this.intentStates).forEach(intent => {
804
+ delete this.intentStates[intent];
805
+ });
806
+ this.objs.clear();
807
+ this.annotationsPromise = null;
808
+
809
+ if (resetStats && this._stats) {
810
+ this._stats = new _display_utils.StatTimer();
902
811
  }
903
- }, {
904
- key: 'removeEventListener',
905
- value: function removeEventListener(name, listener) {
906
- var i = this._listeners.indexOf(listener);
907
- this._listeners.splice(i, 1);
812
+
813
+ this.pendingCleanup = false;
814
+ return true;
815
+ }
816
+
817
+ _startRenderPage(transparency, intent) {
818
+ const intentState = this.intentStates[intent];
819
+
820
+ if (!intentState) {
821
+ return;
908
822
  }
909
- }, {
910
- key: 'terminate',
911
- value: function terminate() {
912
- this._listeners = [];
823
+
824
+ if (this._stats) {
825
+ this._stats.timeEnd("Page Request");
913
826
  }
914
- }]);
915
827
 
916
- return LoopbackPort;
917
- }();
828
+ if (intentState.displayReadyCapability) {
829
+ intentState.displayReadyCapability.resolve(transparency);
830
+ }
831
+ }
832
+
833
+ _renderPageChunk(operatorListChunk, intentState) {
834
+ for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
835
+ intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
836
+ intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
837
+ }
838
+
839
+ intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
840
+
841
+ for (let i = 0; i < intentState.renderTasks.length; i++) {
842
+ intentState.renderTasks[i].operatorListChanged();
843
+ }
844
+
845
+ if (operatorListChunk.lastChunk) {
846
+ this._tryCleanup();
847
+ }
848
+ }
849
+
850
+ _pumpOperatorList(args) {
851
+ (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.');
852
+
853
+ const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args);
854
+
855
+ const reader = readableStream.getReader();
856
+ const intentState = this.intentStates[args.intent];
857
+ intentState.streamReader = reader;
858
+
859
+ const pump = () => {
860
+ reader.read().then(({
861
+ value,
862
+ done
863
+ }) => {
864
+ if (done) {
865
+ intentState.streamReader = null;
866
+ return;
867
+ }
868
+
869
+ if (this._transport.destroyed) {
870
+ return;
871
+ }
872
+
873
+ this._renderPageChunk(value, intentState);
874
+
875
+ pump();
876
+ }, reason => {
877
+ intentState.streamReader = null;
878
+
879
+ if (this._transport.destroyed) {
880
+ return;
881
+ }
882
+
883
+ if (intentState.operatorList) {
884
+ intentState.operatorList.lastChunk = true;
885
+
886
+ for (let i = 0; i < intentState.renderTasks.length; i++) {
887
+ intentState.renderTasks[i].operatorListChanged();
888
+ }
889
+
890
+ this._tryCleanup();
891
+ }
892
+
893
+ if (intentState.displayReadyCapability) {
894
+ intentState.displayReadyCapability.reject(reason);
895
+ } else if (intentState.opListReadCapability) {
896
+ intentState.opListReadCapability.reject(reason);
897
+ } else {
898
+ throw reason;
899
+ }
900
+ });
901
+ };
902
+
903
+ pump();
904
+ }
905
+
906
+ _abortOperatorList({
907
+ intentState,
908
+ reason,
909
+ force = false
910
+ }) {
911
+ (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.');
912
+
913
+ if (!intentState.streamReader) {
914
+ return;
915
+ }
916
+
917
+ if (!force) {
918
+ if (intentState.renderTasks.length !== 0) {
919
+ return;
920
+ }
921
+
922
+ if (reason instanceof _display_utils.RenderingCancelledException) {
923
+ intentState.streamReaderCancelTimeout = setTimeout(() => {
924
+ this._abortOperatorList({
925
+ intentState,
926
+ reason,
927
+ force: true
928
+ });
929
+
930
+ intentState.streamReaderCancelTimeout = null;
931
+ }, RENDERING_CANCELLED_TIMEOUT);
932
+ return;
933
+ }
934
+ }
935
+
936
+ intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
937
+ intentState.streamReader = null;
938
+
939
+ if (this._transport.destroyed) {
940
+ return;
941
+ }
942
+
943
+ Object.keys(this.intentStates).some(intent => {
944
+ if (this.intentStates[intent] === intentState) {
945
+ delete this.intentStates[intent];
946
+ return true;
947
+ }
948
+
949
+ return false;
950
+ });
951
+ this.cleanup();
952
+ }
953
+
954
+ get stats() {
955
+ return this._stats;
956
+ }
957
+
958
+ }
959
+
960
+ exports.PDFPageProxy = PDFPageProxy;
961
+
962
+ class LoopbackPort {
963
+ constructor(defer = true) {
964
+ this._listeners = [];
965
+ this._defer = defer;
966
+ this._deferred = Promise.resolve(undefined);
967
+ }
968
+
969
+ postMessage(obj, transfers) {
970
+ function cloneValue(value) {
971
+ if (typeof value !== "object" || value === null) {
972
+ return value;
973
+ }
974
+
975
+ if (cloned.has(value)) {
976
+ return cloned.get(value);
977
+ }
978
+
979
+ let buffer, result;
980
+
981
+ if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
982
+ const transferable = transfers && transfers.includes(buffer);
983
+
984
+ if (transferable) {
985
+ result = new value.constructor(buffer, value.byteOffset, value.byteLength);
986
+ } else {
987
+ result = new value.constructor(value);
988
+ }
989
+
990
+ cloned.set(value, result);
991
+ return result;
992
+ }
993
+
994
+ result = Array.isArray(value) ? [] : {};
995
+ cloned.set(value, result);
996
+
997
+ for (const i in value) {
998
+ let desc,
999
+ p = value;
1000
+
1001
+ while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
1002
+ p = Object.getPrototypeOf(p);
1003
+ }
1004
+
1005
+ if (typeof desc.value === "undefined") {
1006
+ continue;
1007
+ }
1008
+
1009
+ if (typeof desc.value === "function") {
1010
+ if (value.hasOwnProperty && value.hasOwnProperty(i)) {
1011
+ throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
1012
+ }
1013
+
1014
+ continue;
1015
+ }
1016
+
1017
+ result[i] = cloneValue(desc.value);
1018
+ }
1019
+
1020
+ return result;
1021
+ }
1022
+
1023
+ if (!this._defer) {
1024
+ this._listeners.forEach(listener => {
1025
+ listener.call(this, {
1026
+ data: obj
1027
+ });
1028
+ });
1029
+
1030
+ return;
1031
+ }
1032
+
1033
+ const cloned = new WeakMap();
1034
+ const e = {
1035
+ data: cloneValue(obj)
1036
+ };
1037
+
1038
+ this._deferred.then(() => {
1039
+ this._listeners.forEach(listener => {
1040
+ listener.call(this, e);
1041
+ });
1042
+ });
1043
+ }
1044
+
1045
+ addEventListener(name, listener) {
1046
+ this._listeners.push(listener);
1047
+ }
1048
+
1049
+ removeEventListener(name, listener) {
1050
+ const i = this._listeners.indexOf(listener);
1051
+
1052
+ this._listeners.splice(i, 1);
1053
+ }
1054
+
1055
+ terminate() {
1056
+ this._listeners.length = 0;
1057
+ }
1058
+
1059
+ }
1060
+
1061
+ exports.LoopbackPort = LoopbackPort;
1062
+
1063
+ const PDFWorker = function PDFWorkerClosure() {
1064
+ const pdfWorkerPorts = new WeakMap();
1065
+ let isWorkerDisabled = false;
1066
+ let fallbackWorkerSrc;
1067
+ let nextFakeWorkerId = 0;
1068
+ let fakeWorkerCapability;
1069
+
1070
+ if (_is_node.isNodeJS && typeof require === "function") {
1071
+ isWorkerDisabled = true;
1072
+ fallbackWorkerSrc = "../pdf.worker.js";
1073
+ } else if (typeof document === "object" && "currentScript" in document) {
1074
+ const pdfjsFilePath = document.currentScript && document.currentScript.src;
1075
+
1076
+ if (pdfjsFilePath) {
1077
+ fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
1078
+ }
1079
+ }
918
1080
 
919
- var PDFWorker = function PDFWorkerClosure() {
920
- var nextFakeWorkerId = 0;
921
1081
  function getWorkerSrc() {
922
1082
  if (_worker_options.GlobalWorkerOptions.workerSrc) {
923
1083
  return _worker_options.GlobalWorkerOptions.workerSrc;
924
1084
  }
925
- if (typeof fallbackWorkerSrc !== 'undefined') {
1085
+
1086
+ if (typeof fallbackWorkerSrc !== "undefined") {
1087
+ if (!_is_node.isNodeJS) {
1088
+ (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
1089
+ }
1090
+
926
1091
  return fallbackWorkerSrc;
927
1092
  }
1093
+
928
1094
  throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
929
1095
  }
1096
+
930
1097
  function getMainThreadWorkerMessageHandler() {
1098
+ let mainWorkerMessageHandler;
1099
+
931
1100
  try {
932
- if (typeof window !== 'undefined') {
933
- return window.pdfjsWorker && window.pdfjsWorker.WorkerMessageHandler;
934
- }
1101
+ mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
935
1102
  } catch (ex) {}
936
- return null;
1103
+
1104
+ return mainWorkerMessageHandler || null;
937
1105
  }
938
- var fakeWorkerFilesLoadedCapability = void 0;
1106
+
939
1107
  function setupFakeWorkerGlobal() {
940
- if (fakeWorkerFilesLoadedCapability) {
941
- return fakeWorkerFilesLoadedCapability.promise;
942
- }
943
- fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)();
944
- var mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
945
- if (mainWorkerMessageHandler) {
946
- fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler);
947
- return fakeWorkerFilesLoadedCapability.promise;
948
- }
949
- var loader = fakeWorkerFilesLoader || function () {
950
- return (0, _dom_utils.loadScript)(getWorkerSrc()).then(function () {
951
- return window.pdfjsWorker.WorkerMessageHandler;
952
- });
1108
+ if (fakeWorkerCapability) {
1109
+ return fakeWorkerCapability.promise;
1110
+ }
1111
+
1112
+ fakeWorkerCapability = (0, _util.createPromiseCapability)();
1113
+
1114
+ const loader = async function () {
1115
+ const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
1116
+
1117
+ if (mainWorkerMessageHandler) {
1118
+ return mainWorkerMessageHandler;
1119
+ }
1120
+
1121
+ if (_is_node.isNodeJS && typeof require === "function") {
1122
+ const worker = eval("require")(getWorkerSrc());
1123
+ return worker.WorkerMessageHandler;
1124
+ }
1125
+
1126
+ await (0, _display_utils.loadScript)(getWorkerSrc());
1127
+ return window.pdfjsWorker.WorkerMessageHandler;
953
1128
  };
954
- loader().then(fakeWorkerFilesLoadedCapability.resolve, fakeWorkerFilesLoadedCapability.reject);
955
- return fakeWorkerFilesLoadedCapability.promise;
1129
+
1130
+ loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
1131
+ return fakeWorkerCapability.promise;
956
1132
  }
1133
+
957
1134
  function createCDNWrapper(url) {
958
- var wrapper = 'importScripts(\'' + url + '\');';
959
- return _util.URL.createObjectURL(new Blob([wrapper]));
960
- }
961
- var pdfWorkerPorts = new WeakMap();
962
- function PDFWorker() {
963
- var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
964
- _ref2$name = _ref2.name,
965
- name = _ref2$name === undefined ? null : _ref2$name,
966
- _ref2$port = _ref2.port,
967
- port = _ref2$port === undefined ? null : _ref2$port,
968
- _ref2$postMessageTran = _ref2.postMessageTransfers,
969
- postMessageTransfers = _ref2$postMessageTran === undefined ? true : _ref2$postMessageTran,
970
- _ref2$verbosity = _ref2.verbosity,
971
- verbosity = _ref2$verbosity === undefined ? (0, _util.getVerbosityLevel)() : _ref2$verbosity;
972
-
973
- if (port && pdfWorkerPorts.has(port)) {
974
- throw new Error('Cannot use more than one PDFWorker per port');
975
- }
976
- this.name = name;
977
- this.destroyed = false;
978
- this.postMessageTransfers = postMessageTransfers !== false;
979
- this.verbosity = verbosity;
980
- this._readyCapability = (0, _util.createPromiseCapability)();
981
- this._port = null;
982
- this._webWorker = null;
983
- this._messageHandler = null;
984
- if (port) {
985
- pdfWorkerPorts.set(port, this);
986
- this._initializeFromPort(port);
987
- return;
988
- }
989
- this._initialize();
1135
+ const wrapper = "importScripts('" + url + "');";
1136
+ return URL.createObjectURL(new Blob([wrapper]));
990
1137
  }
991
- PDFWorker.prototype = {
1138
+
1139
+ class PDFWorker {
1140
+ constructor({
1141
+ name = null,
1142
+ port = null,
1143
+ verbosity = (0, _util.getVerbosityLevel)()
1144
+ } = {}) {
1145
+ if (port && pdfWorkerPorts.has(port)) {
1146
+ throw new Error("Cannot use more than one PDFWorker per port");
1147
+ }
1148
+
1149
+ this.name = name;
1150
+ this.destroyed = false;
1151
+ this.postMessageTransfers = true;
1152
+ this.verbosity = verbosity;
1153
+ this._readyCapability = (0, _util.createPromiseCapability)();
1154
+ this._port = null;
1155
+ this._webWorker = null;
1156
+ this._messageHandler = null;
1157
+
1158
+ if (port) {
1159
+ pdfWorkerPorts.set(port, this);
1160
+
1161
+ this._initializeFromPort(port);
1162
+
1163
+ return;
1164
+ }
1165
+
1166
+ this._initialize();
1167
+ }
1168
+
992
1169
  get promise() {
993
1170
  return this._readyCapability.promise;
994
- },
1171
+ }
1172
+
995
1173
  get port() {
996
1174
  return this._port;
997
- },
1175
+ }
1176
+
998
1177
  get messageHandler() {
999
1178
  return this._messageHandler;
1000
- },
1001
- _initializeFromPort: function PDFWorker_initializeFromPort(port) {
1179
+ }
1180
+
1181
+ _initializeFromPort(port) {
1002
1182
  this._port = port;
1003
- this._messageHandler = new _message_handler.MessageHandler('main', 'worker', port);
1004
- this._messageHandler.on('ready', function () {});
1183
+ this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
1184
+
1185
+ this._messageHandler.on("ready", function () {});
1186
+
1005
1187
  this._readyCapability.resolve();
1006
- },
1007
- _initialize: function PDFWorker_initialize() {
1008
- var _this6 = this;
1188
+ }
1189
+
1190
+ _initialize() {
1191
+ if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
1192
+ let workerSrc = getWorkerSrc();
1009
1193
 
1010
- if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
1011
- var workerSrc = getWorkerSrc();
1012
1194
  try {
1013
1195
  if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
1014
- workerSrc = createCDNWrapper(new _util.URL(workerSrc, window.location).href);
1196
+ workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
1015
1197
  }
1016
- var worker = new Worker(workerSrc);
1017
- var messageHandler = new _message_handler.MessageHandler('main', 'worker', worker);
1018
- var terminateEarly = function terminateEarly() {
1019
- worker.removeEventListener('error', onWorkerError);
1198
+
1199
+ const worker = new Worker(workerSrc);
1200
+ const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
1201
+
1202
+ const terminateEarly = () => {
1203
+ worker.removeEventListener("error", onWorkerError);
1020
1204
  messageHandler.destroy();
1021
1205
  worker.terminate();
1022
- if (_this6.destroyed) {
1023
- _this6._readyCapability.reject(new Error('Worker was destroyed'));
1206
+
1207
+ if (this.destroyed) {
1208
+ this._readyCapability.reject(new Error("Worker was destroyed"));
1024
1209
  } else {
1025
- _this6._setupFakeWorker();
1210
+ this._setupFakeWorker();
1026
1211
  }
1027
1212
  };
1028
- var onWorkerError = function onWorkerError() {
1029
- if (!_this6._webWorker) {
1213
+
1214
+ const onWorkerError = () => {
1215
+ if (!this._webWorker) {
1030
1216
  terminateEarly();
1031
1217
  }
1032
1218
  };
1033
- worker.addEventListener('error', onWorkerError);
1034
- messageHandler.on('test', function (data) {
1035
- worker.removeEventListener('error', onWorkerError);
1036
- if (_this6.destroyed) {
1219
+
1220
+ worker.addEventListener("error", onWorkerError);
1221
+ messageHandler.on("test", data => {
1222
+ worker.removeEventListener("error", onWorkerError);
1223
+
1224
+ if (this.destroyed) {
1037
1225
  terminateEarly();
1038
1226
  return;
1039
1227
  }
1040
- if (data && data.supportTypedArray) {
1041
- _this6._messageHandler = messageHandler;
1042
- _this6._port = worker;
1043
- _this6._webWorker = worker;
1228
+
1229
+ if (data) {
1230
+ this._messageHandler = messageHandler;
1231
+ this._port = worker;
1232
+ this._webWorker = worker;
1233
+
1044
1234
  if (!data.supportTransfers) {
1045
- _this6.postMessageTransfers = false;
1235
+ this.postMessageTransfers = false;
1046
1236
  }
1047
- _this6._readyCapability.resolve();
1048
- messageHandler.send('configure', { verbosity: _this6.verbosity });
1237
+
1238
+ this._readyCapability.resolve();
1239
+
1240
+ messageHandler.send("configure", {
1241
+ verbosity: this.verbosity
1242
+ });
1049
1243
  } else {
1050
- _this6._setupFakeWorker();
1244
+ this._setupFakeWorker();
1245
+
1051
1246
  messageHandler.destroy();
1052
1247
  worker.terminate();
1053
1248
  }
1054
1249
  });
1055
- messageHandler.on('ready', function (data) {
1056
- worker.removeEventListener('error', onWorkerError);
1057
- if (_this6.destroyed) {
1250
+ messageHandler.on("ready", data => {
1251
+ worker.removeEventListener("error", onWorkerError);
1252
+
1253
+ if (this.destroyed) {
1058
1254
  terminateEarly();
1059
1255
  return;
1060
1256
  }
1257
+
1061
1258
  try {
1062
1259
  sendTest();
1063
1260
  } catch (e) {
1064
- _this6._setupFakeWorker();
1261
+ this._setupFakeWorker();
1065
1262
  }
1066
1263
  });
1067
- var sendTest = function sendTest() {
1068
- var testObj = new Uint8Array([_this6.postMessageTransfers ? 255 : 0]);
1264
+
1265
+ const sendTest = () => {
1266
+ const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);
1267
+
1069
1268
  try {
1070
- messageHandler.send('test', testObj, [testObj.buffer]);
1269
+ messageHandler.send("test", testObj, [testObj.buffer]);
1071
1270
  } catch (ex) {
1072
- (0, _util.info)('Cannot use postMessage transfers');
1271
+ (0, _util.warn)("Cannot use postMessage transfers.");
1073
1272
  testObj[0] = 0;
1074
- messageHandler.send('test', testObj);
1273
+ messageHandler.send("test", testObj);
1075
1274
  }
1076
1275
  };
1276
+
1077
1277
  sendTest();
1078
1278
  return;
1079
1279
  } catch (e) {
1080
- (0, _util.info)('The worker has been disabled.');
1280
+ (0, _util.info)("The worker has been disabled.");
1081
1281
  }
1082
1282
  }
1283
+
1083
1284
  this._setupFakeWorker();
1084
- },
1085
- _setupFakeWorker: function PDFWorker_setupFakeWorker() {
1086
- var _this7 = this;
1285
+ }
1087
1286
 
1287
+ _setupFakeWorker() {
1088
1288
  if (!isWorkerDisabled) {
1089
- (0, _util.warn)('Setting up fake worker.');
1289
+ (0, _util.warn)("Setting up fake worker.");
1090
1290
  isWorkerDisabled = true;
1091
1291
  }
1092
- setupFakeWorkerGlobal().then(function (WorkerMessageHandler) {
1093
- if (_this7.destroyed) {
1094
- _this7._readyCapability.reject(new Error('Worker was destroyed'));
1292
+
1293
+ setupFakeWorkerGlobal().then(WorkerMessageHandler => {
1294
+ if (this.destroyed) {
1295
+ this._readyCapability.reject(new Error("Worker was destroyed"));
1296
+
1095
1297
  return;
1096
1298
  }
1097
- var port = new LoopbackPort();
1098
- _this7._port = port;
1099
- var id = 'fake' + nextFakeWorkerId++;
1100
- var workerHandler = new _message_handler.MessageHandler(id + '_worker', id, port);
1299
+
1300
+ const port = new LoopbackPort();
1301
+ this._port = port;
1302
+ const id = "fake" + nextFakeWorkerId++;
1303
+ const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
1101
1304
  WorkerMessageHandler.setup(workerHandler, port);
1102
- var messageHandler = new _message_handler.MessageHandler(id, id + '_worker', port);
1103
- _this7._messageHandler = messageHandler;
1104
- _this7._readyCapability.resolve();
1105
- }).catch(function (reason) {
1106
- _this7._readyCapability.reject(new Error('Setting up fake worker failed: "' + reason.message + '".'));
1305
+ const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
1306
+ this._messageHandler = messageHandler;
1307
+
1308
+ this._readyCapability.resolve();
1309
+
1310
+ messageHandler.send("configure", {
1311
+ verbosity: this.verbosity
1312
+ });
1313
+ }).catch(reason => {
1314
+ this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
1107
1315
  });
1108
- },
1109
- destroy: function PDFWorker_destroy() {
1316
+ }
1317
+
1318
+ destroy() {
1110
1319
  this.destroyed = true;
1320
+
1111
1321
  if (this._webWorker) {
1112
1322
  this._webWorker.terminate();
1323
+
1113
1324
  this._webWorker = null;
1114
1325
  }
1326
+
1115
1327
  pdfWorkerPorts.delete(this._port);
1116
1328
  this._port = null;
1329
+
1117
1330
  if (this._messageHandler) {
1118
1331
  this._messageHandler.destroy();
1332
+
1119
1333
  this._messageHandler = null;
1120
1334
  }
1121
1335
  }
1122
- };
1123
- PDFWorker.fromPort = function (params) {
1124
- if (!params || !params.port) {
1125
- throw new Error('PDFWorker.fromPort - invalid method signature.');
1336
+
1337
+ static fromPort(params) {
1338
+ if (!params || !params.port) {
1339
+ throw new Error("PDFWorker.fromPort - invalid method signature.");
1340
+ }
1341
+
1342
+ if (pdfWorkerPorts.has(params.port)) {
1343
+ return pdfWorkerPorts.get(params.port);
1344
+ }
1345
+
1346
+ return new PDFWorker(params);
1126
1347
  }
1127
- if (pdfWorkerPorts.has(params.port)) {
1128
- return pdfWorkerPorts.get(params.port);
1348
+
1349
+ static getWorkerSrc() {
1350
+ return getWorkerSrc();
1129
1351
  }
1130
- return new PDFWorker(params);
1131
- };
1132
- PDFWorker.getWorkerSrc = function () {
1133
- return getWorkerSrc();
1134
- };
1352
+
1353
+ }
1354
+
1135
1355
  return PDFWorker;
1136
1356
  }();
1137
1357
 
1138
- var WorkerTransport = function () {
1139
- function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
1140
- _classCallCheck(this, WorkerTransport);
1358
+ exports.PDFWorker = PDFWorker;
1141
1359
 
1360
+ class WorkerTransport {
1361
+ constructor(messageHandler, loadingTask, networkStream, params) {
1142
1362
  this.messageHandler = messageHandler;
1143
1363
  this.loadingTask = loadingTask;
1144
1364
  this.commonObjs = new PDFObjects();
1145
- this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
1365
+ this.fontLoader = new _font_loader.FontLoader({
1366
+ docId: loadingTask.docId,
1367
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
1368
+ });
1146
1369
  this._params = params;
1147
1370
  this.CMapReaderFactory = new params.CMapReaderFactory({
1148
1371
  baseUrl: params.cMapUrl,
@@ -1160,731 +1383,824 @@ var WorkerTransport = function () {
1160
1383
  this.setupMessageHandler();
1161
1384
  }
1162
1385
 
1163
- _createClass(WorkerTransport, [{
1164
- key: 'destroy',
1165
- value: function destroy() {
1166
- var _this8 = this;
1386
+ destroy() {
1387
+ if (this.destroyCapability) {
1388
+ return this.destroyCapability.promise;
1389
+ }
1390
+
1391
+ this.destroyed = true;
1392
+ this.destroyCapability = (0, _util.createPromiseCapability)();
1393
+
1394
+ if (this._passwordCapability) {
1395
+ this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
1396
+ }
1167
1397
 
1168
- if (this.destroyCapability) {
1169
- return this.destroyCapability.promise;
1398
+ const waitOn = [];
1399
+ this.pageCache.forEach(function (page) {
1400
+ if (page) {
1401
+ waitOn.push(page._destroy());
1170
1402
  }
1171
- this.destroyed = true;
1172
- this.destroyCapability = (0, _util.createPromiseCapability)();
1173
- if (this._passwordCapability) {
1174
- this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
1403
+ });
1404
+ this.pageCache.length = 0;
1405
+ this.pagePromises.length = 0;
1406
+ const terminated = this.messageHandler.sendWithPromise("Terminate", null);
1407
+ waitOn.push(terminated);
1408
+ Promise.all(waitOn).then(() => {
1409
+ this.fontLoader.clear();
1410
+
1411
+ if (this._networkStream) {
1412
+ this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
1175
1413
  }
1176
- var waitOn = [];
1177
- this.pageCache.forEach(function (page) {
1178
- if (page) {
1179
- waitOn.push(page._destroy());
1180
- }
1181
- });
1182
- this.pageCache = [];
1183
- this.pagePromises = [];
1184
- var terminated = this.messageHandler.sendWithPromise('Terminate', null);
1185
- waitOn.push(terminated);
1186
- Promise.all(waitOn).then(function () {
1187
- _this8.fontLoader.clear();
1188
- if (_this8._networkStream) {
1189
- _this8._networkStream.cancelAllRequests();
1190
- }
1191
- if (_this8.messageHandler) {
1192
- _this8.messageHandler.destroy();
1193
- _this8.messageHandler = null;
1194
- }
1195
- _this8.destroyCapability.resolve();
1196
- }, this.destroyCapability.reject);
1197
- return this.destroyCapability.promise;
1198
- }
1199
- }, {
1200
- key: 'setupMessageHandler',
1201
- value: function setupMessageHandler() {
1202
- var messageHandler = this.messageHandler,
1203
- loadingTask = this.loadingTask;
1204
-
1205
- messageHandler.on('GetReader', function (data, sink) {
1206
- var _this9 = this;
1207
-
1208
- (0, _util.assert)(this._networkStream);
1209
- this._fullReader = this._networkStream.getFullReader();
1210
- this._fullReader.onProgress = function (evt) {
1211
- _this9._lastProgress = {
1212
- loaded: evt.loaded,
1213
- total: evt.total
1214
- };
1414
+
1415
+ if (this.messageHandler) {
1416
+ this.messageHandler.destroy();
1417
+ this.messageHandler = null;
1418
+ }
1419
+
1420
+ this.destroyCapability.resolve();
1421
+ }, this.destroyCapability.reject);
1422
+ return this.destroyCapability.promise;
1423
+ }
1424
+
1425
+ setupMessageHandler() {
1426
+ const {
1427
+ messageHandler,
1428
+ loadingTask
1429
+ } = this;
1430
+ messageHandler.on("GetReader", (data, sink) => {
1431
+ (0, _util.assert)(this._networkStream);
1432
+ this._fullReader = this._networkStream.getFullReader();
1433
+
1434
+ this._fullReader.onProgress = evt => {
1435
+ this._lastProgress = {
1436
+ loaded: evt.loaded,
1437
+ total: evt.total
1215
1438
  };
1216
- sink.onPull = function () {
1217
- _this9._fullReader.read().then(function (_ref3) {
1218
- var value = _ref3.value,
1219
- done = _ref3.done;
1439
+ };
1220
1440
 
1221
- if (done) {
1222
- sink.close();
1223
- return;
1441
+ sink.onPull = () => {
1442
+ this._fullReader.read().then(function ({
1443
+ value,
1444
+ done
1445
+ }) {
1446
+ if (done) {
1447
+ sink.close();
1448
+ return;
1449
+ }
1450
+
1451
+ (0, _util.assert)((0, _util.isArrayBuffer)(value));
1452
+ sink.enqueue(new Uint8Array(value), 1, [value]);
1453
+ }).catch(reason => {
1454
+ sink.error(reason);
1455
+ });
1456
+ };
1457
+
1458
+ sink.onCancel = reason => {
1459
+ this._fullReader.cancel(reason);
1460
+ };
1461
+ });
1462
+ messageHandler.on("ReaderHeadersReady", data => {
1463
+ const headersCapability = (0, _util.createPromiseCapability)();
1464
+ const fullReader = this._fullReader;
1465
+ fullReader.headersReady.then(() => {
1466
+ if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
1467
+ if (this._lastProgress && loadingTask.onProgress) {
1468
+ loadingTask.onProgress(this._lastProgress);
1469
+ }
1470
+
1471
+ fullReader.onProgress = evt => {
1472
+ if (loadingTask.onProgress) {
1473
+ loadingTask.onProgress({
1474
+ loaded: evt.loaded,
1475
+ total: evt.total
1476
+ });
1224
1477
  }
1225
- (0, _util.assert)((0, _util.isArrayBuffer)(value));
1226
- sink.enqueue(new Uint8Array(value), 1, [value]);
1227
- }).catch(function (reason) {
1228
- sink.error(reason);
1478
+ };
1479
+ }
1480
+
1481
+ headersCapability.resolve({
1482
+ isStreamingSupported: fullReader.isStreamingSupported,
1483
+ isRangeSupported: fullReader.isRangeSupported,
1484
+ contentLength: fullReader.contentLength
1485
+ });
1486
+ }, headersCapability.reject);
1487
+ return headersCapability.promise;
1488
+ });
1489
+ messageHandler.on("GetRangeReader", (data, sink) => {
1490
+ (0, _util.assert)(this._networkStream);
1491
+
1492
+ const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
1493
+
1494
+ if (!rangeReader) {
1495
+ sink.close();
1496
+ return;
1497
+ }
1498
+
1499
+ sink.onPull = () => {
1500
+ rangeReader.read().then(function ({
1501
+ value,
1502
+ done
1503
+ }) {
1504
+ if (done) {
1505
+ sink.close();
1506
+ return;
1507
+ }
1508
+
1509
+ (0, _util.assert)((0, _util.isArrayBuffer)(value));
1510
+ sink.enqueue(new Uint8Array(value), 1, [value]);
1511
+ }).catch(reason => {
1512
+ sink.error(reason);
1513
+ });
1514
+ };
1515
+
1516
+ sink.onCancel = reason => {
1517
+ rangeReader.cancel(reason);
1518
+ };
1519
+ });
1520
+ messageHandler.on("GetDoc", ({
1521
+ pdfInfo
1522
+ }) => {
1523
+ this._numPages = pdfInfo.numPages;
1524
+
1525
+ loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
1526
+ });
1527
+ messageHandler.on("DocException", function (ex) {
1528
+ let reason;
1529
+
1530
+ switch (ex.name) {
1531
+ case "PasswordException":
1532
+ reason = new _util.PasswordException(ex.message, ex.code);
1533
+ break;
1534
+
1535
+ case "InvalidPDFException":
1536
+ reason = new _util.InvalidPDFException(ex.message);
1537
+ break;
1538
+
1539
+ case "MissingPDFException":
1540
+ reason = new _util.MissingPDFException(ex.message);
1541
+ break;
1542
+
1543
+ case "UnexpectedResponseException":
1544
+ reason = new _util.UnexpectedResponseException(ex.message, ex.status);
1545
+ break;
1546
+
1547
+ case "UnknownErrorException":
1548
+ reason = new _util.UnknownErrorException(ex.message, ex.details);
1549
+ break;
1550
+ }
1551
+
1552
+ loadingTask._capability.reject(reason);
1553
+ });
1554
+ messageHandler.on("PasswordRequest", exception => {
1555
+ this._passwordCapability = (0, _util.createPromiseCapability)();
1556
+
1557
+ if (loadingTask.onPassword) {
1558
+ const updatePassword = password => {
1559
+ this._passwordCapability.resolve({
1560
+ password
1229
1561
  });
1230
1562
  };
1231
- sink.onCancel = function (reason) {
1232
- _this9._fullReader.cancel(reason);
1233
- };
1234
- }, this);
1235
- messageHandler.on('ReaderHeadersReady', function (data) {
1236
- var _this10 = this;
1237
-
1238
- var headersCapability = (0, _util.createPromiseCapability)();
1239
- var fullReader = this._fullReader;
1240
- fullReader.headersReady.then(function () {
1241
- if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
1242
- if (_this10._lastProgress && loadingTask.onProgress) {
1243
- loadingTask.onProgress(_this10._lastProgress);
1563
+
1564
+ try {
1565
+ loadingTask.onPassword(updatePassword, exception.code);
1566
+ } catch (ex) {
1567
+ this._passwordCapability.reject(ex);
1568
+ }
1569
+ } else {
1570
+ this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
1571
+ }
1572
+
1573
+ return this._passwordCapability.promise;
1574
+ });
1575
+ messageHandler.on("DataLoaded", data => {
1576
+ if (loadingTask.onProgress) {
1577
+ loadingTask.onProgress({
1578
+ loaded: data.length,
1579
+ total: data.length
1580
+ });
1581
+ }
1582
+
1583
+ this.downloadInfoCapability.resolve(data);
1584
+ });
1585
+ messageHandler.on("StartRenderPage", data => {
1586
+ if (this.destroyed) {
1587
+ return;
1588
+ }
1589
+
1590
+ const page = this.pageCache[data.pageIndex];
1591
+
1592
+ page._startRenderPage(data.transparency, data.intent);
1593
+ });
1594
+ messageHandler.on("commonobj", data => {
1595
+ if (this.destroyed) {
1596
+ return;
1597
+ }
1598
+
1599
+ const [id, type, exportedData] = data;
1600
+
1601
+ if (this.commonObjs.has(id)) {
1602
+ return;
1603
+ }
1604
+
1605
+ switch (type) {
1606
+ case "Font":
1607
+ const params = this._params;
1608
+
1609
+ if ("error" in exportedData) {
1610
+ const exportedError = exportedData.error;
1611
+ (0, _util.warn)(`Error during font loading: ${exportedError}`);
1612
+ this.commonObjs.resolve(id, exportedError);
1613
+ break;
1614
+ }
1615
+
1616
+ let fontRegistry = null;
1617
+
1618
+ if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
1619
+ fontRegistry = {
1620
+ registerFont(font, url) {
1621
+ globalThis.FontInspector.fontAdded(font, url);
1622
+ }
1623
+
1624
+ };
1625
+ }
1626
+
1627
+ const font = new _font_loader.FontFaceObject(exportedData, {
1628
+ isEvalSupported: params.isEvalSupported,
1629
+ disableFontFace: params.disableFontFace,
1630
+ ignoreErrors: params.ignoreErrors,
1631
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
1632
+ fontRegistry
1633
+ });
1634
+ this.fontLoader.bind(font).then(() => {
1635
+ this.commonObjs.resolve(id, font);
1636
+ }, reason => {
1637
+ messageHandler.sendWithPromise("FontFallback", {
1638
+ id
1639
+ }).finally(() => {
1640
+ this.commonObjs.resolve(id, font);
1641
+ });
1642
+ });
1643
+ break;
1644
+
1645
+ case "FontPath":
1646
+ case "FontType3Res":
1647
+ this.commonObjs.resolve(id, exportedData);
1648
+ break;
1649
+
1650
+ default:
1651
+ throw new Error(`Got unknown common object type ${type}`);
1652
+ }
1653
+ });
1654
+ messageHandler.on("obj", data => {
1655
+ if (this.destroyed) {
1656
+ return undefined;
1657
+ }
1658
+
1659
+ const [id, pageIndex, type, imageData] = data;
1660
+ const pageProxy = this.pageCache[pageIndex];
1661
+
1662
+ if (pageProxy.objs.has(id)) {
1663
+ return undefined;
1664
+ }
1665
+
1666
+ switch (type) {
1667
+ case "JpegStream":
1668
+ return new Promise((resolve, reject) => {
1669
+ const img = new Image();
1670
+
1671
+ img.onload = function () {
1672
+ resolve(img);
1673
+ };
1674
+
1675
+ img.onerror = function () {
1676
+ reject(new Error("Error during JPEG image loading"));
1677
+ (0, _display_utils.releaseImageResources)(img);
1678
+ };
1679
+
1680
+ img.src = imageData;
1681
+ }).then(img => {
1682
+ pageProxy.objs.resolve(id, img);
1683
+ });
1684
+
1685
+ case "Image":
1686
+ pageProxy.objs.resolve(id, imageData);
1687
+ const MAX_IMAGE_SIZE_TO_STORE = 8000000;
1688
+
1689
+ if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
1690
+ pageProxy.cleanupAfterRender = true;
1691
+ }
1692
+
1693
+ break;
1694
+
1695
+ default:
1696
+ throw new Error(`Got unknown object type ${type}`);
1697
+ }
1698
+
1699
+ return undefined;
1700
+ });
1701
+ messageHandler.on("DocProgress", data => {
1702
+ if (this.destroyed) {
1703
+ return;
1704
+ }
1705
+
1706
+ if (loadingTask.onProgress) {
1707
+ loadingTask.onProgress({
1708
+ loaded: data.loaded,
1709
+ total: data.total
1710
+ });
1711
+ }
1712
+ });
1713
+ messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
1714
+ messageHandler.on("JpegDecode", data => {
1715
+ if (this.destroyed) {
1716
+ return Promise.reject(new Error("Worker was destroyed"));
1717
+ }
1718
+
1719
+ if (typeof document === "undefined") {
1720
+ return Promise.reject(new Error('"document" is not defined.'));
1721
+ }
1722
+
1723
+ const [imageUrl, components] = data;
1724
+
1725
+ if (components !== 3 && components !== 1) {
1726
+ return Promise.reject(new Error("Only 3 components or 1 component can be returned"));
1727
+ }
1728
+
1729
+ return new Promise(function (resolve, reject) {
1730
+ const img = new Image();
1731
+
1732
+ img.onload = function () {
1733
+ const {
1734
+ width,
1735
+ height
1736
+ } = img;
1737
+ const size = width * height;
1738
+ const rgbaLength = size * 4;
1739
+ const buf = new Uint8ClampedArray(size * components);
1740
+ let tmpCanvas = document.createElement("canvas");
1741
+ tmpCanvas.width = width;
1742
+ tmpCanvas.height = height;
1743
+ let tmpCtx = tmpCanvas.getContext("2d");
1744
+ tmpCtx.drawImage(img, 0, 0);
1745
+ const data = tmpCtx.getImageData(0, 0, width, height).data;
1746
+
1747
+ if (components === 3) {
1748
+ for (let i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
1749
+ buf[j] = data[i];
1750
+ buf[j + 1] = data[i + 1];
1751
+ buf[j + 2] = data[i + 2];
1244
1752
  }
1245
- fullReader.onProgress = function (evt) {
1246
- if (loadingTask.onProgress) {
1247
- loadingTask.onProgress({
1248
- loaded: evt.loaded,
1249
- total: evt.total
1250
- });
1251
- }
1252
- };
1253
- }
1254
- headersCapability.resolve({
1255
- isStreamingSupported: fullReader.isStreamingSupported,
1256
- isRangeSupported: fullReader.isRangeSupported,
1257
- contentLength: fullReader.contentLength
1258
- });
1259
- }, headersCapability.reject);
1260
- return headersCapability.promise;
1261
- }, this);
1262
- messageHandler.on('GetRangeReader', function (data, sink) {
1263
- (0, _util.assert)(this._networkStream);
1264
- var rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
1265
- sink.onPull = function () {
1266
- rangeReader.read().then(function (_ref4) {
1267
- var value = _ref4.value,
1268
- done = _ref4.done;
1269
-
1270
- if (done) {
1271
- sink.close();
1272
- return;
1753
+ } else if (components === 1) {
1754
+ for (let i = 0, j = 0; i < rgbaLength; i += 4, j++) {
1755
+ buf[j] = data[i];
1273
1756
  }
1274
- (0, _util.assert)((0, _util.isArrayBuffer)(value));
1275
- sink.enqueue(new Uint8Array(value), 1, [value]);
1276
- }).catch(function (reason) {
1277
- sink.error(reason);
1757
+ }
1758
+
1759
+ resolve({
1760
+ data: buf,
1761
+ width,
1762
+ height
1278
1763
  });
1764
+ (0, _display_utils.releaseImageResources)(img);
1765
+ tmpCanvas.width = 0;
1766
+ tmpCanvas.height = 0;
1767
+ tmpCanvas = null;
1768
+ tmpCtx = null;
1279
1769
  };
1280
- sink.onCancel = function (reason) {
1281
- rangeReader.cancel(reason);
1770
+
1771
+ img.onerror = function () {
1772
+ reject(new Error("JpegDecode failed to load image"));
1773
+ (0, _display_utils.releaseImageResources)(img);
1282
1774
  };
1283
- }, this);
1284
- messageHandler.on('GetDoc', function (_ref5) {
1285
- var pdfInfo = _ref5.pdfInfo;
1286
-
1287
- this.numPages = pdfInfo.numPages;
1288
- this.pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
1289
- loadingTask._capability.resolve(this.pdfDocument);
1290
- }, this);
1291
- messageHandler.on('PasswordRequest', function (exception) {
1292
- var _this11 = this;
1293
-
1294
- this._passwordCapability = (0, _util.createPromiseCapability)();
1295
- if (loadingTask.onPassword) {
1296
- var updatePassword = function updatePassword(password) {
1297
- _this11._passwordCapability.resolve({ password: password });
1298
- };
1299
- try {
1300
- loadingTask.onPassword(updatePassword, exception.code);
1301
- } catch (ex) {
1302
- this._passwordCapability.reject(ex);
1303
- }
1304
- } else {
1305
- this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
1306
- }
1307
- return this._passwordCapability.promise;
1308
- }, this);
1309
- messageHandler.on('PasswordException', function (exception) {
1310
- loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
1311
- }, this);
1312
- messageHandler.on('InvalidPDF', function (exception) {
1313
- loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
1314
- }, this);
1315
- messageHandler.on('MissingPDF', function (exception) {
1316
- loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
1317
- }, this);
1318
- messageHandler.on('UnexpectedResponse', function (exception) {
1319
- loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
1320
- }, this);
1321
- messageHandler.on('UnknownError', function (exception) {
1322
- loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
1323
- }, this);
1324
- messageHandler.on('DataLoaded', function (data) {
1325
- if (loadingTask.onProgress) {
1326
- loadingTask.onProgress({
1327
- loaded: data.length,
1328
- total: data.length
1329
- });
1330
- }
1331
- this.downloadInfoCapability.resolve(data);
1332
- }, this);
1333
- messageHandler.on('StartRenderPage', function (data) {
1334
- if (this.destroyed) {
1335
- return;
1336
- }
1337
- var page = this.pageCache[data.pageIndex];
1338
- page._stats.timeEnd('Page Request');
1339
- page._startRenderPage(data.transparency, data.intent);
1340
- }, this);
1341
- messageHandler.on('RenderPageChunk', function (data) {
1342
- if (this.destroyed) {
1343
- return;
1344
- }
1345
- var page = this.pageCache[data.pageIndex];
1346
- page._renderPageChunk(data.operatorList, data.intent);
1347
- }, this);
1348
- messageHandler.on('commonobj', function (data) {
1349
- var _this12 = this;
1350
1775
 
1351
- if (this.destroyed) {
1352
- return;
1353
- }
1776
+ img.src = imageUrl;
1777
+ });
1778
+ });
1779
+ messageHandler.on("FetchBuiltInCMap", (data, sink) => {
1780
+ if (this.destroyed) {
1781
+ sink.error(new Error("Worker was destroyed"));
1782
+ return;
1783
+ }
1354
1784
 
1355
- var _data = _slicedToArray(data, 3),
1356
- id = _data[0],
1357
- type = _data[1],
1358
- exportedData = _data[2];
1785
+ let fetched = false;
1359
1786
 
1360
- if (this.commonObjs.hasData(id)) {
1361
- return;
1362
- }
1363
- switch (type) {
1364
- case 'Font':
1365
- var params = this._params;
1366
- if ('error' in exportedData) {
1367
- var exportedError = exportedData.error;
1368
- (0, _util.warn)('Error during font loading: ' + exportedError);
1369
- this.commonObjs.resolve(id, exportedError);
1370
- break;
1371
- }
1372
- var fontRegistry = null;
1373
- if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
1374
- fontRegistry = {
1375
- registerFont: function registerFont(font, url) {
1376
- _global_scope2.default['FontInspector'].fontAdded(font, url);
1377
- }
1378
- };
1379
- }
1380
- var font = new _font_loader.FontFaceObject(exportedData, {
1381
- isEvalSupported: params.isEvalSupported,
1382
- disableFontFace: params.disableFontFace,
1383
- ignoreErrors: params.ignoreErrors,
1384
- onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
1385
- fontRegistry: fontRegistry
1386
- });
1387
- var fontReady = function fontReady(fontObjs) {
1388
- _this12.commonObjs.resolve(id, font);
1389
- };
1390
- this.fontLoader.bind([font], fontReady);
1391
- break;
1392
- case 'FontPath':
1393
- this.commonObjs.resolve(id, exportedData);
1394
- break;
1395
- default:
1396
- throw new Error('Got unknown common object type ' + type);
1397
- }
1398
- }, this);
1399
- messageHandler.on('obj', function (data) {
1400
- if (this.destroyed) {
1787
+ sink.onPull = () => {
1788
+ if (fetched) {
1789
+ sink.close();
1401
1790
  return;
1402
1791
  }
1403
1792
 
1404
- var _data2 = _slicedToArray(data, 4),
1405
- id = _data2[0],
1406
- pageIndex = _data2[1],
1407
- type = _data2[2],
1408
- imageData = _data2[3];
1409
-
1410
- var pageProxy = this.pageCache[pageIndex];
1411
- if (pageProxy.objs.hasData(id)) {
1412
- return;
1413
- }
1414
- switch (type) {
1415
- case 'JpegStream':
1416
- return new Promise(function (resolve, reject) {
1417
- var img = new Image();
1418
- img.onload = function () {
1419
- resolve(img);
1420
- };
1421
- img.onerror = function () {
1422
- reject(new Error('Error during JPEG image loading'));
1423
- };
1424
- img.src = imageData;
1425
- }).then(function (img) {
1426
- pageProxy.objs.resolve(id, img);
1427
- });
1428
- case 'Image':
1429
- pageProxy.objs.resolve(id, imageData);
1430
- var MAX_IMAGE_SIZE_TO_STORE = 8000000;
1431
- if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
1432
- pageProxy.cleanupAfterRender = true;
1433
- }
1434
- break;
1435
- default:
1436
- throw new Error('Got unknown object type ' + type);
1437
- }
1438
- }, this);
1439
- messageHandler.on('DocProgress', function (data) {
1440
- if (this.destroyed) {
1441
- return;
1442
- }
1443
- if (loadingTask.onProgress) {
1444
- loadingTask.onProgress({
1445
- loaded: data.loaded,
1446
- total: data.total
1447
- });
1448
- }
1449
- }, this);
1450
- messageHandler.on('PageError', function (data) {
1451
- if (this.destroyed) {
1452
- return;
1453
- }
1454
- var page = this.pageCache[data.pageNum - 1];
1455
- var intentState = page.intentStates[data.intent];
1456
- if (intentState.displayReadyCapability) {
1457
- intentState.displayReadyCapability.reject(data.error);
1458
- } else {
1459
- throw new Error(data.error);
1460
- }
1461
- if (intentState.operatorList) {
1462
- intentState.operatorList.lastChunk = true;
1463
- for (var i = 0; i < intentState.renderTasks.length; i++) {
1464
- intentState.renderTasks[i].operatorListChanged();
1465
- }
1466
- }
1467
- }, this);
1468
- messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this);
1469
- messageHandler.on('JpegDecode', function (data) {
1470
- if (this.destroyed) {
1471
- return Promise.reject(new Error('Worker was destroyed'));
1472
- }
1473
- if (typeof document === 'undefined') {
1474
- return Promise.reject(new Error('"document" is not defined.'));
1475
- }
1793
+ fetched = true;
1794
+ this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {
1795
+ sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);
1796
+ }).catch(function (reason) {
1797
+ sink.error(reason);
1798
+ });
1799
+ };
1800
+ });
1801
+ }
1476
1802
 
1477
- var _data3 = _slicedToArray(data, 2),
1478
- imageUrl = _data3[0],
1479
- components = _data3[1];
1803
+ _onUnsupportedFeature({
1804
+ featureId
1805
+ }) {
1806
+ if (this.destroyed) {
1807
+ return;
1808
+ }
1480
1809
 
1481
- if (components !== 3 && components !== 1) {
1482
- return Promise.reject(new Error('Only 3 components or 1 component can be returned'));
1483
- }
1484
- return new Promise(function (resolve, reject) {
1485
- var img = new Image();
1486
- img.onload = function () {
1487
- var width = img.width;
1488
- var height = img.height;
1489
- var size = width * height;
1490
- var rgbaLength = size * 4;
1491
- var buf = new Uint8ClampedArray(size * components);
1492
- var tmpCanvas = document.createElement('canvas');
1493
- tmpCanvas.width = width;
1494
- tmpCanvas.height = height;
1495
- var tmpCtx = tmpCanvas.getContext('2d');
1496
- tmpCtx.drawImage(img, 0, 0);
1497
- var data = tmpCtx.getImageData(0, 0, width, height).data;
1498
- if (components === 3) {
1499
- for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
1500
- buf[j] = data[i];
1501
- buf[j + 1] = data[i + 1];
1502
- buf[j + 2] = data[i + 2];
1503
- }
1504
- } else if (components === 1) {
1505
- for (var _i = 0, _j = 0; _i < rgbaLength; _i += 4, _j++) {
1506
- buf[_j] = data[_i];
1507
- }
1508
- }
1509
- resolve({
1510
- data: buf,
1511
- width: width,
1512
- height: height
1513
- });
1514
- };
1515
- img.onerror = function () {
1516
- reject(new Error('JpegDecode failed to load image'));
1517
- };
1518
- img.src = imageUrl;
1519
- });
1520
- }, this);
1521
- messageHandler.on('FetchBuiltInCMap', function (data) {
1522
- if (this.destroyed) {
1523
- return Promise.reject(new Error('Worker was destroyed'));
1524
- }
1525
- return this.CMapReaderFactory.fetch({ name: data.name });
1526
- }, this);
1810
+ if (this.loadingTask.onUnsupportedFeature) {
1811
+ this.loadingTask.onUnsupportedFeature(featureId);
1527
1812
  }
1528
- }, {
1529
- key: '_onUnsupportedFeature',
1530
- value: function _onUnsupportedFeature(_ref6) {
1531
- var featureId = _ref6.featureId;
1813
+ }
1532
1814
 
1533
- if (this.destroyed) {
1534
- return;
1535
- }
1536
- if (this.loadingTask.onUnsupportedFeature) {
1537
- this.loadingTask.onUnsupportedFeature(featureId);
1538
- }
1815
+ getData() {
1816
+ return this.messageHandler.sendWithPromise("GetData", null);
1817
+ }
1818
+
1819
+ getPage(pageNumber) {
1820
+ if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
1821
+ return Promise.reject(new Error("Invalid page request"));
1539
1822
  }
1540
- }, {
1541
- key: 'getData',
1542
- value: function getData() {
1543
- return this.messageHandler.sendWithPromise('GetData', null);
1823
+
1824
+ const pageIndex = pageNumber - 1;
1825
+
1826
+ if (pageIndex in this.pagePromises) {
1827
+ return this.pagePromises[pageIndex];
1544
1828
  }
1545
- }, {
1546
- key: 'getPage',
1547
- value: function getPage(pageNumber) {
1548
- var _this13 = this;
1549
1829
 
1550
- if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
1551
- return Promise.reject(new Error('Invalid page request'));
1552
- }
1553
- var pageIndex = pageNumber - 1;
1554
- if (pageIndex in this.pagePromises) {
1555
- return this.pagePromises[pageIndex];
1830
+ const promise = this.messageHandler.sendWithPromise("GetPage", {
1831
+ pageIndex
1832
+ }).then(pageInfo => {
1833
+ if (this.destroyed) {
1834
+ throw new Error("Transport destroyed");
1556
1835
  }
1557
- var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) {
1558
- if (_this13.destroyed) {
1559
- throw new Error('Transport destroyed');
1560
- }
1561
- var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.pdfBug);
1562
- _this13.pageCache[pageIndex] = page;
1563
- return page;
1564
- });
1565
- this.pagePromises[pageIndex] = promise;
1566
- return promise;
1567
- }
1568
- }, {
1569
- key: 'getPageIndex',
1570
- value: function getPageIndex(ref) {
1571
- return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref }).catch(function (reason) {
1572
- return Promise.reject(new Error(reason));
1573
- });
1574
- }
1575
- }, {
1576
- key: 'getAnnotations',
1577
- value: function getAnnotations(pageIndex, intent) {
1578
- return this.messageHandler.sendWithPromise('GetAnnotations', {
1579
- pageIndex: pageIndex,
1580
- intent: intent
1581
- });
1582
- }
1583
- }, {
1584
- key: 'getDestinations',
1585
- value: function getDestinations() {
1586
- return this.messageHandler.sendWithPromise('GetDestinations', null);
1587
- }
1588
- }, {
1589
- key: 'getDestination',
1590
- value: function getDestination(id) {
1591
- if (typeof id !== 'string') {
1592
- return Promise.reject(new Error('Invalid destination request.'));
1593
- }
1594
- return this.messageHandler.sendWithPromise('GetDestination', { id: id });
1595
- }
1596
- }, {
1597
- key: 'getPageLabels',
1598
- value: function getPageLabels() {
1599
- return this.messageHandler.sendWithPromise('GetPageLabels', null);
1600
- }
1601
- }, {
1602
- key: 'getPageMode',
1603
- value: function getPageMode() {
1604
- return this.messageHandler.sendWithPromise('GetPageMode', null);
1605
- }
1606
- }, {
1607
- key: 'getAttachments',
1608
- value: function getAttachments() {
1609
- return this.messageHandler.sendWithPromise('GetAttachments', null);
1610
- }
1611
- }, {
1612
- key: 'getJavaScript',
1613
- value: function getJavaScript() {
1614
- return this.messageHandler.sendWithPromise('GetJavaScript', null);
1615
- }
1616
- }, {
1617
- key: 'getOutline',
1618
- value: function getOutline() {
1619
- return this.messageHandler.sendWithPromise('GetOutline', null);
1620
- }
1621
- }, {
1622
- key: 'getPermissions',
1623
- value: function getPermissions() {
1624
- return this.messageHandler.sendWithPromise('GetPermissions', null);
1625
- }
1626
- }, {
1627
- key: 'getMetadata',
1628
- value: function getMetadata() {
1629
- var _this14 = this;
1630
-
1631
- return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) {
1632
- return {
1633
- info: results[0],
1634
- metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
1635
- contentDispositionFilename: _this14._fullReader ? _this14._fullReader.filename : null
1636
- };
1637
- });
1836
+
1837
+ const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
1838
+ this.pageCache[pageIndex] = page;
1839
+ return page;
1840
+ });
1841
+ this.pagePromises[pageIndex] = promise;
1842
+ return promise;
1843
+ }
1844
+
1845
+ getPageIndex(ref) {
1846
+ return this.messageHandler.sendWithPromise("GetPageIndex", {
1847
+ ref
1848
+ }).catch(function (reason) {
1849
+ return Promise.reject(new Error(reason));
1850
+ });
1851
+ }
1852
+
1853
+ getAnnotations(pageIndex, intent) {
1854
+ return this.messageHandler.sendWithPromise("GetAnnotations", {
1855
+ pageIndex,
1856
+ intent
1857
+ });
1858
+ }
1859
+
1860
+ getDestinations() {
1861
+ return this.messageHandler.sendWithPromise("GetDestinations", null);
1862
+ }
1863
+
1864
+ getDestination(id) {
1865
+ if (typeof id !== "string") {
1866
+ return Promise.reject(new Error("Invalid destination request."));
1638
1867
  }
1639
- }, {
1640
- key: 'getStats',
1641
- value: function getStats() {
1642
- return this.messageHandler.sendWithPromise('GetStats', null);
1643
- }
1644
- }, {
1645
- key: 'startCleanup',
1646
- value: function startCleanup() {
1647
- var _this15 = this;
1648
-
1649
- this.messageHandler.sendWithPromise('Cleanup', null).then(function () {
1650
- for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) {
1651
- var page = _this15.pageCache[i];
1652
- if (page) {
1653
- page.cleanup();
1868
+
1869
+ return this.messageHandler.sendWithPromise("GetDestination", {
1870
+ id
1871
+ });
1872
+ }
1873
+
1874
+ getPageLabels() {
1875
+ return this.messageHandler.sendWithPromise("GetPageLabels", null);
1876
+ }
1877
+
1878
+ getPageLayout() {
1879
+ return this.messageHandler.sendWithPromise("GetPageLayout", null);
1880
+ }
1881
+
1882
+ getPageMode() {
1883
+ return this.messageHandler.sendWithPromise("GetPageMode", null);
1884
+ }
1885
+
1886
+ getViewerPreferences() {
1887
+ return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
1888
+ }
1889
+
1890
+ getOpenAction() {
1891
+ return this.messageHandler.sendWithPromise("GetOpenAction", null);
1892
+ }
1893
+
1894
+ getAttachments() {
1895
+ return this.messageHandler.sendWithPromise("GetAttachments", null);
1896
+ }
1897
+
1898
+ getJavaScript() {
1899
+ return this.messageHandler.sendWithPromise("GetJavaScript", null);
1900
+ }
1901
+
1902
+ getOutline() {
1903
+ return this.messageHandler.sendWithPromise("GetOutline", null);
1904
+ }
1905
+
1906
+ getPermissions() {
1907
+ return this.messageHandler.sendWithPromise("GetPermissions", null);
1908
+ }
1909
+
1910
+ getMetadata() {
1911
+ return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
1912
+ return {
1913
+ info: results[0],
1914
+ metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
1915
+ contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
1916
+ };
1917
+ });
1918
+ }
1919
+
1920
+ getStats() {
1921
+ return this.messageHandler.sendWithPromise("GetStats", null);
1922
+ }
1923
+
1924
+ startCleanup() {
1925
+ return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
1926
+ for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
1927
+ const page = this.pageCache[i];
1928
+
1929
+ if (page) {
1930
+ const cleanupSuccessful = page.cleanup();
1931
+
1932
+ if (!cleanupSuccessful) {
1933
+ throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
1654
1934
  }
1655
1935
  }
1656
- _this15.commonObjs.clear();
1657
- _this15.fontLoader.clear();
1658
- });
1936
+ }
1937
+
1938
+ this.commonObjs.clear();
1939
+ this.fontLoader.clear();
1940
+ });
1941
+ }
1942
+
1943
+ get loadingParams() {
1944
+ const params = this._params;
1945
+ return (0, _util.shadow)(this, "loadingParams", {
1946
+ disableAutoFetch: params.disableAutoFetch,
1947
+ disableCreateObjectURL: params.disableCreateObjectURL,
1948
+ disableFontFace: params.disableFontFace,
1949
+ nativeImageDecoderSupport: params.nativeImageDecoderSupport
1950
+ });
1951
+ }
1952
+
1953
+ }
1954
+
1955
+ class PDFObjects {
1956
+ constructor() {
1957
+ this._objs = Object.create(null);
1958
+ }
1959
+
1960
+ _ensureObj(objId) {
1961
+ if (this._objs[objId]) {
1962
+ return this._objs[objId];
1659
1963
  }
1660
- }, {
1661
- key: 'loadingParams',
1662
- get: function get() {
1663
- var params = this._params;
1664
- return (0, _util.shadow)(this, 'loadingParams', {
1665
- disableAutoFetch: params.disableAutoFetch,
1666
- disableCreateObjectURL: params.disableCreateObjectURL,
1667
- disableFontFace: params.disableFontFace,
1668
- nativeImageDecoderSupport: params.nativeImageDecoderSupport
1669
- });
1964
+
1965
+ return this._objs[objId] = {
1966
+ capability: (0, _util.createPromiseCapability)(),
1967
+ data: null,
1968
+ resolved: false
1969
+ };
1970
+ }
1971
+
1972
+ get(objId, callback = null) {
1973
+ if (callback) {
1974
+ this._ensureObj(objId).capability.promise.then(callback);
1975
+
1976
+ return null;
1670
1977
  }
1671
- }]);
1672
1978
 
1673
- return WorkerTransport;
1674
- }();
1979
+ const obj = this._objs[objId];
1980
+
1981
+ if (!obj || !obj.resolved) {
1982
+ throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
1983
+ }
1675
1984
 
1676
- var PDFObjects = function PDFObjectsClosure() {
1677
- function PDFObjects() {
1678
- this.objs = Object.create(null);
1985
+ return obj.data;
1679
1986
  }
1680
- PDFObjects.prototype = {
1681
- ensureObj: function PDFObjects_ensureObj(objId) {
1682
- if (this.objs[objId]) {
1683
- return this.objs[objId];
1684
- }
1685
- var obj = {
1686
- capability: (0, _util.createPromiseCapability)(),
1687
- data: null,
1688
- resolved: false
1689
- };
1690
- this.objs[objId] = obj;
1691
- return obj;
1692
- },
1693
- get: function PDFObjects_get(objId, callback) {
1694
- if (callback) {
1695
- this.ensureObj(objId).capability.promise.then(callback);
1696
- return null;
1697
- }
1698
- var obj = this.objs[objId];
1699
- if (!obj || !obj.resolved) {
1700
- throw new Error('Requesting object that isn\'t resolved yet ' + objId);
1701
- }
1702
- return obj.data;
1703
- },
1704
- resolve: function PDFObjects_resolve(objId, data) {
1705
- var obj = this.ensureObj(objId);
1706
- obj.resolved = true;
1707
- obj.data = data;
1708
- obj.capability.resolve(data);
1709
- },
1710
- isResolved: function PDFObjects_isResolved(objId) {
1711
- var objs = this.objs;
1712
- if (!objs[objId]) {
1713
- return false;
1714
- }
1715
- return objs[objId].resolved;
1716
- },
1717
- hasData: function PDFObjects_hasData(objId) {
1718
- return this.isResolved(objId);
1719
- },
1720
- getData: function PDFObjects_getData(objId) {
1721
- var objs = this.objs;
1722
- if (!objs[objId] || !objs[objId].resolved) {
1723
- return null;
1987
+
1988
+ has(objId) {
1989
+ const obj = this._objs[objId];
1990
+ return obj ? obj.resolved : false;
1991
+ }
1992
+
1993
+ resolve(objId, data) {
1994
+ const obj = this._ensureObj(objId);
1995
+
1996
+ obj.resolved = true;
1997
+ obj.data = data;
1998
+ obj.capability.resolve(data);
1999
+ }
2000
+
2001
+ clear() {
2002
+ for (const objId in this._objs) {
2003
+ const {
2004
+ data
2005
+ } = this._objs[objId];
2006
+
2007
+ if (typeof Image !== "undefined" && data instanceof Image) {
2008
+ (0, _display_utils.releaseImageResources)(data);
1724
2009
  }
1725
- return objs[objId].data;
1726
- },
1727
- clear: function PDFObjects_clear() {
1728
- this.objs = Object.create(null);
1729
2010
  }
1730
- };
1731
- return PDFObjects;
1732
- }();
1733
- var RenderTask = function RenderTaskClosure() {
1734
- function RenderTask(internalRenderTask) {
2011
+
2012
+ this._objs = Object.create(null);
2013
+ }
2014
+
2015
+ }
2016
+
2017
+ class RenderTask {
2018
+ constructor(internalRenderTask) {
1735
2019
  this._internalRenderTask = internalRenderTask;
1736
2020
  this.onContinue = null;
1737
2021
  }
1738
- RenderTask.prototype = {
1739
- get promise() {
1740
- return this._internalRenderTask.capability.promise;
1741
- },
1742
- cancel: function RenderTask_cancel() {
1743
- this._internalRenderTask.cancel();
1744
- },
1745
- then: function RenderTask_then(onFulfilled, onRejected) {
1746
- return this.promise.then.apply(this.promise, arguments);
1747
- }
1748
- };
1749
- return RenderTask;
1750
- }();
1751
- var InternalRenderTask = function InternalRenderTaskClosure() {
1752
- var canvasInRendering = new WeakMap();
1753
- function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber, canvasFactory, webGLContext) {
1754
- var pdfBug = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;
1755
-
1756
- this.callback = callback;
1757
- this.params = params;
1758
- this.objs = objs;
1759
- this.commonObjs = commonObjs;
1760
- this.operatorListIdx = null;
1761
- this.operatorList = operatorList;
1762
- this.pageNumber = pageNumber;
1763
- this.canvasFactory = canvasFactory;
1764
- this.webGLContext = webGLContext;
1765
- this._pdfBug = pdfBug;
1766
- this.running = false;
1767
- this.graphicsReadyCallback = null;
1768
- this.graphicsReady = false;
1769
- this.useRequestAnimationFrame = false;
1770
- this.cancelled = false;
1771
- this.capability = (0, _util.createPromiseCapability)();
1772
- this.task = new RenderTask(this);
1773
- this._continueBound = this._continue.bind(this);
1774
- this._scheduleNextBound = this._scheduleNext.bind(this);
1775
- this._nextBound = this._next.bind(this);
1776
- this._canvas = params.canvasContext.canvas;
1777
- }
1778
- InternalRenderTask.prototype = {
1779
- initializeGraphics: function initializeGraphics(transparency) {
2022
+
2023
+ get promise() {
2024
+ return this._internalRenderTask.capability.promise;
2025
+ }
2026
+
2027
+ cancel() {
2028
+ this._internalRenderTask.cancel();
2029
+ }
2030
+
2031
+ then(onFulfilled, onRejected) {
2032
+ throw new Error("Removed API method: " + "RenderTask.then, use the `promise` getter instead.");
2033
+ }
2034
+
2035
+ }
2036
+
2037
+ const InternalRenderTask = function InternalRenderTaskClosure() {
2038
+ const canvasInRendering = new WeakSet();
2039
+
2040
+ class InternalRenderTask {
2041
+ constructor({
2042
+ callback,
2043
+ params,
2044
+ objs,
2045
+ commonObjs,
2046
+ operatorList,
2047
+ pageIndex,
2048
+ canvasFactory,
2049
+ webGLContext,
2050
+ useRequestAnimationFrame = false,
2051
+ pdfBug = false
2052
+ }) {
2053
+ this.callback = callback;
2054
+ this.params = params;
2055
+ this.objs = objs;
2056
+ this.commonObjs = commonObjs;
2057
+ this.operatorListIdx = null;
2058
+ this.operatorList = operatorList;
2059
+ this._pageIndex = pageIndex;
2060
+ this.canvasFactory = canvasFactory;
2061
+ this.webGLContext = webGLContext;
2062
+ this._pdfBug = pdfBug;
2063
+ this.running = false;
2064
+ this.graphicsReadyCallback = null;
2065
+ this.graphicsReady = false;
2066
+ this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
2067
+ this.cancelled = false;
2068
+ this.capability = (0, _util.createPromiseCapability)();
2069
+ this.task = new RenderTask(this);
2070
+ this._continueBound = this._continue.bind(this);
2071
+ this._scheduleNextBound = this._scheduleNext.bind(this);
2072
+ this._nextBound = this._next.bind(this);
2073
+ this._canvas = params.canvasContext.canvas;
2074
+ }
2075
+
2076
+ initializeGraphics(transparency = false) {
1780
2077
  if (this.cancelled) {
1781
2078
  return;
1782
2079
  }
2080
+
1783
2081
  if (this._canvas) {
1784
2082
  if (canvasInRendering.has(this._canvas)) {
1785
- throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.');
2083
+ throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
1786
2084
  }
1787
- canvasInRendering.set(this._canvas, this);
2085
+
2086
+ canvasInRendering.add(this._canvas);
1788
2087
  }
1789
- if (this._pdfBug && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) {
1790
- this.stepper = _global_scope2.default.StepperManager.create(this.pageNumber - 1);
2088
+
2089
+ if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) {
2090
+ this.stepper = globalThis.StepperManager.create(this._pageIndex);
1791
2091
  this.stepper.init(this.operatorList);
1792
2092
  this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
1793
2093
  }
1794
- var params = this.params;
1795
- this.gfx = new _canvas.CanvasGraphics(params.canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, params.imageLayer);
2094
+
2095
+ const {
2096
+ canvasContext,
2097
+ viewport,
2098
+ transform,
2099
+ imageLayer,
2100
+ background
2101
+ } = this.params;
2102
+ this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
1796
2103
  this.gfx.beginDrawing({
1797
- transform: params.transform,
1798
- viewport: params.viewport,
1799
- transparency: transparency,
1800
- background: params.background
2104
+ transform,
2105
+ viewport,
2106
+ transparency,
2107
+ background
1801
2108
  });
1802
2109
  this.operatorListIdx = 0;
1803
2110
  this.graphicsReady = true;
2111
+
1804
2112
  if (this.graphicsReadyCallback) {
1805
2113
  this.graphicsReadyCallback();
1806
2114
  }
1807
- },
2115
+ }
1808
2116
 
1809
- cancel: function InternalRenderTask_cancel() {
2117
+ cancel(error = null) {
1810
2118
  this.running = false;
1811
2119
  this.cancelled = true;
2120
+
2121
+ if (this.gfx) {
2122
+ this.gfx.endDrawing();
2123
+ }
2124
+
1812
2125
  if (this._canvas) {
1813
2126
  canvasInRendering.delete(this._canvas);
1814
2127
  }
1815
- this.callback(new _dom_utils.RenderingCancelledException('Rendering cancelled, page ' + this.pageNumber, 'canvas'));
1816
- },
1817
- operatorListChanged: function InternalRenderTask_operatorListChanged() {
2128
+
2129
+ this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
2130
+ }
2131
+
2132
+ operatorListChanged() {
1818
2133
  if (!this.graphicsReady) {
1819
2134
  if (!this.graphicsReadyCallback) {
1820
2135
  this.graphicsReadyCallback = this._continueBound;
1821
2136
  }
2137
+
1822
2138
  return;
1823
2139
  }
2140
+
1824
2141
  if (this.stepper) {
1825
2142
  this.stepper.updateOperatorList(this.operatorList);
1826
2143
  }
2144
+
1827
2145
  if (this.running) {
1828
2146
  return;
1829
2147
  }
2148
+
1830
2149
  this._continue();
1831
- },
1832
- _continue: function InternalRenderTask__continue() {
2150
+ }
2151
+
2152
+ _continue() {
1833
2153
  this.running = true;
2154
+
1834
2155
  if (this.cancelled) {
1835
2156
  return;
1836
2157
  }
2158
+
1837
2159
  if (this.task.onContinue) {
1838
2160
  this.task.onContinue(this._scheduleNextBound);
1839
2161
  } else {
1840
2162
  this._scheduleNext();
1841
2163
  }
1842
- },
1843
- _scheduleNext: function InternalRenderTask__scheduleNext() {
1844
- var _this16 = this;
2164
+ }
1845
2165
 
1846
- if (this.useRequestAnimationFrame && typeof window !== 'undefined') {
1847
- window.requestAnimationFrame(function () {
1848
- _this16._nextBound().catch(_this16.callback);
2166
+ _scheduleNext() {
2167
+ if (this._useRequestAnimationFrame) {
2168
+ window.requestAnimationFrame(() => {
2169
+ this._nextBound().catch(this.cancel.bind(this));
1849
2170
  });
1850
2171
  } else {
1851
- Promise.resolve().then(this._nextBound).catch(this.callback);
2172
+ Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
1852
2173
  }
1853
- },
1854
- _next: function InternalRenderTask__next() {
1855
- var _this17 = this;
2174
+ }
1856
2175
 
1857
- return new Promise(function () {
1858
- if (_this17.cancelled) {
1859
- return;
1860
- }
1861
- _this17.operatorListIdx = _this17.gfx.executeOperatorList(_this17.operatorList, _this17.operatorListIdx, _this17._continueBound, _this17.stepper);
1862
- if (_this17.operatorListIdx === _this17.operatorList.argsArray.length) {
1863
- _this17.running = false;
1864
- if (_this17.operatorList.lastChunk) {
1865
- _this17.gfx.endDrawing();
1866
- if (_this17._canvas) {
1867
- canvasInRendering.delete(_this17._canvas);
1868
- }
1869
- _this17.callback();
2176
+ async _next() {
2177
+ if (this.cancelled) {
2178
+ return;
2179
+ }
2180
+
2181
+ this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
2182
+
2183
+ if (this.operatorListIdx === this.operatorList.argsArray.length) {
2184
+ this.running = false;
2185
+
2186
+ if (this.operatorList.lastChunk) {
2187
+ this.gfx.endDrawing();
2188
+
2189
+ if (this._canvas) {
2190
+ canvasInRendering.delete(this._canvas);
1870
2191
  }
2192
+
2193
+ this.callback();
1871
2194
  }
1872
- });
2195
+ }
1873
2196
  }
1874
- };
2197
+
2198
+ }
2199
+
1875
2200
  return InternalRenderTask;
1876
2201
  }();
1877
- var version, build;
1878
- {
1879
- exports.version = version = '2.0.943';
1880
- exports.build = build = 'dc98bf76';
1881
- }
1882
- exports.getDocument = getDocument;
1883
- exports.LoopbackPort = LoopbackPort;
1884
- exports.PDFDataRangeTransport = PDFDataRangeTransport;
1885
- exports.PDFWorker = PDFWorker;
1886
- exports.PDFDocumentProxy = PDFDocumentProxy;
1887
- exports.PDFPageProxy = PDFPageProxy;
1888
- exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
2202
+
2203
+ const version = '2.4.456';
1889
2204
  exports.version = version;
2205
+ const build = '228a591c';
1890
2206
  exports.build = build;