Re-factor setPDFNetworkStreamFactory, in src/display/api.js, to also accept an asynchronous function
				
					
				
			As part of trying to reduce the usage of SystemJS in the development viewer, this patch is a necessary step that will allow removal of some `require` statements. Currently this uses `SystemJS.import` in non-PRODUCTION mode, but it should be possible to replace those with standard *dynamic* `import` calls in the future.
This commit is contained in:
		
							parent
							
								
									0960e6c0b5
								
							
						
					
					
						commit
						d4d933538b
					
				| @ -65,7 +65,8 @@ const RENDERING_CANCELLED_TIMEOUT = 100; // ms | |||||||
|  * @typedef {function} IPDFStreamFactory |  * @typedef {function} IPDFStreamFactory | ||||||
|  * @param {DocumentInitParameters} params - The document initialization |  * @param {DocumentInitParameters} params - The document initialization | ||||||
|  *   parameters. The "url" key is always present. |  *   parameters. The "url" key is always present. | ||||||
|  * @returns {IPDFStream} |  * @returns {Promise} A promise, which is resolved with an instance of | ||||||
|  |  *   {IPDFStream}. | ||||||
|  * @ignore |  * @ignore | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| @ -80,7 +81,7 @@ let createPDFNetworkStream; | |||||||
|  * data transport. |  * data transport. | ||||||
|  * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function |  * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function | ||||||
|  *   that takes document initialization parameters (including a "url") and |  *   that takes document initialization parameters (including a "url") and | ||||||
|  *   returns an instance of {IPDFStream}. |  *   returns a promise which is resolved with an instance of {IPDFStream}. | ||||||
|  * @ignore |  * @ignore | ||||||
|  */ |  */ | ||||||
| function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { | function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { | ||||||
| @ -313,34 +314,44 @@ function getDocument(src) { | |||||||
|       if (task.destroyed) { |       if (task.destroyed) { | ||||||
|         throw new Error("Loading aborted"); |         throw new Error("Loading aborted"); | ||||||
|       } |       } | ||||||
|       return _fetchDocument(worker, params, rangeTransport, docId).then( |  | ||||||
|         function (workerId) { |  | ||||||
|           if (task.destroyed) { |  | ||||||
|             throw new Error("Loading aborted"); |  | ||||||
|           } |  | ||||||
| 
 | 
 | ||||||
|           let networkStream; |       const workerIdPromise = _fetchDocument( | ||||||
|           if (rangeTransport) { |         worker, | ||||||
|             networkStream = new PDFDataTransportStream( |         params, | ||||||
|               { |         rangeTransport, | ||||||
|                 length: params.length, |         docId | ||||||
|                 initialData: params.initialData, |       ); | ||||||
|                 progressiveDone: params.progressiveDone, |       const networkStreamPromise = new Promise(function (resolve) { | ||||||
|                 disableRange: params.disableRange, |         let networkStream; | ||||||
|                 disableStream: params.disableStream, |         if (rangeTransport) { | ||||||
|               }, |           networkStream = new PDFDataTransportStream( | ||||||
|               rangeTransport |             { | ||||||
|             ); |  | ||||||
|           } else if (!params.data) { |  | ||||||
|             networkStream = createPDFNetworkStream({ |  | ||||||
|               url: params.url, |  | ||||||
|               length: params.length, |               length: params.length, | ||||||
|               httpHeaders: params.httpHeaders, |               initialData: params.initialData, | ||||||
|               withCredentials: params.withCredentials, |               progressiveDone: params.progressiveDone, | ||||||
|               rangeChunkSize: params.rangeChunkSize, |  | ||||||
|               disableRange: params.disableRange, |               disableRange: params.disableRange, | ||||||
|               disableStream: params.disableStream, |               disableStream: params.disableStream, | ||||||
|             }); |             }, | ||||||
|  |             rangeTransport | ||||||
|  |           ); | ||||||
|  |         } else if (!params.data) { | ||||||
|  |           networkStream = createPDFNetworkStream({ | ||||||
|  |             url: params.url, | ||||||
|  |             length: params.length, | ||||||
|  |             httpHeaders: params.httpHeaders, | ||||||
|  |             withCredentials: params.withCredentials, | ||||||
|  |             rangeChunkSize: params.rangeChunkSize, | ||||||
|  |             disableRange: params.disableRange, | ||||||
|  |             disableStream: params.disableStream, | ||||||
|  |           }); | ||||||
|  |         } | ||||||
|  |         resolve(networkStream); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       return Promise.all([workerIdPromise, networkStreamPromise]).then( | ||||||
|  |         function ([workerId, networkStream]) { | ||||||
|  |           if (task.destroyed) { | ||||||
|  |             throw new Error("Loading aborted"); | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|           const messageHandler = new MessageHandler( |           const messageHandler = new MessageHandler( | ||||||
|  | |||||||
| @ -26,6 +26,12 @@ import { | |||||||
|   validateResponseStatus, |   validateResponseStatus, | ||||||
| } from "./network_utils.js"; | } from "./network_utils.js"; | ||||||
| 
 | 
 | ||||||
|  | if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { | ||||||
|  |   throw new Error( | ||||||
|  |     'Module "./fetch_stream.js" shall not be used with MOZCENTRAL builds.' | ||||||
|  |   ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function createFetchOptions(headers, withCredentials, abortController) { | function createFetchOptions(headers, withCredentials, abortController) { | ||||||
|   return { |   return { | ||||||
|     method: "GET", |     method: "GET", | ||||||
|  | |||||||
| @ -14,11 +14,6 @@ | |||||||
|  */ |  */ | ||||||
| /* globals __non_webpack_require__ */ | /* globals __non_webpack_require__ */ | ||||||
| 
 | 
 | ||||||
| const fs = __non_webpack_require__("fs"); |  | ||||||
| const http = __non_webpack_require__("http"); |  | ||||||
| const https = __non_webpack_require__("https"); |  | ||||||
| const url = __non_webpack_require__("url"); |  | ||||||
| 
 |  | ||||||
| import { | import { | ||||||
|   AbortException, |   AbortException, | ||||||
|   assert, |   assert, | ||||||
| @ -30,6 +25,17 @@ import { | |||||||
|   validateRangeRequestCapabilities, |   validateRangeRequestCapabilities, | ||||||
| } from "./network_utils.js"; | } from "./network_utils.js"; | ||||||
| 
 | 
 | ||||||
|  | if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { | ||||||
|  |   throw new Error( | ||||||
|  |     'Module "./node_stream.js" shall not be used with MOZCENTRAL builds.' | ||||||
|  |   ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const fs = __non_webpack_require__("fs"); | ||||||
|  | const http = __non_webpack_require__("http"); | ||||||
|  | const https = __non_webpack_require__("https"); | ||||||
|  | const url = __non_webpack_require__("url"); | ||||||
|  | 
 | ||||||
| const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; | const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; | ||||||
| 
 | 
 | ||||||
| function parseUrl(sourceUrl) { | function parseUrl(sourceUrl) { | ||||||
|  | |||||||
							
								
								
									
										19
									
								
								src/pdf.js
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/pdf.js
									
									
									
									
									
								
							| @ -30,7 +30,24 @@ var pdfjsDisplaySVG = require("./display/svg.js"); | |||||||
| const pdfjsDisplayWorkerOptions = require("./display/worker_options.js"); | const pdfjsDisplayWorkerOptions = require("./display/worker_options.js"); | ||||||
| const pdfjsDisplayAPICompatibility = require("./display/api_compatibility.js"); | const pdfjsDisplayAPICompatibility = require("./display/api_compatibility.js"); | ||||||
| 
 | 
 | ||||||
| if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { | if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("PRODUCTION")) { | ||||||
|  |   const streamsPromise = Promise.all([ | ||||||
|  |     SystemJS.import("pdfjs/display/network.js"), | ||||||
|  |     SystemJS.import("pdfjs/display/fetch_stream.js"), | ||||||
|  |   ]); | ||||||
|  |   pdfjsDisplayAPI.setPDFNetworkStreamFactory(params => { | ||||||
|  |     return streamsPromise.then(streams => { | ||||||
|  |       const [{ PDFNetworkStream }, { PDFFetchStream }] = streams; | ||||||
|  |       if ( | ||||||
|  |         pdfjsDisplayDisplayUtils.isFetchSupported() && | ||||||
|  |         pdfjsDisplayDisplayUtils.isValidFetchUrl(params.url) | ||||||
|  |       ) { | ||||||
|  |         return new PDFFetchStream(params); | ||||||
|  |       } | ||||||
|  |       return new PDFNetworkStream(params); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | } else if (PDFJSDev.test("GENERIC")) { | ||||||
|   const { isNodeJS } = require("./shared/is_node.js"); |   const { isNodeJS } = require("./shared/is_node.js"); | ||||||
|   if (isNodeJS) { |   if (isNodeJS) { | ||||||
|     const PDFNodeStream = require("./display/node_stream.js").PDFNodeStream; |     const PDFNodeStream = require("./display/node_stream.js").PDFNodeStream; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user