Merge pull request #12563 from Snuffleupagus/rm-SystemJS-worker
[api-minor] Remove SystemJS usage, in development mode, from the worker
This commit is contained in:
commit
f31b320113
@ -28,7 +28,6 @@
|
||||
"globals": {
|
||||
"PDFJSDev": false,
|
||||
"exports": false,
|
||||
"SystemJS": false,
|
||||
},
|
||||
|
||||
"rules": {
|
||||
|
152
external/systemjs/plugin-babel-cached.js
vendored
152
external/systemjs/plugin-babel-cached.js
vendored
@ -1,152 +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-var */
|
||||
|
||||
var babel = require("plugin-babel");
|
||||
|
||||
var cacheExpiration = 60 /* min */ * 60 * 1000;
|
||||
var dbVersion = 1;
|
||||
var dbName = "babelcache";
|
||||
var dbCacheTable = "translated";
|
||||
var dbPromise;
|
||||
|
||||
function getDb() {
|
||||
if (!dbPromise) {
|
||||
dbPromise = new Promise(function (resolve, reject) {
|
||||
var request = indexedDB.open(dbName, dbVersion);
|
||||
request.onupgradeneeded = function () {
|
||||
var db = request.result;
|
||||
db.createObjectStore(dbCacheTable, { keyPath: "address" });
|
||||
};
|
||||
request.onsuccess = function () {
|
||||
var db = request.result;
|
||||
resolve(db);
|
||||
};
|
||||
request.onerror = function () {
|
||||
console.warn("getDb: " + request.error);
|
||||
reject(request.error);
|
||||
};
|
||||
});
|
||||
}
|
||||
return dbPromise;
|
||||
}
|
||||
|
||||
function storeCache(address, hashCode, translated, format, sourceMap) {
|
||||
return getDb().then(function (db) {
|
||||
var tx = db.transaction(dbCacheTable, "readwrite");
|
||||
var store = tx.objectStore(dbCacheTable);
|
||||
store.put({
|
||||
address,
|
||||
hashCode,
|
||||
translated,
|
||||
expires: Date.now() + cacheExpiration,
|
||||
format,
|
||||
sourceMap,
|
||||
});
|
||||
return new Promise(function (resolve, reject) {
|
||||
tx.oncomplete = function () {
|
||||
resolve();
|
||||
};
|
||||
tx.onerror = function () {
|
||||
resolve();
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function loadCache(address, hashCode) {
|
||||
return getDb().then(function (db) {
|
||||
var tx = db.transaction(dbCacheTable, "readonly");
|
||||
var store = tx.objectStore(dbCacheTable);
|
||||
var getAddress = store.get(address);
|
||||
return new Promise(function (resolve, reject) {
|
||||
tx.oncomplete = function () {
|
||||
var found = getAddress.result;
|
||||
var isValid =
|
||||
found && found.hashCode === hashCode && Date.now() < found.expires;
|
||||
resolve(
|
||||
isValid
|
||||
? {
|
||||
translated: found.translated,
|
||||
format: found.format,
|
||||
sourceMap: found.sourceMap,
|
||||
}
|
||||
: null
|
||||
);
|
||||
};
|
||||
tx.onerror = function () {
|
||||
resolve(null);
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var encoder = new TextEncoder("utf-8");
|
||||
function sha256(str) {
|
||||
var buffer = encoder.encode(str);
|
||||
return crypto.subtle.digest("SHA-256", buffer).then(function (hash) {
|
||||
var data = new Int32Array(hash);
|
||||
return (
|
||||
data[0].toString(36) +
|
||||
"-" +
|
||||
data[1].toString(36) +
|
||||
"-" +
|
||||
data[2].toString(36) +
|
||||
"-" +
|
||||
data[3].toString(36)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
exports.translate = function (load, opt) {
|
||||
var savedHashCode, babelTranslateError;
|
||||
return sha256(load.source)
|
||||
.then(function (hashCode) {
|
||||
savedHashCode = hashCode;
|
||||
return loadCache(load.address, hashCode);
|
||||
})
|
||||
.then(
|
||||
function (cache) {
|
||||
if (cache) {
|
||||
load.metadata.format = cache.format;
|
||||
return cache.translated;
|
||||
}
|
||||
return babel.translate.call(this, load, opt).then(
|
||||
function (translated) {
|
||||
return storeCache(
|
||||
load.address,
|
||||
savedHashCode,
|
||||
translated,
|
||||
load.metadata.format,
|
||||
load.metadata.sourceMap
|
||||
).then(function () {
|
||||
return translated;
|
||||
});
|
||||
},
|
||||
function (reason) {
|
||||
throw (babelTranslateError = reason);
|
||||
}
|
||||
);
|
||||
}.bind(this)
|
||||
)
|
||||
.catch(
|
||||
function (reason) {
|
||||
if (babelTranslateError) {
|
||||
throw babelTranslateError;
|
||||
}
|
||||
return babel.translate.call(this, load, opt);
|
||||
}.bind(this)
|
||||
);
|
||||
};
|
26
package-lock.json
generated
26
package-lock.json
generated
@ -55,8 +55,6 @@
|
||||
"streamqueue": "^1.1.2",
|
||||
"stylelint": "^15.6.0",
|
||||
"stylelint-prettier": "^3.0.0",
|
||||
"systemjs": "^0.21.6",
|
||||
"systemjs-plugin-babel": "^0.0.25",
|
||||
"terser": "^5.17.1",
|
||||
"through2": "^4.0.2",
|
||||
"ttest": "^4.0.0",
|
||||
@ -17482,18 +17480,6 @@
|
||||
"integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/systemjs": {
|
||||
"version": "0.21.6",
|
||||
"resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.21.6.tgz",
|
||||
"integrity": "sha512-R+5S9eV9vcQgWOoS4D87joZ4xkFJHb19ZsyKY07D1+VBDE9bwYcU+KXE0r5XlDA8mFoJGyuWDbfrNoh90JsA8g==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/systemjs-plugin-babel": {
|
||||
"version": "0.0.25",
|
||||
"resolved": "https://registry.npmjs.org/systemjs-plugin-babel/-/systemjs-plugin-babel-0.0.25.tgz",
|
||||
"integrity": "sha512-RMKSizWWlw4+IpDB385ugxn7Owd9W+HEtjYDQ6yO1FpsnER/vk6FbXRweUF+mvRi6EHgk8vDdUdtui7ReDwX3w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/table": {
|
||||
"version": "6.8.1",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
|
||||
@ -32651,18 +32637,6 @@
|
||||
"integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
|
||||
"dev": true
|
||||
},
|
||||
"systemjs": {
|
||||
"version": "0.21.6",
|
||||
"resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.21.6.tgz",
|
||||
"integrity": "sha512-R+5S9eV9vcQgWOoS4D87joZ4xkFJHb19ZsyKY07D1+VBDE9bwYcU+KXE0r5XlDA8mFoJGyuWDbfrNoh90JsA8g==",
|
||||
"dev": true
|
||||
},
|
||||
"systemjs-plugin-babel": {
|
||||
"version": "0.0.25",
|
||||
"resolved": "https://registry.npmjs.org/systemjs-plugin-babel/-/systemjs-plugin-babel-0.0.25.tgz",
|
||||
"integrity": "sha512-RMKSizWWlw4+IpDB385ugxn7Owd9W+HEtjYDQ6yO1FpsnER/vk6FbXRweUF+mvRi6EHgk8vDdUdtui7ReDwX3w==",
|
||||
"dev": true
|
||||
},
|
||||
"table": {
|
||||
"version": "6.8.1",
|
||||
"resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
|
||||
|
@ -48,8 +48,6 @@
|
||||
"streamqueue": "^1.1.2",
|
||||
"stylelint": "^15.6.0",
|
||||
"stylelint-prettier": "^3.0.0",
|
||||
"systemjs": "^0.21.6",
|
||||
"systemjs-plugin-babel": "^0.0.25",
|
||||
"terser": "^5.17.1",
|
||||
"through2": "^4.0.2",
|
||||
"ttest": "^4.0.0",
|
||||
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2017,
|
||||
},
|
||||
|
||||
"extends": [
|
||||
"../../.eslintrc"
|
||||
],
|
||||
|
||||
"env": {
|
||||
"es2017": true,
|
||||
},
|
||||
}
|
@ -1556,11 +1556,10 @@ class WidgetAnnotation extends Annotation {
|
||||
|
||||
this.setDefaultAppearance(params);
|
||||
|
||||
data.hasAppearance =
|
||||
(this._needAppearances &&
|
||||
data.hasAppearance ||=
|
||||
this._needAppearances &&
|
||||
data.fieldValue !== undefined &&
|
||||
data.fieldValue !== null) ||
|
||||
data.hasAppearance;
|
||||
data.fieldValue !== null;
|
||||
|
||||
const fieldType = getInheritableProperty({ dict, key: "FT" });
|
||||
data.fieldType = fieldType instanceof Name ? fieldType.name : null;
|
||||
@ -1808,7 +1807,7 @@ class WidgetAnnotation extends Annotation {
|
||||
if (!this._hasValueFromXFA && rotation === undefined) {
|
||||
return null;
|
||||
}
|
||||
value = value || this.data.fieldValue;
|
||||
value ||= this.data.fieldValue;
|
||||
}
|
||||
|
||||
// Value can be an array (with choice list and multiple selections)
|
||||
@ -3472,7 +3471,7 @@ class LinkAnnotation extends Annotation {
|
||||
}
|
||||
|
||||
// The color entry for a link annotation is the color of the border.
|
||||
this.data.borderColor = this.data.borderColor || this.data.color;
|
||||
this.data.borderColor ||= this.data.color;
|
||||
|
||||
Catalog.parseDestDictionary({
|
||||
destDict: params.dict,
|
||||
|
@ -985,12 +985,8 @@ class Catalog {
|
||||
} else if (typeof js !== "string") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (javaScript === null) {
|
||||
javaScript = new Map();
|
||||
}
|
||||
js = stringToPDFString(js).replaceAll("\x00", "");
|
||||
javaScript.set(name, js);
|
||||
(javaScript ||= new Map()).set(name, js);
|
||||
}
|
||||
|
||||
if (obj instanceof Dict && obj.has("JavaScript")) {
|
||||
|
@ -14,7 +14,7 @@
|
||||
*/
|
||||
|
||||
import { arrayBuffersToBytes, MissingDataException } from "./core_utils.js";
|
||||
import { assert, createPromiseCapability } from "../shared/util.js";
|
||||
import { assert, PromiseCapability } from "../shared/util.js";
|
||||
import { Stream } from "./stream.js";
|
||||
|
||||
class ChunkedStream extends Stream {
|
||||
@ -275,7 +275,7 @@ class ChunkedStreamManager {
|
||||
this.progressiveDataLength = 0;
|
||||
this.aborted = false;
|
||||
|
||||
this._loadedStreamCapability = createPromiseCapability();
|
||||
this._loadedStreamCapability = new PromiseCapability();
|
||||
}
|
||||
|
||||
sendRequest(begin, end) {
|
||||
@ -349,7 +349,7 @@ class ChunkedStreamManager {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
const capability = createPromiseCapability();
|
||||
const capability = new PromiseCapability();
|
||||
this._promisesByRequest.set(requestId, capability);
|
||||
|
||||
const chunksToRequest = [];
|
||||
|
@ -1220,9 +1220,9 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
||||
"WhitePoint missing - required for color space CalRGB"
|
||||
);
|
||||
}
|
||||
blackPoint = blackPoint || new Float32Array(3);
|
||||
gamma = gamma || new Float32Array([1, 1, 1]);
|
||||
matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
||||
blackPoint ||= new Float32Array(3);
|
||||
gamma ||= new Float32Array([1, 1, 1]);
|
||||
matrix ||= new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
||||
|
||||
// Translate arguments to spec variables.
|
||||
const XW = whitePoint[0];
|
||||
@ -1396,8 +1396,8 @@ const LabCS = (function LabCSClosure() {
|
||||
"WhitePoint missing - required for color space Lab"
|
||||
);
|
||||
}
|
||||
blackPoint = blackPoint || [0, 0, 0];
|
||||
range = range || [-100, 100, -100, 100];
|
||||
blackPoint ||= [0, 0, 0];
|
||||
range ||= [-100, 100, -100, 100];
|
||||
|
||||
// Translate args to spec variables
|
||||
this.XW = whitePoint[0];
|
||||
|
@ -38,22 +38,6 @@ function getLookupTableFactory(initializer) {
|
||||
};
|
||||
}
|
||||
|
||||
function getArrayLookupTableFactory(initializer) {
|
||||
let lookup;
|
||||
return function () {
|
||||
if (initializer) {
|
||||
let arr = initializer();
|
||||
initializer = null;
|
||||
lookup = Object.create(null);
|
||||
for (let i = 0, ii = arr.length; i < ii; i += 2) {
|
||||
lookup[arr[i]] = arr[i + 1];
|
||||
}
|
||||
arr = null;
|
||||
}
|
||||
return lookup;
|
||||
};
|
||||
}
|
||||
|
||||
class MissingDataException extends BaseException {
|
||||
constructor(begin, end) {
|
||||
super(`Missing data [${begin}, ${end})`, "MissingDataException");
|
||||
@ -153,10 +137,7 @@ function getInheritableProperty({
|
||||
if (stopWhenFound) {
|
||||
return value;
|
||||
}
|
||||
if (!values) {
|
||||
values = [];
|
||||
}
|
||||
values.push(value);
|
||||
(values ||= []).push(value);
|
||||
}
|
||||
dict = dict.get("Parent");
|
||||
}
|
||||
@ -338,7 +319,7 @@ function _collectJS(entry, xref, list, parents) {
|
||||
} else if (typeof js === "string") {
|
||||
code = js;
|
||||
}
|
||||
code = code && stringToPDFString(code).replaceAll("\x00", "");
|
||||
code &&= stringToPDFString(code).replaceAll("\x00", "");
|
||||
if (code) {
|
||||
list.push(code);
|
||||
}
|
||||
@ -616,7 +597,6 @@ export {
|
||||
encodeToXmlString,
|
||||
escapePDFName,
|
||||
escapeString,
|
||||
getArrayLookupTableFactory,
|
||||
getInheritableProperty,
|
||||
getLookupTableFactory,
|
||||
getNewAnnotationsMap,
|
||||
|
@ -495,12 +495,8 @@ class Page {
|
||||
for (const { opList, separateForm, separateCanvas } of opLists) {
|
||||
pageOpList.addOpList(opList);
|
||||
|
||||
if (separateForm) {
|
||||
form = separateForm;
|
||||
}
|
||||
if (separateCanvas) {
|
||||
canvas = separateCanvas;
|
||||
}
|
||||
form ||= separateForm;
|
||||
canvas ||= separateCanvas;
|
||||
}
|
||||
pageOpList.flush(
|
||||
/* lastChunk = */ true,
|
||||
@ -580,8 +576,8 @@ class Page {
|
||||
return [];
|
||||
}
|
||||
|
||||
const textContentPromises = [];
|
||||
const annotationsData = [];
|
||||
const annotationsData = [],
|
||||
textContentPromises = [];
|
||||
let partialEvaluator;
|
||||
|
||||
const intentAny = !!(intent & RenderingIntentFlag.ANY),
|
||||
@ -597,8 +593,7 @@ class Page {
|
||||
}
|
||||
|
||||
if (annotation.hasTextContent && isVisible) {
|
||||
if (!partialEvaluator) {
|
||||
partialEvaluator = new PartialEvaluator({
|
||||
partialEvaluator ||= new PartialEvaluator({
|
||||
xref: this.xref,
|
||||
handler,
|
||||
pageIndex: this.pageIndex,
|
||||
@ -609,7 +604,7 @@ class Page {
|
||||
globalImageCache: this.globalImageCache,
|
||||
options: this.evaluatorOptions,
|
||||
});
|
||||
}
|
||||
|
||||
textContentPromises.push(
|
||||
annotation
|
||||
.extractTextContent(partialEvaluator, task, this.view)
|
||||
@ -665,10 +660,7 @@ class Page {
|
||||
continue;
|
||||
}
|
||||
if (annotation instanceof PopupAnnotation) {
|
||||
if (!popupAnnotations) {
|
||||
popupAnnotations = [];
|
||||
}
|
||||
popupAnnotations.push(annotation);
|
||||
(popupAnnotations ||= []).push(annotation);
|
||||
continue;
|
||||
}
|
||||
sortedAnnotations.push(annotation);
|
||||
|
@ -18,7 +18,6 @@ import {
|
||||
AbortException,
|
||||
assert,
|
||||
CMapCompressionType,
|
||||
createPromiseCapability,
|
||||
FONT_IDENTITY_MATRIX,
|
||||
FormatError,
|
||||
IDENTITY_MATRIX,
|
||||
@ -26,6 +25,7 @@ import {
|
||||
isArrayEqual,
|
||||
normalizeUnicode,
|
||||
OPS,
|
||||
PromiseCapability,
|
||||
shadow,
|
||||
stringToPDFString,
|
||||
TextRenderingMode,
|
||||
@ -182,13 +182,9 @@ function incrementCachedImageMaskCount(data) {
|
||||
|
||||
// Trying to minimize Date.now() usage and check every 100 time.
|
||||
class TimeSlotManager {
|
||||
static get TIME_SLOT_DURATION_MS() {
|
||||
return shadow(this, "TIME_SLOT_DURATION_MS", 20);
|
||||
}
|
||||
static TIME_SLOT_DURATION_MS = 20;
|
||||
|
||||
static get CHECK_TIME_EVERY() {
|
||||
return shadow(this, "CHECK_TIME_EVERY", 100);
|
||||
}
|
||||
static CHECK_TIME_EVERY = 100;
|
||||
|
||||
constructor() {
|
||||
this.reset();
|
||||
@ -519,7 +515,7 @@ class PartialEvaluator {
|
||||
}
|
||||
|
||||
if (smask && smask.backdrop) {
|
||||
colorSpace = colorSpace || ColorSpace.singletons.rgb;
|
||||
colorSpace ||= ColorSpace.singletons.rgb;
|
||||
smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
|
||||
}
|
||||
|
||||
@ -1253,7 +1249,7 @@ class PartialEvaluator {
|
||||
return this.fontCache.get(font.cacheKey);
|
||||
}
|
||||
|
||||
const fontCapability = createPromiseCapability();
|
||||
const fontCapability = new PromiseCapability();
|
||||
|
||||
let preEvaluatedFont;
|
||||
try {
|
||||
@ -1272,10 +1268,7 @@ class PartialEvaluator {
|
||||
}
|
||||
|
||||
if (hash && descriptor instanceof Dict) {
|
||||
if (!descriptor.fontAliases) {
|
||||
descriptor.fontAliases = Object.create(null);
|
||||
}
|
||||
const fontAliases = descriptor.fontAliases;
|
||||
const fontAliases = (descriptor.fontAliases ||= Object.create(null));
|
||||
|
||||
if (fontAliases[hash]) {
|
||||
const aliasFontRef = fontAliases[hash].aliasRef;
|
||||
@ -1668,8 +1661,8 @@ class PartialEvaluator {
|
||||
}) {
|
||||
// Ensure that `resources`/`initialState` is correctly initialized,
|
||||
// even if the provided parameter is e.g. `null`.
|
||||
resources = resources || Dict.empty;
|
||||
initialState = initialState || new EvalState();
|
||||
resources ||= Dict.empty;
|
||||
initialState ||= new EvalState();
|
||||
|
||||
if (!operatorList) {
|
||||
throw new Error('getOperatorList: missing "operatorList" parameter');
|
||||
@ -2276,11 +2269,11 @@ class PartialEvaluator {
|
||||
}) {
|
||||
// Ensure that `resources`/`stateManager` is correctly initialized,
|
||||
// even if the provided parameter is e.g. `null`.
|
||||
resources = resources || Dict.empty;
|
||||
stateManager = stateManager || new StateManager(new TextState());
|
||||
resources ||= Dict.empty;
|
||||
stateManager ||= new StateManager(new TextState());
|
||||
|
||||
if (includeMarkedContent) {
|
||||
markedContentData = markedContentData || { level: 0 };
|
||||
markedContentData ||= { level: 0 };
|
||||
}
|
||||
|
||||
const textContent = {
|
||||
@ -4255,7 +4248,7 @@ class PartialEvaluator {
|
||||
}
|
||||
}
|
||||
}
|
||||
fontName = fontName || baseFont;
|
||||
fontName ||= baseFont;
|
||||
|
||||
if (!(fontName instanceof Name)) {
|
||||
throw new FormatError("invalid font name");
|
||||
@ -4841,9 +4834,7 @@ class EvaluatorPreprocessor {
|
||||
return shadow(this, "opMap", getOPMap());
|
||||
}
|
||||
|
||||
static get MAX_INVALID_PATH_OPS() {
|
||||
return shadow(this, "MAX_INVALID_PATH_OPS", 10);
|
||||
}
|
||||
static MAX_INVALID_PATH_OPS = 10;
|
||||
|
||||
constructor(stream, xref, stateManager = new StateManager()) {
|
||||
// TODO(mduan): pass array of knownCommands rather than this.opMap
|
||||
|
@ -743,7 +743,7 @@ function validateOS2Table(os2, file) {
|
||||
}
|
||||
|
||||
function createOS2Table(properties, charstrings, override) {
|
||||
override = override || {
|
||||
override ||= {
|
||||
unitsPerEm: 0,
|
||||
yMax: 0,
|
||||
yMin: 0,
|
||||
@ -3090,10 +3090,7 @@ class Font {
|
||||
let charCodes = null;
|
||||
for (const charCode in charCodeToGlyphId) {
|
||||
if (glyphId === charCodeToGlyphId[charCode]) {
|
||||
if (!charCodes) {
|
||||
charCodes = [];
|
||||
}
|
||||
charCodes.push(charCode | 0);
|
||||
(charCodes ||= []).push(charCode | 0);
|
||||
}
|
||||
}
|
||||
return charCodes;
|
||||
@ -3285,8 +3282,7 @@ class Font {
|
||||
break; // the non-zero width found
|
||||
}
|
||||
}
|
||||
width = width || this.defaultWidth;
|
||||
return shadow(this, "spaceWidth", width);
|
||||
return shadow(this, "spaceWidth", width || this.defaultWidth);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -513,9 +513,7 @@ function isPDFFunction(v) {
|
||||
}
|
||||
|
||||
class PostScriptStack {
|
||||
static get MAX_STACK_SIZE() {
|
||||
return shadow(this, "MAX_STACK_SIZE", 100);
|
||||
}
|
||||
static MAX_STACK_SIZE = 100;
|
||||
|
||||
constructor(initialStack) {
|
||||
this.stack = initialStack ? Array.from(initialStack) : [];
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,6 @@
|
||||
import {
|
||||
assert,
|
||||
MAX_IMAGE_SIZE_TO_CACHE,
|
||||
shadow,
|
||||
unreachable,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
@ -173,17 +172,11 @@ class RegionalImageCache extends BaseLocalCache {
|
||||
}
|
||||
|
||||
class GlobalImageCache {
|
||||
static get NUM_PAGES_THRESHOLD() {
|
||||
return shadow(this, "NUM_PAGES_THRESHOLD", 2);
|
||||
}
|
||||
static NUM_PAGES_THRESHOLD = 2;
|
||||
|
||||
static get MIN_IMAGES_TO_CACHE() {
|
||||
return shadow(this, "MIN_IMAGES_TO_CACHE", 10);
|
||||
}
|
||||
static MIN_IMAGES_TO_CACHE = 10;
|
||||
|
||||
static get MAX_BYTE_SIZE() {
|
||||
return shadow(this, "MAX_BYTE_SIZE", 5 * MAX_IMAGE_SIZE_TO_CACHE);
|
||||
}
|
||||
static MAX_BYTE_SIZE = 5 * MAX_IMAGE_SIZE_TO_CACHE;
|
||||
|
||||
constructor() {
|
||||
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
|
||||
|
@ -1738,41 +1738,43 @@ class InclusionTree {
|
||||
}
|
||||
|
||||
// Section D. Coefficient bit modeling
|
||||
const BitModel = (function BitModelClosure() {
|
||||
const UNIFORM_CONTEXT = 17;
|
||||
const RUNLENGTH_CONTEXT = 18;
|
||||
class BitModel {
|
||||
static UNIFORM_CONTEXT = 17;
|
||||
|
||||
static RUNLENGTH_CONTEXT = 18;
|
||||
|
||||
// Table D-1
|
||||
// The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
|
||||
// vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
|
||||
const LLAndLHContextsLabel = new Uint8Array([
|
||||
static LLAndLHContextsLabel = new Uint8Array([
|
||||
0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
|
||||
7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
|
||||
8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8,
|
||||
]);
|
||||
const HLContextLabel = new Uint8Array([
|
||||
|
||||
static HLContextLabel = new Uint8Array([
|
||||
0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
|
||||
8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
|
||||
4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8,
|
||||
]);
|
||||
const HHContextLabel = new Uint8Array([
|
||||
|
||||
static HHContextLabel = new Uint8Array([
|
||||
0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
|
||||
5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
|
||||
8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8,
|
||||
]);
|
||||
|
||||
// eslint-disable-next-line no-shadow
|
||||
class BitModel {
|
||||
constructor(width, height, subband, zeroBitPlanes, mb) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
|
||||
let contextLabelTable;
|
||||
if (subband === "HH") {
|
||||
contextLabelTable = HHContextLabel;
|
||||
contextLabelTable = BitModel.HHContextLabel;
|
||||
} else if (subband === "HL") {
|
||||
contextLabelTable = HLContextLabel;
|
||||
contextLabelTable = BitModel.HLContextLabel;
|
||||
} else {
|
||||
contextLabelTable = LLAndLHContextsLabel;
|
||||
contextLabelTable = BitModel.LLAndLHContextsLabel;
|
||||
}
|
||||
this.contextLabelTable = contextLabelTable;
|
||||
|
||||
@ -1816,8 +1818,8 @@ const BitModel = (function BitModelClosure() {
|
||||
// Contexts are packed into 1 byte:
|
||||
// highest 7 bits carry the index, lowest bit carries mps
|
||||
this.contexts[0] = (4 << 1) | 0;
|
||||
this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;
|
||||
this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;
|
||||
this.contexts[BitModel.UNIFORM_CONTEXT] = (46 << 1) | 0;
|
||||
this.contexts[BitModel.RUNLENGTH_CONTEXT] = (3 << 1) | 0;
|
||||
}
|
||||
|
||||
setNeighborsSignificance(row, column, index) {
|
||||
@ -2044,7 +2046,7 @@ const BitModel = (function BitModelClosure() {
|
||||
if (allEmpty) {
|
||||
const hasSignificantCoefficent = decoder.readBit(
|
||||
contexts,
|
||||
RUNLENGTH_CONTEXT
|
||||
BitModel.RUNLENGTH_CONTEXT
|
||||
);
|
||||
if (!hasSignificantCoefficent) {
|
||||
bitsDecoded[index0]++;
|
||||
@ -2054,8 +2056,8 @@ const BitModel = (function BitModelClosure() {
|
||||
continue; // next column
|
||||
}
|
||||
i1 =
|
||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
|
||||
decoder.readBit(contexts, UNIFORM_CONTEXT);
|
||||
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
|
||||
decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
|
||||
if (i1 !== 0) {
|
||||
i = i0 + i1;
|
||||
index += i1 * width;
|
||||
@ -2101,18 +2103,15 @@ const BitModel = (function BitModelClosure() {
|
||||
const decoder = this.decoder;
|
||||
const contexts = this.contexts;
|
||||
const symbol =
|
||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |
|
||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |
|
||||
(decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
|
||||
decoder.readBit(contexts, UNIFORM_CONTEXT);
|
||||
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 3) |
|
||||
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 2) |
|
||||
(decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT) << 1) |
|
||||
decoder.readBit(contexts, BitModel.UNIFORM_CONTEXT);
|
||||
if (symbol !== 0xa) {
|
||||
throw new JpxError("Invalid segmentation symbol");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return BitModel;
|
||||
})();
|
||||
}
|
||||
|
||||
// Section F, Discrete wavelet transformation
|
||||
class Transform {
|
||||
|
@ -13,19 +13,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
ImageKind,
|
||||
OPS,
|
||||
RenderingIntentFlag,
|
||||
shadow,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import { ImageKind, OPS, RenderingIntentFlag, warn } from "../shared/util.js";
|
||||
|
||||
function addState(parentState, pattern, checkFn, iterateFn, processFn) {
|
||||
let state = parentState;
|
||||
for (let i = 0, ii = pattern.length - 1; i < ii; i++) {
|
||||
const item = pattern[i];
|
||||
state = state[item] || (state[item] = []);
|
||||
state = state[item] ||= [];
|
||||
}
|
||||
state[pattern.at(-1)] = {
|
||||
checkFn,
|
||||
@ -586,14 +580,10 @@ class QueueOptimizer extends NullOptimizer {
|
||||
}
|
||||
|
||||
class OperatorList {
|
||||
static get CHUNK_SIZE() {
|
||||
return shadow(this, "CHUNK_SIZE", 1000);
|
||||
}
|
||||
static CHUNK_SIZE = 1000;
|
||||
|
||||
// Close to chunk size.
|
||||
static get CHUNK_SIZE_ABOUT() {
|
||||
return shadow(this, "CHUNK_SIZE_ABOUT", this.CHUNK_SIZE - 5);
|
||||
}
|
||||
static CHUNK_SIZE_ABOUT = this.CHUNK_SIZE - 5;
|
||||
|
||||
constructor(intent = 0, streamSink) {
|
||||
this._streamSink = streamSink;
|
||||
|
@ -896,7 +896,7 @@ class Lexer {
|
||||
throw new FormatError(msg);
|
||||
}
|
||||
|
||||
sign = sign || 1;
|
||||
sign ||= 1;
|
||||
let baseValue = ch - 0x30; // '0'
|
||||
let powerValue = 0;
|
||||
let powerValueSign = 1;
|
||||
|
@ -17,7 +17,6 @@ import {
|
||||
assert,
|
||||
FormatError,
|
||||
info,
|
||||
shadow,
|
||||
unreachable,
|
||||
Util,
|
||||
warn,
|
||||
@ -89,9 +88,7 @@ class Pattern {
|
||||
class BaseShading {
|
||||
// A small number to offset the first/last color stops so we can insert ones
|
||||
// to support extend. Number.MIN_VALUE is too small and breaks the extend.
|
||||
static get SMALL_NUMBER() {
|
||||
return shadow(this, "SMALL_NUMBER", 1e-6);
|
||||
}
|
||||
static SMALL_NUMBER = 1e-6;
|
||||
|
||||
constructor() {
|
||||
if (this.constructor === BaseShading) {
|
||||
@ -366,29 +363,20 @@ const getB = (function getBClosure() {
|
||||
}
|
||||
return lut;
|
||||
}
|
||||
const cache = [];
|
||||
const cache = Object.create(null);
|
||||
|
||||
return function (count) {
|
||||
if (!cache[count]) {
|
||||
cache[count] = buildB(count);
|
||||
}
|
||||
return cache[count];
|
||||
return (cache[count] ||= buildB(count));
|
||||
};
|
||||
})();
|
||||
|
||||
class MeshShading extends BaseShading {
|
||||
static get MIN_SPLIT_PATCH_CHUNKS_AMOUNT() {
|
||||
return shadow(this, "MIN_SPLIT_PATCH_CHUNKS_AMOUNT", 3);
|
||||
}
|
||||
static MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
|
||||
|
||||
static get MAX_SPLIT_PATCH_CHUNKS_AMOUNT() {
|
||||
return shadow(this, "MAX_SPLIT_PATCH_CHUNKS_AMOUNT", 20);
|
||||
}
|
||||
static MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
|
||||
|
||||
// Count of triangles per entire mesh bounds.
|
||||
static get TRIANGLE_DENSITY() {
|
||||
return shadow(this, "TRIANGLE_DENSITY", 20);
|
||||
}
|
||||
static TRIANGLE_DENSITY = 20;
|
||||
|
||||
constructor(
|
||||
stream,
|
||||
|
@ -48,8 +48,7 @@ class BasePdfManager {
|
||||
|
||||
// Check `OffscreenCanvas` support once, rather than repeatedly throughout
|
||||
// the worker-thread code.
|
||||
args.evaluatorOptions.isOffscreenCanvasSupported =
|
||||
args.evaluatorOptions.isOffscreenCanvasSupported &&
|
||||
args.evaluatorOptions.isOffscreenCanvasSupported &&=
|
||||
FeatureTest.isOffscreenCanvasSupported;
|
||||
this.evaluatorOptions = args.evaluatorOptions;
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ class Name {
|
||||
|
||||
static get(name) {
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
return NameCache[name] || (NameCache[name] = new Name(name));
|
||||
return (NameCache[name] ||= new Name(name));
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ class Cmd {
|
||||
|
||||
static get(cmd) {
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
return CmdCache[cmd] || (CmdCache[cmd] = new Cmd(cmd));
|
||||
return (CmdCache[cmd] ||= new Cmd(cmd));
|
||||
}
|
||||
}
|
||||
|
||||
@ -282,7 +282,7 @@ class Ref {
|
||||
static get(num, gen) {
|
||||
const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
|
||||
// eslint-disable-next-line no-restricted-syntax
|
||||
return RefCache[key] || (RefCache[key] = new Ref(num, gen));
|
||||
return (RefCache[key] ||= new Ref(num, gen));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,11 +120,7 @@ class PostScriptToken {
|
||||
}
|
||||
|
||||
static getOperator(op) {
|
||||
const opValue = PostScriptToken.opCache[op];
|
||||
if (opValue) {
|
||||
return opValue;
|
||||
}
|
||||
return (PostScriptToken.opCache[op] = new PostScriptToken(
|
||||
return (PostScriptToken.opCache[op] ||= new PostScriptToken(
|
||||
PostScriptTokenTypes.OPERATOR,
|
||||
op
|
||||
));
|
||||
|
@ -12,7 +12,6 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* no-babel-preset */
|
||||
|
||||
import { getLookupTableFactory } from "./core_utils.js";
|
||||
|
||||
|
@ -16,12 +16,12 @@
|
||||
import {
|
||||
AbortException,
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
getVerbosityLevel,
|
||||
info,
|
||||
InvalidPDFException,
|
||||
MissingPDFException,
|
||||
PasswordException,
|
||||
PromiseCapability,
|
||||
setVerbosityLevel,
|
||||
stringToPDFString,
|
||||
UnexpectedResponseException,
|
||||
@ -46,7 +46,7 @@ class WorkerTask {
|
||||
constructor(name) {
|
||||
this.name = name;
|
||||
this.terminated = false;
|
||||
this._capability = createPromiseCapability();
|
||||
this._capability = new PromiseCapability();
|
||||
}
|
||||
|
||||
get finished() {
|
||||
@ -228,7 +228,7 @@ class WorkerMessageHandler {
|
||||
password,
|
||||
rangeChunkSize,
|
||||
};
|
||||
const pdfManagerCapability = createPromiseCapability();
|
||||
const pdfManagerCapability = new PromiseCapability();
|
||||
let newPdfManager;
|
||||
|
||||
if (data) {
|
||||
@ -261,8 +261,7 @@ class WorkerMessageHandler {
|
||||
pdfManagerArgs.source = pdfStream;
|
||||
pdfManagerArgs.length = fullRequest.contentLength;
|
||||
// We don't need auto-fetch when streaming is enabled.
|
||||
pdfManagerArgs.disableAutoFetch =
|
||||
pdfManagerArgs.disableAutoFetch || fullRequest.isStreamingSupported;
|
||||
pdfManagerArgs.disableAutoFetch ||= fullRequest.isStreamingSupported;
|
||||
|
||||
newPdfManager = new NetworkPdfManager(pdfManagerArgs);
|
||||
// There may be a chance that `newPdfManager` is not initialized for
|
||||
@ -661,7 +660,6 @@ class WorkerMessageHandler {
|
||||
});
|
||||
}
|
||||
|
||||
const lastXRefStreamPos = xref.lastXRefStreamPos;
|
||||
newXrefInfo = {
|
||||
rootRef: xref.trailer.getRaw("Root") || null,
|
||||
encryptRef: xref.trailer.getRaw("Encrypt") || null,
|
||||
@ -669,8 +667,7 @@ class WorkerMessageHandler {
|
||||
infoRef: xref.trailer.getRaw("Info") || null,
|
||||
info: infoObj,
|
||||
fileIds: xref.trailer.get("ID") || null,
|
||||
startXRef:
|
||||
lastXRefStreamPos === null ? startXRef : lastXRefStreamPos,
|
||||
startXRef: xref.lastXRefStreamPos ?? startXRef,
|
||||
filename,
|
||||
};
|
||||
}
|
||||
|
@ -275,7 +275,7 @@ class SimpleExprParser {
|
||||
}
|
||||
|
||||
parse(tok) {
|
||||
tok = tok || this.lexer.next();
|
||||
tok ||= this.lexer.next();
|
||||
|
||||
while (true) {
|
||||
// Token ids (see form_lexer.js) are consecutive in order
|
||||
@ -1005,7 +1005,7 @@ class Parser {
|
||||
}
|
||||
|
||||
parseExpr(tok) {
|
||||
tok = tok || this.lexer.next();
|
||||
tok ||= this.lexer.next();
|
||||
switch (tok.id) {
|
||||
case TOKEN.identifier:
|
||||
return this.parseAssigmentOrExpr(tok);
|
||||
|
@ -107,10 +107,7 @@ class XFAParser extends XMLParserBase {
|
||||
nsAttrs = attributeObj[$nsAttributes] = Object.create(null);
|
||||
}
|
||||
const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];
|
||||
let attrs = nsAttrs[ns];
|
||||
if (!attrs) {
|
||||
attrs = nsAttrs[ns] = Object.create(null);
|
||||
}
|
||||
const attrs = (nsAttrs[ns] ||= Object.create(null));
|
||||
attrs[attrName] = value;
|
||||
}
|
||||
}
|
||||
|
@ -5573,8 +5573,7 @@ class Template extends XFAObject {
|
||||
const flush = index => {
|
||||
const html = root[$flushHTML]();
|
||||
if (html) {
|
||||
hasSomething =
|
||||
hasSomething || (html.children && html.children.length !== 0);
|
||||
hasSomething ||= !!html.children && html.children.length !== 0;
|
||||
htmlContentAreas[index].children.push(html);
|
||||
}
|
||||
};
|
||||
@ -5597,9 +5596,8 @@ class Template extends XFAObject {
|
||||
const html = root[$toHTML](space);
|
||||
if (html.success) {
|
||||
if (html.html) {
|
||||
hasSomething =
|
||||
hasSomething ||
|
||||
(html.html.children && html.html.children.length !== 0);
|
||||
hasSomething ||=
|
||||
!!html.html.children && html.html.children.length !== 0;
|
||||
htmlContentAreas[i].children.push(html.html);
|
||||
} else if (!hasSomething && mainHtml.children.length > 1) {
|
||||
mainHtml.children.pop();
|
||||
|
@ -75,7 +75,7 @@ function getStringOption(data, options) {
|
||||
}
|
||||
|
||||
function getMeasurement(str, def = "0") {
|
||||
def = def || "0";
|
||||
def ||= "0";
|
||||
if (!str) {
|
||||
return getMeasurement(def);
|
||||
}
|
||||
|
@ -451,7 +451,7 @@ class AnnotationElement {
|
||||
_createPopup(trigger, data) {
|
||||
let container = this.container;
|
||||
if (this.quadrilaterals) {
|
||||
trigger = trigger || this.quadrilaterals;
|
||||
trigger ||= this.quadrilaterals;
|
||||
container = this.quadrilaterals[0];
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,6 @@ import {
|
||||
AbortException,
|
||||
AnnotationMode,
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
getVerbosityLevel,
|
||||
info,
|
||||
InvalidPDFException,
|
||||
@ -29,6 +28,7 @@ import {
|
||||
MAX_IMAGE_SIZE_TO_CACHE,
|
||||
MissingPDFException,
|
||||
PasswordException,
|
||||
PromiseCapability,
|
||||
RenderingIntentFlag,
|
||||
setVerbosityLevel,
|
||||
shadow,
|
||||
@ -588,7 +588,7 @@ class PDFDocumentLoadingTask {
|
||||
static #docId = 0;
|
||||
|
||||
constructor() {
|
||||
this._capability = createPromiseCapability();
|
||||
this._capability = new PromiseCapability();
|
||||
this._transport = null;
|
||||
this._worker = null;
|
||||
|
||||
@ -675,7 +675,7 @@ class PDFDataRangeTransport {
|
||||
this._progressListeners = [];
|
||||
this._progressiveReadListeners = [];
|
||||
this._progressiveDoneListeners = [];
|
||||
this._readyCapability = createPromiseCapability();
|
||||
this._readyCapability = new PromiseCapability();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1460,7 +1460,7 @@ class PDFPageProxy {
|
||||
// If there's no displayReadyCapability yet, then the operatorList
|
||||
// was never requested before. Make the request and create the promise.
|
||||
if (!intentState.displayReadyCapability) {
|
||||
intentState.displayReadyCapability = createPromiseCapability();
|
||||
intentState.displayReadyCapability = new PromiseCapability();
|
||||
intentState.operatorList = {
|
||||
fnArray: [],
|
||||
argsArray: [],
|
||||
@ -1578,7 +1578,7 @@ class PDFPageProxy {
|
||||
if (!intentState.opListReadCapability) {
|
||||
opListTask = Object.create(null);
|
||||
opListTask.operatorListChanged = operatorListChanged;
|
||||
intentState.opListReadCapability = createPromiseCapability();
|
||||
intentState.opListReadCapability = new PromiseCapability();
|
||||
(intentState.renderTasks ||= new Set()).add(opListTask);
|
||||
intentState.operatorList = {
|
||||
fnArray: [],
|
||||
@ -2054,7 +2054,7 @@ class PDFWorker {
|
||||
this.destroyed = false;
|
||||
this.verbosity = verbosity;
|
||||
|
||||
this._readyCapability = createPromiseCapability();
|
||||
this._readyCapability = new PromiseCapability();
|
||||
this._port = null;
|
||||
this._webWorker = null;
|
||||
this._messageHandler = null;
|
||||
@ -2130,12 +2130,9 @@ class PDFWorker {
|
||||
);
|
||||
}
|
||||
|
||||
// Some versions of FF can't create a worker on localhost, see:
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=683280
|
||||
const worker =
|
||||
typeof PDFJSDev === "undefined" &&
|
||||
!workerSrc.endsWith("/build/pdf.worker.js") &&
|
||||
!workerSrc.endsWith("/src/worker_loader.js")
|
||||
!workerSrc.endsWith("/build/pdf.worker.js")
|
||||
? new Worker(workerSrc, { type: "module" })
|
||||
: new Worker(workerSrc);
|
||||
const messageHandler = new MessageHandler("main", "worker", worker);
|
||||
@ -2391,7 +2388,7 @@ class WorkerTransport {
|
||||
this._networkStream = networkStream;
|
||||
this._fullReader = null;
|
||||
this._lastProgress = null;
|
||||
this.downloadInfoCapability = createPromiseCapability();
|
||||
this.downloadInfoCapability = new PromiseCapability();
|
||||
|
||||
this.setupMessageHandler();
|
||||
|
||||
@ -2490,7 +2487,7 @@ class WorkerTransport {
|
||||
}
|
||||
|
||||
this.destroyed = true;
|
||||
this.destroyCapability = createPromiseCapability();
|
||||
this.destroyCapability = new PromiseCapability();
|
||||
|
||||
if (this._passwordCapability) {
|
||||
this._passwordCapability.reject(
|
||||
@ -2584,7 +2581,7 @@ class WorkerTransport {
|
||||
});
|
||||
|
||||
messageHandler.on("ReaderHeadersReady", data => {
|
||||
const headersCapability = createPromiseCapability();
|
||||
const headersCapability = new PromiseCapability();
|
||||
const fullReader = this._fullReader;
|
||||
fullReader.headersReady.then(() => {
|
||||
// If stream or range are disabled, it's our only way to report
|
||||
@ -2699,7 +2696,7 @@ class WorkerTransport {
|
||||
});
|
||||
|
||||
messageHandler.on("PasswordRequest", exception => {
|
||||
this._passwordCapability = createPromiseCapability();
|
||||
this._passwordCapability = new PromiseCapability();
|
||||
|
||||
if (loadingTask.onPassword) {
|
||||
const updatePassword = password => {
|
||||
@ -3120,7 +3117,7 @@ class PDFObjects {
|
||||
return obj;
|
||||
}
|
||||
return (this.#objs[objId] = {
|
||||
capability: createPromiseCapability(),
|
||||
capability: new PromiseCapability(),
|
||||
data: null,
|
||||
});
|
||||
}
|
||||
@ -3280,7 +3277,7 @@ class InternalRenderTask {
|
||||
this._useRequestAnimationFrame =
|
||||
useRequestAnimationFrame === true && typeof window !== "undefined";
|
||||
this.cancelled = false;
|
||||
this.capability = createPromiseCapability();
|
||||
this.capability = new PromiseCapability();
|
||||
this.task = new RenderTask(this);
|
||||
// caching this-bound methods
|
||||
this._cancelBound = this.cancel.bind(this);
|
||||
@ -3360,9 +3357,7 @@ class InternalRenderTask {
|
||||
|
||||
operatorListChanged() {
|
||||
if (!this.graphicsReady) {
|
||||
if (!this.graphicsReadyCallback) {
|
||||
this.graphicsReadyCallback = this._continueBound;
|
||||
}
|
||||
this.graphicsReadyCallback ||= this._continueBound;
|
||||
return;
|
||||
}
|
||||
this.stepper?.updateOperatorList(this.operatorList);
|
||||
|
@ -16,7 +16,7 @@
|
||||
import {
|
||||
AbortException,
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
PromiseCapability,
|
||||
warn,
|
||||
} from "../shared/util.js";
|
||||
import {
|
||||
@ -118,7 +118,7 @@ class PDFFetchStreamReader {
|
||||
const source = stream.source;
|
||||
this._withCredentials = source.withCredentials || false;
|
||||
this._contentLength = source.length;
|
||||
this._headersCapability = createPromiseCapability();
|
||||
this._headersCapability = new PromiseCapability();
|
||||
this._disableRange = source.disableRange || false;
|
||||
this._rangeChunkSize = source.rangeChunkSize;
|
||||
if (!this._rangeChunkSize && !this._disableRange) {
|
||||
@ -224,7 +224,7 @@ class PDFFetchStreamRangeReader {
|
||||
this._loaded = 0;
|
||||
const source = stream.source;
|
||||
this._withCredentials = source.withCredentials || false;
|
||||
this._readCapability = createPromiseCapability();
|
||||
this._readCapability = new PromiseCapability();
|
||||
this._isStreamingSupported = !source.disableStream;
|
||||
|
||||
this._abortController = new AbortController();
|
||||
|
@ -13,11 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
stringToBytes,
|
||||
} from "../shared/util.js";
|
||||
import { assert, PromiseCapability, stringToBytes } from "../shared/util.js";
|
||||
import {
|
||||
createResponseStatusError,
|
||||
extractFilenameFromHeader,
|
||||
@ -259,7 +255,7 @@ class PDFNetworkStreamFullRequestReader {
|
||||
};
|
||||
this._url = source.url;
|
||||
this._fullRequestId = manager.requestFull(args);
|
||||
this._headersReceivedCapability = createPromiseCapability();
|
||||
this._headersReceivedCapability = new PromiseCapability();
|
||||
this._disableRange = source.disableRange || false;
|
||||
this._contentLength = source.length; // Optional
|
||||
this._rangeChunkSize = source.rangeChunkSize;
|
||||
@ -380,7 +376,7 @@ class PDFNetworkStreamFullRequestReader {
|
||||
if (this._done) {
|
||||
return { value: undefined, done: true };
|
||||
}
|
||||
const requestCapability = createPromiseCapability();
|
||||
const requestCapability = new PromiseCapability();
|
||||
this._requests.push(requestCapability);
|
||||
return requestCapability.promise;
|
||||
}
|
||||
@ -471,7 +467,7 @@ class PDFNetworkStreamRangeRequestReader {
|
||||
if (this._done) {
|
||||
return { value: undefined, done: true };
|
||||
}
|
||||
const requestCapability = createPromiseCapability();
|
||||
const requestCapability = new PromiseCapability();
|
||||
this._requests.push(requestCapability);
|
||||
return requestCapability.promise;
|
||||
}
|
||||
|
@ -17,8 +17,8 @@
|
||||
import {
|
||||
AbortException,
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
MissingPDFException,
|
||||
PromiseCapability,
|
||||
} from "../shared/util.js";
|
||||
import {
|
||||
extractFilenameFromHeader,
|
||||
@ -124,8 +124,8 @@ class BaseFullReader {
|
||||
this._isRangeSupported = !source.disableRange;
|
||||
|
||||
this._readableStream = null;
|
||||
this._readCapability = createPromiseCapability();
|
||||
this._headersCapability = createPromiseCapability();
|
||||
this._readCapability = new PromiseCapability();
|
||||
this._headersCapability = new PromiseCapability();
|
||||
}
|
||||
|
||||
get headersReady() {
|
||||
@ -159,7 +159,7 @@ class BaseFullReader {
|
||||
|
||||
const chunk = this._readableStream.read();
|
||||
if (chunk === null) {
|
||||
this._readCapability = createPromiseCapability();
|
||||
this._readCapability = new PromiseCapability();
|
||||
return this.read();
|
||||
}
|
||||
this._loaded += chunk.length;
|
||||
@ -226,7 +226,7 @@ class BaseRangeReader {
|
||||
this.onProgress = null;
|
||||
this._loaded = 0;
|
||||
this._readableStream = null;
|
||||
this._readCapability = createPromiseCapability();
|
||||
this._readCapability = new PromiseCapability();
|
||||
const source = stream.source;
|
||||
this._isStreamingSupported = !source.disableStream;
|
||||
}
|
||||
@ -246,7 +246,7 @@ class BaseRangeReader {
|
||||
|
||||
const chunk = this._readableStream.read();
|
||||
if (chunk === null) {
|
||||
this._readCapability = createPromiseCapability();
|
||||
this._readCapability = new PromiseCapability();
|
||||
return this.read();
|
||||
}
|
||||
this._loaded += chunk.length;
|
||||
|
@ -13,13 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
FormatError,
|
||||
info,
|
||||
shadow,
|
||||
unreachable,
|
||||
Util,
|
||||
} from "../shared/util.js";
|
||||
import { FormatError, info, unreachable, Util } from "../shared/util.js";
|
||||
import { getCurrentTransform } from "./display_utils.js";
|
||||
|
||||
const PathType = {
|
||||
@ -462,9 +456,7 @@ const PaintType = {
|
||||
|
||||
class TilingPattern {
|
||||
// 10in @ 300dpi shall be enough.
|
||||
static get MAX_PATTERN_SIZE() {
|
||||
return shadow(this, "MAX_PATTERN_SIZE", 3000);
|
||||
}
|
||||
static MAX_PATTERN_SIZE = 3000;
|
||||
|
||||
constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
|
||||
this.operatorList = IR[2];
|
||||
|
@ -18,8 +18,8 @@
|
||||
|
||||
import {
|
||||
AbortException,
|
||||
createPromiseCapability,
|
||||
FeatureTest,
|
||||
PromiseCapability,
|
||||
Util,
|
||||
} from "../shared/util.js";
|
||||
import { deprecated, setLayerDimensions } from "./display_utils.js";
|
||||
@ -317,7 +317,7 @@ class TextLayerRenderTask {
|
||||
this._reader = null;
|
||||
this._textDivProperties = textDivProperties || new WeakMap();
|
||||
this._canceled = false;
|
||||
this._capability = createPromiseCapability();
|
||||
this._capability = new PromiseCapability();
|
||||
this._layoutTextParams = {
|
||||
prevFontSize: null,
|
||||
prevFontFamily: null,
|
||||
@ -417,7 +417,7 @@ class TextLayerRenderTask {
|
||||
* @private
|
||||
*/
|
||||
_render() {
|
||||
const capability = createPromiseCapability();
|
||||
const capability = new PromiseCapability();
|
||||
let styleCache = Object.create(null);
|
||||
|
||||
if (this._isReadableStream) {
|
||||
|
@ -13,7 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { assert, createPromiseCapability } from "../shared/util.js";
|
||||
import { assert, PromiseCapability } from "../shared/util.js";
|
||||
import { isPdfFile } from "./display_utils.js";
|
||||
|
||||
/** @implements {IPDFStream} */
|
||||
@ -235,7 +235,7 @@ class PDFDataTransportStreamReader {
|
||||
if (this._done) {
|
||||
return { value: undefined, done: true };
|
||||
}
|
||||
const requestCapability = createPromiseCapability();
|
||||
const requestCapability = new PromiseCapability();
|
||||
this._requests.push(requestCapability);
|
||||
return requestCapability.promise;
|
||||
}
|
||||
@ -300,7 +300,7 @@ class PDFDataTransportStreamRangeReader {
|
||||
if (this._done) {
|
||||
return { value: undefined, done: true };
|
||||
}
|
||||
const requestCapability = createPromiseCapability();
|
||||
const requestCapability = new PromiseCapability();
|
||||
this._requests.push(requestCapability);
|
||||
return requestCapability.promise;
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ import {
|
||||
AnnotationEditorType,
|
||||
AnnotationMode,
|
||||
CMapCompressionType,
|
||||
createPromiseCapability,
|
||||
createValidAbsoluteUrl,
|
||||
FeatureTest,
|
||||
InvalidPDFException,
|
||||
@ -39,6 +38,7 @@ import {
|
||||
OPS,
|
||||
PasswordResponses,
|
||||
PermissionFlag,
|
||||
PromiseCapability,
|
||||
shadow,
|
||||
UnexpectedResponseException,
|
||||
Util,
|
||||
@ -88,7 +88,6 @@ export {
|
||||
AnnotationMode,
|
||||
build,
|
||||
CMapCompressionType,
|
||||
createPromiseCapability,
|
||||
createValidAbsoluteUrl,
|
||||
FeatureTest,
|
||||
getDocument,
|
||||
@ -109,6 +108,7 @@ export {
|
||||
PDFWorker,
|
||||
PermissionFlag,
|
||||
PixelsPerInch,
|
||||
PromiseCapability,
|
||||
RenderingCancelledException,
|
||||
renderTextLayer,
|
||||
setLayerDimensions,
|
||||
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2017,
|
||||
},
|
||||
|
||||
"extends": [
|
||||
"../../.eslintrc"
|
||||
],
|
||||
|
||||
"env": {
|
||||
"es2017": true,
|
||||
},
|
||||
}
|
@ -293,7 +293,7 @@ var Type2Parser = function type2Parser(aFilePath) {
|
||||
font.set(token.name, stack.pop());
|
||||
break;
|
||||
default:
|
||||
if (token.operand && token.operand.length) {
|
||||
if (token.operand?.length) {
|
||||
var array = [];
|
||||
for (var j = 0; j < token.operand.length; j++) {
|
||||
array.push(stack.pop());
|
||||
|
@ -16,9 +16,9 @@
|
||||
import {
|
||||
AbortException,
|
||||
assert,
|
||||
createPromiseCapability,
|
||||
MissingPDFException,
|
||||
PasswordException,
|
||||
PromiseCapability,
|
||||
UnexpectedResponseException,
|
||||
UnknownErrorException,
|
||||
unreachable,
|
||||
@ -87,7 +87,7 @@ class MessageHandler {
|
||||
return;
|
||||
}
|
||||
if (data.stream) {
|
||||
this._processStreamMessage(data);
|
||||
this.#processStreamMessage(data);
|
||||
return;
|
||||
}
|
||||
if (data.callback) {
|
||||
@ -140,7 +140,7 @@ class MessageHandler {
|
||||
return;
|
||||
}
|
||||
if (data.streamId) {
|
||||
this._createStreamSink(data);
|
||||
this.#createStreamSink(data);
|
||||
return;
|
||||
}
|
||||
action(data.data);
|
||||
@ -190,7 +190,7 @@ class MessageHandler {
|
||||
*/
|
||||
sendWithPromise(actionName, data, transfers) {
|
||||
const callbackId = this.callbackId++;
|
||||
const capability = createPromiseCapability();
|
||||
const capability = new PromiseCapability();
|
||||
this.callbackCapabilities[callbackId] = capability;
|
||||
try {
|
||||
this.comObj.postMessage(
|
||||
@ -228,7 +228,7 @@ class MessageHandler {
|
||||
return new ReadableStream(
|
||||
{
|
||||
start: controller => {
|
||||
const startCapability = createPromiseCapability();
|
||||
const startCapability = new PromiseCapability();
|
||||
this.streamControllers[streamId] = {
|
||||
controller,
|
||||
startCall: startCapability,
|
||||
@ -252,7 +252,7 @@ class MessageHandler {
|
||||
},
|
||||
|
||||
pull: controller => {
|
||||
const pullCapability = createPromiseCapability();
|
||||
const pullCapability = new PromiseCapability();
|
||||
this.streamControllers[streamId].pullCall = pullCapability;
|
||||
comObj.postMessage({
|
||||
sourceName,
|
||||
@ -268,7 +268,7 @@ class MessageHandler {
|
||||
|
||||
cancel: reason => {
|
||||
assert(reason instanceof Error, "cancel must have a valid reason");
|
||||
const cancelCapability = createPromiseCapability();
|
||||
const cancelCapability = new PromiseCapability();
|
||||
this.streamControllers[streamId].cancelCall = cancelCapability;
|
||||
this.streamControllers[streamId].isClosed = true;
|
||||
comObj.postMessage({
|
||||
@ -286,10 +286,7 @@ class MessageHandler {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
_createStreamSink(data) {
|
||||
#createStreamSink(data) {
|
||||
const streamId = data.streamId,
|
||||
sourceName = this.sourceName,
|
||||
targetName = data.sourceName,
|
||||
@ -308,7 +305,7 @@ class MessageHandler {
|
||||
// so when it changes from positive to negative,
|
||||
// set ready as unresolved promise.
|
||||
if (lastDesiredSize > 0 && this.desiredSize <= 0) {
|
||||
this.sinkCapability = createPromiseCapability();
|
||||
this.sinkCapability = new PromiseCapability();
|
||||
this.ready = this.sinkCapability.promise;
|
||||
}
|
||||
comObj.postMessage(
|
||||
@ -352,7 +349,7 @@ class MessageHandler {
|
||||
});
|
||||
},
|
||||
|
||||
sinkCapability: createPromiseCapability(),
|
||||
sinkCapability: new PromiseCapability(),
|
||||
onPull: null,
|
||||
onCancel: null,
|
||||
isCancelled: false,
|
||||
@ -388,10 +385,7 @@ class MessageHandler {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
_processStreamMessage(data) {
|
||||
#processStreamMessage(data) {
|
||||
const streamId = data.streamId,
|
||||
sourceName = this.sourceName,
|
||||
targetName = data.sourceName,
|
||||
@ -435,7 +429,7 @@ class MessageHandler {
|
||||
streamSink.desiredSize = data.desiredSize;
|
||||
|
||||
new Promise(function (resolve) {
|
||||
resolve(streamSink.onPull && streamSink.onPull());
|
||||
resolve(streamSink.onPull?.());
|
||||
}).then(
|
||||
function () {
|
||||
comObj.postMessage({
|
||||
@ -471,12 +465,12 @@ class MessageHandler {
|
||||
}
|
||||
streamController.isClosed = true;
|
||||
streamController.controller.close();
|
||||
this._deleteStreamController(streamController, streamId);
|
||||
this.#deleteStreamController(streamController, streamId);
|
||||
break;
|
||||
case StreamKind.ERROR:
|
||||
assert(streamController, "error should have stream controller");
|
||||
streamController.controller.error(wrapReason(data.reason));
|
||||
this._deleteStreamController(streamController, streamId);
|
||||
this.#deleteStreamController(streamController, streamId);
|
||||
break;
|
||||
case StreamKind.CANCEL_COMPLETE:
|
||||
if (data.success) {
|
||||
@ -484,7 +478,7 @@ class MessageHandler {
|
||||
} else {
|
||||
streamController.cancelCall.reject(wrapReason(data.reason));
|
||||
}
|
||||
this._deleteStreamController(streamController, streamId);
|
||||
this.#deleteStreamController(streamController, streamId);
|
||||
break;
|
||||
case StreamKind.CANCEL:
|
||||
if (!streamSink) {
|
||||
@ -492,9 +486,7 @@ class MessageHandler {
|
||||
}
|
||||
|
||||
new Promise(function (resolve) {
|
||||
resolve(
|
||||
streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))
|
||||
);
|
||||
resolve(streamSink.onCancel?.(wrapReason(data.reason)));
|
||||
}).then(
|
||||
function () {
|
||||
comObj.postMessage({
|
||||
@ -524,16 +516,13 @@ class MessageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
async _deleteStreamController(streamController, streamId) {
|
||||
async #deleteStreamController(streamController, streamId) {
|
||||
// Delete the `streamController` only when the start, pull, and cancel
|
||||
// capabilities have settled, to prevent `TypeError`s.
|
||||
await Promise.allSettled([
|
||||
streamController.startCall && streamController.startCall.promise,
|
||||
streamController.pullCall && streamController.pullCall.promise,
|
||||
streamController.cancelCall && streamController.cancelCall.promise,
|
||||
streamController.startCall?.promise,
|
||||
streamController.pullCall?.promise,
|
||||
streamController.cancelCall?.promise,
|
||||
]);
|
||||
delete this.streamControllers[streamId];
|
||||
}
|
||||
|
@ -393,10 +393,7 @@ function assert(cond, msg) {
|
||||
|
||||
// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.
|
||||
function _isValidProtocol(url) {
|
||||
if (!url) {
|
||||
return false;
|
||||
}
|
||||
switch (url.protocol) {
|
||||
switch (url?.protocol) {
|
||||
case "http:":
|
||||
case "https:":
|
||||
case "ftp:":
|
||||
@ -427,7 +424,7 @@ function createValidAbsoluteUrl(url, baseUrl = null, options = null) {
|
||||
const dots = url.match(/\./g);
|
||||
// Avoid accidentally matching a *relative* URL pointing to a file named
|
||||
// e.g. "www.pdf" or similar.
|
||||
if (dots && dots.length >= 2) {
|
||||
if (dots?.length >= 2) {
|
||||
url = `http://${url}`;
|
||||
}
|
||||
}
|
||||
@ -537,11 +534,7 @@ class AbortException extends BaseException {
|
||||
}
|
||||
|
||||
function bytesToString(bytes) {
|
||||
if (
|
||||
typeof bytes !== "object" ||
|
||||
bytes === null ||
|
||||
bytes.length === undefined
|
||||
) {
|
||||
if (typeof bytes !== "object" || bytes?.length === undefined) {
|
||||
unreachable("Invalid argument for bytesToString");
|
||||
}
|
||||
const length = bytes.length;
|
||||
@ -954,7 +947,7 @@ function utf8StringToString(str) {
|
||||
}
|
||||
|
||||
function isArrayBuffer(v) {
|
||||
return typeof v === "object" && v !== null && v.byteLength !== undefined;
|
||||
return typeof v === "object" && v?.byteLength !== undefined;
|
||||
}
|
||||
|
||||
function isArrayEqual(arr1, arr2) {
|
||||
@ -982,42 +975,41 @@ function getModificationDate(date = new Date()) {
|
||||
return buffer.join("");
|
||||
}
|
||||
|
||||
/**
|
||||
* Promise Capability object.
|
||||
*
|
||||
* @typedef {Object} PromiseCapability
|
||||
* @property {Promise<any>} promise - A Promise object.
|
||||
* @property {boolean} settled - If the Promise has been fulfilled/rejected.
|
||||
* @property {function} resolve - Fulfills the Promise.
|
||||
* @property {function} reject - Rejects the Promise.
|
||||
*/
|
||||
class PromiseCapability {
|
||||
#settled = false;
|
||||
|
||||
/**
|
||||
* Creates a promise capability object.
|
||||
* @alias createPromiseCapability
|
||||
*
|
||||
* @returns {PromiseCapability}
|
||||
constructor() {
|
||||
/**
|
||||
* @type {Promise<any>} The Promise object.
|
||||
*/
|
||||
function createPromiseCapability() {
|
||||
const capability = Object.create(null);
|
||||
let isSettled = false;
|
||||
|
||||
Object.defineProperty(capability, "settled", {
|
||||
get() {
|
||||
return isSettled;
|
||||
},
|
||||
});
|
||||
capability.promise = new Promise(function (resolve, reject) {
|
||||
capability.resolve = function (data) {
|
||||
isSettled = true;
|
||||
this.promise = new Promise((resolve, reject) => {
|
||||
/**
|
||||
* @type {function} Fulfills the Promise.
|
||||
*/
|
||||
this.resolve = data => {
|
||||
this.#settled = true;
|
||||
resolve(data);
|
||||
};
|
||||
capability.reject = function (reason) {
|
||||
isSettled = true;
|
||||
|
||||
/**
|
||||
* @type {function} Rejects the Promise.
|
||||
*/
|
||||
this.reject = reason => {
|
||||
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
|
||||
assert(reason instanceof Error, 'Expected valid "reason" argument.');
|
||||
}
|
||||
this.#settled = true;
|
||||
reject(reason);
|
||||
};
|
||||
});
|
||||
return capability;
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {boolean} If the Promise has been fulfilled/rejected.
|
||||
*/
|
||||
get settled() {
|
||||
return this.#settled;
|
||||
}
|
||||
}
|
||||
|
||||
let NormalizeRegex = null;
|
||||
@ -1059,7 +1051,6 @@ export {
|
||||
BASELINE_FACTOR,
|
||||
bytesToString,
|
||||
CMapCompressionType,
|
||||
createPromiseCapability,
|
||||
createValidAbsoluteUrl,
|
||||
DocumentActionEventType,
|
||||
FeatureTest,
|
||||
@ -1085,6 +1076,7 @@ export {
|
||||
PasswordException,
|
||||
PasswordResponses,
|
||||
PermissionFlag,
|
||||
PromiseCapability,
|
||||
RenderingIntentFlag,
|
||||
setVerbosityLevel,
|
||||
shadow,
|
||||
|
@ -1,32 +0,0 @@
|
||||
/* Copyright 2012 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.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
// Patch importScripts to work around a bug in WebKit and Chrome 48-.
|
||||
// See https://crbug.com/572225 and https://webkit.org/b/153317.
|
||||
self.importScripts = (function (importScripts) {
|
||||
return function () {
|
||||
setTimeout(function () {}, 0);
|
||||
return importScripts.apply(this, arguments);
|
||||
};
|
||||
})(importScripts);
|
||||
|
||||
importScripts("../node_modules/systemjs/dist/system.js");
|
||||
importScripts("../systemjs.config.js");
|
||||
|
||||
SystemJS.import("pdfjs/core/worker.js").then(function () {
|
||||
// Worker is loaded at this point.
|
||||
});
|
@ -1,96 +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-var, unicorn/no-typeof-undefined */
|
||||
|
||||
"use strict";
|
||||
|
||||
(function () {
|
||||
var baseLocation;
|
||||
if (typeof document !== "undefined") {
|
||||
baseLocation = new URL("./", document.currentScript.src);
|
||||
} else if (typeof location !== "undefined") {
|
||||
// Probably worker -- walking subfolders until we will reach root.
|
||||
baseLocation = location;
|
||||
while (baseLocation.href.includes("/src/")) {
|
||||
baseLocation = new URL("..", baseLocation);
|
||||
}
|
||||
} else {
|
||||
throw new Error("Cannot configure SystemJS");
|
||||
}
|
||||
|
||||
var PluginBabelPath = "node_modules/systemjs-plugin-babel/plugin-babel.js";
|
||||
var SystemJSPluginBabelPath =
|
||||
"node_modules/systemjs-plugin-babel/systemjs-babel-browser.js";
|
||||
var PluginBabelCachePath = "external/systemjs/plugin-babel-cached.js";
|
||||
|
||||
var isCachingPossible =
|
||||
typeof indexedDB !== "undefined" &&
|
||||
typeof TextEncoder !== "undefined" &&
|
||||
typeof crypto !== "undefined" &&
|
||||
typeof crypto.subtle !== "undefined";
|
||||
|
||||
// When we create a bundle, webpack is run on the source and it will replace
|
||||
// require with __webpack_require__. When we want to use the real require,
|
||||
// __non_webpack_require__ has to be used.
|
||||
// In this target, we don't create a bundle, so we have to replace the
|
||||
// occurrences of __non_webpack_require__ ourselves.
|
||||
function babelPluginReplaceNonWebPackRequire(babel) {
|
||||
return {
|
||||
visitor: {
|
||||
Identifier(path, state) {
|
||||
if (path.node.name === "__non_webpack_require__") {
|
||||
path.replaceWith(babel.types.identifier("require"));
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
SystemJS.config({
|
||||
packages: {
|
||||
"": {
|
||||
defaultExtension: "js",
|
||||
},
|
||||
},
|
||||
paths: {
|
||||
pdfjs: new URL("src", baseLocation).href,
|
||||
"pdfjs-web": new URL("web", baseLocation).href,
|
||||
"pdfjs-test": new URL("test", baseLocation).href,
|
||||
"pdfjs-lib": new URL("src/pdf", baseLocation).href,
|
||||
"core-js": new URL("node_modules/core-js", baseLocation).href,
|
||||
"web-streams-polyfill": new URL(
|
||||
"node_modules/web-streams-polyfill",
|
||||
baseLocation
|
||||
).href,
|
||||
},
|
||||
meta: {
|
||||
"*": {
|
||||
scriptLoad: false,
|
||||
esModule: true,
|
||||
babelOptions: {
|
||||
env: false,
|
||||
plugins: [babelPluginReplaceNonWebPackRequire],
|
||||
},
|
||||
},
|
||||
},
|
||||
map: {
|
||||
"plugin-babel": new URL(PluginBabelPath, baseLocation).href,
|
||||
"systemjs-babel-build": new URL(SystemJSPluginBabelPath, baseLocation)
|
||||
.href,
|
||||
"plugin-babel-cached": new URL(PluginBabelCachePath, baseLocation).href,
|
||||
},
|
||||
transpiler: isCachingPossible ? "plugin-babel-cached" : "plugin-babel",
|
||||
});
|
||||
})();
|
@ -17,10 +17,10 @@
|
||||
const {
|
||||
AnnotationLayer,
|
||||
AnnotationMode,
|
||||
createPromiseCapability,
|
||||
getDocument,
|
||||
GlobalWorkerOptions,
|
||||
PixelsPerInch,
|
||||
PromiseCapability,
|
||||
renderTextLayer,
|
||||
shadow,
|
||||
XfaLayer,
|
||||
@ -922,7 +922,7 @@ class Driver {
|
||||
}
|
||||
|
||||
_send(url, message) {
|
||||
const capability = createPromiseCapability();
|
||||
const capability = new PromiseCapability();
|
||||
this.inflight.textContent = this.inFlightRequests++;
|
||||
|
||||
fetch(url, {
|
||||
|
@ -17,7 +17,6 @@ import {
|
||||
AnnotationEditorType,
|
||||
AnnotationMode,
|
||||
AnnotationType,
|
||||
createPromiseCapability,
|
||||
ImageKind,
|
||||
InvalidPDFException,
|
||||
MissingPDFException,
|
||||
@ -26,6 +25,7 @@ import {
|
||||
PasswordException,
|
||||
PasswordResponses,
|
||||
PermissionFlag,
|
||||
PromiseCapability,
|
||||
UnknownErrorException,
|
||||
} from "../../src/shared/util.js";
|
||||
import {
|
||||
@ -137,7 +137,7 @@ describe("api", function () {
|
||||
const loadingTask = getDocument(basicApiGetDocumentParams);
|
||||
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
|
||||
|
||||
const progressReportedCapability = createPromiseCapability();
|
||||
const progressReportedCapability = new PromiseCapability();
|
||||
// Attach the callback that is used to report loading progress;
|
||||
// similarly to how viewer.js works.
|
||||
loadingTask.onProgress = function (progressData) {
|
||||
@ -199,7 +199,7 @@ describe("api", function () {
|
||||
const loadingTask = getDocument(typedArrayPdf);
|
||||
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
|
||||
|
||||
const progressReportedCapability = createPromiseCapability();
|
||||
const progressReportedCapability = new PromiseCapability();
|
||||
loadingTask.onProgress = function (data) {
|
||||
progressReportedCapability.resolve(data);
|
||||
};
|
||||
@ -229,7 +229,7 @@ describe("api", function () {
|
||||
const loadingTask = getDocument(arrayBufferPdf);
|
||||
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
|
||||
|
||||
const progressReportedCapability = createPromiseCapability();
|
||||
const progressReportedCapability = new PromiseCapability();
|
||||
loadingTask.onProgress = function (data) {
|
||||
progressReportedCapability.resolve(data);
|
||||
};
|
||||
@ -291,8 +291,8 @@ describe("api", function () {
|
||||
const loadingTask = getDocument(buildGetDocumentParams("pr6531_1.pdf"));
|
||||
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
|
||||
|
||||
const passwordNeededCapability = createPromiseCapability();
|
||||
const passwordIncorrectCapability = createPromiseCapability();
|
||||
const passwordNeededCapability = new PromiseCapability();
|
||||
const passwordIncorrectCapability = new PromiseCapability();
|
||||
// Attach the callback that is used to request a password;
|
||||
// similarly to how the default viewer handles passwords.
|
||||
loadingTask.onPassword = function (updatePassword, reason) {
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
import {
|
||||
AbortException,
|
||||
createPromiseCapability,
|
||||
PromiseCapability,
|
||||
UnknownErrorException,
|
||||
} from "../../src/shared/util.js";
|
||||
import { LoopbackPort } from "../../src/display/api.js";
|
||||
@ -338,7 +338,7 @@ describe("message_handler", function () {
|
||||
it("should ignore any pull after close is called", async function () {
|
||||
let log = "";
|
||||
const port = new LoopbackPort();
|
||||
const capability = createPromiseCapability();
|
||||
const capability = new PromiseCapability();
|
||||
const messageHandler2 = new MessageHandler("worker", "main", port);
|
||||
messageHandler2.on("fakeHandler", (data, sink) => {
|
||||
sink.onPull = function () {
|
||||
|
@ -15,10 +15,10 @@
|
||||
|
||||
import {
|
||||
bytesToString,
|
||||
createPromiseCapability,
|
||||
createValidAbsoluteUrl,
|
||||
getModificationDate,
|
||||
isArrayBuffer,
|
||||
PromiseCapability,
|
||||
string32,
|
||||
stringToBytes,
|
||||
stringToPDFString,
|
||||
@ -212,9 +212,9 @@ describe("util", function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe("createPromiseCapability", function () {
|
||||
describe("PromiseCapability", function () {
|
||||
it("should resolve with correct data", async function () {
|
||||
const promiseCapability = createPromiseCapability();
|
||||
const promiseCapability = new PromiseCapability();
|
||||
expect(promiseCapability.settled).toEqual(false);
|
||||
|
||||
promiseCapability.resolve({ test: "abc" });
|
||||
@ -225,7 +225,7 @@ describe("util", function () {
|
||||
});
|
||||
|
||||
it("should reject with correct reason", async function () {
|
||||
const promiseCapability = createPromiseCapability();
|
||||
const promiseCapability = new PromiseCapability();
|
||||
expect(promiseCapability.settled).toEqual(false);
|
||||
|
||||
promiseCapability.reject(new Error("reason"));
|
||||
|
11
web/app.js
11
web/app.js
@ -36,7 +36,6 @@ import {
|
||||
import {
|
||||
AnnotationEditorType,
|
||||
build,
|
||||
createPromiseCapability,
|
||||
FeatureTest,
|
||||
getDocument,
|
||||
getFilenameFromUrl,
|
||||
@ -49,6 +48,7 @@ import {
|
||||
MissingPDFException,
|
||||
OPS,
|
||||
PDFWorker,
|
||||
PromiseCapability,
|
||||
shadow,
|
||||
UnexpectedResponseException,
|
||||
version,
|
||||
@ -156,7 +156,7 @@ class DefaultExternalServices {
|
||||
|
||||
const PDFViewerApplication = {
|
||||
initialBookmark: document.location.hash.substring(1),
|
||||
_initializedCapability: createPromiseCapability(),
|
||||
_initializedCapability: new PromiseCapability(),
|
||||
appConfig: null,
|
||||
pdfDocument: null,
|
||||
pdfLoadingTask: null,
|
||||
@ -309,12 +309,7 @@ const PDFViewerApplication = {
|
||||
const { mainContainer, viewerContainer } = this.appConfig,
|
||||
params = parseQueryString(hash);
|
||||
|
||||
if (
|
||||
typeof PDFJSDev === "undefined" &&
|
||||
params.get("workermodules") === "true"
|
||||
) {
|
||||
AppOptions.set("workerSrc", "../src/pdf.worker.js");
|
||||
} else if (params.get("disableworker") === "true") {
|
||||
if (params.get("disableworker") === "true") {
|
||||
try {
|
||||
await loadFakeWorker();
|
||||
} catch (ex) {
|
||||
|
@ -292,7 +292,7 @@ const defaultOptions = {
|
||||
value:
|
||||
// eslint-disable-next-line no-nested-ternary
|
||||
typeof PDFJSDev === "undefined"
|
||||
? "../src/worker_loader.js"
|
||||
? "../src/pdf.worker.js"
|
||||
: PDFJSDev.test("MOZCENTRAL")
|
||||
? "resource://pdf.js/build/pdf.worker.js"
|
||||
: "../build/pdf.worker.js",
|
||||
|
@ -13,7 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createPromiseCapability, PasswordResponses } from "pdfjs-lib";
|
||||
import { PasswordResponses, PromiseCapability } from "pdfjs-lib";
|
||||
|
||||
/**
|
||||
* @typedef {Object} PasswordPromptOptions
|
||||
@ -69,7 +69,7 @@ class PasswordPrompt {
|
||||
if (this.#activeCapability) {
|
||||
await this.#activeCapability.promise;
|
||||
}
|
||||
this.#activeCapability = createPromiseCapability();
|
||||
this.#activeCapability = new PromiseCapability();
|
||||
|
||||
try {
|
||||
await this.overlayManager.open(this.dialog);
|
||||
|
@ -13,7 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createPromiseCapability, getFilenameFromUrl } from "pdfjs-lib";
|
||||
import { getFilenameFromUrl, PromiseCapability } from "pdfjs-lib";
|
||||
import { BaseTreeViewer } from "./base_tree_viewer.js";
|
||||
import { waitOnEventOrTimeout } from "./event_utils.js";
|
||||
|
||||
@ -50,7 +50,7 @@ class PDFAttachmentViewer extends BaseTreeViewer {
|
||||
if (!keepRenderedCapability) {
|
||||
// The only situation in which the `_renderedCapability` should *not* be
|
||||
// replaced is when appending FileAttachment annotations.
|
||||
this._renderedCapability = createPromiseCapability();
|
||||
this._renderedCapability = new PromiseCapability();
|
||||
}
|
||||
this._pendingDispatchEvent = false;
|
||||
}
|
||||
|
@ -13,8 +13,8 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createPromiseCapability, PDFDateString } from "pdfjs-lib";
|
||||
import { getPageSizeInches, isPortraitOrientation } from "./ui_utils.js";
|
||||
import { PDFDateString, PromiseCapability } from "pdfjs-lib";
|
||||
|
||||
const DEFAULT_FIELD_CONTENT = "-";
|
||||
|
||||
@ -201,7 +201,7 @@ class PDFDocumentProperties {
|
||||
this.pdfDocument = null;
|
||||
|
||||
this.#fieldData = null;
|
||||
this._dataAvailableCapability = createPromiseCapability();
|
||||
this._dataAvailableCapability = new PromiseCapability();
|
||||
this._currentPageNumber = 1;
|
||||
this._pagesRotation = 0;
|
||||
}
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
import { binarySearchFirstItem, scrollIntoView } from "./ui_utils.js";
|
||||
import { getCharacterType, getNormalizeWithNFKC } from "./pdf_find_utils.js";
|
||||
import { createPromiseCapability } from "pdfjs-lib";
|
||||
import { PromiseCapability } from "pdfjs-lib";
|
||||
|
||||
const FindState = {
|
||||
FOUND: 0,
|
||||
@ -582,7 +582,7 @@ class PDFFindController {
|
||||
clearTimeout(this._findTimeout);
|
||||
this._findTimeout = null;
|
||||
|
||||
this._firstPageCapability = createPromiseCapability();
|
||||
this._firstPageCapability = new PromiseCapability();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -849,7 +849,7 @@ class PDFFindController {
|
||||
let promise = Promise.resolve();
|
||||
const textOptions = { disableNormalization: true };
|
||||
for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
|
||||
const extractTextCapability = createPromiseCapability();
|
||||
const extractTextCapability = new PromiseCapability();
|
||||
this._extractTextPromises[i] = extractTextCapability.promise;
|
||||
|
||||
promise = promise.then(() => {
|
||||
|
@ -14,7 +14,7 @@
|
||||
*/
|
||||
|
||||
import { BaseTreeViewer } from "./base_tree_viewer.js";
|
||||
import { createPromiseCapability } from "pdfjs-lib";
|
||||
import { PromiseCapability } from "pdfjs-lib";
|
||||
import { SidebarView } from "./ui_utils.js";
|
||||
|
||||
/**
|
||||
@ -89,7 +89,7 @@ class PDFOutlineViewer extends BaseTreeViewer {
|
||||
* @private
|
||||
*/
|
||||
_dispatchEvent(outlineCount) {
|
||||
this._currentOutlineItemCapability = createPromiseCapability();
|
||||
this._currentOutlineItemCapability = new PromiseCapability();
|
||||
if (
|
||||
outlineCount === 0 ||
|
||||
this._pdfDocument?.loadingParams.disableAutoFetch
|
||||
@ -308,7 +308,7 @@ class PDFOutlineViewer extends BaseTreeViewer {
|
||||
if (this._pageNumberToDestHashCapability) {
|
||||
return this._pageNumberToDestHashCapability.promise;
|
||||
}
|
||||
this._pageNumberToDestHashCapability = createPromiseCapability();
|
||||
this._pageNumberToDestHashCapability = new PromiseCapability();
|
||||
|
||||
const pageNumberToDestHash = new Map(),
|
||||
pageNumberNesting = new Map();
|
||||
|
@ -16,7 +16,7 @@
|
||||
/** @typedef {import("./event_utils").EventBus} EventBus */
|
||||
|
||||
import { apiPageLayoutToViewerModes, RenderingStates } from "./ui_utils.js";
|
||||
import { createPromiseCapability, shadow } from "pdfjs-lib";
|
||||
import { PromiseCapability, shadow } from "pdfjs-lib";
|
||||
|
||||
/**
|
||||
* @typedef {Object} PDFScriptingManagerOptions
|
||||
@ -357,7 +357,7 @@ class PDFScriptingManager {
|
||||
visitedPages = this._visitedPages;
|
||||
|
||||
if (initialize) {
|
||||
this._closeCapability = createPromiseCapability();
|
||||
this._closeCapability = new PromiseCapability();
|
||||
}
|
||||
if (!this._closeCapability) {
|
||||
return; // Scripting isn't fully initialized yet.
|
||||
@ -443,7 +443,7 @@ class PDFScriptingManager {
|
||||
* @private
|
||||
*/
|
||||
_createScripting() {
|
||||
this._destroyCapability = createPromiseCapability();
|
||||
this._destroyCapability = new PromiseCapability();
|
||||
|
||||
if (this._scripting) {
|
||||
throw new Error("_createScripting: Scripting already exists.");
|
||||
|
@ -28,9 +28,9 @@ import {
|
||||
AnnotationEditorType,
|
||||
AnnotationEditorUIManager,
|
||||
AnnotationMode,
|
||||
createPromiseCapability,
|
||||
PermissionFlag,
|
||||
PixelsPerInch,
|
||||
PromiseCapability,
|
||||
version,
|
||||
} from "pdfjs-lib";
|
||||
import {
|
||||
@ -1025,9 +1025,9 @@ class PDFViewer {
|
||||
this._location = null;
|
||||
this._pagesRotation = 0;
|
||||
this._optionalContentConfigPromise = null;
|
||||
this._firstPageCapability = createPromiseCapability();
|
||||
this._onePageRenderedCapability = createPromiseCapability();
|
||||
this._pagesCapability = createPromiseCapability();
|
||||
this._firstPageCapability = new PromiseCapability();
|
||||
this._onePageRenderedCapability = new PromiseCapability();
|
||||
this._pagesCapability = new PromiseCapability();
|
||||
this._scrollMode = ScrollMode.VERTICAL;
|
||||
this._previousScrollMode = ScrollMode.UNKNOWN;
|
||||
this._spreadMode = SpreadMode.NONE;
|
||||
|
Loading…
Reference in New Issue
Block a user