dioxus_interpreter_js/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#![allow(clippy::empty_docs)]
#![doc = include_str!("../README.md")]
#![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")]
#![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")]

/// The base class that the JS channel will extend
pub static INTERPRETER_JS: &str = include_str!("./js/core.js");

/// The code explicitly for desktop/liveview that bridges the eval gap between the two
pub static NATIVE_JS: &str = include_str!("./js/native.js");

/// The code that handles initializing data used for fullstack data streaming
pub static INITIALIZE_STREAMING_JS: &str = include_str!("./js/initialize_streaming.js");

#[cfg(all(feature = "binary-protocol", feature = "sledgehammer"))]
mod write_native_mutations;

#[cfg(all(feature = "binary-protocol", feature = "sledgehammer"))]
pub use write_native_mutations::*;

#[cfg(feature = "sledgehammer")]
pub mod unified_bindings;

#[cfg(feature = "sledgehammer")]
pub use unified_bindings::*;

// Common bindings for minimal usage.
#[cfg(all(feature = "minimal_bindings", feature = "webonly"))]
pub mod minimal_bindings {
    use wasm_bindgen::{prelude::wasm_bindgen, JsValue};

    /// Some useful snippets that we use to share common functionality between the different platforms we support.
    ///
    /// This maintains some sort of consistency between web, desktop, and liveview
    #[wasm_bindgen(module = "/src/js/common.js")]
    extern "C" {
        /// Set the attribute of the node
        pub fn setAttributeInner(node: JsValue, name: &str, value: JsValue, ns: Option<&str>);

        /// Roll up all the values from the node into a JS object that we can deserialize
        pub fn collectFormValues(node: JsValue) -> JsValue;
    }

    #[wasm_bindgen(module = "/src/js/hydrate.js")]
    extern "C" {
        /// Register a callback that that will be called to hydrate a node at the given id with data from the server
        pub fn register_rehydrate_chunk_for_streaming(
            closure: &wasm_bindgen::closure::Closure<dyn FnMut(Vec<u32>, js_sys::Uint8Array)>,
        );

        /// Register a callback that that will be called to hydrate a node at the given id with data from the server
        pub fn register_rehydrate_chunk_for_streaming_debug(
            closure: &wasm_bindgen::closure::Closure<
                dyn FnMut(Vec<u32>, js_sys::Uint8Array, Option<Vec<String>>, Option<Vec<String>>),
            >,
        );
    }

    #[wasm_bindgen(module = "/src/js/patch_console.js")]
    extern "C" {
        pub fn monkeyPatchConsole(ws: JsValue);
    }
}