Skip to content

ESM resolve does not ignore calls before quibbledModules are set #116

Closed

Description

@markusvoelk-zr

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?

Activity

  1. rosston commented on Nov 15, 2024

    @rosston
    Member

    Does "memory issues" mean a leak and large memory usage? It feels like this could be cause of testdouble/testdouble.js#534.

  2. markusvoelk-zr commented on Nov 19, 2024

    @markusvoelk-zr
    Author

    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?

  3. self-assigned this
    on Oct 2, 2026
  4. rosston commented on Oct 2, 2026

    @rosston
    Member

    Fixed in #122 (albeit in a different way) and released in 0.11.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions