-
Notifications
You must be signed in to change notification settings - Fork 30k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lib: refactor ES module loader for readability (JS side) #16579
Conversation
d65e5bb
to
5e5f1e1
Compare
lib/internal/loader/ModuleWrap.js
Outdated
]); | ||
`; | ||
// Create two modules: One whose exports are get- and set-able ('reflective'), | ||
// and one which re-exports all these of these but additionally may |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all of these
@@ -72,14 +100,20 @@ class Loader { | |||
return { url, format }; | |||
} | |||
|
|||
// May create a new ModuleJob instance if one did not already exist. | |||
async getModuleJob(specifier, parentURL = this.base) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your comment makes me wonder if this would be better called getOrCreateModuleJob
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is fine, get
kind of leaves the details open of how the returned module job got into existence :)
} | ||
throw e; | ||
} | ||
this.module.instantiate(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Amazing to see this simplification. Not having to call instantiate for each module in the right order is a much nicer v8 API!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just in case it wasn’t clear, we only had one call to instantiate()
before as well, but maybe this is a bit more obvious now :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Huh, it seems I was simply trying to post-justify my less elegant approach :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Heh, didn’t know this was your code ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great to me.
lib/internal/loader/Loader.js
Outdated
this.dynamicInstantiate = undefined; | ||
} | ||
|
||
static get validFormats() { | ||
return ['esm', 'cjs', 'builtin', 'addon', 'json', 'dynamic']; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could be a static property instead of a getter, to avoid recreating such an array every time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yup, makes sense!
357541c
to
32704fd
Compare
Landed in 14181a3 |
PR-URL: #16579 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
PR-URL: nodejs#16579 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This conflicts in doc/api/errors.md on v8.x, @addaleax would you mind raising a backport PR? Should be an easy conflict to fix. |
/cc @guybedford
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passesAffected core subsystem(s)
esm