This patch updates the minimum supported browsers as follows: - Safari 15.4, which was released on 2022-03-15; see https://en.wikipedia.org/wiki/Safari_version_history#Safari_15 Nowadays we usually we try, where feasible and possible, to support browsers that are about two years old. The reasons for limiting support to a *somewhat* more recent Safari version include: - Throughout the history of the PDF.js project, Safari has always been the worst browser to attempt to support. Compared to other browsers there's a disproportionate number of bugs affecting Safari, especially on iOS, and in most cases those are browser-specific issues that we simply cannot address.[1] - Safari has often been a lot slower, compared to other browsers, at implementing new web-platform features. Historically this has sometimes blocked usage of new features, for the benefit of the Firefox PDF Viewer, and it's very often meant having to include and maintain polyfills *only* for Safari. - The current (minimum) supported Safari version lack enough functionality that polyfills placed in the `src/shared/compatibility.js` file are unfortunately not sufficient, but it also requires a bunch of special-cases in both the `gulpfile` and in the `web/`-code. - Given that the *built-in* Firefox PDF Viewer is the primary development target for the PDF.js library, and the general development pace these days, we need to limit the maintenance "overhead" caused by other browsers. --- [1] In a few cases a work-around might be possible, however it'd negatively affect e.g. performance, readability, and/or maintainability of the code.
62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
/* 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.
|
|
*/
|
|
/* globals __non_webpack_require__ */
|
|
|
|
import { isNodeJS } from "./is_node.js";
|
|
|
|
// Support: Node.js
|
|
(function checkDOMMatrix() {
|
|
if (globalThis.DOMMatrix || !isNodeJS) {
|
|
return;
|
|
}
|
|
globalThis.DOMMatrix = __non_webpack_require__("canvas").DOMMatrix;
|
|
})();
|
|
|
|
// Support: Node.js
|
|
(function checkPath2D() {
|
|
if (globalThis.Path2D || !isNodeJS) {
|
|
return;
|
|
}
|
|
const { CanvasRenderingContext2D } = __non_webpack_require__("canvas");
|
|
const { polyfillPath2D } = __non_webpack_require__("path2d-polyfill");
|
|
|
|
globalThis.CanvasRenderingContext2D = CanvasRenderingContext2D;
|
|
polyfillPath2D(globalThis);
|
|
})();
|
|
|
|
// Support: Chrome<92
|
|
(function checkArrayAt() {
|
|
if (Array.prototype.at) {
|
|
return;
|
|
}
|
|
require("core-js/es/array/at.js");
|
|
})();
|
|
|
|
// Support: Chrome<92
|
|
(function checkTypedArrayAt() {
|
|
if (Uint8Array.prototype.at) {
|
|
return;
|
|
}
|
|
require("core-js/es/typed-array/at.js");
|
|
})();
|
|
|
|
// Support: Chrome<98
|
|
(function checkStructuredClone() {
|
|
if (globalThis.structuredClone) {
|
|
return;
|
|
}
|
|
require("core-js/web/structured-clone.js");
|
|
})();
|