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