Merge pull request #11771 from Snuffleupagus/issue-11762
Fail early, in modern `GENERIC` builds, if certain required browser functionality is missing (issue 11762)
This commit is contained in:
commit
7ed71a0d7c
4
external/dist/lib/README.md
vendored
4
external/dist/lib/README.md
vendored
@ -3,5 +3,5 @@ pre-built library as found in e.g. the `/build`, `/web`, and `/image_decoders`
|
|||||||
folders in the root of this repository.
|
folders in the root of this repository.
|
||||||
|
|
||||||
Please note that the "lib" build target exists mostly to enable unit-testing in
|
Please note that the "lib" build target exists mostly to enable unit-testing in
|
||||||
Node.js/Travis, and that you'll need to handle e.g. any Node.js dependencies
|
Node.js/Travis, and that you'll need to handle e.g. any necessary polyfills
|
||||||
yourself if using the files in this folder.
|
and/or Node.js dependencies yourself if using the files in this folder.
|
||||||
|
175
gulpfile.js
175
gulpfile.js
@ -1150,92 +1150,105 @@ gulp.task("jsdoc", function(done) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function buildLib(defines, dir) {
|
||||||
|
// 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
|
||||||
|
// occurences of __non_webpack_require__ ourselves.
|
||||||
|
function babelPluginReplaceNonWebPackRequire(babel) {
|
||||||
|
return {
|
||||||
|
visitor: {
|
||||||
|
Identifier(curPath, state) {
|
||||||
|
if (curPath.node.name === "__non_webpack_require__") {
|
||||||
|
curPath.replaceWith(babel.types.identifier("require"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function preprocess(content) {
|
||||||
|
var skipBabel =
|
||||||
|
bundleDefines.SKIP_BABEL || /\/\*\s*no-babel-preset\s*\*\//.test(content);
|
||||||
|
content = preprocessor2.preprocessPDFJSCode(ctx, content);
|
||||||
|
content = babel.transform(content, {
|
||||||
|
sourceType: "module",
|
||||||
|
presets: skipBabel ? undefined : ["@babel/preset-env"],
|
||||||
|
plugins: [
|
||||||
|
"@babel/plugin-transform-modules-commonjs",
|
||||||
|
[
|
||||||
|
"@babel/plugin-transform-runtime",
|
||||||
|
{
|
||||||
|
helpers: false,
|
||||||
|
regenerator: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
babelPluginReplaceNonWebPackRequire,
|
||||||
|
],
|
||||||
|
}).code;
|
||||||
|
var removeCjsSrc = /^(var\s+\w+\s*=\s*(_interopRequireDefault\()?require\(".*?)(?:\/src)(\/[^"]*"\)\)?;)$/gm;
|
||||||
|
content = content.replace(removeCjsSrc, (all, prefix, interop, suffix) => {
|
||||||
|
return prefix + suffix;
|
||||||
|
});
|
||||||
|
return licenseHeaderLibre + content;
|
||||||
|
}
|
||||||
|
var babel = require("@babel/core");
|
||||||
|
var versionInfo = getVersionJSON();
|
||||||
|
var bundleDefines = builder.merge(defines, {
|
||||||
|
BUNDLE_VERSION: versionInfo.version,
|
||||||
|
BUNDLE_BUILD: versionInfo.commit,
|
||||||
|
TESTING: process.env["TESTING"] === "true",
|
||||||
|
});
|
||||||
|
var ctx = {
|
||||||
|
rootPath: __dirname,
|
||||||
|
saveComments: false,
|
||||||
|
defines: bundleDefines,
|
||||||
|
map: {
|
||||||
|
"pdfjs-lib": "../pdf",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var licenseHeaderLibre = fs
|
||||||
|
.readFileSync("./src/license_header_libre.js")
|
||||||
|
.toString();
|
||||||
|
var preprocessor2 = require("./external/builder/preprocessor2.js");
|
||||||
|
return merge([
|
||||||
|
gulp.src(
|
||||||
|
[
|
||||||
|
"src/{core,display,shared}/*.js",
|
||||||
|
"!src/shared/{cffStandardStrings,fonts_utils}.js",
|
||||||
|
"src/{pdf,pdf.worker}.js",
|
||||||
|
],
|
||||||
|
{ base: "src/" }
|
||||||
|
),
|
||||||
|
gulp.src(
|
||||||
|
["examples/node/domstubs.js", "web/*.js", "!web/{pdfjs,viewer}.js"],
|
||||||
|
{ base: "." }
|
||||||
|
),
|
||||||
|
gulp.src("test/unit/*.js", { base: "." }),
|
||||||
|
])
|
||||||
|
.pipe(transform("utf8", preprocess))
|
||||||
|
.pipe(gulp.dest(dir));
|
||||||
|
}
|
||||||
|
|
||||||
gulp.task(
|
gulp.task(
|
||||||
"lib",
|
"lib",
|
||||||
gulp.series("buildnumber", "default_preferences", function() {
|
gulp.series("buildnumber", "default_preferences", function() {
|
||||||
// When we create a bundle, webpack is run on the source and it will replace
|
var defines = builder.merge(DEFINES, { GENERIC: true, LIB: true });
|
||||||
// require with __webpack_require__. When we want to use the real require,
|
|
||||||
// __non_webpack_require__ has to be used.
|
return buildLib(defines, "build/lib/");
|
||||||
// In this target, we don't create a bundle, so we have to replace the
|
})
|
||||||
// occurences of __non_webpack_require__ ourselves.
|
);
|
||||||
function babelPluginReplaceNonWebPackRequire(babel) {
|
|
||||||
return {
|
gulp.task(
|
||||||
visitor: {
|
"lib-es5",
|
||||||
Identifier(curPath, state) {
|
gulp.series("buildnumber", "default_preferences", function() {
|
||||||
if (curPath.node.name === "__non_webpack_require__") {
|
var defines = builder.merge(DEFINES, {
|
||||||
curPath.replaceWith(babel.types.identifier("require"));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function preprocess(content) {
|
|
||||||
var skipBabel =
|
|
||||||
bundleDefines.SKIP_BABEL ||
|
|
||||||
/\/\*\s*no-babel-preset\s*\*\//.test(content);
|
|
||||||
content = preprocessor2.preprocessPDFJSCode(ctx, content);
|
|
||||||
content = babel.transform(content, {
|
|
||||||
sourceType: "module",
|
|
||||||
presets: skipBabel ? undefined : ["@babel/preset-env"],
|
|
||||||
plugins: [
|
|
||||||
"@babel/plugin-transform-modules-commonjs",
|
|
||||||
[
|
|
||||||
"@babel/plugin-transform-runtime",
|
|
||||||
{
|
|
||||||
helpers: false,
|
|
||||||
regenerator: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
babelPluginReplaceNonWebPackRequire,
|
|
||||||
],
|
|
||||||
}).code;
|
|
||||||
var removeCjsSrc = /^(var\s+\w+\s*=\s*(_interopRequireDefault\()?require\(".*?)(?:\/src)(\/[^"]*"\)\)?;)$/gm;
|
|
||||||
content = content.replace(
|
|
||||||
removeCjsSrc,
|
|
||||||
(all, prefix, interop, suffix) => {
|
|
||||||
return prefix + suffix;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return licenseHeaderLibre + content;
|
|
||||||
}
|
|
||||||
var babel = require("@babel/core");
|
|
||||||
var versionInfo = getVersionJSON();
|
|
||||||
var bundleDefines = builder.merge(DEFINES, {
|
|
||||||
GENERIC: true,
|
GENERIC: true,
|
||||||
LIB: true,
|
LIB: true,
|
||||||
BUNDLE_VERSION: versionInfo.version,
|
SKIP_BABEL: false,
|
||||||
BUNDLE_BUILD: versionInfo.commit,
|
|
||||||
TESTING: process.env["TESTING"] === "true",
|
|
||||||
});
|
});
|
||||||
var ctx = {
|
|
||||||
rootPath: __dirname,
|
return buildLib(defines, "build/lib-es5/");
|
||||||
saveComments: false,
|
|
||||||
defines: bundleDefines,
|
|
||||||
map: {
|
|
||||||
"pdfjs-lib": "../pdf",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
var licenseHeaderLibre = fs
|
|
||||||
.readFileSync("./src/license_header_libre.js")
|
|
||||||
.toString();
|
|
||||||
var preprocessor2 = require("./external/builder/preprocessor2.js");
|
|
||||||
return merge([
|
|
||||||
gulp.src(
|
|
||||||
[
|
|
||||||
"src/{core,display,shared}/*.js",
|
|
||||||
"!src/shared/{cffStandardStrings,fonts_utils}.js",
|
|
||||||
"src/{pdf,pdf.worker}.js",
|
|
||||||
],
|
|
||||||
{ base: "src/" }
|
|
||||||
),
|
|
||||||
gulp.src(
|
|
||||||
["examples/node/domstubs.js", "web/*.js", "!web/{pdfjs,viewer}.js"],
|
|
||||||
{ base: "." }
|
|
||||||
),
|
|
||||||
gulp.src("test/unit/*.js", { base: "." }),
|
|
||||||
])
|
|
||||||
.pipe(transform("utf8", preprocess))
|
|
||||||
.pipe(gulp.dest("build/lib/"));
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1371,7 +1384,7 @@ gulp.task("baseline", function(done) {
|
|||||||
|
|
||||||
gulp.task(
|
gulp.task(
|
||||||
"unittestcli",
|
"unittestcli",
|
||||||
gulp.series("testing-pre", "lib", function(done) {
|
gulp.series("testing-pre", "lib-es5", function(done) {
|
||||||
var options = [
|
var options = [
|
||||||
"node_modules/jasmine/bin/jasmine",
|
"node_modules/jasmine/bin/jasmine",
|
||||||
"JASMINE_CONFIG_PATH=test/unit/clitests.json",
|
"JASMINE_CONFIG_PATH=test/unit/clitests.json",
|
||||||
|
@ -136,6 +136,21 @@ var WorkerMessageHandler = {
|
|||||||
"; thus breaking e.g. `for...in` iteration of `Array`s."
|
"; thus breaking e.g. `for...in` iteration of `Array`s."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure that (primarily) Node.js users won't accidentally attempt to use
|
||||||
|
// a non-translated/non-polyfilled build of the library, since that would
|
||||||
|
// quickly fail anyway because of missing functionality (such as e.g.
|
||||||
|
// `ReadableStream).
|
||||||
|
if (
|
||||||
|
(typeof PDFJSDev === "undefined" || PDFJSDev.test("SKIP_BABEL")) &&
|
||||||
|
typeof ReadableStream === "undefined"
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
"The browser/environment lacks native support for critical " +
|
||||||
|
"functionality used by the PDF.js library (e.g. `ReadableStream`); " +
|
||||||
|
"please use an ES5-compatible build instead."
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var docId = docParams.docId;
|
var docId = docParams.docId;
|
||||||
|
@ -14,11 +14,9 @@
|
|||||||
*/
|
*/
|
||||||
/* eslint no-var: error */
|
/* eslint no-var: error */
|
||||||
|
|
||||||
// Skip compatibility checks for modern builds (unless we're running the
|
// Skip compatibility checks for modern builds and if we already ran the module.
|
||||||
// unit-tests in Node.js/Travis) and if we already ran the module.
|
|
||||||
if (
|
if (
|
||||||
(typeof PDFJSDev === "undefined" ||
|
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("SKIP_BABEL")) &&
|
||||||
PDFJSDev.test("!SKIP_BABEL || (LIB && TESTING)")) &&
|
|
||||||
(typeof globalThis === "undefined" || !globalThis._pdfjsCompatibilityChecked)
|
(typeof globalThis === "undefined" || !globalThis._pdfjsCompatibilityChecked)
|
||||||
) {
|
) {
|
||||||
// Provides support for globalThis in legacy browsers.
|
// Provides support for globalThis in legacy browsers.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"spec_dir": "build/lib/test/unit",
|
"spec_dir": "build/lib-es5/test/unit",
|
||||||
|
|
||||||
"helpers": [
|
"helpers": [
|
||||||
"clitests_helper.js"
|
"clitests_helper.js"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user