927e50f5d4
At this point in time all browsers, and also Node.js, support standard `import`/`export` statements and we can now finally consider outputting modern JavaScript modules in the builds.[1] In order for this to work we can *only* use proper `import`/`export` statements throughout the main code-base, and (as expected) our Node.js support made this much more complicated since both the official builds and the GitHub Actions-based tests must keep working.[2] One remaining issue is that the `pdf.scripting.js` file cannot be built as a JavaScript module, since doing so breaks PDF scripting. Note that my initial goal was to try and split these changes into a couple of commits, however that unfortunately didn't really work since it turned out to be difficult for smaller patches to work correctly and pass (all) tests that way.[3] This is a classic case of every change requiring a couple of other changes, with each of those changes requiring further changes in turn and the size/scope quickly increasing as a result. One possible "issue" with these changes is that we'll now only output JavaScript modules in the builds, which could perhaps be a problem with older tools. However it unfortunately seems far too complicated/time-consuming for us to attempt to support both the old and modern module formats, hence the alternative would be to do "nothing" here and just keep our "old" builds.[4] --- [1] The final blocker was module support in workers in Firefox, which was implemented in Firefox 114; please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#browser_compatibility [2] It's probably possible to further improve/simplify especially the Node.js-specific code, but it does appear to work as-is. [3] Having partially "broken" patches, that fail tests, as part of the commit history is *really not* a good idea in general. [4] Outputting JavaScript modules was first requested almost five years ago, see issue 10317, and nowadays there *should* be much better support for JavaScript modules in various tools. |
||
---|---|---|
.. | ||
.eslintrc | ||
annotation_spec.js | ||
annotation_storage_spec.js | ||
api_spec.js | ||
bidi_spec.js | ||
cff_parser_spec.js | ||
clitests_helper.js | ||
clitests.json | ||
cmap_spec.js | ||
colorspace_spec.js | ||
core_utils_spec.js | ||
crypto_spec.js | ||
custom_spec.js | ||
default_appearance_spec.js | ||
display_utils_spec.js | ||
document_spec.js | ||
editor_spec.js | ||
encodings_spec.js | ||
evaluator_spec.js | ||
event_utils_spec.js | ||
fetch_stream_spec.js | ||
font_substitutions_spec.js | ||
function_spec.js | ||
jasmine-boot.js | ||
message_handler_spec.js | ||
metadata_spec.js | ||
murmurhash3_spec.js | ||
network_spec.js | ||
network_utils_spec.js | ||
node_stream_spec.js | ||
parser_spec.js | ||
pdf_find_controller_spec.js | ||
pdf_find_utils_spec.js | ||
pdf_history_spec.js | ||
pdf_spec.js | ||
pdf_viewer_spec.js | ||
pdf_viewer.component_spec.js | ||
pdf.image_decoders_spec.js | ||
pdf.worker_spec.js | ||
primitives_spec.js | ||
scripting_spec.js | ||
stream_spec.js | ||
struct_tree_spec.js | ||
test_utils.js | ||
testreporter.js | ||
text_layer_spec.js | ||
type1_parser_spec.js | ||
ui_utils_spec.js | ||
unicode_spec.js | ||
unit_test.html | ||
util_spec.js | ||
writer_spec.js | ||
xfa_formcalc_spec.js | ||
xfa_parser_spec.js | ||
xfa_serialize_data_spec.js | ||
xfa_tohtml_spec.js | ||
xml_spec.js |