@@ -37,7 +37,13 @@ let debug = require('internal/util/debuglog').debuglog('module', (fn) => {
37
37
debug = fn ;
38
38
} ) ;
39
39
40
+ /** @typedef {import('internal/modules/cjs/loader.js').Module } Module */
41
+
42
+ /** @type {Set<string> } */
40
43
let cjsConditions ;
44
+ /**
45
+ * Define the conditions that apply to the CommonJS loader.
46
+ */
41
47
function initializeCjsConditions ( ) {
42
48
const userConditions = getOptionValue ( '--conditions' ) ;
43
49
const noAddons = getOptionValue ( '--no-addons' ) ;
@@ -51,41 +57,62 @@ function initializeCjsConditions() {
51
57
] ) ;
52
58
}
53
59
60
+ /**
61
+ * Get the conditions that apply to the CommonJS loader.
62
+ */
54
63
function getCjsConditions ( ) {
55
64
if ( cjsConditions === undefined ) {
56
65
initializeCjsConditions ( ) ;
57
66
}
58
67
return cjsConditions ;
59
68
}
60
69
61
- function loadBuiltinModule ( filename , request ) {
62
- if ( ! BuiltinModule . canBeRequiredByUsers ( filename ) ) {
70
+ /**
71
+ * Provide one of Node.js' public modules to user code.
72
+ * @param {string } id The identifier/specifier of the builtin module to load
73
+ * @param {string } request The module requiring or importing the builtin module
74
+ */
75
+ function loadBuiltinModule ( id , request ) {
76
+ if ( ! BuiltinModule . canBeRequiredByUsers ( id ) ) {
63
77
return ;
64
78
}
65
- const mod = BuiltinModule . map . get ( filename ) ;
79
+ /** @type {import('internal/bootstrap/realm.js').BuiltinModule } */
80
+ const mod = BuiltinModule . map . get ( id ) ;
66
81
debug ( 'load built-in module %s' , request ) ;
67
82
// compileForPublicLoader() throws if canBeRequiredByUsers is false:
68
83
mod . compileForPublicLoader ( ) ;
69
84
return mod ;
70
85
}
71
86
87
+ /** @type {Module } */
72
88
let $Module = null ;
89
+ /**
90
+ * Import the Module class on first use.
91
+ */
73
92
function lazyModule ( ) {
74
93
$Module = $Module || require ( 'internal/modules/cjs/loader' ) . Module ;
75
94
return $Module ;
76
95
}
77
96
78
- // Invoke with makeRequireFunction(module) where |module| is the Module object
79
- // to use as the context for the require() function.
80
- // Use redirects to set up a mapping from a policy and restrict dependencies
97
+ /**
98
+ * Invoke with `makeRequireFunction(module)` where `module` is the `Module` object to use as the context for the
99
+ * `require()` function.
100
+ * Use redirects to set up a mapping from a policy and restrict dependencies.
101
+ */
81
102
const urlToFileCache = new SafeMap ( ) ;
103
+ /**
104
+ * Create the module-scoped `require` function to pass into CommonJS modules.
105
+ * @param {Module } mod The module to create the `require` function for.
106
+ * @param {ReturnType<import('internal/policy/manifest.js').Manifest['getDependencyMapper']> } redirects
107
+ */
82
108
function makeRequireFunction ( mod , redirects ) {
83
109
// lazy due to cycle
84
110
const Module = lazyModule ( ) ;
85
111
if ( mod instanceof Module !== true ) {
86
112
throw new ERR_INVALID_ARG_TYPE ( 'mod' , 'Module' , mod ) ;
87
113
}
88
114
115
+ /** @type {(specifier: string) => unknown } */
89
116
let require ;
90
117
if ( redirects ) {
91
118
const id = mod . filename || mod . id ;
@@ -131,13 +158,22 @@ function makeRequireFunction(mod, redirects) {
131
158
} ;
132
159
}
133
160
161
+ /**
162
+ * The `resolve` method that gets attached to module-scope `require`.
163
+ * @param {string } request
164
+ * @param {Parameters<Module['_resolveFilename']>[3] } options
165
+ */
134
166
function resolve ( request , options ) {
135
167
validateString ( request , 'request' ) ;
136
168
return Module . _resolveFilename ( request , mod , false , options ) ;
137
169
}
138
170
139
171
require . resolve = resolve ;
140
172
173
+ /**
174
+ * The `paths` method that gets attached to module-scope `require`.
175
+ * @param {string } request
176
+ */
141
177
function paths ( request ) {
142
178
validateString ( request , 'request' ) ;
143
179
return Module . _resolveLookupPaths ( request , mod ) ;
@@ -159,6 +195,7 @@ function makeRequireFunction(mod, redirects) {
159
195
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
160
196
* because the buffer-to-string conversion in `fs.readFileSync()`
161
197
* translates it to FEFF, the UTF-16 BOM.
198
+ * @param {string } content
162
199
*/
163
200
function stripBOM ( content ) {
164
201
if ( StringPrototypeCharCodeAt ( content ) === 0xFEFF ) {
@@ -167,6 +204,11 @@ function stripBOM(content) {
167
204
return content ;
168
205
}
169
206
207
+ /**
208
+ * Add built-in modules to a global or REPL scope object.
209
+ * @param {object } object The object such as `globalThis` to add the built-in modules to.
210
+ * @param {string } dummyModuleName The label representing the set of built-in modules to add.
211
+ */
170
212
function addBuiltinLibsToObject ( object , dummyModuleName ) {
171
213
// Make built-in modules available directly (loaded lazily).
172
214
const Module = require ( 'internal/modules/cjs/loader' ) . Module ;
@@ -227,9 +269,8 @@ function addBuiltinLibsToObject(object, dummyModuleName) {
227
269
}
228
270
229
271
/**
230
- *
272
+ * If a referrer is an URL instance or absolute path, convert it into an URL string.
231
273
* @param {string | URL } referrer
232
- * @returns {string }
233
274
*/
234
275
function normalizeReferrerURL ( referrer ) {
235
276
if ( typeof referrer === 'string' && path . isAbsolute ( referrer ) ) {
@@ -238,7 +279,10 @@ function normalizeReferrerURL(referrer) {
238
279
return new URL ( referrer ) . href ;
239
280
}
240
281
241
- // For error messages only - used to check if ESM syntax is in use.
282
+ /**
283
+ * For error messages only, check if ESM syntax is in use.
284
+ * @param {string } code
285
+ */
242
286
function hasEsmSyntax ( code ) {
243
287
debug ( 'Checking for ESM syntax' ) ;
244
288
const parser = require ( 'internal/deps/acorn/acorn/dist/acorn' ) . Parser ;
0 commit comments