mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
PR-URL: https://github.com/nodejs/node/pull/21573 Fixes: https://github.com/nodejs/node/issues/17396 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
102 lines
3.1 KiB
C++
102 lines
3.1 KiB
C++
#ifndef SRC_MODULE_WRAP_H_
|
|
#define SRC_MODULE_WRAP_H_
|
|
|
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#include <unordered_map>
|
|
#include <string>
|
|
#include <vector>
|
|
#include "node_url.h"
|
|
#include "base_object-inl.h"
|
|
|
|
namespace node {
|
|
namespace loader {
|
|
|
|
enum PackageMainCheck : bool {
|
|
CheckMain = true,
|
|
IgnoreMain = false
|
|
};
|
|
|
|
enum ScriptType : int {
|
|
kScript,
|
|
kModule,
|
|
kFunction,
|
|
};
|
|
|
|
enum HostDefinedOptions : int {
|
|
kType = 8,
|
|
kID = 9,
|
|
kLength = 10,
|
|
};
|
|
|
|
v8::Maybe<url::URL> Resolve(Environment* env,
|
|
const std::string& specifier,
|
|
const url::URL& base,
|
|
PackageMainCheck read_pkg_json = CheckMain);
|
|
|
|
class ModuleWrap : public BaseObject {
|
|
public:
|
|
static const std::string EXTENSIONS[];
|
|
static void Initialize(v8::Local<v8::Object> target,
|
|
v8::Local<v8::Value> unused,
|
|
v8::Local<v8::Context> context,
|
|
void* priv);
|
|
static void HostInitializeImportMetaObjectCallback(
|
|
v8::Local<v8::Context> context,
|
|
v8::Local<v8::Module> module,
|
|
v8::Local<v8::Object> 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<v8::Object> object,
|
|
v8::Local<v8::Module> module,
|
|
v8::Local<v8::String> url);
|
|
~ModuleWrap() override;
|
|
|
|
static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void Link(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void Instantiate(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void Evaluate(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void Namespace(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void GetStatus(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void GetError(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void GetStaticDependencySpecifiers(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
|
|
static void Resolve(const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void SetImportModuleDynamicallyCallback(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static void SetInitializeImportMetaObjectCallback(
|
|
const v8::FunctionCallbackInfo<v8::Value>& args);
|
|
static v8::MaybeLocal<v8::Module> ResolveCallback(
|
|
v8::Local<v8::Context> context,
|
|
v8::Local<v8::String> specifier,
|
|
v8::Local<v8::Module> referrer);
|
|
static ModuleWrap* GetFromModule(node::Environment*, v8::Local<v8::Module>);
|
|
|
|
Persistent<v8::Module> module_;
|
|
Persistent<v8::String> url_;
|
|
bool linked_ = false;
|
|
std::unordered_map<std::string, Persistent<v8::Promise>> resolve_cache_;
|
|
Persistent<v8::Context> context_;
|
|
uint32_t id_;
|
|
};
|
|
|
|
} // namespace loader
|
|
} // namespace node
|
|
|
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#endif // SRC_MODULE_WRAP_H_
|