1mod assets;
14mod async_io;
15mod collections;
16mod content;
17mod coro;
18mod crypt;
19mod env;
20mod file_ops;
21mod git;
22mod helpers;
23mod images;
24mod markdown_context;
25mod parallel;
26mod search;
27mod text;
28pub mod tracker;
29mod types;
30
31pub use helpers::{is_path_within_root, parse_frontmatter_content, resolve_path};
32pub use tracker::{BuildTracker, CachedDeps, SharedTracker};
33pub use types::{LuaClass, LuaField, LuaFunction, LuaParam, generate_emmylua, generate_markdown};
34
35use mlua::{Lua, Result, Table};
36use std::path::Path;
37
38pub fn register(
60 lua: &Lua,
61 project_root: &Path,
62 sandbox: bool,
63 tracker: SharedTracker,
64 global_password: Option<String>,
65) -> Result<()> {
66 let root = project_root.to_path_buf();
67
68 let rs_module = lua.create_table()?;
70
71 rs_module.set("_VERSION", env!("CARGO_PKG_VERSION"))?;
73 rs_module.set("_SANDBOX", sandbox)?;
74 rs_module.set("_PROJECT_ROOT", project_root.to_string_lossy().to_string())?;
75
76 file_ops::register(lua, &rs_module, &root, sandbox, tracker.clone())?;
78 search::register(lua, &rs_module, &root, sandbox)?;
79 collections::register(lua, &rs_module)?;
80 text::register(lua, &rs_module)?;
81 env::register(lua, &rs_module, &root)?;
82 git::register(lua, &rs_module, &root, sandbox)?;
83 content::register(lua, &rs_module, tracker.clone())?;
84 images::register(lua, &rs_module, &root, tracker.clone())?;
85 assets::register(lua, &rs_module, &root, tracker.clone())?;
86
87 let coro_module = coro::create_module(lua)?;
89 rs_module.set("coro", coro_module)?;
90
91 let parallel_module = parallel::create_module(lua, &root, sandbox, tracker.clone())?;
92 rs_module.set("parallel", parallel_module)?;
93
94 let async_module = async_io::create_module(lua, &root, sandbox)?;
95 rs_module.raw_set("async", async_module)?;
97
98 let crypt_module = crypt::create_module(lua, global_password)?;
99 rs_module.set("crypt", crypt_module)?;
100
101 let preload: Table = lua
103 .globals()
104 .get::<Table>("package")?
105 .get::<Table>("preload")?;
106
107 let rs_module_clone = rs_module.clone();
108 let loader = lua.create_function(move |_, _: ()| Ok(rs_module_clone.clone()))?;
109 preload.set("rs-web", loader)?;
110 lua.globals().set("rs", rs_module)?;
111
112 Ok(())
113}