Skip to content

Conversation

@guybedford
Copy link
Collaborator

This updates the reexport detection to only handle the last reexport assignment.

For example:

module.exports = require('a');
module.exports = require('b');

before this PR would return a, b, and after this PR would return just b.

The rationale here is that Webpack bundles include module.exports = require('external') for every single external they import from, when those aren't actually reexports. This saves unnecessary work and overclassification in those cases, with what doesn't seem to be too much of a loss.

@guybedford
Copy link
Collaborator Author

@weswigham FYI I remember we discussed the module.exports = require('x') cases being a union for the whole module before, but with Webpack bundles I think this may cause unnecessary work. Copying you in in case you have any further thoughts on this topic, but feel free to ignore as well.

@weswigham
Copy link

Right - in TS we search through conditions for things like this, so we produce a union, since some of the assignments may be conditional (and we don't do any kind of flow analysis on this yet, since we need this information before we normally do that kind of analysis). If you're only recognizing top-level assignments, simply taking the last one seems fine.

@guybedford
Copy link
Collaborator Author

We don't actually do a top-level detection here because there isn't yet handling of the distinction between blocks and functions. Once / if this is added I think it could mostly be regarded a backwards compatible addition to reinclude that restriction. At least by limiting to one now we manage the backwards compat story and allow this to improve at the same time.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants