• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SRC_MODULE_WRAP_H_
2 #define SRC_MODULE_WRAP_H_
3 
4 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5 
6 #include <unordered_map>
7 #include <string>
8 #include <vector>
9 #include "base_object.h"
10 
11 namespace node {
12 
13 class Environment;
14 
15 namespace loader {
16 
17 enum ScriptType : int {
18   kScript,
19   kModule,
20   kFunction,
21 };
22 
23 enum HostDefinedOptions : int {
24   kType = 8,
25   kID = 9,
26   kLength = 10,
27 };
28 
29 class ModuleWrap : public BaseObject {
30  public:
31   static void Initialize(v8::Local<v8::Object> target,
32                          v8::Local<v8::Value> unused,
33                          v8::Local<v8::Context> context,
34                          void* priv);
35   static void HostInitializeImportMetaObjectCallback(
36       v8::Local<v8::Context> context,
37       v8::Local<v8::Module> module,
38       v8::Local<v8::Object> meta);
39 
MemoryInfo(MemoryTracker * tracker)40   void MemoryInfo(MemoryTracker* tracker) const override {
41     tracker->TrackField("url", url_);
42     tracker->TrackField("resolve_cache", resolve_cache_);
43   }
44 
id()45   inline uint32_t id() { return id_; }
46   static ModuleWrap* GetFromID(node::Environment*, uint32_t id);
47 
48   SET_MEMORY_INFO_NAME(ModuleWrap)
49   SET_SELF_SIZE(ModuleWrap)
50 
51  private:
52   ModuleWrap(Environment* env,
53              v8::Local<v8::Object> object,
54              v8::Local<v8::Module> module,
55              v8::Local<v8::String> url);
56   ~ModuleWrap() override;
57 
58   static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
59   static void Link(const v8::FunctionCallbackInfo<v8::Value>& args);
60   static void Instantiate(const v8::FunctionCallbackInfo<v8::Value>& args);
61   static void Evaluate(const v8::FunctionCallbackInfo<v8::Value>& args);
62   static void GetNamespace(const v8::FunctionCallbackInfo<v8::Value>& args);
63   static void GetStatus(const v8::FunctionCallbackInfo<v8::Value>& args);
64   static void GetError(const v8::FunctionCallbackInfo<v8::Value>& args);
65   static void GetStaticDependencySpecifiers(
66       const v8::FunctionCallbackInfo<v8::Value>& args);
67 
68   static void SetImportModuleDynamicallyCallback(
69       const v8::FunctionCallbackInfo<v8::Value>& args);
70   static void SetInitializeImportMetaObjectCallback(
71       const v8::FunctionCallbackInfo<v8::Value>& args);
72   static v8::MaybeLocal<v8::Value> SyntheticModuleEvaluationStepsCallback(
73       v8::Local<v8::Context> context, v8::Local<v8::Module> module);
74   static void SetSyntheticExport(
75       const v8::FunctionCallbackInfo<v8::Value>& args);
76   static void CreateCachedData(const v8::FunctionCallbackInfo<v8::Value>& args);
77 
78   static v8::MaybeLocal<v8::Module> ResolveCallback(
79       v8::Local<v8::Context> context,
80       v8::Local<v8::String> specifier,
81       v8::Local<v8::Module> referrer);
82   static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
83 
84   v8::Global<v8::Function> synthetic_evaluation_steps_;
85   bool synthetic_ = false;
86   v8::Global<v8::Module> module_;
87   v8::Global<v8::String> url_;
88   bool linked_ = false;
89   std::unordered_map<std::string, v8::Global<v8::Promise>> resolve_cache_;
90   v8::Global<v8::Context> context_;
91   uint32_t id_;
92 };
93 
94 }  // namespace loader
95 }  // namespace node
96 
97 #endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
98 
99 #endif  // SRC_MODULE_WRAP_H_
100