/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v24.19.0
src/node_modules.h
102 строки
3 KB
Michael Smith
src: cache missing package.json files in the C++ package config cache
28 янв 2026, 00:52
Не верифицирован
28 янв 2026, 00:52
bb9e4e0
Код
Авторство
О чём код?
#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 GetNearestParentPackageJSON( 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: /* * This map caches `PackageConfig` values by `package.json` path. * An empty optional value indicates that no `package.json` file * at the given path exists, which we cache to avoid repeated * attempts to open the same non-existent paths. */ std::unordered_map<std::string, std::optional<PackageConfig> > package_configs_; simdjson::ondemand::parser json_parser; static const std::filesystem::path NormalizePath(Realm* realm, BufferValue* path_value); // 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_