#ifndef SRC_MODULE_WRAP_H_ #define SRC_MODULE_WRAP_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include #include #include #include "base_object.h" namespace node { class Environment; namespace loader { enum ScriptType : int { kScript, kModule, kFunction, }; enum HostDefinedOptions : int { kType = 8, kID = 9, kLength = 10, }; class ModuleWrap : public BaseObject { public: static void Initialize(v8::Local target, v8::Local unused, v8::Local context, void* priv); static void HostInitializeImportMetaObjectCallback( v8::Local context, v8::Local module, v8::Local meta); void MemoryInfo(MemoryTracker* tracker) const override { tracker->TrackField("url", url_); tracker->TrackField("resolve_cache", resolve_cache_); } inline uint32_t id() { return id_; } static ModuleWrap* GetFromID(node::Environment*, uint32_t id); SET_MEMORY_INFO_NAME(ModuleWrap) SET_SELF_SIZE(ModuleWrap) private: ModuleWrap(Environment* env, v8::Local object, v8::Local module, v8::Local url); ~ModuleWrap() override; static void New(const v8::FunctionCallbackInfo& args); static void Link(const v8::FunctionCallbackInfo& args); static void Instantiate(const v8::FunctionCallbackInfo& args); static void Evaluate(const v8::FunctionCallbackInfo& args); static void GetNamespace(const v8::FunctionCallbackInfo& args); static void GetStatus(const v8::FunctionCallbackInfo& args); static void GetError(const v8::FunctionCallbackInfo& args); static void GetStaticDependencySpecifiers( const v8::FunctionCallbackInfo& args); static void Resolve(const v8::FunctionCallbackInfo& args); static void GetPackageType(const v8::FunctionCallbackInfo& args); static void SetImportModuleDynamicallyCallback( const v8::FunctionCallbackInfo& args); static void SetInitializeImportMetaObjectCallback( const v8::FunctionCallbackInfo& args); static v8::MaybeLocal SyntheticModuleEvaluationStepsCallback( v8::Local context, v8::Local module); static void SetSyntheticExport( const v8::FunctionCallbackInfo& args); static v8::MaybeLocal ResolveCallback( v8::Local context, v8::Local specifier, v8::Local referrer); static ModuleWrap* GetFromModule(node::Environment*, v8::Local); v8::Global synthetic_evaluation_steps_; bool synthetic_ = false; v8::Global module_; v8::Global url_; bool linked_ = false; std::unordered_map> resolve_cache_; v8::Global context_; uint32_t id_; }; } // namespace loader } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_MODULE_WRAP_H_