Nazariglez / notan

Cross-platform multimedia layer
https://nazariglez.github.io/notan-web/
Apache License 2.0
819 stars 55 forks source link

Web target: Error message in console if no logs are sent by the app #157

Closed riverfr0zen closed 2 years ago

riverfr0zen commented 2 years ago

Environment: notan = "0.7.1" on Ubuntu 22.04

Issue: If I don't explicitly set a log message in the app, then I get the following error in the browser console:

Web target: Error initializing logs: attempted to set a logger after the logging system was already initialized

Screenshot: QBEChmZ

Here is how I am building:

cargo build --release --example eg_notan --target wasm32-unknown-unknown

wasm-bindgen --out-dir www/wasms --target web target/wasm32-unknown-unknown/release/examples/eg_notan.wasm

For example, in the code below, the error occurs unless I comment out the lines in the starting_logs function:

use notan::draw::*;
use notan::log;
use notan::prelude::*;

#[notan_main]
fn main() -> Result<(), String> {
    notan::init()
        .initialize(starting_logs)
        .draw(draw)
        .add_config(log::LogConfig::debug())
        .add_config(DrawConfig)
        .build()
}

fn starting_logs() {
    // log::debug!("Hello, this is a debug log...");
    // log::info!("And this is a info log!");
    // log::warn!("I'm warning you");
    // log::error!("I'm an error, I told you...");
}

fn draw(gfx: &mut Graphics) {
    let mut draw = gfx.create_draw();
    draw.clear(Color::BLACK);
    draw.triangle((400.0, 100.0), (100.0, 500.0), (700.0, 500.0));
    gfx.render(&draw);
}
riverfr0zen commented 2 years ago

Update: Actually the error occurs regardless of whether the app sends logs or not. I had just missed it earlier.

Nazariglez commented 2 years ago

Interesting, I cannot reproduce it on Chrome + Mac. What browser are you using? I can try to test it on an ArchLinux and if I have no luck I guess I'll try to install Ubuntu too. Can you also share your index.html? This error should happen only by the internal lib that formats the logs when it's initialized twice, so it's really weird behavior.

Thanks!

riverfr0zen commented 2 years ago

I'm using Chrome Version 106.0.5249.119

wasm-bindgen is 0.2.83

The HTML is from the README, with minor style changes:

<html>
<head>
    <title>Notan App</title>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
          content="minimal-ui, width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <style>
        body {
          background-color: white;
          margin: 0 !important; 
          padding: 0 !important;
          border: 0px;
          height: 100%;
          /* overflow: hidden; */
        }
    </style>
</head>
<body>
<script type="module">
    import init from './wasms/eg_notan.js'; // replace this 
    let module = await init();
    module.notan_main();
</script>
<div id="examples">
    <canvas id="notan_canvas"></canvas>
</div>
</body>

Output of cargo tree:

└── notan v0.7.1
    ├── notan_app v0.7.1
    │   ├── bytemuck v1.12.1
    │   ├── downcast-rs v1.2.0
    │   ├── futures v0.3.24
    │   │   ├── futures-channel v0.3.24
    │   │   │   ├── futures-core v0.3.24
    │   │   │   └── futures-sink v0.3.24
    │   │   ├── futures-core v0.3.24
    │   │   ├── futures-executor v0.3.24
    │   │   │   ├── futures-core v0.3.24
    │   │   │   ├── futures-task v0.3.24
    │   │   │   └── futures-util v0.3.24
    │   │   │       ├── futures-channel v0.3.24 (*)
    │   │   │       ├── futures-core v0.3.24
    │   │   │       ├── futures-io v0.3.24
    │   │   │       ├── futures-macro v0.3.24 (proc-macro)
    │   │   │       │   ├── proc-macro2 v1.0.46
    │   │   │       │   │   └── unicode-ident v1.0.5
    │   │   │       │   ├── quote v1.0.21
    │   │   │       │   │   └── proc-macro2 v1.0.46 (*)
    │   │   │       │   └── syn v1.0.102
    │   │   │       │       ├── proc-macro2 v1.0.46 (*)
    │   │   │       │       ├── quote v1.0.21 (*)
    │   │   │       │       └── unicode-ident v1.0.5
    │   │   │       ├── futures-sink v0.3.24
    │   │   │       ├── futures-task v0.3.24
    │   │   │       ├── memchr v2.5.0
    │   │   │       ├── pin-project-lite v0.2.9
    │   │   │       ├── pin-utils v0.1.0
    │   │   │       └── slab v0.4.7
    │   │   │           [build-dependencies]
    │   │   │           └── autocfg v1.1.0
    │   │   ├── futures-io v0.3.24
    │   │   ├── futures-sink v0.3.24
    │   │   ├── futures-task v0.3.24
    │   │   └── futures-util v0.3.24 (*)
    │   ├── hashbrown v0.12.3
    │   │   └── ahash v0.7.6
    │   │       ├── getrandom v0.2.7
    │   │       │   ├── cfg-if v1.0.0
    │   │       │   └── libc v0.2.135
    │   │       └── once_cell v1.15.0
    │   │       [build-dependencies]
    │   │       └── version_check v0.9.4
    │   ├── indexmap v1.9.1
    │   │   └── hashbrown v0.12.3 (*)
    │   │   [build-dependencies]
    │   │   └── autocfg v1.1.0
    │   ├── log v0.4.17
    │   │   └── cfg-if v1.0.0
    │   ├── notan_core v0.7.1
    │   ├── notan_graphics v0.7.1
    │   │   ├── bytemuck v1.12.1
    │   │   ├── glsl-layout v0.4.2
    │   │   │   ├── glam v0.21.3
    │   │   │   │   └── bytemuck v1.12.1
    │   │   │   └── glsl-layout-derive v0.4.0 (proc-macro)
    │   │   │       ├── proc-macro2 v1.0.46 (*)
    │   │   │       ├── quote v1.0.21 (*)
    │   │   │       └── syn v1.0.102 (*)
    │   │   ├── image v0.24.4
    │   │   │   ├── bytemuck v1.12.1
    │   │   │   ├── byteorder v1.4.3
    │   │   │   ├── color_quant v1.1.0
    │   │   │   ├── jpeg-decoder v0.2.6
    │   │   │   ├── num-rational v0.4.1
    │   │   │   │   ├── num-integer v0.1.45
    │   │   │   │   │   └── num-traits v0.2.15
    │   │   │   │   │       [build-dependencies]
    │   │   │   │   │       └── autocfg v1.1.0
    │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   [build-dependencies]
    │   │   │   │   └── autocfg v1.1.0
    │   │   │   ├── num-traits v0.2.15 (*)
    │   │   │   └── png v0.17.6
    │   │   │       ├── bitflags v1.3.2
    │   │   │       ├── crc32fast v1.3.2
    │   │   │       │   └── cfg-if v1.0.0
    │   │   │       ├── flate2 v1.0.24
    │   │   │       │   ├── crc32fast v1.3.2 (*)
    │   │   │       │   └── miniz_oxide v0.5.4
    │   │   │       │       └── adler v1.0.2
    │   │   │       └── miniz_oxide v0.5.4 (*)
    │   │   ├── notan_macro v0.7.1 (proc-macro)
    │   │   │   ├── glsl-to-spirv v0.1.7
    │   │   │   │   └── tempfile v3.3.0
    │   │   │   │       ├── cfg-if v1.0.0
    │   │   │   │       ├── fastrand v1.8.0
    │   │   │   │       ├── libc v0.2.135
    │   │   │   │       └── remove_dir_all v0.5.3
    │   │   │   │   [build-dependencies]
    │   │   │   │   ├── cmake v0.1.48
    │   │   │   │   │   └── cc v1.0.73
    │   │   │   │   │       └── jobserver v0.1.25
    │   │   │   │   │           └── libc v0.2.135
    │   │   │   │   └── sha2 v0.7.1
    │   │   │   │       ├── block-buffer v0.3.3
    │   │   │   │       │   ├── arrayref v0.3.6
    │   │   │   │       │   └── byte-tools v0.2.0
    │   │   │   │       ├── byte-tools v0.2.0
    │   │   │   │       ├── digest v0.7.6
    │   │   │   │       │   └── generic-array v0.9.1
    │   │   │   │       │       └── typenum v1.15.0
    │   │   │   │       └── fake-simd v0.1.2
    │   │   │   ├── num v0.4.0
    │   │   │   │   ├── num-bigint v0.4.3
    │   │   │   │   │   ├── num-integer v0.1.45
    │   │   │   │   │   │   └── num-traits v0.2.15
    │   │   │   │   │   │       [build-dependencies]
    │   │   │   │   │   │       └── autocfg v1.1.0
    │   │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   ├── num-complex v0.4.2
    │   │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   ├── num-integer v0.1.45 (*)
    │   │   │   │   ├── num-iter v0.1.43
    │   │   │   │   │   ├── num-integer v0.1.45 (*)
    │   │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   ├── num-rational v0.4.1
    │   │   │   │   │   ├── num-bigint v0.4.3 (*)
    │   │   │   │   │   ├── num-integer v0.1.45 (*)
    │   │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   ├── proc-macro2 v1.0.46 (*)
    │   │   │   ├── quote v1.0.21 (*)
    │   │   │   ├── spirv_cross v0.23.1
    │   │   │   │   [build-dependencies]
    │   │   │   │   └── cc v1.0.73 (*)
    │   │   │   └── syn v1.0.102 (*)
    │   │   ├── notan_math v0.7.1
    │   │   │   └── glam v0.21.3 (*)
    │   │   ├── notan_utils v0.7.1
    │   │   │   ├── instant v0.1.12
    │   │   │   │   └── cfg-if v1.0.0
    │   │   │   └── log v0.4.17 (*)
    │   │   └── parking_lot v0.12.1
    │   │       ├── lock_api v0.4.9
    │   │       │   └── scopeguard v1.1.0
    │   │       │   [build-dependencies]
    │   │       │   └── autocfg v1.1.0
    │   │       └── parking_lot_core v0.9.3
    │   │           ├── cfg-if v1.0.0
    │   │           ├── libc v0.2.135
    │   │           └── smallvec v1.10.0
    │   ├── notan_input v0.7.1
    │   │   ├── hashbrown v0.12.3 (*)
    │   │   ├── log v0.4.17 (*)
    │   │   ├── notan_core v0.7.1
    │   │   └── notan_math v0.7.1 (*)
    │   ├── notan_macro v0.7.1 (proc-macro) (*)
    │   ├── notan_math v0.7.1 (*)
    │   ├── notan_utils v0.7.1 (*)
    │   ├── parking_lot v0.12.1 (*)
    │   └── platter2 v0.1.6
    │       └── futures-util v0.3.24 (*)
    ├── notan_backend v0.7.1
    │   └── notan_winit v0.7.1
    │       ├── glutin v0.29.1
    │       │   ├── glutin_egl_sys v0.1.6
    │       │   │   [build-dependencies]
    │       │   │   └── gl_generator v0.14.0
    │       │   │       ├── khronos_api v3.1.0
    │       │   │       ├── log v0.4.17
    │       │   │       │   └── cfg-if v1.0.0
    │       │   │       └── xml-rs v0.8.4
    │       │   ├── glutin_glx_sys v0.1.8
    │       │   │   └── x11-dl v2.20.0
    │       │   │       ├── lazy_static v1.4.0
    │       │   │       └── libc v0.2.135
    │       │   │       [build-dependencies]
    │       │   │       └── pkg-config v0.3.25
    │       │   │   [build-dependencies]
    │       │   │   └── gl_generator v0.14.0 (*)
    │       │   ├── libloading v0.7.3
    │       │   │   └── cfg-if v1.0.0
    │       │   ├── log v0.4.17 (*)
    │       │   ├── once_cell v1.15.0
    │       │   ├── osmesa-sys v0.1.2
    │       │   │   └── shared_library v0.1.9
    │       │   │       ├── lazy_static v1.4.0
    │       │   │       └── libc v0.2.135
    │       │   ├── parking_lot v0.12.1 (*)
    │       │   ├── wayland-client v0.29.5
    │       │   │   ├── bitflags v1.3.2
    │       │   │   ├── downcast-rs v1.2.0
    │       │   │   ├── libc v0.2.135
    │       │   │   ├── nix v0.24.2
    │       │   │   │   ├── bitflags v1.3.2
    │       │   │   │   ├── cfg-if v1.0.0
    │       │   │   │   ├── libc v0.2.135
    │       │   │   │   └── memoffset v0.6.5
    │       │   │   │       [build-dependencies]
    │       │   │   │       └── autocfg v1.1.0
    │       │   │   ├── scoped-tls v1.0.0
    │       │   │   ├── wayland-commons v0.29.5
    │       │   │   │   ├── nix v0.24.2 (*)
    │       │   │   │   ├── once_cell v1.15.0
    │       │   │   │   ├── smallvec v1.10.0
    │       │   │   │   └── wayland-sys v0.29.5
    │       │   │   │       ├── dlib v0.5.0
    │       │   │   │       │   └── libloading v0.7.3 (*)
    │       │   │   │       └── lazy_static v1.4.0
    │       │   │   │       [build-dependencies]
    │       │   │   │       └── pkg-config v0.3.25
    │       │   │   └── wayland-sys v0.29.5 (*)
    │       │   │   [build-dependencies]
    │       │   │   └── wayland-scanner v0.29.5
    │       │   │       ├── proc-macro2 v1.0.46 (*)
    │       │   │       ├── quote v1.0.21 (*)
    │       │   │       └── xml-rs v0.8.4
    │       │   ├── wayland-egl v0.29.5
    │       │   │   ├── wayland-client v0.29.5 (*)
    │       │   │   └── wayland-sys v0.29.5 (*)
    │       │   └── winit v0.27.4
    │       │       ├── bitflags v1.3.2
    │       │       ├── instant v0.1.12 (*)
    │       │       ├── libc v0.2.135
    │       │       ├── log v0.4.17 (*)
    │       │       ├── mio v0.8.4
    │       │       │   ├── libc v0.2.135
    │       │       │   └── log v0.4.17 (*)
    │       │       ├── once_cell v1.15.0
    │       │       ├── parking_lot v0.12.1 (*)
    │       │       ├── percent-encoding v2.2.0
    │       │       ├── raw-window-handle v0.4.3
    │       │       │   └── cty v0.2.2
    │       │       ├── raw-window-handle v0.5.0
    │       │       │   └── cty v0.2.2
    │       │       ├── sctk-adwaita v0.4.2
    │       │       │   ├── crossfont v0.5.0
    │       │       │   │   ├── foreign-types v0.5.0
    │       │       │   │   │   ├── foreign-types-macros v0.2.2 (proc-macro)
    │       │       │   │   │   │   ├── proc-macro2 v1.0.46 (*)
    │       │       │   │   │   │   ├── quote v1.0.21 (*)
    │       │       │   │   │   │   └── syn v1.0.102 (*)
    │       │       │   │   │   └── foreign-types-shared v0.3.1
    │       │       │   │   ├── freetype-rs v0.26.0
    │       │       │   │   │   ├── bitflags v1.3.2
    │       │       │   │   │   ├── freetype-sys v0.13.1
    │       │       │   │   │   │   └── libc v0.2.135
    │       │       │   │   │   │   [build-dependencies]
    │       │       │   │   │   │   ├── cmake v0.1.48 (*)
    │       │       │   │   │   │   └── pkg-config v0.3.25
    │       │       │   │   │   └── libc v0.2.135
    │       │       │   │   ├── libc v0.2.135
    │       │       │   │   ├── log v0.4.17 (*)
    │       │       │   │   └── servo-fontconfig v0.5.1
    │       │       │   │       ├── libc v0.2.135
    │       │       │   │       └── servo-fontconfig-sys v5.1.0
    │       │       │   │           ├── expat-sys v2.1.6
    │       │       │   │           │   [build-dependencies]
    │       │       │   │           │   ├── cmake v0.1.48 (*)
    │       │       │   │           │   └── pkg-config v0.3.25
    │       │       │   │           └── freetype-sys v0.13.1 (*)
    │       │       │   │           [build-dependencies]
    │       │       │   │           └── pkg-config v0.3.25
    │       │       │   │   [build-dependencies]
    │       │       │   │   └── pkg-config v0.3.25
    │       │       │   ├── log v0.4.17 (*)
    │       │       │   ├── smithay-client-toolkit v0.16.0
    │       │       │   │   ├── bitflags v1.3.2
    │       │       │   │   ├── calloop v0.10.1
    │       │       │   │   │   ├── log v0.4.17 (*)
    │       │       │   │   │   ├── nix v0.24.2 (*)
    │       │       │   │   │   ├── slotmap v1.0.6
    │       │       │   │   │   │   [build-dependencies]
    │       │       │   │   │   │   └── version_check v0.9.4
    │       │       │   │   │   ├── thiserror v1.0.37
    │       │       │   │   │   │   └── thiserror-impl v1.0.37 (proc-macro)
    │       │       │   │   │   │       ├── proc-macro2 v1.0.46 (*)
    │       │       │   │   │   │       ├── quote v1.0.21 (*)
    │       │       │   │   │   │       └── syn v1.0.102 (*)
    │       │       │   │   │   └── vec_map v0.8.2
    │       │       │   │   ├── dlib v0.5.0 (*)
    │       │       │   │   ├── lazy_static v1.4.0
    │       │       │   │   ├── log v0.4.17 (*)
    │       │       │   │   ├── memmap2 v0.5.7
    │       │       │   │   │   └── libc v0.2.135
    │       │       │   │   ├── nix v0.24.2 (*)
    │       │       │   │   ├── wayland-client v0.29.5 (*)
    │       │       │   │   ├── wayland-cursor v0.29.5
    │       │       │   │   │   ├── nix v0.24.2 (*)
    │       │       │   │   │   ├── wayland-client v0.29.5 (*)
    │       │       │   │   │   └── xcursor v0.3.4
    │       │       │   │   │       └── nom v7.1.1
    │       │       │   │   │           ├── memchr v2.5.0
    │       │       │   │   │           └── minimal-lexical v0.2.1
    │       │       │   │   └── wayland-protocols v0.29.5
    │       │       │   │       ├── bitflags v1.3.2
    │       │       │   │       ├── wayland-client v0.29.5 (*)
    │       │       │   │       └── wayland-commons v0.29.5 (*)
    │       │       │   │       [build-dependencies]
    │       │       │   │       └── wayland-scanner v0.29.5 (*)
    │       │       │   │   [build-dependencies]
    │       │       │   │   └── pkg-config v0.3.25
    │       │       │   └── tiny-skia v0.7.0
    │       │       │       ├── arrayref v0.3.6
    │       │       │       ├── arrayvec v0.5.2
    │       │       │       ├── bytemuck v1.12.1
    │       │       │       ├── cfg-if v1.0.0
    │       │       │       ├── png v0.17.6 (*)
    │       │       │       ├── safe_arch v0.5.2
    │       │       │       │   └── bytemuck v1.12.1
    │       │       │       └── tiny-skia-path v0.7.0
    │       │       │           ├── arrayref v0.3.6
    │       │       │           └── bytemuck v1.12.1
    │       │       ├── smithay-client-toolkit v0.16.0 (*)
    │       │       ├── wayland-client v0.29.5 (*)
    │       │       ├── wayland-protocols v0.29.5 (*)
    │       │       └── x11-dl v2.20.0 (*)
    │       ├── log v0.4.17 (*)
    │       ├── notan_app v0.7.1 (*)
    │       ├── notan_core v0.7.1
    │       └── notan_glow v0.7.1
    │           ├── bytemuck v1.12.1
    │           ├── glow v0.11.2
    │           ├── hashbrown v0.12.3 (*)
    │           ├── image v0.24.4 (*)
    │           ├── log v0.4.17 (*)
    │           └── notan_graphics v0.7.1 (*)
    ├── notan_core v0.7.1
    ├── notan_draw v0.7.1
    │   ├── log v0.4.17 (*)
    │   ├── lyon v1.0.0
    │   │   ├── lyon_algorithms v1.0.1
    │   │   │   └── lyon_path v1.0.1
    │   │   │       └── lyon_geom v1.0.1
    │   │   │           ├── arrayvec v0.7.2
    │   │   │           ├── euclid v0.22.7
    │   │   │           │   └── num-traits v0.2.15 (*)
    │   │   │           └── num-traits v0.2.15 (*)
    │   │   └── lyon_tessellation v1.0.4
    │   │       ├── float_next_after v0.1.5
    │   │       │   └── num-traits v0.2.15 (*)
    │   │       ├── lyon_path v1.0.1 (*)
    │   │       └── thiserror v1.0.37 (*)
    │   ├── notan_app v0.7.1 (*)
    │   ├── notan_glyph v0.7.1
    │   │   ├── bytemuck v1.12.1
    │   │   ├── glyph_brush v0.7.5
    │   │   │   ├── glyph_brush_draw_cache v0.1.5
    │   │   │   │   ├── ab_glyph v0.2.17
    │   │   │   │   │   ├── ab_glyph_rasterizer v0.1.7
    │   │   │   │   │   └── owned_ttf_parser v0.15.2
    │   │   │   │   │       └── ttf-parser v0.15.2
    │   │   │   │   ├── crossbeam-channel v0.5.6
    │   │   │   │   │   ├── cfg-if v1.0.0
    │   │   │   │   │   └── crossbeam-utils v0.8.12
    │   │   │   │   │       └── cfg-if v1.0.0
    │   │   │   │   ├── crossbeam-deque v0.8.2
    │   │   │   │   │   ├── cfg-if v1.0.0
    │   │   │   │   │   ├── crossbeam-epoch v0.9.11
    │   │   │   │   │   │   ├── cfg-if v1.0.0
    │   │   │   │   │   │   ├── crossbeam-utils v0.8.12 (*)
    │   │   │   │   │   │   ├── memoffset v0.6.5 (*)
    │   │   │   │   │   │   └── scopeguard v1.1.0
    │   │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   │   └── crossbeam-utils v0.8.12 (*)
    │   │   │   │   ├── linked-hash-map v0.5.6
    │   │   │   │   ├── rayon v1.5.3
    │   │   │   │   │   ├── crossbeam-deque v0.8.2 (*)
    │   │   │   │   │   ├── either v1.8.0
    │   │   │   │   │   └── rayon-core v1.9.3
    │   │   │   │   │       ├── crossbeam-channel v0.5.6 (*)
    │   │   │   │   │       ├── crossbeam-deque v0.8.2 (*)
    │   │   │   │   │       ├── crossbeam-utils v0.8.12 (*)
    │   │   │   │   │       └── num_cpus v1.13.1
    │   │   │   │   │           └── libc v0.2.135
    │   │   │   │   │   [build-dependencies]
    │   │   │   │   │   └── autocfg v1.1.0
    │   │   │   │   └── rustc-hash v1.1.0
    │   │   │   ├── glyph_brush_layout v0.2.3
    │   │   │   │   ├── ab_glyph v0.2.17 (*)
    │   │   │   │   ├── approx v0.5.1
    │   │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   │   └── xi-unicode v0.3.0
    │   │   │   ├── log v0.4.17 (*)
    │   │   │   ├── ordered-float v3.2.0
    │   │   │   │   └── num-traits v0.2.15 (*)
    │   │   │   ├── rustc-hash v1.1.0
    │   │   │   └── twox-hash v1.6.3
    │   │   │       ├── cfg-if v1.0.0
    │   │   │       ├── rand v0.8.5
    │   │   │       │   ├── libc v0.2.135
    │   │   │       │   ├── rand_chacha v0.3.1
    │   │   │       │   │   ├── ppv-lite86 v0.2.16
    │   │   │       │   │   └── rand_core v0.6.4
    │   │   │       │   │       └── getrandom v0.2.7 (*)
    │   │   │       │   └── rand_core v0.6.4 (*)
    │   │   │       └── static_assertions v1.1.0
    │   │   ├── log v0.4.17 (*)
    │   │   ├── notan_app v0.7.1 (*)
    │   │   ├── notan_graphics v0.7.1 (*)
    │   │   └── notan_math v0.7.1 (*)
    │   ├── notan_graphics v0.7.1 (*)
    │   ├── notan_macro v0.7.1 (proc-macro) (*)
    │   ├── notan_math v0.7.1 (*)
    │   ├── notan_text v0.7.1
    │   │   ├── log v0.4.17 (*)
    │   │   ├── notan_app v0.7.1 (*)
    │   │   ├── notan_glyph v0.7.1 (*)
    │   │   ├── notan_graphics v0.7.1 (*)
    │   │   └── notan_math v0.7.1 (*)
    │   ├── serde v1.0.145
    │   │   └── serde_derive v1.0.145 (proc-macro)
    │   │       ├── proc-macro2 v1.0.46 (*)
    │   │       ├── quote v1.0.21 (*)
    │   │       └── syn v1.0.102 (*)
    │   └── serde_json v1.0.86
    │       ├── itoa v1.0.4
    │       ├── ryu v1.0.11
    │       └── serde v1.0.145 (*)
    ├── notan_graphics v0.7.1 (*)
    ├── notan_input v0.7.1 (*)
    ├── notan_log v0.7.1
    │   ├── fern v0.6.1
    │   │   ├── colored v1.9.3
    │   │   │   ├── atty v0.2.14
    │   │   │   │   └── libc v0.2.135
    │   │   │   └── lazy_static v1.4.0
    │   │   └── log v0.4.17 (*)
    │   ├── log v0.4.17 (*)
    │   ├── notan_app v0.7.1 (*)
    │   └── time v0.3.15
    │       ├── itoa v1.0.4
    │       ├── libc v0.2.135
    │       └── num_threads v0.1.6
    ├── notan_macro v0.7.1 (proc-macro) (*)
    ├── notan_math v0.7.1 (*)
    ├── notan_random v0.7.1
    │   ├── rand v0.8.5 (*)
    │   └── rand_pcg v0.3.1
    │       └── rand_core v0.6.4 (*)
    └── notan_utils v0.7.1 (*)
riverfr0zen commented 2 years ago

It's interesting that you mention the error is supposed to happen if logs are initialized twice: for some reason the browser seems to be loading the app twice:

notan

The output above is from a single page load. Not sure why this is happening. I thought it might be extensions I have, but I'm getting the same problem on Firefox.

riverfr0zen commented 2 years ago

I've posted the example online in case it might help: https://irfanbaig.com/eg_notan.html

Nazariglez commented 2 years ago

This was quite interesting! I found the issue. It seems that wasm-bindgen is executing by itself the function main if it exists. So when notan_main is called we're indeed executing twice, first main will be executed when the module is loaded, and then notan_main manually after that.

Options that we have here:

I saw also another interesting thing. Using wasm-bindgen will use by default main.rs even if the crate is defined as a lib and a lib.rs exists. If you remove the main.rs then the lib.rs will be used. Meanwhile, using wasm-pack will use by default the lib.rs file.

I have in mind to check how Tunk does it, but I did not have time yet to dig into that.

Anyway, thank you so much for this detailed report, we learned something for sure today. I hope this helps you, feel free to reopen if you need anything else!

riverfr0zen commented 2 years ago

Thanks so much for looking into it. Commenting out the module.notan_main(); line in the HTML file works for me.

Might make sense to add a comment in the README above the line to that effect "If you're using wasm-bindgen, comment out the line below" or something like that. Thanks again!