Open jgosmann opened 5 months ago
With version 7.0.1 when the Skypack instructions were added to the readme, it still works.
I suppose the conversion to ESM destroys the conditional import here?
oooh, good catch! We have not caught this, nor do we have a test for it. we could still do an async await import(...)
, though, to fix this, I guess, but that will be a breaking change, as that cannot be done without making the setup face async.
Or ... well.
It can be done, sort of, but it will be a bit hacky:
timersModule
import can either be undefined
or a Promise. Let's just call it timerImport
.withGlobal
and timerImport
is defined, we must require that the Promise is resolved before continuingmodule
is not defined, todays interface will continue as before, in others it will be breakingWhich is not great, as I assume most/many consumers will be using this in ESM, in which module
will be defined (but in a lot of them, like browsers, there will of course not be a node:timers
).
@mroderick I think you would be interested in this.
@SimenB Any ideas? Fixing conditional imports like this would trigger a breaking API change in Jest, right?
I am guessing someone has some clever ideas somewhere.
@fatso83 nothing is stopping us from doing top-level await import
right?
No ... but I am not sure how that works. I usually try to map these newer constructs over to how this would look in ES5, but I cannot see how this works without introducing a Promise that leaks out into the exported module. But maybe there is? Totally not sure, so I will glady be informed 😅
Gah, this was hard, Ben. I have tried out top-level await , but getting that and CJS to work together was non-trivial, so it ended up just being a ESM conversion. Did not get anywhere. I think this will have to wait until @mroderick does a full ESM conversion?
What did you expect to happen? FakeTimers module is loaded.
What actually happens An error is logged and the module does not load:
How to reproduce
Go to https://output.jsbin.com/xijaquyico and open the JavaScript console to see the error. The module is loaded like this: