1mod assets;
10mod async_io;
11mod coro;
12mod crypt;
13mod css;
14mod data;
15mod date;
16mod env;
17mod fonts;
18mod fs;
19mod git;
20mod hash;
21mod helpers;
22mod highlight;
23mod html;
24mod image;
25mod js;
26mod log;
27mod markdown;
28mod ops;
29mod parallel;
30mod path;
31mod portable;
32mod pwa;
33mod seo;
34mod text;
35mod types;
36
37pub use assets::{AssetManifest, create_manifest};
38pub use helpers::{is_path_within_root, parse_frontmatter_content, resolve_path};
39pub use highlight::highlight_code_sync;
40pub use types::{LuaClass, LuaField, LuaFunction, LuaParam, generate_emmylua, generate_markdown};
41
42use crate::tracker::SharedTracker;
43use mlua::{Lua, Result, Table};
44use std::path::Path;
45
46pub fn register(
74 lua: &Lua,
75 project_root: &Path,
76 sandbox: bool,
77 tracker: SharedTracker,
78 global_password: Option<String>,
79 asset_manifest: AssetManifest,
80) -> Result<()> {
81 let root = project_root.to_path_buf();
82
83 let rs_module = lua.create_table()?;
85
86 rs_module.set("_VERSION", env!("CARGO_PKG_VERSION"))?;
88 rs_module.set("_SANDBOX", sandbox)?;
89 rs_module.set("_PROJECT_ROOT", project_root.to_string_lossy().to_string())?;
90
91 let ops_module = ops::create_module(lua)?;
92 rs_module.set("ops", ops_module)?;
93
94 let fs_module = fs::create_module(lua, &root, sandbox, tracker.clone())?;
95 rs_module.set("fs", fs_module)?;
96
97 let data_module = data::create_module(lua, &root, sandbox, tracker.clone())?;
98 rs_module.set("data", data_module)?;
99
100 let image_module = image::create_module(lua, &root, tracker.clone())?;
101 rs_module.set("image", image_module)?;
102
103 let text_module = text::create_module(lua)?;
104 rs_module.set("text", text_module)?;
105
106 let date_module = date::create_module(lua)?;
107 rs_module.set("date", date_module)?;
108
109 let path_module = path::create_module(lua)?;
110 rs_module.set("path", path_module)?;
111
112 let hash_module = hash::create_module(lua)?;
113 rs_module.set("hash", hash_module)?;
114
115 let git_module = git::create_module(lua, &root, sandbox)?;
116 rs_module.set("git", git_module)?;
117
118 let html_module = html::create_module(lua, tracker.clone())?;
119 rs_module.set("html", html_module)?;
120
121 let log_module = log::create_module(lua)?;
122 rs_module.set("log", log_module)?;
123
124 let env_module = env::create_module(lua)?;
125 rs_module.set("env", env_module)?;
126
127 let js_module = js::create_module(lua, &root, tracker.clone())?;
128 rs_module.set("js", js_module)?;
129
130 let css_module = css::create_module(lua, &root, tracker.clone())?;
131 rs_module.set("css", css_module)?;
132
133 let fonts_module = fonts::create_module(lua, &root, tracker.clone())?;
134 rs_module.set("fonts", fonts_module)?;
135
136 let coro_module = coro::create_module(lua)?;
138 rs_module.set("coro", coro_module)?;
139
140 let parallel_module = parallel::create_module(lua, &root, sandbox, tracker.clone())?;
141 rs_module.set("parallel", parallel_module)?;
142
143 let async_module = async_io::create_module(lua, &root, sandbox, tracker.clone())?;
144 rs_module.raw_set("async", async_module)?;
146
147 let crypt_module = crypt::create_module(lua, global_password)?;
148 rs_module.set("crypt", crypt_module)?;
149
150 let highlight_module = highlight::create_module(lua)?;
151 rs_module.set("highlight", highlight_module)?;
152
153 let assets_module = assets::create_module(lua, &root, asset_manifest, tracker.clone())?;
154 rs_module.set("assets", assets_module)?;
155
156 let pwa_module = pwa::create_module(lua, &root, tracker.clone())?;
157 rs_module.set("pwa", pwa_module)?;
158
159 let seo_module = seo::create_module(lua, &root, tracker.clone())?;
160 rs_module.set("seo", seo_module)?;
161
162 markdown::register(lua, &rs_module, tracker)?;
164
165 let preload: Table = lua
167 .globals()
168 .get::<Table>("package")?
169 .get::<Table>("preload")?;
170
171 let loader = lua.create_function(move |_, _: ()| Ok(rs_module.clone()))?;
172 preload.set("rs-web", loader)?;
173
174 Ok(())
175}