use js_sys;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn init_wasm_optimizations() {
console_error_panic_hook::set_once();
#[cfg(feature = "wasm-opt")]
{
console_log::init_with_level(log::Level::Warn).expect("Failed to initialize console_log");
}
optimize_memory_usage();
}
fn optimize_memory_usage() {
#[cfg(target_arch = "wasm32")]
{
if let Some(window) = web_sys::window() {
if let Some(performance) = window.performance() {
#[cfg(debug_assertions)]
{
let _ = performance.now();
}
}
}
}
}
#[wasm_bindgen]
pub fn get_memory_usage() -> JsValue {
#[cfg(target_arch = "wasm32")]
{
if let Some(window) = web_sys::window() {
if let Some(performance) = window.performance() {
let memory_info = js_sys::Object::new();
js_sys::Reflect::set(&memory_info, &"timestamp".into(), &performance.now().into())
.ok();
if let Ok(memory) = js_sys::eval("performance.memory") {
if !memory.is_undefined() {
return memory;
}
}
return memory_info.into();
}
}
}
JsValue::NULL
}
pub fn optimize_form_performance() {
#[cfg(feature = "wasm-opt")]
{
lazy_static::lazy_static! {
static ref COMMON_FIELD_NAMES: std::collections::HashSet<&'static str> = {
let mut set = std::collections::HashSet::new();
set.insert("email");
set.insert("password");
set.insert("name");
set.insert("firstName");
set.insert("lastName");
set.insert("phone");
set.insert("address");
set.insert("city");
set.insert("state");
set.insert("zipCode");
set.insert("country");
set
};
}
lazy_static::lazy_static! {
static ref EMAIL_REGEX: regex::Regex = regex::Regex::new(r"^[^\s@]+@[^\s@]+\.[^\s@]+$").unwrap();
static ref PHONE_REGEX: regex::Regex = regex::Regex::new(r"^\+?[\d\s\-\(\)]+$").unwrap();
}
}
}
pub fn configure_wasm_form_optimizations() {
optimize_form_performance();
#[cfg(target_arch = "wasm32")]
{
if let Some(window) = web_sys::window() {
if let Some(document) = window.document() {
let _ = document.add_event_listener_with_callback(
"input",
Closure::wrap(Box::new(|event: web_sys::Event| {
if let Some(target) = event.target() {
if let Some(element) = target.dyn_ref::<web_sys::HtmlElement>() {
if element.tag_name() == "INPUT"
|| element.tag_name() == "SELECT"
|| element.tag_name() == "TEXTAREA"
{
#[cfg(feature = "wasm-opt")]
{
}
}
}
}
}) as Box<dyn FnMut(_)>)
.into_js_value()
.dyn_ref::<js_sys::Function>()
.unwrap(),
);
}
}
}
}