Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[api-major] Output JavaScript modules in the builds (issue 10317) #17055

Merged
merged 3 commits into from
Oct 7, 2023

Commits on Oct 6, 2023

  1. [api-minor] Stop building a minified default viewer

    The minified default viewer has never been distributed in either official releases or through pdfjs-dist, which means that it's most likely unused, and it's has never been tested nor actively maintained.
    Snuffleupagus committed Oct 6, 2023
    Configuration menu
    Copy the full SHA
    8158628 View commit details
    Browse the repository at this point in the history
  2. [api-major] Remove the fallbackWorkerSrc functionality in browsers

    The user should *always* provide a correct `GlobalWorkerOptions.workerSrc` value when using the PDF.js library in browser environments. Note that the fallback:
     - Has been deprecated ever since PR 11418, first released in version `2.4.456` over three years ago.
     - Was always a best-effort solution, with no guarantees that it'd actually work correctly.
     - With upcoming changes, w.r.t. outputting JavaScript modules, it'd now be more diffiult to determine the correct value.
    Snuffleupagus committed Oct 6, 2023
    Configuration menu
    Copy the full SHA
    0a970ee View commit details
    Browse the repository at this point in the history

Commits on Oct 7, 2023

  1. [api-major] Output JavaScript modules in the builds (issue 10317)

    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.
    Snuffleupagus committed Oct 7, 2023
    Configuration menu
    Copy the full SHA
    927e50f View commit details
    Browse the repository at this point in the history