[api-minor] Move the ReadableStream
polyfill to the global scope
Note that most (reasonably) modern browsers have supported this for a while now, see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#Browser_compatibility By moving the polyfill into `src/shared/compatibility.js` we can thus get rid of the need to manually export/import `ReadableStream` and simply use it directly instead. The only change here which *could* possibly lead to a difference in behavior is in the `isFetchSupported` function. Previously we attempted to check for the existence of a global `ReadableStream` implementation, which could now pass (assuming obviously that the preceding checks also succeeded). However I'm not sure if that's a problem, since the previous check only confirmed the existence of a native `ReadableStream` implementation and not that it actually worked correctly. Finally it *could* just as well have been a globally registered polyfill from an application embedding the PDF.js library.
This commit is contained in:
parent
af4ba75f68
commit
e24050fa13
@ -117,12 +117,6 @@
|
||||
"no-catch-shadow": "error",
|
||||
"no-delete-var": "error",
|
||||
"no-label-var": "error",
|
||||
"no-restricted-globals": ["error",
|
||||
{
|
||||
"name": "ReadableStream",
|
||||
"message": "Import it from `src/shared/util.js` or `pdfjsLib` instead; outside of the `/src` and `/web` folders, the rule may be disabled as needed. ",
|
||||
},
|
||||
],
|
||||
"no-shadow-restricted-names": "error",
|
||||
"no-shadow": "off",
|
||||
"no-undef-init": "error",
|
||||
|
@ -435,7 +435,6 @@ class StatTimer {
|
||||
function isFetchSupported() {
|
||||
return (typeof fetch !== 'undefined' &&
|
||||
typeof Response !== 'undefined' && 'body' in Response.prototype &&
|
||||
// eslint-disable-next-line no-restricted-globals
|
||||
typeof ReadableStream !== 'undefined');
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,6 @@ exports.createObjectURL = pdfjsSharedUtil.createObjectURL;
|
||||
exports.removeNullCharacters = pdfjsSharedUtil.removeNullCharacters;
|
||||
exports.shadow = pdfjsSharedUtil.shadow;
|
||||
exports.Util = pdfjsSharedUtil.Util;
|
||||
exports.ReadableStream = pdfjsSharedUtil.ReadableStream;
|
||||
exports.RenderingCancelledException =
|
||||
pdfjsDisplayDisplayUtils.RenderingCancelledException;
|
||||
exports.getFilenameFromUrl = pdfjsDisplayDisplayUtils.getFilenameFromUrl;
|
||||
|
@ -249,6 +249,36 @@ const isIE = /Trident/.test(userAgent);
|
||||
globalThis.URL = require('core-js/web/url');
|
||||
})();
|
||||
|
||||
// Support: IE, Node.js
|
||||
(function checkReadableStream() {
|
||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('IMAGE_DECODERS')) {
|
||||
// The current image decoders are synchronous, hence `ReadableStream`
|
||||
// shouldn't need to be polyfilled for the IMAGE_DECODERS build target.
|
||||
return;
|
||||
}
|
||||
let isReadableStreamSupported = false;
|
||||
|
||||
if (typeof ReadableStream !== 'undefined') {
|
||||
// MS Edge may say it has ReadableStream but they are not up to spec yet.
|
||||
try {
|
||||
// eslint-disable-next-line no-new
|
||||
new ReadableStream({
|
||||
start(controller) {
|
||||
controller.close();
|
||||
},
|
||||
});
|
||||
isReadableStreamSupported = true;
|
||||
} catch (e) {
|
||||
// The ReadableStream constructor cannot be used.
|
||||
}
|
||||
}
|
||||
if (isReadableStreamSupported) {
|
||||
return;
|
||||
}
|
||||
globalThis.ReadableStream =
|
||||
require('web-streams-polyfill/dist/ponyfill').ReadableStream;
|
||||
})();
|
||||
|
||||
// Support: IE<11, Safari<8, Chrome<36
|
||||
(function checkWeakMap() {
|
||||
if (globalThis.WeakMap) {
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
import {
|
||||
AbortException, assert, createPromiseCapability, MissingPDFException,
|
||||
ReadableStream, UnexpectedResponseException, UnknownErrorException
|
||||
UnexpectedResponseException, UnknownErrorException
|
||||
} from './util';
|
||||
|
||||
const CallbackKind = {
|
||||
|
@ -1,55 +0,0 @@
|
||||
/* Copyright 2017 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* eslint-disable no-restricted-globals */
|
||||
|
||||
if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('MOZCENTRAL')) {
|
||||
if (typeof ReadableStream === 'undefined') {
|
||||
throw new Error('Please enable ReadableStream support by resetting the ' +
|
||||
'"javascript.options.streams" preference to "true" in about:config.');
|
||||
}
|
||||
exports.ReadableStream = ReadableStream;
|
||||
} else {
|
||||
let isReadableStreamSupported = false;
|
||||
if (typeof ReadableStream !== 'undefined') {
|
||||
// MS Edge may say it has ReadableStream but they are not up to spec yet.
|
||||
try {
|
||||
// eslint-disable-next-line no-new
|
||||
new ReadableStream({
|
||||
start(controller) {
|
||||
controller.close();
|
||||
},
|
||||
});
|
||||
isReadableStreamSupported = true;
|
||||
} catch (e) {
|
||||
// The ReadableStream constructor cannot be used.
|
||||
}
|
||||
}
|
||||
if (isReadableStreamSupported) {
|
||||
exports.ReadableStream = ReadableStream;
|
||||
} else if (typeof PDFJSDev !== 'undefined' &&
|
||||
PDFJSDev.test('IMAGE_DECODERS')) {
|
||||
class DummyReadableStream {
|
||||
constructor() {
|
||||
throw new Error('The current image decoders are synchronous, ' +
|
||||
'hence `ReadableStream` shouldn\'t need to be ' +
|
||||
'polyfilled for the IMAGE_DECODERS build target.');
|
||||
}
|
||||
}
|
||||
exports.ReadableStream = DummyReadableStream;
|
||||
} else {
|
||||
exports.ReadableStream =
|
||||
require('web-streams-polyfill/dist/ponyfill').ReadableStream;
|
||||
}
|
||||
}
|
@ -15,7 +15,6 @@
|
||||
/* eslint no-var: error */
|
||||
|
||||
import './compatibility';
|
||||
import { ReadableStream } from './streams_polyfill';
|
||||
|
||||
const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
|
||||
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
|
||||
@ -930,7 +929,6 @@ export {
|
||||
readUint16,
|
||||
readUint32,
|
||||
removeNullCharacters,
|
||||
ReadableStream,
|
||||
setVerbosityLevel,
|
||||
shadow,
|
||||
string32,
|
||||
|
@ -16,8 +16,7 @@
|
||||
import {
|
||||
bytesToString, createPromiseCapability, createValidAbsoluteUrl, isArrayBuffer,
|
||||
isBool, isEmptyObj, isNum, isSameOrigin, isSpace, isString, log2,
|
||||
ReadableStream, removeNullCharacters, string32, stringToBytes,
|
||||
stringToPDFString
|
||||
removeNullCharacters, string32, stringToBytes, stringToPDFString
|
||||
} from '../../src/shared/util';
|
||||
|
||||
describe('util', function() {
|
||||
|
Loading…
Reference in New Issue
Block a user