#pragma once #include #include #include #include namespace faset::scripting { // Immutable source snapshot. Keys and entries are project-relative UTF-8 paths. // Only Lua files below Scripts are accepted; loading never follows symlinks. struct LuaProject { std::vector scripts; std::map sources; std::string fingerprint; bool enabled() const noexcept { return !scripts.empty(); } }; // project.faset.json: scripting.lua.scripts = ["Scripts/player.lua", ...]. // An absent Lua declaration is a C++-only project. LuaProject loadLuaProject(const std::filesystem::path& projectRoot); // Writes the captured sources, not live files. The caller owns the target manifest. void writeLuaSources(const LuaProject& project, const std::filesystem::path& targetRoot); } // namespace faset::scripting