/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v22.22.1
src/node_modules.h
91 строка
3 KB
Michael Smith
src: reduce the nearest parent package JSON cache size
07 окт 2025, 18:29
Не верифицирован
07 окт 2025, 18:29
36b68db
Код
Авторство
О чём код?
#ifndef SRC_NODE_MODULES_H_ #define SRC_NODE_MODULES_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node.h" #include "node_snapshotable.h" #include "simdjson.h" #include "util.h" #include "v8-fast-api-calls.h" #include "v8.h" #include <filesystem> #include <optional> #include <string> #include <string_view> #include <unordered_map> namespace node { class ExternalReferenceRegistry; namespace modules { class BindingData : public SnapshotableObject { public: using InternalFieldInfo = InternalFieldInfoBase; struct PackageConfig { std::string file_path; std::optional<std::string> name; std::optional<std::string> main; std::string type = "none"; std::optional<std::string> exports; std::optional<std::string> imports; std::optional<std::string> scripts; std::string raw_json; v8::Local<v8::Array> Serialize(Realm* realm) const; }; struct ErrorContext { std::optional<std::string> base; std::string specifier; bool is_esm; }; BindingData(Realm* realm, v8::Local<v8::Object> obj, InternalFieldInfo* info = nullptr); SERIALIZABLE_OBJECT_METHODS() SET_BINDING_ID(modules_binding_data) void MemoryInfo(MemoryTracker* tracker) const override; SET_SELF_SIZE(BindingData) SET_MEMORY_INFO_NAME(BindingData) static void ReadPackageJSON(const v8::FunctionCallbackInfo<v8::Value>& args); static void GetNearestParentPackageJSONType( const v8::FunctionCallbackInfo<v8::Value>& args); template <bool return_only_type> static void GetPackageScopeConfig( const v8::FunctionCallbackInfo<v8::Value>& args); static void GetPackageJSONScripts( const v8::FunctionCallbackInfo<v8::Value>& args); static void CreatePerIsolateProperties(IsolateData* isolate_data, v8::Local<v8::ObjectTemplate> ctor); static void CreatePerContextProperties(v8::Local<v8::Object> target, v8::Local<v8::Value> unused, v8::Local<v8::Context> context, void* priv); static void RegisterExternalReferences(ExternalReferenceRegistry* registry); private: std::unordered_map<std::string, PackageConfig> package_configs_; simdjson::ondemand::parser json_parser; // returns null on error static const PackageConfig* GetPackageJSON( Realm* realm, std::string_view path, ErrorContext* error_context = nullptr); static const PackageConfig* TraverseParent( Realm* realm, const std::filesystem::path& check_path); }; } // namespace modules } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_NODE_MODULES_H_