Change how src/shared/compatibility.js is imported

Currently the compatibility-file is loaded using a standard `import`-statement and while its code is enclosed in a pre-processor block, and thus is excluded in e.g. the MOZCENTRAL build-target, it still results in the *built* `pdf.js`/`pdf.worker.js` files having an effectively empty closure as a result.
By moving the checks from `src/shared/compatibility.js` and into `src/shared/util.js` instead, we can load the file using a build-time `require`-statement and thus avoid that closure.

Note that with these changes the compatibility-file will no longer be loaded in development mode, i.e. when `gulp server` is used. However, this shouldn't be a big issue given that none of its included polyfills could be loaded then anyway (since `require`-statements are being used) and that it's really only intended for the `legacy`-builds of the library.
This commit is contained in:
Jonas Jenwald 2022-09-25 16:18:11 +02:00
parent 2c38a14a14
commit 3e625994bd
2 changed files with 71 additions and 71 deletions

View File

@ -16,15 +16,8 @@
import { isNodeJS } from "./is_node.js"; import { isNodeJS } from "./is_node.js";
// Skip compatibility checks for modern builds and if we already ran the module. // Support: Node.js<16.0.0
if ( (function checkNodeBtoa() {
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("SKIP_BABEL")) &&
!globalThis._pdfjsCompatibilityChecked
) {
globalThis._pdfjsCompatibilityChecked = true;
// Support: Node.js<16.0.0
(function checkNodeBtoa() {
if (globalThis.btoa || !isNodeJS) { if (globalThis.btoa || !isNodeJS) {
return; return;
} }
@ -32,10 +25,10 @@ if (
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
return Buffer.from(chars, "binary").toString("base64"); return Buffer.from(chars, "binary").toString("base64");
}; };
})(); })();
// Support: Node.js<16.0.0 // Support: Node.js<16.0.0
(function checkNodeAtob() { (function checkNodeAtob() {
if (globalThis.atob || !isNodeJS) { if (globalThis.atob || !isNodeJS) {
return; return;
} }
@ -43,44 +36,44 @@ if (
// eslint-disable-next-line no-undef // eslint-disable-next-line no-undef
return Buffer.from(input, "base64").toString("binary"); return Buffer.from(input, "base64").toString("binary");
}; };
})(); })();
// Support: Node.js // Support: Node.js
(function checkDOMMatrix() { (function checkDOMMatrix() {
if (globalThis.DOMMatrix || !isNodeJS) { if (globalThis.DOMMatrix || !isNodeJS) {
return; return;
} }
globalThis.DOMMatrix = __non_webpack_require__("canvas").DOMMatrix; globalThis.DOMMatrix = __non_webpack_require__("canvas").DOMMatrix;
})(); })();
// Support: Node.js // Support: Node.js
(function checkReadableStream() { (function checkReadableStream() {
if (globalThis.ReadableStream || !isNodeJS) { if (globalThis.ReadableStream || !isNodeJS) {
return; return;
} }
globalThis.ReadableStream = __non_webpack_require__( globalThis.ReadableStream = __non_webpack_require__(
"web-streams-polyfill/dist/ponyfill.js" "web-streams-polyfill/dist/ponyfill.js"
).ReadableStream; ).ReadableStream;
})(); })();
// Support: Firefox<90, Chrome<92, Safari<15.4, Node.js<16.6.0 // Support: Firefox<90, Chrome<92, Safari<15.4, Node.js<16.6.0
(function checkArrayAt() { (function checkArrayAt() {
if (Array.prototype.at) { if (Array.prototype.at) {
return; return;
} }
require("core-js/es/array/at.js"); require("core-js/es/array/at.js");
})(); })();
// Support: Firefox<90, Chrome<92, Safari<15.4, Node.js<16.6.0 // Support: Firefox<90, Chrome<92, Safari<15.4, Node.js<16.6.0
(function checkTypedArrayAt() { (function checkTypedArrayAt() {
if (Uint8Array.prototype.at) { if (Uint8Array.prototype.at) {
return; return;
} }
require("core-js/es/typed-array/at.js"); require("core-js/es/typed-array/at.js");
})(); })();
// Support: Firefox<94, Chrome<98, Safari<15.4, Node.js<17.0.0 // Support: Firefox<94, Chrome<98, Safari<15.4, Node.js<17.0.0
(function checkStructuredClone() { (function checkStructuredClone() {
if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("IMAGE_DECODERS")) { if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("IMAGE_DECODERS")) {
// The current image decoders are synchronous, hence `structuredClone` // The current image decoders are synchronous, hence `structuredClone`
// shouldn't need to be polyfilled for the IMAGE_DECODERS build target. // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.
@ -90,5 +83,4 @@ if (
return; return;
} }
require("core-js/web/structured-clone.js"); require("core-js/web/structured-clone.js");
})(); })();
}

View File

@ -13,7 +13,15 @@
* limitations under the License. * limitations under the License.
*/ */
import "./compatibility.js"; // Skip compatibility checks for modern builds and if we already ran the module.
if (
typeof PDFJSDev !== "undefined" &&
!PDFJSDev.test("SKIP_BABEL") &&
!globalThis._pdfjsCompatibilityChecked
) {
globalThis._pdfjsCompatibilityChecked = true;
require("./compatibility.js");
}
const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];