quibble icon indicating copy to clipboard operation
quibble copied to clipboard

ESM resolve does not ignore calls before quibbledModules are set

Open markusvoelk-zr opened this issue 1 year ago • 2 comments

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?

markusvoelk-zr avatar Nov 15 '24 12:11 markusvoelk-zr

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.

rosston avatar Nov 15 '24 19:11 rosston

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?

markusvoelk-zr avatar Nov 19 '24 05:11 markusvoelk-zr