/* Copyright 2020 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 process */ import { isNodeJS, warn } from "../shared/util.js"; import { BaseBinaryDataFactory } from "./binary_data_factory.js"; import { BaseCanvasFactory } from "./canvas_factory.js"; import { BaseFilterFactory } from "./filter_factory.js"; if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) { throw new Error( 'Module "./node_utils.js" shall not be used with MOZCENTRAL builds.' ); } if (isNodeJS) { if (typeof PDFJSDev === "undefined" || PDFJSDev.test("SKIP_BABEL")) { warn("Please use the `legacy` build in Node.js environments."); } else { let canvas; try { const require = process .getBuiltinModule("module") .createRequire(import.meta.url); try { canvas = require("@napi-rs/canvas"); } catch (ex) { warn(`Cannot load "@napi-rs/canvas" package: "${ex}".`); } } catch (ex) { warn(`Cannot access the \`require\` function: "${ex}".`); } if (!globalThis.DOMMatrix) { if (canvas?.DOMMatrix) { globalThis.DOMMatrix = canvas.DOMMatrix; } else { warn("Cannot polyfill `DOMMatrix`, rendering may be broken."); } } if (!globalThis.ImageData) { if (canvas?.ImageData) { globalThis.ImageData = canvas.ImageData; } else { warn("Cannot polyfill `ImageData`, rendering may be broken."); } } if (!globalThis.Path2D) { if (canvas?.Path2D) { globalThis.Path2D = canvas.Path2D; } else { warn("Cannot polyfill `Path2D`, rendering may be broken."); } } if (!globalThis.navigator?.language) { globalThis.navigator = { language: "en-US", platform: "", userAgent: "", }; } } } async function fetchData(url) { const fs = process.getBuiltinModule("fs/promises"); const data = await fs.readFile(url); return new Uint8Array(data); } class NodeFilterFactory extends BaseFilterFactory {} class NodeCanvasFactory extends BaseCanvasFactory { /** * @ignore */ _createCanvas(width, height) { const require = process .getBuiltinModule("module") .createRequire(import.meta.url); const canvas = require("@napi-rs/canvas"); return canvas.createCanvas(width, height); } } class NodeBinaryDataFactory extends BaseBinaryDataFactory { /** * @ignore */ async _fetch(url, kind) { return fetchData(url); } } export { fetchData, NodeBinaryDataFactory, NodeCanvasFactory, NodeFilterFactory, };