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

Include named exports in CJS shims when using importSync #1531

Merged
merged 7 commits into from
Jul 16, 2023

Commits on Jul 13, 2023

  1. Include named exports in CJS shims when using importSync

    `importSync()` is intended to work like `import()` (buy sync),
    which, in turns, is expected to work like a namespace import –
    `import * as NS from "foo";`. In general, we would expect that to
    be interchangable with `const NS = importSync("foo");`.
    
    Prior to this commit, this is not true for commonjs packages:
    
    ```js
    import * as QUnit1 from "qunit";
    // => { QUnit, assert, begin, config, ... }
    
    QUnit1.assert // => function
    
    const QUnit2 = importSync("qunit");
    // => { default: { QUnit, assert, begin, config, ... } }
    
    QUnit2.assert // => undefined
    ```
    
    Of course, using ES imports on commonjs packages is, in itself, an
    ill-defined concept, but nevertheless, it is a very common interop
    requirement.
    
    The previous behavior is introduced in embroider-build#1076. The intent appears to
    be fixing a different interop issue, where we would expect these to
    work the same way:
    
    ```js
    import QUnit1 from "qunit";
    // => { Qunit, assert, begin, config, ... }
    
    QUnit1.assert // => function
    
    const QUnit2 = importSync("qunit").default;
    // => { QUnit, assert, begin, config, ... }
    
    QUnit2.assert // => function
    ```
    
    The fix in embroider-build#1076, however, broke the exepctation that `import()`
    should behave like a namespace improt statement for CJS modules.
    
    This commit attempts to satisfy both of these requirements, with
    one caveat: `importSync("foo").default` is present on the shimed
    CJS modules, but in `import * as FOO from "foo";`, `FOO.default`
    is undefined.
    
    Arguably, this is a bug in webpack's implementation – if you are
    able to write an import statement that references the default
    export, you should be able to do the same in the namespace import
    as per the spec.
    
    So, the implementation here is different but more correct.
    
    Fixes embroider-build#1530
    chancancode committed Jul 13, 2023
    Configuration menu
    Copy the full SHA
    ff85425 View commit details
    Browse the repository at this point in the history

Commits on Jul 14, 2023

  1. Merge branch 'main' into esc

    ef4 committed Jul 14, 2023
    Configuration menu
    Copy the full SHA
    ee5cf20 View commit details
    Browse the repository at this point in the history
  2. redoing es-compat test

    ef4 committed Jul 14, 2023
    Configuration menu
    Copy the full SHA
    c909f46 View commit details
    Browse the repository at this point in the history

Commits on Jul 15, 2023

  1. Merge branch 'main' into esc

    ef4 committed Jul 15, 2023
    Configuration menu
    Copy the full SHA
    416d189 View commit details
    Browse the repository at this point in the history
  2. bump filename to make this work in classic

    In classic builds, multiple different versions of `@embroider/macros` may get smashed together, overwriting each other's files in ways that we  cannot control.
    
    If we want packages that upgrade to get this bugfix to reliably have it, they need to use a new name to refer to the module.
    ef4 committed Jul 15, 2023
    Configuration menu
    Copy the full SHA
    7acddac View commit details
    Browse the repository at this point in the history
  3. updating another test I missed

    ef4 committed Jul 15, 2023
    Configuration menu
    Copy the full SHA
    fd28bc4 View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2023

  1. Merge branch 'main' into esc

    ef4 committed Jul 16, 2023
    Configuration menu
    Copy the full SHA
    e46c67f View commit details
    Browse the repository at this point in the history