mod assets;
mod async_io;
mod coro;
mod crypt;
mod css;
mod data;
mod date;
mod env;
mod fonts;
mod fs;
mod git;
mod hash;
mod helpers;
mod highlight;
mod html;
mod image;
mod js;
mod log;
mod markdown;
mod ops;
mod parallel;
mod path;
mod portable;
mod pwa;
mod seo;
mod text;
mod types;
pub use assets::{AssetManifest, create_manifest};
pub use helpers::{is_path_within_root, parse_frontmatter_content, resolve_path};
pub use highlight::highlight_code_sync;
pub use types::{LuaClass, LuaField, LuaFunction, LuaParam, generate_emmylua, generate_markdown};
use crate::tracker::SharedTracker;
use mlua::{Lua, Result, Table};
use std::path::Path;
pub fn register(
lua: &Lua,
project_root: &Path,
sandbox: bool,
tracker: SharedTracker,
global_password: Option<String>,
asset_manifest: AssetManifest,
) -> Result<()> {
let root = project_root.to_path_buf();
let rs_module = lua.create_table()?;
rs_module.set("_VERSION", env!("CARGO_PKG_VERSION"))?;
rs_module.set("_SANDBOX", sandbox)?;
rs_module.set("_PROJECT_ROOT", project_root.to_string_lossy().to_string())?;
let ops_module = ops::create_module(lua)?;
rs_module.set("ops", ops_module)?;
let fs_module = fs::create_module(lua, &root, sandbox, tracker.clone())?;
rs_module.set("fs", fs_module)?;
let data_module = data::create_module(lua, &root, sandbox, tracker.clone())?;
rs_module.set("data", data_module)?;
let image_module = image::create_module(lua, &root, tracker.clone())?;
rs_module.set("image", image_module)?;
let text_module = text::create_module(lua)?;
rs_module.set("text", text_module)?;
let date_module = date::create_module(lua)?;
rs_module.set("date", date_module)?;
let path_module = path::create_module(lua)?;
rs_module.set("path", path_module)?;
let hash_module = hash::create_module(lua)?;
rs_module.set("hash", hash_module)?;
let git_module = git::create_module(lua, &root, sandbox)?;
rs_module.set("git", git_module)?;
let html_module = html::create_module(lua, tracker.clone())?;
rs_module.set("html", html_module)?;
let log_module = log::create_module(lua)?;
rs_module.set("log", log_module)?;
let env_module = env::create_module(lua)?;
rs_module.set("env", env_module)?;
let js_module = js::create_module(lua, &root, tracker.clone())?;
rs_module.set("js", js_module)?;
let css_module = css::create_module(lua, &root, tracker.clone())?;
rs_module.set("css", css_module)?;
let fonts_module = fonts::create_module(lua, &root, tracker.clone())?;
rs_module.set("fonts", fonts_module)?;
let coro_module = coro::create_module(lua)?;
rs_module.set("coro", coro_module)?;
let parallel_module = parallel::create_module(lua, &root, sandbox, tracker.clone())?;
rs_module.set("parallel", parallel_module)?;
let async_module = async_io::create_module(lua, &root, sandbox, tracker.clone())?;
rs_module.raw_set("async", async_module)?;
let crypt_module = crypt::create_module(lua, global_password)?;
rs_module.set("crypt", crypt_module)?;
let highlight_module = highlight::create_module(lua)?;
rs_module.set("highlight", highlight_module)?;
let assets_module = assets::create_module(lua, &root, asset_manifest, tracker.clone())?;
rs_module.set("assets", assets_module)?;
let pwa_module = pwa::create_module(lua, &root, tracker.clone())?;
rs_module.set("pwa", pwa_module)?;
let seo_module = seo::create_module(lua, &root, tracker.clone())?;
rs_module.set("seo", seo_module)?;
markdown::register(lua, &rs_module, tracker)?;
let preload: Table = lua
.globals()
.get::<Table>("package")?
.get::<Table>("preload")?;
let loader = lua.create_function(move |_, _: ()| Ok(rs_module.clone()))?;
preload.set("rs-web", loader)?;
Ok(())
}