88  ArrayPrototypeSome, 
99  ObjectDefineProperty, 
1010  ObjectGetPrototypeOf, 
11+   ObjectPrototypeHasOwnProperty, 
1112  ObjectSetPrototypeOf, 
1213  ReflectApply, 
1314  SafePromiseAllReturnVoid, 
@@ -43,6 +44,7 @@ const {
4344  validateObject, 
4445  validateUint32, 
4546  validateString, 
47+   validateInternalField, 
4648}  =  require ( 'internal/validators' ) ; 
4749
4850const  binding  =  internalBinding ( 'module_wrap' ) ; 
@@ -75,6 +77,13 @@ const kLink = Symbol('kLink');
7577
7678const  {  isContext }  =  require ( 'internal/vm' ) ; 
7779
80+ function  isModule ( object )  { 
81+   if  ( typeof  object  !==  'object'  ||  object  ===  null  ||  ! ObjectPrototypeHasOwnProperty ( object ,  kWrap ) )  { 
82+     return  false ; 
83+   } 
84+   return  true ; 
85+ } 
86+ 
7887class  Module  { 
7988  constructor ( options )  { 
8089    emitExperimentalWarning ( 'VM Modules' ) ; 
@@ -148,50 +157,38 @@ class Module {
148157  } 
149158
150159  get  identifier ( )  { 
151-     if  ( this [ kWrap ]  ===  undefined )  { 
152-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
153-     } 
160+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
154161    return  this [ kWrap ] . url ; 
155162  } 
156163
157164  get  context ( )  { 
158-     if  ( this [ kWrap ]  ===  undefined )  { 
159-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
160-     } 
165+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
161166    return  this [ kContext ] ; 
162167  } 
163168
164169  get  namespace ( )  { 
165-     if  ( this [ kWrap ]  ===  undefined )  { 
166-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
167-     } 
170+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
168171    if  ( this [ kWrap ] . getStatus ( )  <  kInstantiated )  { 
169172      throw  new  ERR_VM_MODULE_STATUS ( 'must not be unlinked or linking' ) ; 
170173    } 
171174    return  this [ kWrap ] . getNamespace ( ) ; 
172175  } 
173176
174177  get  status ( )  { 
175-     if  ( this [ kWrap ]  ===  undefined )  { 
176-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
177-     } 
178+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
178179    return  STATUS_MAP [ this [ kWrap ] . getStatus ( ) ] ; 
179180  } 
180181
181182  get  error ( )  { 
182-     if  ( this [ kWrap ]  ===  undefined )  { 
183-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
184-     } 
183+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
185184    if  ( this [ kWrap ] . getStatus ( )  !==  kErrored )  { 
186185      throw  new  ERR_VM_MODULE_STATUS ( 'must be errored' ) ; 
187186    } 
188187    return  this [ kWrap ] . getError ( ) ; 
189188  } 
190189
191190  async  link ( linker )  { 
192-     if  ( this [ kWrap ]  ===  undefined )  { 
193-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
194-     } 
191+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
195192    validateFunction ( linker ,  'linker' ) ; 
196193    if  ( this . status  ===  'linked' )  { 
197194      throw  new  ERR_VM_MODULE_ALREADY_LINKED ( ) ; 
@@ -204,10 +201,7 @@ class Module {
204201  } 
205202
206203  async  evaluate ( options  =  kEmptyObject )  { 
207-     if  ( this [ kWrap ]  ===  undefined )  { 
208-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
209-     } 
210- 
204+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
211205    validateObject ( options ,  'options' ) ; 
212206
213207    let  timeout  =  options . timeout ; 
@@ -230,9 +224,7 @@ class Module {
230224  } 
231225
232226  [ customInspectSymbol ] ( depth ,  options )  { 
233-     if  ( this [ kWrap ]  ===  undefined )  { 
234-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
235-     } 
227+     validateInternalField ( this ,  kWrap ,  'Module' ) ; 
236228    if  ( typeof  depth  ===  'number'  &&  depth  <  0 ) 
237229      return  this ; 
238230
@@ -307,7 +299,7 @@ class SourceTextModule extends Module {
307299
308300      const  promises  =  this [ kWrap ] . link ( async  ( identifier ,  attributes )  =>  { 
309301        const  module  =  await  linker ( identifier ,  this ,  {  attributes,  assert : attributes  } ) ; 
310-         if  ( module [ kWrap ]   ===   undefined )  { 
302+         if  ( ! isModule ( module ) )  { 
311303          throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
312304        } 
313305        if  ( module . context  !==  this . context )  { 
@@ -338,19 +330,13 @@ class SourceTextModule extends Module {
338330  } 
339331
340332  get  dependencySpecifiers ( )  { 
341-     if  ( this [ kWrap ]  ===  undefined )  { 
342-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
343-     } 
344-     if  ( this [ kDependencySpecifiers ]  ===  undefined )  { 
345-       this [ kDependencySpecifiers ]  =  this [ kWrap ] . getStaticDependencySpecifiers ( ) ; 
346-     } 
333+     validateInternalField ( this ,  kDependencySpecifiers ,  'SourceTextModule' ) ; 
334+     this [ kDependencySpecifiers ]  ??=  this [ kWrap ] . getStaticDependencySpecifiers ( ) ; 
347335    return  this [ kDependencySpecifiers ] ; 
348336  } 
349337
350338  get  status ( )  { 
351-     if  ( this [ kWrap ]  ===  undefined )  { 
352-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
353-     } 
339+     validateInternalField ( this ,  kDependencySpecifiers ,  'SourceTextModule' ) ; 
354340    if  ( this . #error !==  kNoError )  { 
355341      return  'errored' ; 
356342    } 
@@ -361,9 +347,7 @@ class SourceTextModule extends Module {
361347  } 
362348
363349  get  error ( )  { 
364-     if  ( this [ kWrap ]  ===  undefined )  { 
365-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
366-     } 
350+     validateInternalField ( this ,  kDependencySpecifiers ,  'SourceTextModule' ) ; 
367351    if  ( this . #error !==  kNoError )  { 
368352      return  this . #error; 
369353    } 
@@ -416,9 +400,7 @@ class SyntheticModule extends Module {
416400  } 
417401
418402  setExport ( name ,  value )  { 
419-     if  ( this [ kWrap ]  ===  undefined )  { 
420-       throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
421-     } 
403+     validateInternalField ( this ,  kWrap ,  'SyntheticModule' ) ; 
422404    validateString ( name ,  'name' ) ; 
423405    if  ( this [ kWrap ] . getStatus ( )  <  kInstantiated )  { 
424406      throw  new  ERR_VM_MODULE_STATUS ( 'must be linked' ) ; 
@@ -433,7 +415,7 @@ function importModuleDynamicallyWrap(importModuleDynamically) {
433415    if  ( isModuleNamespaceObject ( m ) )  { 
434416      return  m ; 
435417    } 
436-     if  ( ! m   ||   m [ kWrap ]   ===   undefined )  { 
418+     if  ( ! isModule ( m ) )  { 
437419      throw  new  ERR_VM_MODULE_NOT_MODULE ( ) ; 
438420    } 
439421    if  ( m . status  ===  'errored' )  { 
0 commit comments