Feature object graph (#2518)

* Refactor: move the object graph ui to admin web ui
* Add dynamic js loading support
Load viz.js dynamically
* Add some js docs
* chore: cleanup imports
* chore: remove unused clipboard feature
chore: remove unused mermaid.sh
* Messing with the profile.release settings and reverting the changes I tried has now made the build much smaller yay :D
* Refactor: user raw search requests
Assert service-accounts properly
* refactor: new v1 proto structure
* Add self to CONTRIBUTORS.md

---------

Co-authored-by: James Hodgkinson <james@terminaloutcomes.com>
This commit is contained in:
Merlijn 2024-02-29 03:25:40 +01:00 committed by GitHub
parent 3760951b6d
commit eddca4fc86
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
44 changed files with 1430 additions and 629 deletions

View file

@ -35,6 +35,7 @@
- Allan Zhang (allan2)
- illode
- Jinna Kiisuo (jinnatar)
- Merlijn Verstraete (ToxicMushroom)
## Acknowledgements

2
Cargo.lock generated
View file

@ -3311,6 +3311,7 @@ dependencies = [
name = "kanidmd_web_ui_admin"
version = "1.2.0-dev"
dependencies = [
"enum-iterator",
"gloo",
"gloo-utils 0.2.0",
"js-sys",
@ -3372,6 +3373,7 @@ dependencies = [
name = "kanidmd_web_ui_user"
version = "1.2.0-dev"
dependencies = [
"enum-iterator",
"gloo",
"gloo-timers 0.3.0",
"gloo-utils 0.2.0",

View file

@ -34,6 +34,8 @@ pub fn generate_integrity_hash(filename: String) -> Result<String, String> {
pub struct JavaScriptFile {
// Relative to the pkg/ dir
pub filepath: &'static str,
// Dynamic
pub dynamic: bool,
// SHA384 hash of the file
pub hash: String,
// if it's a module add the "type"
@ -41,7 +43,7 @@ pub struct JavaScriptFile {
}
impl JavaScriptFile {
/// returns a `<script>` HTML tag
/// returns a `<script>` or `<meta>` HTML tag
pub fn as_tag(&self) -> String {
let filetype = match &self.filetype {
Some(val) => {
@ -49,9 +51,16 @@ impl JavaScriptFile {
}
_ => String::from(""),
};
if self.dynamic {
format!(
r#"<meta async src="/pkg/{}" integrity="sha384-{}"{} />"#,
self.filepath, &self.hash, &filetype,
)
} else {
format!(
r#"<script async src="/pkg/{}" integrity="sha384-{}"{}></script>"#,
self.filepath, &self.hash, &filetype,
)
}
}
}

View file

@ -125,6 +125,7 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
filepath.to_string(),
JavaScriptFile {
filepath,
dynamic: false,
hash,
filetype: Some("module".to_string()),
},
@ -141,9 +142,10 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
};
}
for (filepath, filetype) in [
("shared.js", Some("module".to_string())),
("external/bootstrap.bundle.min.js", None),
for (filepath, filetype, dynamic) in [
("shared.js", Some("module".to_string()), false),
("external/bootstrap.bundle.min.js", None, false),
("external/viz.js", None, true),
] {
// let's set up the list of non-wasm-module js files we want to serve
// for filepath in ["external/bootstrap.bundle.min.js", "shared.js"] {
@ -154,6 +156,7 @@ pub fn get_js_files(role: ServerRole) -> Result<JavaScriptFiles, ()> {
)) {
Ok(hash) => all_pages.push(JavaScriptFile {
filepath,
dynamic,
hash,
filetype,
}),

View file

@ -4,6 +4,7 @@ fn test_javscriptfile() {
use crate::https::JavaScriptFile;
let jsf = JavaScriptFile {
filepath: "wasmloader_admin.js",
dynamic: false,
hash: "1234567890".to_string(),
filetype: Some("module".to_string()),
};
@ -13,6 +14,7 @@ fn test_javscriptfile() {
);
let jsf = JavaScriptFile {
filepath: "wasmloader_admin.js",
dynamic: false,
hash: "1234567890".to_string(),
filetype: None,
};

View file

@ -31,6 +31,7 @@ wasm-bindgen-futures = { workspace = true }
yew = { workspace = true, features = ["csr"] }
yew-router = { workspace = true }
gloo-utils = { workspace = true }
enum-iterator = { workspace = true}
[dependencies.web-sys]
workspace = true
@ -49,6 +50,8 @@ features = [
"HtmlButtonElement",
"HtmlDocument",
"HtmlFormElement",
"HtmlSelectElement",
"HtmlInputElement",
"Navigator",
# "PublicKeyCredential",
# "PublicKeyCredentialCreationOptions",

View file

@ -0,0 +1,334 @@
use enum_iterator::{all, Sequence};
#[cfg(debug_assertions)]
use gloo::console;
use serde::Serialize;
use std::fmt::{Display, Formatter};
use yew::prelude::*;
use kanidm_proto::internal::Filter::{Eq, Or};
use kanidm_proto::internal::{SearchRequest, SearchResponse};
use kanidm_proto::v1::Entry;
use kanidmd_web_ui_shared::constants::CSS_PAGE_HEADER;
use kanidmd_web_ui_shared::{do_request, error::FetchError, RequestMethod};
use wasm_bindgen::prelude::*;
use web_sys::HtmlInputElement;
use yew_router::Routable;
use crate::router::AdminRoute;
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
use kanidmd_web_ui_shared::utils::{init_graphviz, open_blank};
pub enum Msg {
NewFilters { filters: Vec<ObjectType> },
NewObjects { entries: Vec<Entry> },
Error { emsg: String, kopid: Option<String> },
}
impl From<FetchError> for Msg {
fn from(fe: FetchError) -> Self {
Msg::Error {
emsg: fe.as_string(),
kopid: None,
}
}
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, Sequence)]
pub enum ObjectType {
Group,
BuiltinGroup,
ServiceAccount,
Person,
}
impl Display for ObjectType {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let str = match self {
ObjectType::Group => "Group",
ObjectType::BuiltinGroup => "Built In Group",
ObjectType::ServiceAccount => "Service Account",
ObjectType::Person => "Person",
};
write!(f, "{str}")
}
}
impl TryFrom<String> for ObjectType {
type Error = ();
fn try_from(value: String) -> Result<Self, Self::Error> {
all::<ObjectType>()
.find(|x| format!("{x}") == value)
.ok_or(())
}
}
pub enum State {
Waiting,
Ready { entries: Vec<Entry> },
Error { emsg: String, kopid: Option<String> },
}
pub struct AdminObjectGraph {
state: State,
filters: Vec<ObjectType>,
}
impl Component for AdminObjectGraph {
type Message = Msg;
type Properties = ();
fn create(ctx: &Context<Self>) -> Self {
#[cfg(debug_assertions)]
console::debug!("views::objectgraph::create");
ctx.link()
.send_future(async { Self::fetch_objects().await.unwrap_or_else(|v| v.into()) });
let state = State::Waiting;
AdminObjectGraph {
state,
filters: vec![],
}
}
fn update(&mut self, _ctx: &Context<Self>, msg: Self::Message) -> bool {
#[cfg(debug_assertions)]
console::debug!("views::objectgraph::update");
match msg {
Msg::NewObjects { entries } => {
#[cfg(debug_assertions)]
console::debug!("Received new objects");
self.state = State::Ready { entries }
}
Msg::NewFilters { filters } => {
#[cfg(debug_assertions)]
console::debug!("Received new filters");
self.filters = filters;
}
Msg::Error { emsg, kopid } => self.state = State::Error { emsg, kopid },
}
true
}
fn changed(&mut self, _ctx: &Context<Self>, _props: &Self::Properties) -> bool {
#[cfg(debug_assertions)]
console::debug!("views::objectgraph::changed");
false
}
fn view(&self, ctx: &Context<Self>) -> Html {
match &self.state {
State::Waiting => self.view_waiting(),
State::Ready { entries } => self.view_ready(ctx, &self.filters, entries),
State::Error { emsg, kopid } => self.view_error(ctx, emsg, kopid.as_deref()),
}
}
fn rendered(&mut self, _ctx: &Context<Self>, _first_render: bool) {
#[cfg(debug_assertions)]
console::debug!("views::objectgraph::rendered");
}
}
impl AdminObjectGraph {
fn view_waiting(&self) -> Html {
loading_spinner()
}
fn view_ready(&self, ctx: &Context<Self>, filters: &[ObjectType], entries: &[Entry]) -> Html {
let typed_entries = entries
.iter()
.filter_map(|entry| {
let classes = entry.attrs.get("class")?;
let uuid = entry.attrs.get("uuid")?.first()?;
// Logic to decide the type of each entry
let obj_type = if classes.contains(&"group".to_string()) {
if uuid.starts_with("00000000-0000-0000-0000-") {
ObjectType::BuiltinGroup
} else {
ObjectType::Group
}
} else if classes.contains(&"account".to_string()) {
if classes.contains(&"person".to_string()) {
ObjectType::Person
} else if classes.contains(&"service-account".to_string()) {
ObjectType::ServiceAccount
} else {
return None;
}
} else {
return None;
};
// Filter out the things we want to keep, if the filter is empty we assume we want all.
if !filters.contains(&obj_type) && !filters.is_empty() {
return None;
}
let spn = entry.attrs.get("spn")?.first()?;
Some((spn.clone(), uuid.clone(), obj_type))
})
.collect::<Vec<(String, String, ObjectType)>>();
// Vec<obj, uuid, obj's members>
let members_of = entries
.iter()
.filter_map(|entry| {
let spn = entry.attrs.get("spn")?.first()?.clone();
let uuid = entry.attrs.get("uuid")?.first()?.clone();
let keep = typed_entries
.iter()
.any(|(_, filtered_uuid, _)| &uuid == filtered_uuid);
if keep {
Some((spn, uuid, entry.attrs.get("member")?.clone()))
} else {
None
}
})
.collect::<Vec<_>>();
// Constructing graph source
let mut sb = String::new();
sb.push_str("digraph {\n rankdir=\"RL\"\n");
for (spn, _, members) in members_of {
members
.iter()
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
.for_each(|member| {
sb.push_str(format!(r#" "{spn}" -> "{member}"{}"#, "\n").as_str());
});
}
for (spn, uuid, obj_type) in typed_entries {
let (color, shape, route) = match obj_type {
ObjectType::Group => ("#b86367", "box", AdminRoute::ViewGroup { uuid }),
ObjectType::BuiltinGroup => {
("#8bc1d6", "component", AdminRoute::ViewGroup { uuid })
}
ObjectType::ServiceAccount => (
"#77c98d",
"parallelogram",
AdminRoute::ViewServiceAccount { uuid },
),
ObjectType::Person => ("#af8bd6", "ellipse", AdminRoute::ViewPerson { uuid }),
};
let url = route.to_path();
sb.push_str(
format!(
r#" "{spn}" [color = "{color}", shape = {shape}, URL = "{url}"]{}"#,
"\n"
)
.as_str(),
);
}
sb.push('}');
init_graphviz(sb.as_str());
let node_refs = all::<ObjectType>()
.map(|object_type: ObjectType| (object_type, NodeRef::default()))
.collect::<Vec<_>>();
let on_checkbox_click = {
let scope = ctx.link().clone();
let node_refs = node_refs.clone();
move |_: Event| {
let mut filters = vec![];
for (obj_type, node_ref) in &node_refs {
if let Some(input_el) = node_ref.cast::<HtmlInputElement>() {
let checked = input_el.checked();
if checked {
filters.push(*obj_type);
}
}
}
scope.send_message(Msg::NewFilters { filters });
}
};
let view_graph_source = {
move |_: MouseEvent| {
open_blank(sb.as_str());
}
};
html! {
<>
<div class={CSS_PAGE_HEADER}>
<h2>{ "ObjectGraph view" }</h2>
</div>
if entries.is_empty() {
<div>
<h5>{ "No graph objects for the applied filters." }</h5>
</div>
} else {
<div class="column">
<div class="hstack gap-3">
{
node_refs.iter().map(|(ot, node_ref)| {
let ot_str = format!("{}", ot);
let selected = filters.contains(ot);
html! {
<>
<div class="form-check">
<input class="form-check-input obj-graph-filter-cb" type="checkbox" ref={ node_ref } id={ot_str.clone()} onchange={on_checkbox_click.clone()} checked={selected}/>
<label class="form-check-label" for={ot_str.clone()}>{ot_str.clone()}</label>
</div>
if *ot != ObjectType::last().unwrap() {
<div class="vr"></div>
}
</>
}
}).collect::<Html>()
}
</div>
<button class="btn btn-primary mt-2" onclick={view_graph_source}>{ "View graph source" }</button>
</div>
<div id="graph-container" class="mt-3"></div>
}
</>
}
}
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
error_page(msg, kopid)
}
async fn fetch_objects() -> Result<Msg, FetchError> {
let req_body = SearchRequest {
filter: Or(vec![
Eq("class".to_string(), "person".to_string()),
Eq("class".to_string(), "service_account".to_string()),
Eq("class".to_string(), "group".to_string()),
]),
};
let req_jsvalue = req_body
.serialize(&serde_wasm_bindgen::Serializer::json_compatible())
.expect("Failed to serialise request");
let req_jsvalue = js_sys::JSON::stringify(&req_jsvalue).expect_throw("failed to stringify");
let (kopid, status, value, _) =
do_request("/v1/raw/search", RequestMethod::POST, Some(req_jsvalue)).await?;
if status == 200 {
let search_resp: SearchResponse = serde_wasm_bindgen::from_value(value)
.expect_throw("Invalid response type - objectgraph::SearchRequest");
Ok(Msg::NewObjects {
entries: search_resp.entries,
})
} else {
let emsg = value.as_string().unwrap_or_default();
Ok(Msg::Error { emsg, kopid })
}
}
}

View file

@ -2,6 +2,7 @@ pub mod admin_accounts;
pub mod admin_groups;
pub mod admin_menu;
pub mod admin_oauth2;
pub mod admin_objectgraph;
mod prelude {

View file

@ -111,6 +111,7 @@ impl Component for AdminApp {
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminMenu}>{"Admin"}</Link<AdminRoute>>},
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListAccounts}>{"Accounts"}</Link<AdminRoute>>},
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListGroups}>{"Groups"}</Link<AdminRoute>>},
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminObjectGraph}>{"ObjectGraph"}</Link<AdminRoute>>},
html! {<Link<AdminRoute> classes={CSS_NAV_LINK} to={AdminRoute::AdminListOAuth2}>{"OAuth2"}</Link<AdminRoute>>},
signout_link(),
];

View file

@ -15,6 +15,8 @@ pub enum AdminRoute {
AdminListGroups,
#[at("/ui/admin/accounts")]
AdminListAccounts,
#[at("/ui/admin/object-graph")]
AdminObjectGraph,
#[at("/ui/admin/oauth2")]
AdminListOAuth2,
@ -43,6 +45,9 @@ pub(crate) fn switch(route: AdminRoute) -> Html {
AdminRoute::AdminListGroups => html!(
<components::admin_groups::AdminListGroups />
),
AdminRoute::AdminObjectGraph => html!(
<components::admin_objectgraph::AdminObjectGraph />
),
AdminRoute::AdminListOAuth2 => html!(
<components::admin_oauth2::AdminListOAuth2 />
),

View file

@ -15,6 +15,14 @@ if [ -z "$(which wasm-pack)" ]; then
echo "Cannot find wasm-pack which is needed to build the UI, quitting!"
exit 1
fi
if [ -z "$(which wasm-bindgen)" ]; then
echo "Cannot find wasm-bindgen which is needed to build the UI, quitting!"
exit 1
fi
if [ -z "$(which bc)" ]; then
echo "Cannot find bc which is needed to build the UI, quitting!"
exit 1
fi
if [ -z "${BUILD_FLAGS}" ]; then
export BUILD_FLAGS="--release"

9
server/web_ui/pkg/external/viz.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
server/web_ui/pkg/external/viz.js.br vendored Normal file

Binary file not shown.

View file

@ -1,3 +1,5 @@
import { init_graphviz, open_blank } from '/pkg/shared.js';
let wasm;
const heap = new Array(128).fill(undefined);
@ -230,19 +232,19 @@ function addBorrowedObject(obj) {
}
function __wbg_adapter_38(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha262e6b88a6c80cc(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9769b6ea49fd5fb8(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
}
function __wbg_adapter_41(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
}
function __wbg_adapter_44(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc04e5f41a154e807(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5bac1d2533339968(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
@ -352,9 +354,13 @@ function __wbg_get_imports() {
const ret = false;
return ret;
};
imports.wbg.__wbindgen_is_string = function(arg0) {
const ret = typeof(getObject(arg0)) === 'string';
return ret;
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
};
imports.wbg.__wbindgen_is_object = function(arg0) {
const val = getObject(arg0);
@ -369,13 +375,15 @@ function __wbg_get_imports() {
const ret = getObject(arg0) in getObject(arg1);
return ret;
};
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
imports.wbg.__wbindgen_is_string = function(arg0) {
const ret = typeof(getObject(arg0)) === 'string';
return ret;
};
imports.wbg.__wbindgen_error_new = function(arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
imports.wbg.__wbg_initgraphviz_c3ff41f4a4b3769c = function(arg0, arg1) {
init_graphviz(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbg_openblank_46584d7c929c5e36 = function(arg0, arg1) {
open_blank(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbindgen_boolean_get = function(arg0) {
const v = getObject(arg0);
@ -396,14 +404,6 @@ function __wbg_get_imports() {
const ret = arg0;
return addHeapObject(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
const ret = getObject(arg1).__yew_subtree_cache_key;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
@ -420,6 +420,14 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
const ret = new Error();
return addHeapObject(ret);
@ -495,6 +503,40 @@ function __wbg_get_imports() {
const ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Window;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
const ret = getObject(arg0).document;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
const ret = getObject(arg0).location;
return addHeapObject(ret);
};
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).history;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
const ret = getObject(arg0).localStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
const ret = getObject(arg0).sessionStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
const ret = getObject(arg0).fetch(getObject(arg1));
return addHeapObject(ret);
};
imports.wbg.__wbg_instanceof_Element_813f33306edae612 = function(arg0) {
let result;
try {
@ -536,107 +578,15 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setAttribute_f7ffa687ef977957 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Window;
} catch (_) {
result = false;
}
const ret = result;
return ret;
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
const ret = getObject(arg0).document;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
const ret = getObject(arg0).location;
return addHeapObject(ret);
};
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).history;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
const ret = getObject(arg0).localStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
const ret = getObject(arg0).sessionStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
const ret = getObject(arg0).fetch(getObject(arg1));
return addHeapObject(ret);
};
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
}, arguments) };
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
}, arguments) };
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
const ret = getObject(arg0).headers;
return addHeapObject(ret);
};
imports.wbg.__wbg_newwithstrandinit_11fbc38beb4c26b0 = function() { return handleError(function (arg0, arg1, arg2) {
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_Response_b5451a06784a2404 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Response;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_status_bea567d1049f0b6a = function(arg0) {
const ret = getObject(arg0).status;
return ret;
};
imports.wbg.__wbg_headers_96d9457941f08a33 = function(arg0) {
const ret = getObject(arg0).headers;
return addHeapObject(ret);
};
imports.wbg.__wbg_json_c07875c84e5205af = function() { return handleError(function (arg0) {
const ret = getObject(arg0).json();
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_ShadowRoot_ef56f954a86c7472 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof ShadowRoot;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_host_dfffc3b2ba786fb8 = function(arg0) {
const ret = getObject(arg0).host;
return addHeapObject(ret);
};
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
const ret = getObject(arg0).bubbles;
return ret;
};
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
const ret = getObject(arg0).cancelBubble;
return ret;
};
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
const ret = getObject(arg0).composedPath();
return addHeapObject(ret);
};
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
getObject(arg0).preventDefault();
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
@ -651,26 +601,9 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).state;
return addHeapObject(ret);
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
}, arguments) };
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
@ -688,16 +621,48 @@ function __wbg_get_imports() {
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setsearch_e3e6802fd5fe58c4 = function(arg0, arg1, arg2) {
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
const ret = new URL(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
const ret = getObject(arg0).parentNode;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
@ -767,48 +732,95 @@ function __wbg_get_imports() {
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
const ret = getObject(arg0).bubbles;
return ret;
};
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
const ret = getObject(arg0).cancelBubble;
return ret;
};
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
const ret = getObject(arg0).composedPath();
return addHeapObject(ret);
};
imports.wbg.__wbg_setsearch_e3e6802fd5fe58c4 = function(arg0, arg1, arg2) {
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
const ret = new URL(getStringFromWasm0(arg0, arg1));
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).state;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
}, arguments) };
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
const ret = getObject(arg0).checked;
return ret;
};
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
}, arguments) };
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
}, arguments) };
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
const ret = getObject(arg0).headers;
return addHeapObject(ret);
};
imports.wbg.__wbg_newwithstrandinit_11fbc38beb4c26b0 = function() { return handleError(function (arg0, arg1, arg2) {
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_Response_b5451a06784a2404 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Response;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_status_bea567d1049f0b6a = function(arg0) {
const ret = getObject(arg0).status;
return ret;
};
imports.wbg.__wbg_headers_96d9457941f08a33 = function(arg0) {
const ret = getObject(arg0).headers;
return addHeapObject(ret);
};
imports.wbg.__wbg_json_c07875c84e5205af = function() { return handleError(function (arg0) {
const ret = getObject(arg0).json();
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_ShadowRoot_ef56f954a86c7472 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof ShadowRoot;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_host_dfffc3b2ba786fb8 = function(arg0) {
const ret = getObject(arg0).host;
return addHeapObject(ret);
};
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return addHeapObject(ret);
@ -817,6 +829,10 @@ function __wbg_get_imports() {
const ret = getObject(arg0).length;
return ret;
};
imports.wbg.__wbg_new_75208e29bddfd88c = function() {
const ret = new Array();
return addHeapObject(ret);
};
imports.wbg.__wbg_newnoargs_cfecb3965268594c = function(arg0, arg1) {
const ret = new Function(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
@ -869,6 +885,9 @@ function __wbg_get_imports() {
const ret = global.global;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_set_79c308ecd9a1d091 = function(arg0, arg1, arg2) {
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
};
imports.wbg.__wbg_from_58c79ccfb68060f5 = function(arg0) {
const ret = Array.from(getObject(arg0));
return addHeapObject(ret);
@ -958,6 +977,10 @@ function __wbg_get_imports() {
const ret = result;
return ret;
};
imports.wbg.__wbg_stringify_865daa6fb8c83d5a = function() { return handleError(function (arg0) {
const ret = JSON.stringify(getObject(arg0));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_set_961700853a212a39 = function() { return handleError(function (arg0, arg1, arg2) {
const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
return ret;
@ -976,16 +999,16 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1174 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 540, __wbg_adapter_38);
imports.wbg.__wbindgen_closure_wrapper1196 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 568, __wbg_adapter_38);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1339 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 610, __wbg_adapter_41);
imports.wbg.__wbindgen_closure_wrapper1432 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 651, __wbg_adapter_41);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1382 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 630, __wbg_adapter_44);
imports.wbg.__wbindgen_closure_wrapper1465 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 667, __wbg_adapter_44);
return addHeapObject(ret);
};

View file

@ -239,19 +239,19 @@ function addBorrowedObject(obj) {
}
function __wbg_adapter_48(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef87f67032238a7d(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc5493f440a20bd7c(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
}
function __wbg_adapter_51(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
}
function __wbg_adapter_54(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hdaa408b7f06cb2c5(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h46bea18a2aaeab4a(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
@ -414,14 +414,6 @@ function __wbg_get_imports() {
const ret = getObject(arg0);
return addHeapObject(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
const ret = getObject(arg1).__yew_subtree_cache_key;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
@ -438,6 +430,14 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
const ret = new Error();
return addHeapObject(ret);
@ -538,6 +538,44 @@ function __wbg_get_imports() {
const ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Window;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
const ret = getObject(arg0).document;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
const ret = getObject(arg0).location;
return addHeapObject(ret);
};
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).history;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_navigator_b1003b77e05fcee9 = function(arg0) {
const ret = getObject(arg0).navigator;
return addHeapObject(ret);
};
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
const ret = getObject(arg0).localStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
const ret = getObject(arg0).sessionStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
const ret = getObject(arg0).fetch(getObject(arg1));
return addHeapObject(ret);
};
imports.wbg.__wbg_instanceof_Element_813f33306edae612 = function(arg0) {
let result;
try {
@ -579,44 +617,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setAttribute_f7ffa687ef977957 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_instanceof_Window_cee7a886d55e7df5 = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof Window;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_document_eb7fd66bde3ee213 = function(arg0) {
const ret = getObject(arg0).document;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_location_b17760ac7977a47a = function(arg0) {
const ret = getObject(arg0).location;
return addHeapObject(ret);
};
imports.wbg.__wbg_history_6882f83324841599 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).history;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_navigator_b1003b77e05fcee9 = function(arg0) {
const ret = getObject(arg0).navigator;
return addHeapObject(ret);
};
imports.wbg.__wbg_localStorage_3d538af21ea07fcc = function() { return handleError(function (arg0) {
const ret = getObject(arg0).localStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_sessionStorage_32de79fb90d1534a = function() { return handleError(function (arg0) {
const ret = getObject(arg0).sessionStorage;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_fetch_33c84c2bf739f490 = function(arg0, arg1) {
const ret = getObject(arg0).fetch(getObject(arg1));
return addHeapObject(ret);
};
imports.wbg.__wbg_instanceof_HtmlElement_99861aeb7af981c2 = function(arg0) {
let result;
try {
@ -630,6 +630,66 @@ function __wbg_get_imports() {
imports.wbg.__wbg_focus_d1373017540aae66 = function() { return handleError(function (arg0) {
getObject(arg0).focus();
}, arguments) };
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof HTMLInputElement;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
const ret = getObject(arg0).checked;
return ret;
};
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_log_79d3c56888567995 = function(arg0) {
console.log(getObject(arg0));
};
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
}, arguments) };
@ -680,62 +740,50 @@ function __wbg_get_imports() {
const ret = getObject(arg0).host;
return addHeapObject(ret);
};
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
const ret = getObject(arg0).bubbles;
return ret;
};
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
const ret = getObject(arg0).cancelBubble;
return ret;
};
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
const ret = getObject(arg0).composedPath();
return addHeapObject(ret);
};
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
const ret = getObject(arg0).credentials;
return addHeapObject(ret);
};
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
const ret = getObject(arg0).parentNode;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_parentElement_45a9756dc74ff48b = function(arg0) {
const ret = getObject(arg0).parentElement;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_lastChild_d22dbf81f92f163b = function(arg0) {
const ret = getObject(arg0).lastChild;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_nextSibling_87d2b32dfbf09fe3 = function(arg0) {
const ret = getObject(arg0).nextSibling;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_setnodeValue_d1cec51282858afe = function(arg0, arg1, arg2) {
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_textContent_528ff517a0418a3e = function(arg0, arg1) {
const ret = getObject(arg1).textContent;
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_appendChild_4153ba1b5d54d73b = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).appendChild(getObject(arg1));
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
const ret = new URL(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_insertBefore_2be91083083caa9e = function() { return handleError(function (arg0, arg1, arg2) {
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_removeChild_660924798c7e128c = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).removeChild(getObject(arg1));
return addHeapObject(ret);
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
@ -781,88 +829,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_replace_6569a636f8d64d4c = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).replace(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
const ret = getObject(arg0).getClientExtensionResults();
return addHeapObject(ret);
};
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_pathname_3bec400c9c042d62 = function(arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_search_6b70a3bf2ceb3f63 = function(arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_hash_6169ffe1f1446fd4 = function(arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_sethash_06df74e85ecce4f6 = function(arg0, arg1, arg2) {
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_new_79acf9a4da56c772 = function() { return handleError(function (arg0, arg1) {
const ret = new URL(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_newwithbase_98813076a95cdc23 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_log_79d3c56888567995 = function(arg0) {
console.log(getObject(arg0));
};
imports.wbg.__wbg_get_3929a71ee2443c90 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).get(getObject(arg1));
return addHeapObject(ret);
@ -874,33 +840,67 @@ function __wbg_get_imports() {
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
}, arguments) };
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof HTMLInputElement;
} catch (_) {
result = false;
}
const ret = result;
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
const ret = getObject(arg0).credentials;
return addHeapObject(ret);
};
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
const ret = getObject(arg0).getClientExtensionResults();
return addHeapObject(ret);
};
imports.wbg.__wbg_bubbles_31126fc08276cf99 = function(arg0) {
const ret = getObject(arg0).bubbles;
return ret;
};
imports.wbg.__wbg_checked_30b85a12f3f06fd9 = function(arg0) {
const ret = getObject(arg0).checked;
imports.wbg.__wbg_cancelBubble_ae95595adf5ae83d = function(arg0) {
const ret = getObject(arg0).cancelBubble;
return ret;
};
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
imports.wbg.__wbg_composedPath_bd8a0336a042e053 = function(arg0) {
const ret = getObject(arg0).composedPath();
return addHeapObject(ret);
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
const ret = getObject(arg0).parentNode;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_parentElement_45a9756dc74ff48b = function(arg0) {
const ret = getObject(arg0).parentElement;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_lastChild_d22dbf81f92f163b = function(arg0) {
const ret = getObject(arg0).lastChild;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_nextSibling_87d2b32dfbf09fe3 = function(arg0) {
const ret = getObject(arg0).nextSibling;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_setnodeValue_d1cec51282858afe = function(arg0, arg1, arg2) {
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_textContent_528ff517a0418a3e = function(arg0, arg1) {
const ret = getObject(arg1).textContent;
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_appendChild_4153ba1b5d54d73b = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).appendChild(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_insertBefore_2be91083083caa9e = function() { return handleError(function (arg0, arg1, arg2) {
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_removeChild_660924798c7e128c = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).removeChild(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return addHeapObject(ret);
@ -1101,16 +1101,16 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1359 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 508, __wbg_adapter_48);
imports.wbg.__wbindgen_closure_wrapper1294 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 501, __wbg_adapter_48);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1734 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 635, __wbg_adapter_51);
imports.wbg.__wbindgen_closure_wrapper1736 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 641, __wbg_adapter_51);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1777 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 654, __wbg_adapter_54);
imports.wbg.__wbindgen_closure_wrapper1769 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 657, __wbg_adapter_54);
return addHeapObject(ret);
};

View file

@ -232,7 +232,7 @@ function makeMutClosure(arg0, arg1, dtor, f) {
return real;
}
function __wbg_adapter_48(arg0, arg1) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc8b05d5513b97f0a(arg0, arg1);
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha0399323477fc8dc(arg0, arg1);
}
let stack_pointer = 128;
@ -244,19 +244,19 @@ function addBorrowedObject(obj) {
}
function __wbg_adapter_51(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__he486f8e8914d0caa(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h14408378559014c2(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
}
function __wbg_adapter_54(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h096bc01bd3cc011d(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hfd2c1c4b524d4fa7(arg0, arg1, addHeapObject(arg2));
}
function __wbg_adapter_57(arg0, arg1, arg2) {
try {
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h54a1d85f42adb752(arg0, arg1, addBorrowedObject(arg2));
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h4de28a5fcd777f4e(arg0, arg1, addBorrowedObject(arg2));
} finally {
heap[stack_pointer++] = undefined;
}
@ -437,14 +437,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_modalhidebyid_3f2427f253e15ed1 = function(arg0, arg1) {
modal_hide_by_id(getStringFromWasm0(arg0, arg1));
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_cachekey_b61393159c57fd7b = function(arg0, arg1) {
const ret = getObject(arg1).__yew_subtree_cache_key;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
@ -461,6 +453,14 @@ function __wbg_get_imports() {
imports.wbg.__wbg_setcachekey_80183b7cfc421143 = function(arg0, arg1) {
getObject(arg0).__yew_subtree_cache_key = arg1 >>> 0;
};
imports.wbg.__wbg_listenerid_12315eee21527820 = function(arg0, arg1) {
const ret = getObject(arg1).__yew_listener_id;
getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
};
imports.wbg.__wbg_setlistenerid_3183aae8fa5840fb = function(arg0, arg1) {
getObject(arg0).__yew_listener_id = arg1 >>> 0;
};
imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
const ret = new Error();
return addHeapObject(ret);
@ -650,10 +650,18 @@ function __wbg_get_imports() {
imports.wbg.__wbg_focus_d1373017540aae66 = function() { return handleError(function (arg0) {
getObject(arg0).focus();
}, arguments) };
imports.wbg.__wbg_create_5a2dc9022fb20da6 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).create(getObject(arg1));
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
const ret = getObject(arg0).getClientExtensionResults();
return addHeapObject(ret);
};
imports.wbg.__wbg_newwithform_38212a8c8bd57ecb = function() { return handleError(function (arg0) {
const ret = new FormData(getObject(arg0));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_get_8a3d784ef8f1768f = function(arg0, arg1, arg2) {
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
return addHeapObject(ret);
};
imports.wbg.__wbg_headers_bb094b3567fea691 = function(arg0) {
const ret = getObject(arg0).headers;
return addHeapObject(ret);
@ -698,62 +706,6 @@ function __wbg_get_imports() {
const ret = getObject(arg0).host;
return addHeapObject(ret);
};
imports.wbg.__wbg_newwithform_38212a8c8bd57ecb = function() { return handleError(function (arg0) {
const ret = new FormData(getObject(arg0));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_get_8a3d784ef8f1768f = function(arg0, arg1, arg2) {
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
return addHeapObject(ret);
};
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_href_a5b902312c18d121 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_sethref_5f2e449a509e644b = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).href = getStringFromWasm0(arg1, arg2);
}, arguments) };
imports.wbg.__wbg_pathname_d98d0a003b664ef0 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_search_40927d5af164fdfe = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_hash_163703b5971e593c = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_href_14a0154147810c9c = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
@ -796,61 +748,6 @@ function __wbg_get_imports() {
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).state;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
}, arguments) };
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof HTMLInputElement;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
}, arguments) };
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
}, arguments) };
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_target_6795373f170fd786 = function(arg0) {
const ret = getObject(arg0).target;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
@ -870,10 +767,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_preventDefault_657cbf753df1396c = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
const ret = getObject(arg0).credentials;
return addHeapObject(ret);
};
imports.wbg.__wbg_parentNode_e3a5ee563364a613 = function(arg0) {
const ret = getObject(arg0).parentNode;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
@ -912,15 +805,71 @@ function __wbg_get_imports() {
const ret = getObject(arg0).removeChild(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
imports.wbg.__wbg_addEventListener_bc4a7ad4cc72c6bf = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
}, arguments) };
imports.wbg.__wbg_removeEventListener_deae10c75ef836f8 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
}, arguments) };
imports.wbg.__wbg_instanceof_HtmlInputElement_189f182751dc1f5e = function(arg0) {
let result;
try {
result = getObject(arg0) instanceof HTMLInputElement;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_setchecked_50e21357d62a8ccd = function(arg0, arg1) {
getObject(arg0).checked = arg1 !== 0;
};
imports.wbg.__wbg_value_99f5294791d62576 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_bba31de32cdbb32c = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_href_6918c551c13f118b = function(arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_value_ffef403d62e3df58 = function(arg0, arg1) {
const ret = getObject(arg1).value;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
};
imports.wbg.__wbg_setvalue_cbab536654d8dd52 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_getItem_5c179cd36e9529e8 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_set_4ad92a627c50c8ef = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
imports.wbg.__wbg_removeItem_c402594a05099505 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_setItem_7b55989efb4d45f7 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_state_dce1712758f75ed1 = function() { return handleError(function (arg0) {
const ret = getObject(arg0).state;
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_pushState_01f73865f6d8789a = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
}, arguments) };
imports.wbg.__wbg_instanceof_HtmlFormElement_03c5f1936c956219 = function(arg0) {
let result;
@ -932,10 +881,61 @@ function __wbg_get_imports() {
const ret = result;
return ret;
};
imports.wbg.__wbg_getClientExtensionResults_466d05f787e7f4cb = function(arg0) {
const ret = getObject(arg0).getClientExtensionResults();
imports.wbg.__wbg_credentials_46f979142974ef3b = function(arg0) {
const ret = getObject(arg0).credentials;
return addHeapObject(ret);
};
imports.wbg.__wbg_create_5a2dc9022fb20da6 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg0).create(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_href_a5b902312c18d121 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).href;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_sethref_5f2e449a509e644b = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).href = getStringFromWasm0(arg1, arg2);
}, arguments) };
imports.wbg.__wbg_pathname_d98d0a003b664ef0 = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).pathname;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_search_40927d5af164fdfe = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).search;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_hash_163703b5971e593c = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).hash;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_add_73b81757e03ad37a = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_remove_dea714b8c5f17b97 = function() { return handleError(function (arg0, arg1, arg2) {
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_get_f5027e7a212e97a0 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
}, arguments) };
imports.wbg.__wbg_set_4ad92a627c50c8ef = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
imports.wbg.__wbg_get_0ee8ea3c7c984c45 = function(arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return addHeapObject(ret);
@ -1148,20 +1148,20 @@ function __wbg_get_imports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper1554 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 897, __wbg_adapter_48);
imports.wbg.__wbindgen_closure_wrapper854 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 537, __wbg_adapter_48);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3761 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper3700 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1911, __wbg_adapter_51);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3894 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1959, __wbg_adapter_54);
imports.wbg.__wbindgen_closure_wrapper3909 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1974, __wbg_adapter_54);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper3937 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1978, __wbg_adapter_57);
imports.wbg.__wbindgen_closure_wrapper3942 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 1990, __wbg_adapter_57);
return addHeapObject(ret);
};

View file

@ -1,6 +1,70 @@
// This is easier to have in JS than in WASM
export function modal_hide_by_id(m) {
var elem = document.getElementById(m);
var modal = bootstrap.Modal.getInstance(elem);
const elem = document.getElementById(m);
const modal = bootstrap.Modal.getInstance(elem);
modal.hide();
};
}
/**
* Replaces the node with a new node using new_tag, and copies all other attributes from node onto new node
* @param {Element} node
* @param {string} new_tag
* @return the new node
*/
function replace_tag(node, new_tag) {
const newNode = document.createElement(new_tag);
[...node.attributes].map(({ name, value }) => {
newNode.setAttribute(name, value);
});
while (node.firstChild) {
newNode.appendChild(node.firstChild);
}
node.parentNode.replaceChild(newNode, node);
return newNode;
}
/**
* Loads graphviz and then renders the graph
* @param {string} graph_src dot language graph source
*/
export function init_graphviz(graph_src) {
if (typeof Viz !== 'undefined') {
start_graphviz(graph_src);
} else {
let meta = document.querySelector("meta[src='/pkg/external/viz.js']");
if (meta) {
let script = replace_tag(meta, "script");
script.addEventListener('load', () => {
start_graphviz(graph_src);
});
} else {
console.error("viz.js not found");
}
}
}
/**
* Uses the graphviz library to show a graph
* @param {string} graph_src dot language graph source
*/
function start_graphviz(graph_src) {
Viz.instance().then(function(viz) {
const graphContainer = document.getElementById("graph-container");
if (graphContainer)
graphContainer.replaceChildren(viz.renderSVGElement(graph_src))
});
}
/**
* Opens a popup window `target=_blank` filled with `content`
* @param {string} content shown in the pre block
*/
export function open_blank(content) {
const windowDocument = window.open("", "_blank").document;
const pre2 = windowDocument.createElement("pre");
pre2.innerText = content;
windowDocument.body.appendChild(pre2);
}

View file

@ -248,3 +248,44 @@ body {
max-width: 150px;
max-height: 150px;
}
.codeblock {
background: gainsboro;
color: black;
padding: 1rem;
border: 1rem;
width: fit-content;
max-width: 100%;
}
.copy__btn {
float: right;
position: relative;
top: 1rem;
right: 1rem;
opacity: 50%;
}
.copy__btn:hover {
opacity: 90%;
}
.hstack {
display: flex;
flex-direction: row;
align-items: center;
align-self: stretch;
}
.vr {
display: inline-block;
align-self: stretch;
width: 0.063rem;
min-height: 1em;
background-color: currentcolor;
opacity: .25;
}
#graph-container svg {
max-width: 100%;
height: fit-content;
}

View file

@ -5,9 +5,9 @@ use gloo::console;
use wasm_bindgen::JsValue;
use yew::{html, BaseComponent, Context, Html};
use crate::constants::{CSS_NAV_LINK, ID_SIGNOUTMODAL};
use crate::constants::{CSS_ALERT_DANGER, CSS_NAV_LINK, ID_SIGNOUTMODAL, URL_USER_HOME};
use crate::models::clear_bearer_token;
use crate::{do_request, RequestMethod};
use crate::{do_request, logo_img, RequestMethod};
/// returns an a-href link which can trigger the signout flow
pub fn signout_link() -> Html {
@ -69,3 +69,42 @@ where
</div>
</div>}
}
/// generic view_error modal to show when errors occur
pub fn error_page(err_msg: &str, kopid: Option<&str>) -> Html {
html! {
<>
<p class="text-center">
{logo_img()}
</p>
<div class={CSS_ALERT_DANGER} role="alert">
<h2>{ "An Error Occurred 🥺" }</h2>
<p>{ err_msg.to_string() }</p>
<p>
{
if let Some(opid) = kopid.as_ref() {
format!("Operation ID: {}", opid)
} else {
"Local Error".to_string()
}
}
</p>
</div>
<p class="text-center">
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
</p>
</>
}
}
pub fn loading_spinner() -> Html {
html! {
<>
<div class="vert-center">
<div class="spinner-border text-dark" role="status">
<span class="visually-hidden">{ "Loading..." }</span>
</div>
</div>
</>
}
}

View file

@ -83,6 +83,12 @@ pub fn get_value_from_element_id(id: &str) -> Option<String> {
#[wasm_bindgen(raw_module = "/pkg/shared.js")]
extern "C" {
pub fn modal_hide_by_id(m: &str);
pub fn init_graphviz(m: &str);
/// Opens a popup window `target=_blank` filled with `content`
/// # Arguments
/// * `content` string shown in a \<pre> block
pub fn open_blank(content: &str);
}
/// Returns the footer node for the UI

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,70 @@
// This is easier to have in JS than in WASM
export function modal_hide_by_id(m) {
var elem = document.getElementById(m);
var modal = bootstrap.Modal.getInstance(elem);
const elem = document.getElementById(m);
const modal = bootstrap.Modal.getInstance(elem);
modal.hide();
};
}
/**
* Replaces the node with a new node using new_tag, and copies all other attributes from node onto new node
* @param {Element} node
* @param {string} new_tag
* @return the new node
*/
function replace_tag(node, new_tag) {
const newNode = document.createElement(new_tag);
[...node.attributes].map(({ name, value }) => {
newNode.setAttribute(name, value);
});
while (node.firstChild) {
newNode.appendChild(node.firstChild);
}
node.parentNode.replaceChild(newNode, node);
return newNode;
}
/**
* Loads graphviz and then renders the graph
* @param {string} graph_src dot language graph source
*/
export function init_graphviz(graph_src) {
if (typeof Viz !== 'undefined') {
start_graphviz(graph_src);
} else {
let meta = document.querySelector("meta[src='/pkg/external/viz.js']");
if (meta) {
let script = replace_tag(meta, "script");
script.addEventListener('load', () => {
start_graphviz(graph_src);
});
} else {
console.error("viz.js not found");
}
}
}
/**
* Uses the graphviz library to show a graph
* @param {string} graph_src dot language graph source
*/
function start_graphviz(graph_src) {
Viz.instance().then(function(viz) {
const graphContainer = document.getElementById("graph-container");
if (graphContainer)
graphContainer.replaceChildren(viz.renderSVGElement(graph_src))
});
}
/**
* Opens a popup window `target=_blank` filled with `content`
* @param {string} content shown in the pre block
*/
export function open_blank(content) {
const windowDocument = window.open("", "_blank").document;
const pre2 = windowDocument.createElement("pre");
pre2.innerText = content;
windowDocument.body.appendChild(pre2);
}

View file

@ -248,3 +248,44 @@ body {
max-width: 150px;
max-height: 150px;
}
.codeblock {
background: gainsboro;
color: black;
padding: 1rem;
border: 1rem;
width: fit-content;
max-width: 100%;
}
.copy__btn {
float: right;
position: relative;
top: 1rem;
right: 1rem;
opacity: 50%;
}
.copy__btn:hover {
opacity: 90%;
}
.hstack {
display: flex;
flex-direction: row;
align-items: center;
align-self: stretch;
}
.vr {
display: inline-block;
align-self: stretch;
width: 0.063rem;
min-height: 1em;
background-color: currentcolor;
opacity: .25;
}
#graph-container svg {
max-width: 100%;
height: fit-content;
}

View file

@ -36,6 +36,7 @@ wasm-timer = "0.2.5"
regex.workspace = true
lazy_static.workspace = true
gloo-utils = { workspace = true }
enum-iterator = { workspace = true}
[dependencies.web-sys]
workspace = true
@ -65,7 +66,7 @@ features = [
"RequestMode",
"RequestRedirect",
"Response",
"Window",
"Window"
]
[dev-dependencies]

View file

@ -4,7 +4,7 @@ use kanidm_proto::internal::{
CredentialDetail, CredentialDetailType, PasskeyDetail,
};
use kanidmd_web_ui_shared::constants::{CSS_ALERT_DANGER, URL_USER_HOME};
use kanidmd_web_ui_shared::constants::URL_USER_HOME;
use kanidmd_web_ui_shared::models::{get_cred_update_session, pop_return_location};
use kanidmd_web_ui_shared::utils::{autofocus, do_footer};
use kanidmd_web_ui_shared::{add_body_form_classes, logo_img, remove_body_form_classes};
@ -20,6 +20,7 @@ use super::passkeyremove::PasskeyRemoveModalApp;
use super::pwmodal::PwModalApp;
use super::totpmodal::TotpModalApp;
use super::totpremove::TotpRemoveComp;
use kanidmd_web_ui_shared::ui::error_page;
use kanidmd_web_ui_shared::{do_request, error::FetchError, utils, RequestMethod};
// use std::rc::Rc;
@ -805,25 +806,7 @@ impl CredentialResetApp {
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
html! {
<main class="form-signin">
<p class="text-center">
{logo_img()}
</p>
<div class={CSS_ALERT_DANGER} role="alert">
<h2>{ "An Error Occurred 🥺" }</h2>
<p>{ msg.to_string() }</p>
<p>
{
if let Some(opid) = kopid.as_ref() {
format!("Operation ID: {}", opid)
} else {
"Local Error".to_string()
}
}
</p>
</div>
<p class="text-center">
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
</p>
{ error_page(msg, kopid) }
</main>
}
}

View file

@ -1,15 +1,13 @@
#[cfg(debug_assertions)]
use gloo::console;
use kanidmd_web_ui_shared::logo_img;
use yew::prelude::*;
use kanidmd_web_ui_shared::constants::{
CSS_ALERT_DANGER, CSS_CARD, CSS_LINK_DARK_STRETCHED, CSS_PAGE_HEADER, URL_USER_HOME,
};
use kanidmd_web_ui_shared::constants::{CSS_CARD, CSS_LINK_DARK_STRETCHED, CSS_PAGE_HEADER};
use kanidmd_web_ui_shared::{do_request, error::FetchError, RequestMethod};
use wasm_bindgen::prelude::*;
use kanidm_proto::internal::AppLink;
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
pub enum Msg {
Ready { apps: Vec<AppLink> },
@ -100,15 +98,7 @@ impl Component for AppsApp {
impl AppsApp {
fn view_waiting(&self) -> Html {
html! {
<>
<div class="vert-center">
<div class="spinner-border text-dark" role="status">
<span class="visually-hidden">{ "Loading..." }</span>
</div>
</div>
</>
}
loading_spinner()
}
fn view_ready(&self, _ctx: &Context<Self>, apps: &[AppLink]) -> Html {
@ -155,29 +145,7 @@ impl AppsApp {
}
fn view_error(&self, _ctx: &Context<Self>, msg: &str, kopid: Option<&str>) -> Html {
html! {
<>
<p class="text-center">
{logo_img()}
</p>
<div class={CSS_ALERT_DANGER} role="alert">
<h2>{ "An Error Occurred 🥺" }</h2>
<p>{ msg.to_string() }</p>
<p>
{
if let Some(opid) = kopid.as_ref() {
format!("Operation ID: {}", opid)
} else {
"Local Error".to_string()
}
}
</p>
</div>
<p class="text-center">
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
</p>
</>
}
error_page(msg, kopid)
}
async fn fetch_user_apps() -> Result<Msg, FetchError> {

View file

@ -1,7 +1,6 @@
#[cfg(debug_assertions)]
use gloo::console;
use kanidm_proto::internal::{IdentifyUserRequest, IdentifyUserResponse};
use kanidmd_web_ui_shared::logo_img;
use regex::Regex;
use serde::Serialize;
use wasm_bindgen::{JsValue, UnwrapThrowExt};
@ -9,10 +8,11 @@ use yew::prelude::*;
use crate::components::totpdisplay::TotpDisplayApp;
use kanidmd_web_ui_shared::constants::{
CLASS_DIV_LOGIN_BUTTON, CLASS_DIV_LOGIN_FIELD, CSS_ALERT_DANGER, URL_USER_HOME,
CLASS_DIV_LOGIN_BUTTON, CLASS_DIV_LOGIN_FIELD, URL_USER_HOME,
};
use crate::views::ViewProps;
use kanidmd_web_ui_shared::ui::{error_page, loading_spinner};
use kanidmd_web_ui_shared::{do_request, error::FetchError, utils, RequestMethod};
#[derive(Clone, Debug, PartialEq)]
@ -272,15 +272,7 @@ impl Component for IdentityVerificationApp {
impl IdentityVerificationApp {
fn view_start(&self) -> Html {
html! {
<>
<div class="vert-center">
<div class="spinner-border text-dark" role="status">
<span class="visually-hidden">{ "Loading..." }</span>
</div>
</div>
</>
}
loading_spinner()
}
fn view_id_submit_and_display(&self, ctx: &Context<Self>) -> Html {
@ -387,20 +379,7 @@ impl IdentityVerificationApp {
}
fn view_error(&self, error_message: &str) -> Html {
html! {
<>
<p class="text-center">
{logo_img()}
</p>
<div class={CSS_ALERT_DANGER} role="alert">
<h2>{ "An Error Occurred 🥺" }</h2>
<p>{ error_message }</p>
</div>
<p class="text-center">
<a href={URL_USER_HOME}><button href={URL_USER_HOME} class="btn btn-secondary" aria-label="Return home">{"Return to the home page"}</button></a>
</p>
</>
}
error_page(error_message, None)
}
fn view_success(&self) -> Html {

174
tools/cli/src/cli/graph.rs Normal file
View file

@ -0,0 +1,174 @@
use crate::common::OpType;
use crate::{handle_client_error, GraphCommonOpt, GraphType, ObjectType, OutputMode};
use kanidm_proto::internal::Filter::{Eq, Or};
impl GraphCommonOpt {
pub fn debug(&self) -> bool {
self.copt.debug
}
pub async fn exec(&self) {
let gopt: &GraphCommonOpt = self;
let copt = &gopt.copt;
let client = copt.to_client(OpType::Read).await;
let graph_type = &gopt.graph_type;
let filters = &gopt.filter;
let filter = Or(vec![
Eq("class".to_string(), "person".to_string()),
Eq("class".to_string(), "service_account".to_string()),
Eq("class".to_string(), "group".to_string()),
]);
let result = client.search(filter).await;
let entries = match result {
Ok(entries) => entries,
Err(e) => {
handle_client_error(e, copt.output_mode);
return;
}
};
match copt.output_mode {
OutputMode::Json => {
let r_attrs: Vec<_> = entries.iter().map(|entry| &entry.attrs).collect();
println!(
"{}",
serde_json::to_string(&r_attrs).expect("Failed to serialise json")
);
}
OutputMode::Text => {
println!("Showing graph for type: {graph_type:?}, filters: {filters:?}\n");
let typed_entries = entries
.iter()
.filter_map(|entry| {
let classes = entry.attrs.get("class")?;
let uuid = entry.attrs.get("uuid")?.first()?;
// Logic to decide the type of each entry
let obj_type = if classes.contains(&"group".to_string()) {
if uuid.starts_with("00000000-0000-0000-0000-") {
ObjectType::BuiltinGroup
} else {
ObjectType::Group
}
} else if classes.contains(&"account".to_string()) {
if classes.contains(&"person".to_string()) {
ObjectType::Person
} else if classes.contains(&"service-account".to_string()) {
ObjectType::ServiceAccount
} else {
return None;
}
} else {
return None;
};
// Filter out the things we want to keep, if the filter is empty we assume we want all.
if !filters.contains(&obj_type) && !filters.is_empty() {
return None;
}
let spn = entry.attrs.get("spn")?.first()?;
Some((spn.clone(), uuid.clone(), obj_type))
})
.collect::<Vec<(String, String, ObjectType)>>();
// Vec<obj, uuid, obj's members>
let members_of = entries
.into_iter()
.filter_map(|entry| {
let spn = entry.attrs.get("spn")?.first()?.clone();
let uuid = entry.attrs.get("uuid")?.first()?.clone();
let keep = typed_entries
.iter()
.any(|(_, filtered_uuid, _)| &uuid == filtered_uuid);
if keep {
Some((spn, entry.attrs.get("member")?.clone()))
} else {
None
}
})
.collect::<Vec<_>>();
match graph_type {
GraphType::Graphviz => Self::print_graphviz_graph(&typed_entries, &members_of),
GraphType::Mermaid => Self::print_mermaid_graph(typed_entries, members_of),
GraphType::MermaidElk => {
println!(r#"%%{{init: {{"flowchart": {{"defaultRenderer": "elk"}}}} }}%%"#);
Self::print_mermaid_graph(typed_entries, members_of);
}
}
}
}
}
fn print_graphviz_graph(
typed_entries: &Vec<(String, String, ObjectType)>,
members_of: &Vec<(String, Vec<String>)>,
) {
println!("digraph {{");
println!(r#" rankdir="RL""#);
for (spn, members) in members_of {
members
.iter()
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
.for_each(|member| {
println!(r#" "{spn}" -> "{member}""#);
});
}
for (spn, _, obj_type) in typed_entries {
let (color, shape) = match obj_type {
ObjectType::Group => ("#b86367", "box"),
ObjectType::BuiltinGroup => ("#8bc1d6", "component"),
ObjectType::ServiceAccount => ("#77c98d", "parallelogram"),
ObjectType::Person => ("#af8bd6", "ellipse"),
};
println!(r#" "{spn}" [color = "{color}", shape = {shape}]"#);
}
println!("}}");
}
fn print_mermaid_graph(
typed_entries: Vec<(String, String, ObjectType)>,
members_of: Vec<(String, Vec<String>)>,
) {
println!("graph RL");
for (spn, members) in members_of {
members
.iter()
.filter(|member| typed_entries.iter().any(|(spn, _, _)| spn == *member))
.for_each(|member| {
let at_less_name = Self::mermaid_id_from_spn(&spn);
let at_less_member = Self::mermaid_id_from_spn(member);
println!(" {at_less_name}[\"{spn}\"] --> {at_less_member}[\"{member}\"]")
});
}
println!(
" classDef groupClass fill:#f9f,stroke:#333,stroke-width:4px,stroke-dasharray: 5 5"
);
println!(" classDef builtInGroupClass fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5");
println!(" classDef serviceAccountClass fill:#f9f,stroke:#333,stroke-width:4px");
println!(" classDef personClass fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff");
for (spn, _, obj_type) in typed_entries {
let class = match obj_type {
ObjectType::Group => "groupClass",
ObjectType::BuiltinGroup => "builtInGroupClass",
ObjectType::ServiceAccount => "serviceAccountClass",
ObjectType::Person => "personClass",
};
let at_less_name = Self::mermaid_id_from_spn(&spn);
println!(" {at_less_name}[\"{spn}\"]");
println!(" class {at_less_name} {class}");
}
}
fn mermaid_id_from_spn(spn: &str) -> String {
spn.replace('@', "_")
}
}

View file

@ -26,6 +26,7 @@ include!("../opt/kanidm.rs");
mod common;
mod domain;
mod graph;
mod group;
mod oauth2;
mod person;
@ -168,6 +169,7 @@ impl KanidmClientOpt {
KanidmClientOpt::Group { commands } => commands.debug(),
KanidmClientOpt::Person { commands } => commands.debug(),
KanidmClientOpt::ServiceAccount { commands } => commands.debug(),
KanidmClientOpt::Graph(gopt) => gopt.debug(),
KanidmClientOpt::System { commands } => commands.debug(),
KanidmClientOpt::Recycle { commands } => commands.debug(),
KanidmClientOpt::Version {} => {
@ -188,6 +190,7 @@ impl KanidmClientOpt {
KanidmClientOpt::Person { commands } => commands.exec().await,
KanidmClientOpt::ServiceAccount { commands } => commands.exec().await,
KanidmClientOpt::Group { commands } => commands.exec().await,
KanidmClientOpt::Graph(gops) => gops.exec().await,
KanidmClientOpt::System { commands } => commands.exec().await,
KanidmClientOpt::Recycle { commands } => commands.exec().await,
KanidmClientOpt::Version {} => (),

View file

@ -279,6 +279,31 @@ pub enum GroupOpt {
},
}
#[derive(Clone, Debug, ValueEnum)]
pub enum GraphType {
Graphviz,
Mermaid,
MermaidElk
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, ValueEnum)]
pub enum ObjectType {
Group,
BuiltinGroup,
ServiceAccount,
Person
}
#[derive(Debug, Args)]
pub struct GraphCommonOpt {
#[arg(value_enum)]
pub graph_type: GraphType,
#[clap()]
pub filter: Vec<ObjectType>,
#[clap(flatten)]
pub copt: CommonOpt,
}
#[derive(Debug, Args)]
pub struct AccountCommonOpt {
#[clap()]
@ -1327,6 +1352,9 @@ pub enum KanidmClientOpt {
#[clap(subcommand)]
commands: ServiceAccountOpt,
},
/// Prints graphviz dot file of all groups
#[clap(name = "graph")]
Graph(GraphCommonOpt),
/// System configuration operations
System {
#[clap(subcommand)]