Merge pull request #15951 from Snuffleupagus/polyfill-Path2D

Polyfill `Path2D` in Node.js environments
This commit is contained in:
Tim van der Meij 2023-01-28 19:06:54 +01:00 committed by GitHub
commit ee3be2f979
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 237 additions and 2462 deletions

View File

@ -2206,6 +2206,7 @@ function packageJson() {
canvas: "^2.11.0", canvas: "^2.11.0",
}, },
dependencies: { dependencies: {
"path2d-polyfill": "^2.0.1",
"web-streams-polyfill": "^3.2.1", "web-streams-polyfill": "^3.2.1",
}, },
browser: { browser: {

2673
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -39,6 +39,7 @@
"merge-stream": "^2.0.0", "merge-stream": "^2.0.0",
"mkdirp": "^2.1.3", "mkdirp": "^2.1.3",
"needle": "^3.2.0", "needle": "^3.2.0",
"path2d-polyfill": "^2.0.1",
"postcss": "^8.4.21", "postcss": "^8.4.21",
"postcss-dir-pseudo-class": "^7.0.0", "postcss-dir-pseudo-class": "^7.0.0",
"postcss-logical": "^5.0.4", "postcss-logical": "^5.0.4",

View File

@ -38,7 +38,6 @@ import {
TilingPattern, TilingPattern,
} from "./pattern_helper.js"; } from "./pattern_helper.js";
import { applyMaskImageData } from "../shared/image_utils.js"; import { applyMaskImageData } from "../shared/image_utils.js";
import { isNodeJS } from "../shared/is_node.js";
// <canvas> contexts store most of the state we need natively. // <canvas> contexts store most of the state we need natively.
// However, PDF needs a bit more state, which we store here. // However, PDF needs a bit more state, which we store here.
@ -55,13 +54,7 @@ const EXECUTION_TIME = 15; // ms
const EXECUTION_STEPS = 10; const EXECUTION_STEPS = 10;
// To disable Type3 compilation, set the value to `-1`. // To disable Type3 compilation, set the value to `-1`.
const MAX_SIZE_TO_COMPILE = const MAX_SIZE_TO_COMPILE = 1000;
typeof PDFJSDev !== "undefined" &&
PDFJSDev.test("GENERIC") &&
isNodeJS &&
typeof Path2D === "undefined"
? -1
: 1000;
const FULL_CHUNK_HEIGHT = 16; const FULL_CHUNK_HEIGHT = 16;

View File

@ -21,7 +21,6 @@ import {
Util, Util,
} from "../shared/util.js"; } from "../shared/util.js";
import { getCurrentTransform } from "./display_utils.js"; import { getCurrentTransform } from "./display_utils.js";
import { isNodeJS } from "../shared/is_node.js";
const PathType = { const PathType = {
FILL: "Fill", FILL: "Fill",
@ -30,7 +29,7 @@ const PathType = {
}; };
function applyBoundingBox(ctx, bbox) { function applyBoundingBox(ctx, bbox) {
if (!bbox || isNodeJS) { if (!bbox) {
return; return;
} }
const width = bbox[2] - bbox[0]; const width = bbox[2] - bbox[0];

View File

@ -46,6 +46,18 @@ import { isNodeJS } from "./is_node.js";
globalThis.DOMMatrix = __non_webpack_require__("canvas").DOMMatrix; 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: Node.js // Support: Node.js
(function checkReadableStream() { (function checkReadableStream() {
if (globalThis.ReadableStream || !isNodeJS) { if (globalThis.ReadableStream || !isNodeJS) {