8
8
ArrayPrototypeSome,
9
9
ObjectDefineProperty,
10
10
ObjectGetPrototypeOf,
11
+ ObjectPrototypeHasOwnProperty,
11
12
ObjectSetPrototypeOf,
12
13
ReflectApply,
13
14
SafePromiseAllReturnVoid,
@@ -43,6 +44,7 @@ const {
43
44
validateObject,
44
45
validateUint32,
45
46
validateString,
47
+ validateInternalField,
46
48
} = require ( 'internal/validators' ) ;
47
49
48
50
const binding = internalBinding ( 'module_wrap' ) ;
@@ -75,6 +77,13 @@ const kLink = Symbol('kLink');
75
77
76
78
const { isContext } = require ( 'internal/vm' ) ;
77
79
80
+ function isModule ( object ) {
81
+ if ( typeof object !== 'object' || object === null || ! ObjectPrototypeHasOwnProperty ( object , kWrap ) ) {
82
+ return false ;
83
+ }
84
+ return true ;
85
+ }
86
+
78
87
class Module {
79
88
constructor ( options ) {
80
89
emitExperimentalWarning ( 'VM Modules' ) ;
@@ -147,50 +156,38 @@ class Module {
147
156
}
148
157
149
158
get identifier ( ) {
150
- if ( this [ kWrap ] === undefined ) {
151
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
152
- }
159
+ validateInternalField ( this , kWrap , 'Module' ) ;
153
160
return this [ kWrap ] . url ;
154
161
}
155
162
156
163
get context ( ) {
157
- if ( this [ kWrap ] === undefined ) {
158
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
159
- }
164
+ validateInternalField ( this , kWrap , 'Module' ) ;
160
165
return this [ kContext ] ;
161
166
}
162
167
163
168
get namespace ( ) {
164
- if ( this [ kWrap ] === undefined ) {
165
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
166
- }
169
+ validateInternalField ( this , kWrap , 'Module' ) ;
167
170
if ( this [ kWrap ] . getStatus ( ) < kInstantiated ) {
168
171
throw new ERR_VM_MODULE_STATUS ( 'must not be unlinked or linking' ) ;
169
172
}
170
173
return this [ kWrap ] . getNamespace ( ) ;
171
174
}
172
175
173
176
get status ( ) {
174
- if ( this [ kWrap ] === undefined ) {
175
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
176
- }
177
+ validateInternalField ( this , kWrap , 'Module' ) ;
177
178
return STATUS_MAP [ this [ kWrap ] . getStatus ( ) ] ;
178
179
}
179
180
180
181
get error ( ) {
181
- if ( this [ kWrap ] === undefined ) {
182
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
183
- }
182
+ validateInternalField ( this , kWrap , 'Module' ) ;
184
183
if ( this [ kWrap ] . getStatus ( ) !== kErrored ) {
185
184
throw new ERR_VM_MODULE_STATUS ( 'must be errored' ) ;
186
185
}
187
186
return this [ kWrap ] . getError ( ) ;
188
187
}
189
188
190
189
async link ( linker ) {
191
- if ( this [ kWrap ] === undefined ) {
192
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
193
- }
190
+ validateInternalField ( this , kWrap , 'Module' ) ;
194
191
validateFunction ( linker , 'linker' ) ;
195
192
if ( this . status === 'linked' ) {
196
193
throw new ERR_VM_MODULE_ALREADY_LINKED ( ) ;
@@ -203,10 +200,7 @@ class Module {
203
200
}
204
201
205
202
async evaluate ( options = kEmptyObject ) {
206
- if ( this [ kWrap ] === undefined ) {
207
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
208
- }
209
-
203
+ validateInternalField ( this , kWrap , 'Module' ) ;
210
204
validateObject ( options , 'options' ) ;
211
205
212
206
let timeout = options . timeout ;
@@ -229,9 +223,7 @@ class Module {
229
223
}
230
224
231
225
[ customInspectSymbol ] ( depth , options ) {
232
- if ( this [ kWrap ] === undefined ) {
233
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
234
- }
226
+ validateInternalField ( this , kWrap , 'Module' ) ;
235
227
if ( typeof depth === 'number' && depth < 0 )
236
228
return this ;
237
229
@@ -306,7 +298,7 @@ class SourceTextModule extends Module {
306
298
307
299
const promises = this [ kWrap ] . link ( async ( identifier , attributes ) => {
308
300
const module = await linker ( identifier , this , { attributes, assert : attributes } ) ;
309
- if ( module [ kWrap ] === undefined ) {
301
+ if ( ! isModule ( module ) ) {
310
302
throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
311
303
}
312
304
if ( module . context !== this . context ) {
@@ -337,19 +329,13 @@ class SourceTextModule extends Module {
337
329
}
338
330
339
331
get dependencySpecifiers ( ) {
340
- if ( this [ kWrap ] === undefined ) {
341
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
342
- }
343
- if ( this [ kDependencySpecifiers ] === undefined ) {
344
- this [ kDependencySpecifiers ] = this [ kWrap ] . getStaticDependencySpecifiers ( ) ;
345
- }
332
+ validateInternalField ( this , kDependencySpecifiers , 'SourceTextModule' ) ;
333
+ this [ kDependencySpecifiers ] ??= this [ kWrap ] . getStaticDependencySpecifiers ( ) ;
346
334
return this [ kDependencySpecifiers ] ;
347
335
}
348
336
349
337
get status ( ) {
350
- if ( this [ kWrap ] === undefined ) {
351
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
352
- }
338
+ validateInternalField ( this , kDependencySpecifiers , 'SourceTextModule' ) ;
353
339
if ( this . #error !== kNoError ) {
354
340
return 'errored' ;
355
341
}
@@ -360,9 +346,7 @@ class SourceTextModule extends Module {
360
346
}
361
347
362
348
get error ( ) {
363
- if ( this [ kWrap ] === undefined ) {
364
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
365
- }
349
+ validateInternalField ( this , kDependencySpecifiers , 'SourceTextModule' ) ;
366
350
if ( this . #error !== kNoError ) {
367
351
return this . #error;
368
352
}
@@ -415,9 +399,7 @@ class SyntheticModule extends Module {
415
399
}
416
400
417
401
setExport ( name , value ) {
418
- if ( this [ kWrap ] === undefined ) {
419
- throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
420
- }
402
+ validateInternalField ( this , kWrap , 'SyntheticModule' ) ;
421
403
validateString ( name , 'name' ) ;
422
404
if ( this [ kWrap ] . getStatus ( ) < kInstantiated ) {
423
405
throw new ERR_VM_MODULE_STATUS ( 'must be linked' ) ;
@@ -432,7 +414,7 @@ function importModuleDynamicallyWrap(importModuleDynamically) {
432
414
if ( isModuleNamespaceObject ( m ) ) {
433
415
return m ;
434
416
}
435
- if ( ! m || m [ kWrap ] === undefined ) {
417
+ if ( ! isModule ( m ) ) {
436
418
throw new ERR_VM_MODULE_NOT_MODULE ( ) ;
437
419
}
438
420
if ( m . status === 'errored' ) {
0 commit comments