ESM resolve does not ignore calls before quibbledModules are set
I think the intention of the following code snipped is to ignore resolve calls until the first module gets "quibbled":
(https://github.com/testdouble/quibble/blob/fac450e65d68a00411a7ed51fc29f19af581f95b/lib/quibble.mjs#L42C1-L44C4)
if (!quibbleLoaderState.quibbledModules) {
return resolve()
}
Because the quibbleLoaderState.quibbledModules is a (at least) empty Map, the (!quibbleLoaderState.quibbledModules) expression never gets true.
I got memory issues because every imported module will be cached (and quibbled).
Changing the if-clause to if (!quibbleLoaderState.quibbledModules.size) { solves the issue for me.
Is there an other reason, the .size is missing?
Does "memory issues" mean a leak and large memory usage? It feels like this could be cause of https://github.com/testdouble/testdouble.js/issues/534.
Yes, i think a intended memory leak (ESM loader does not provide a way to cleanup code cache). But i think quibble quibbles too much modules because of the code mentioned here.
In my memory dumps, i see a lot of (superfluous) dev packages (sinon, chai, ...). I think it is intentional to have the prod-code in the memory dump?