/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v22.23.0
src/node_sea.h
74 строки
2 KB
Joyee Cheung
sea: implement execArgvExtension
20 сен 2025, 09:10
Не верифицирован
20 сен 2025, 09:10
9b7dd40
Код
Авторство
О чём код?
#ifndef SRC_NODE_SEA_H_ #define SRC_NODE_SEA_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include <cinttypes> #include <optional> #include <string> #include <string_view> #include <tuple> #include <unordered_map> #include <vector> #include "node_exit_code.h" namespace node { class Environment; namespace sea { // A special number that will appear at the beginning of the single executable // preparation blobs ready to be injected into the binary. We use this to check // that the data given to us are intended for building single executable // applications. const uint32_t kMagic = 0x143da20; enum class SeaFlags : uint32_t { kDefault = 0, kDisableExperimentalSeaWarning = 1 << 0, kUseSnapshot = 1 << 1, kUseCodeCache = 1 << 2, kIncludeAssets = 1 << 3, kIncludeExecArgv = 1 << 4, }; enum class SeaExecArgvExtension : uint8_t { kNone = 0, kEnv = 1, kCli = 2, }; struct SeaResource { SeaFlags flags = SeaFlags::kDefault; SeaExecArgvExtension exec_argv_extension = SeaExecArgvExtension::kEnv; std::string_view code_path; std::string_view main_code_or_snapshot; std::optional<std::string_view> code_cache; std::unordered_map<std::string_view, std::string_view> assets; std::vector<std::string_view> exec_argv; bool use_snapshot() const; bool use_code_cache() const; static constexpr size_t kHeaderSize = sizeof(kMagic) + sizeof(SeaFlags) + sizeof(SeaExecArgvExtension); }; bool IsSingleExecutable(); SeaResource FindSingleExecutableResource(); std::tuple<int, char**> FixupArgsForSEA(int argc, char** argv); node::ExitCode BuildSingleExecutableBlob( const std::string& config_path, const std::vector<std::string>& args, const std::vector<std::string>& exec_args); // Try loading the Environment as a single-executable application. // Returns true if it is loaded as a single-executable application. // Otherwise returns false and the caller is expected to call LoadEnvironment() // differently. bool MaybeLoadSingleExecutableApplication(Environment* env); } // namespace sea } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_NODE_SEA_H_