diff --git a/__wasm/deno_rust_wasm_js_sandbox/.gitignore b/__wasm/deno_rust_wasm_js_sandbox/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/.gitignore @@ -0,0 +1 @@ +/target diff --git a/__wasm/deno_rust_wasm_js_sandbox/.rustfmt.toml b/__wasm/deno_rust_wasm_js_sandbox/.rustfmt.toml new file mode 100644 index 0000000..9bb8d9d --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/.rustfmt.toml @@ -0,0 +1,3 @@ +max_width = 80 +tab_spaces = 2 +edition = "2021" diff --git a/__wasm/deno_rust_wasm_js_sandbox/Cargo.lock b/__wasm/deno_rust_wasm_js_sandbox/Cargo.lock new file mode 100644 index 0000000..7041dfa --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/Cargo.lock @@ -0,0 +1,575 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "boa_engine" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d42e34ff7c02423cb5248bc67021f13f2bb7aec22de7ab351a6a4e31ec6d9" +dependencies = [ + "bitflags", + "boa_gc", + "boa_interner", + "boa_profiler", + "boa_unicode", + "chrono", + "dyn-clone", + "fast-float", + "gc", + "indexmap", + "num-bigint", + "num-integer", + "num-traits", + "once_cell", + "rand", + "regress", + "rustc-hash", + "ryu-js", + "serde", + "serde_json", + "tap", + "unicode-normalization", +] + +[[package]] +name = "boa_gc" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a1167c469e96484d0f1d73d2a1ae5e44983aa49a32630d76f5a555116b18204" +dependencies = [ + "gc", +] + +[[package]] +name = "boa_interner" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8a4c15b4b0e86daa063c7123da11f8e41ecdc91fc086d1fd8898670b2f40e" +dependencies = [ + "gc", + "string-interner", +] + +[[package]] +name = "boa_profiler" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28bd5912d57793f8fd312ce63eaedd34fa6ff5fe759be508d3d2455905b0880a" + +[[package]] +name = "boa_unicode" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b9a73ca3f2bdd98e3e132e3c93684d9ab682ed5a3cad8be6b87c38d7f349e6" +dependencies = [ + "unicode-general-category", +] + +[[package]] +name = "boa_wasm_engine" +version = "0.0.0" +dependencies = [ + "boa_engine", + "getrandom", + "serde", + "serde_json", + "wasm-bindgen", +] + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "dyn-clone" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a" + +[[package]] +name = "fast-float" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" + +[[package]] +name = "gc" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edaac0f5832202ebc99520cb77c932248010c4645d20be1dc62d6579f5b3752" +dependencies = [ + "gc_derive", +] + +[[package]] +name = "gc_derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60df8444f094ff7885631d80e78eb7d88c3c2361a98daaabb06256e4500db941" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "getrandom" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" + +[[package]] +name = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg", + "hashbrown 0.12.1", +] + +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + +[[package]] +name = "js-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "proc-macro2" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "regress" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a92ff21fe8026ce3f2627faaf43606f0b67b014dbc9ccf027181a804f75d92e" +dependencies = [ + "memchr", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "ryu" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" + +[[package]] +name = "ryu-js" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" + +[[package]] +name = "serde" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "string-interner" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e2531d8525b29b514d25e275a43581320d587b86db302b9a7e464bac579648" +dependencies = [ + "cfg-if", + "hashbrown 0.11.2", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "unicode-general-category" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1218098468b8085b19a2824104c70d976491d247ce194bbd9dc77181150cdfd6" + +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/__wasm/deno_rust_wasm_js_sandbox/Cargo.toml b/__wasm/deno_rust_wasm_js_sandbox/Cargo.toml new file mode 100644 index 0000000..3c579d8 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +members = [ + "rs_lib", +] diff --git a/__wasm/deno_rust_wasm_js_sandbox/deno.json b/__wasm/deno_rust_wasm_js_sandbox/deno.json new file mode 100644 index 0000000..ea91683 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/deno.json @@ -0,0 +1,5 @@ +{ + "tasks": { + "wasmbuild": "deno run -A https://deno.land/x/wasmbuild@0.8.2/main.ts" + } +} diff --git a/__wasm/deno_rust_wasm_js_sandbox/justfile b/__wasm/deno_rust_wasm_js_sandbox/justfile new file mode 100644 index 0000000..f7e1063 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/justfile @@ -0,0 +1,10 @@ +_: + @just --list + +build_wasm: + deno task wasmbuild + +run *ARGS: + deno run --allow-read main.js {{ ARGS }} + + diff --git a/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine.generated.js b/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine.generated.js new file mode 100644 index 0000000..da14857 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine.generated.js @@ -0,0 +1,390 @@ +// @generated file from wasmbuild -- do not edit +// deno-lint-ignore-file +// deno-fmt-ignore-file +// source-hash: 8da660663e79589e35cc62c575898459b04819a7 +let wasm; + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { + return heap[idx]; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = new TextDecoder("utf-8", { + ignoreBOM: true, + fatal: true, +}); + +cachedTextDecoder.decode(); + +let cachedUint8Memory0; +function getUint8Memory0() { + if (cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = new TextEncoder("utf-8"); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachedInt32Memory0; +function getInt32Memory0() { + if (cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} +/** + * @param {string} script + * @returns {string} + */ +export function run_js(script) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + script, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.run_js(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); + } +} + +function getArrayU8FromWasm0(ptr, len) { + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); +} + +const imports = { + __wbindgen_placeholder__: { + __wbg_proxyfetch_da79e6ec8542a0a7: function (arg0, arg1, arg2) { + const ret = proxy_fetch(getStringFromWasm0(arg1, arg2)); + const ptr0 = passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; + }, + __wbg_randomFillSync_91e2b39becca6147: function () { + return handleError(function (arg0, arg1, arg2) { + getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2)); + }, arguments); + }, + __wbindgen_object_drop_ref: function (arg0) { + takeObject(arg0); + }, + __wbg_getRandomValues_b14734aa289bc356: function () { + return handleError(function (arg0, arg1) { + getObject(arg0).getRandomValues(getObject(arg1)); + }, arguments); + }, + __wbg_process_e56fd54cf6319b6c: function (arg0) { + const ret = getObject(arg0).process; + return addHeapObject(ret); + }, + __wbindgen_is_object: function (arg0) { + const val = getObject(arg0); + const ret = typeof (val) === "object" && val !== null; + return ret; + }, + __wbg_versions_77e21455908dad33: function (arg0) { + const ret = getObject(arg0).versions; + return addHeapObject(ret); + }, + __wbg_node_0dd25d832e4785d5: function (arg0) { + const ret = getObject(arg0).node; + return addHeapObject(ret); + }, + __wbindgen_is_string: function (arg0) { + const ret = typeof (getObject(arg0)) === "string"; + return ret; + }, + __wbg_static_accessor_NODE_MODULE_26b231378c1be7dd: function () { + const ret = module; + return addHeapObject(ret); + }, + __wbg_require_0db1598d9ccecb30: function () { + return handleError(function (arg0, arg1, arg2) { + const ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_crypto_b95d7173266618a9: function (arg0) { + const ret = getObject(arg0).crypto; + return addHeapObject(ret); + }, + __wbg_msCrypto_5a86d77a66230f81: function (arg0) { + const ret = getObject(arg0).msCrypto; + return addHeapObject(ret); + }, + __wbg_newnoargs_fc5356289219b93b: function (arg0, arg1) { + const ret = new Function(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbg_call_4573f605ca4b5f10: function () { + return handleError(function (arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }, + __wbindgen_object_clone_ref: function (arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }, + __wbg_self_ba1ddafe9ea7a3a2: function () { + return handleError(function () { + const ret = self.self; + return addHeapObject(ret); + }, arguments); + }, + __wbg_window_be3cc430364fd32c: function () { + return handleError(function () { + const ret = window.window; + return addHeapObject(ret); + }, arguments); + }, + __wbg_globalThis_56d9c9f814daeeee: function () { + return handleError(function () { + const ret = globalThis.globalThis; + return addHeapObject(ret); + }, arguments); + }, + __wbg_global_8c35aeee4ac77f2b: function () { + return handleError(function () { + const ret = global.global; + return addHeapObject(ret); + }, arguments); + }, + __wbindgen_is_undefined: function (arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }, + __wbg_buffer_de1150f91b23aa89: function (arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }, + __wbg_new_97cf52648830a70d: function (arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_set_a0172b213e2469e9: function (arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }, + __wbg_length_e09c0b925ab8de5d: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_newwithlength_e833b89f9db02732: function (arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return addHeapObject(ret); + }, + __wbg_subarray_9482ae5cd5cd99d3: function (arg0, arg1, arg2) { + const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }, + __wbindgen_throw: function (arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbindgen_memory: function () { + const ret = wasm.memory; + return addHeapObject(ret); + }, + }, +}; + +const wasm_url = new URL("boa_wasm_engine_bg.wasm", import.meta.url); + +/** + * Decompression callback + * + * @callback decompressCallback + * @param {Uint8Array} compressed + * @return {Uint8Array} decompressed + */ + +/** Instantiates an instance of the Wasm module returning its functions. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. + * @param {decompressCallback=} transform + */ +export async function instantiate(transform) { + return (await instantiateWithInstance(transform)).exports; +} + +let instanceWithExports; +let lastLoadPromise; + +/** Instantiates an instance of the Wasm module along with its exports. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. + * @param {decompressCallback=} transform + * @returns {Promise<{ + * instance: WebAssembly.Instance; + * exports: { run_js: typeof run_js } + * }>} + */ +export function instantiateWithInstance(transform) { + if (instanceWithExports != null) { + return Promise.resolve(instanceWithExports); + } + if (lastLoadPromise == null) { + lastLoadPromise = (async () => { + try { + const instance = (await instantiateModule(transform)).instance; + wasm = instance.exports; + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + instanceWithExports = { + instance, + exports: getWasmInstanceExports(), + }; + return instanceWithExports; + } finally { + lastLoadPromise = null; + } + })(); + } + return lastLoadPromise; +} + +function getWasmInstanceExports() { + return { run_js }; +} + +/** Gets if the Wasm module has been instantiated. */ +export function isInstantiated() { + return instanceWithExports != null; +} + +async function instantiateModule(transform) { + switch (wasm_url.protocol) { + case "file:": { + if (typeof Deno !== "object") { + throw new Error("file urls are not supported in this environment"); + } + + if ("permissions" in Deno) { + Deno.permissions.request({ name: "read", path: wasm_url }); + } + const wasmCode = await Deno.readFile(wasm_url); + return WebAssembly.instantiate( + !transform ? wasmCode : transform(wasmCode), + imports, + ); + } + case "https:": + case "http:": { + if (typeof Deno === "object" && "permissions" in Deno) { + Deno.permissions.request({ name: "net", host: wasm_url.host }); + } + const wasmResponse = await fetch(wasm_url); + if (transform) { + const wasmCode = new Uint8Array(await wasmResponse.arrayBuffer()); + return WebAssembly.instantiate(transform(wasmCode), imports); + } + if ( + wasmResponse.headers.get("content-type")?.toLowerCase().startsWith( + "application/wasm", + ) + ) { + return WebAssembly.instantiateStreaming(wasmResponse, imports); + } else { + return WebAssembly.instantiate( + await wasmResponse.arrayBuffer(), + imports, + ); + } + } + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); + } +} diff --git a/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine_bg.wasm b/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine_bg.wasm new file mode 100644 index 0000000..345bc6f Binary files /dev/null and b/__wasm/deno_rust_wasm_js_sandbox/lib/boa_wasm_engine_bg.wasm differ diff --git a/__wasm/deno_rust_wasm_js_sandbox/main.js b/__wasm/deno_rust_wasm_js_sandbox/main.js new file mode 100644 index 0000000..e361be8 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/main.js @@ -0,0 +1,16 @@ +window.proxy_fetch = function () { + return JSON.stringify({ + "result": "{\"a\": 111}" + }); +}; + +import { instantiate } from "./lib/boa_wasm_engine.generated.js"; +const { run_js } = await instantiate(); + +async function main() { + for (let i = 0; i < 10; i++) { + console.log(run_js('let x = fetch();x.a;let v = [];while(true){v.push("1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla1adflasdjfljsalfsklfjladsjflklsdfjla;dlfjalsfjas;");};')); + } +} + +await main(); diff --git a/__wasm/deno_rust_wasm_js_sandbox/rs_lib/Cargo.toml b/__wasm/deno_rust_wasm_js_sandbox/rs_lib/Cargo.toml new file mode 100644 index 0000000..4c56532 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/rs_lib/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "boa_wasm_engine" +version = "0.0.0" +edition = "2021" + +[lib] +crate_type = ["cdylib"] + +[profile.release] +codegen-units = 1 +incremental = true +lto = true +opt-level = "z" + +[dependencies] +wasm-bindgen = "=0.2.81" +boa_engine = "0.15.0" +getrandom = { version = "0.2", features = ["js"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/__wasm/deno_rust_wasm_js_sandbox/rs_lib/src/lib.rs b/__wasm/deno_rust_wasm_js_sandbox/rs_lib/src/lib.rs new file mode 100644 index 0000000..561c226 --- /dev/null +++ b/__wasm/deno_rust_wasm_js_sandbox/rs_lib/src/lib.rs @@ -0,0 +1,51 @@ +use boa_engine::{Context, JsResult, JsString, JsValue}; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use wasm_bindgen::prelude::*; + +#[wasm_bindgen] +extern { + fn proxy_fetch(options: &str) -> String; +} +// #[wasm_bindgen] +// extern { +// fn alert(msg: &str); +// } + +#[derive(Clone, Debug, Serialize, Deserialize)] +struct FetchResult { + error: Option, + result: Option, +} + +// n(&JsValue, &[JsValue], &mut Context) -> JsResult +fn fetch_fn(_: &JsValue, args: &[JsValue], ctx: &mut Context) -> JsResult { + let mut options = String::new(); + options.push('['); + args.iter().enumerate().for_each(|(i, arg)| { + if i > 0 { options.push(','); } + options.push_str(arg.to_json(ctx).expect("to json error").as_str().expect("as str error")) + }); + options.push(']'); + // let r = serde_json::to_string(args).unwrap(); + let fetch_result_string = proxy_fetch(&options); + let fetch_result: FetchResult = serde_json::from_str(&fetch_result_string).expect("from str error"); + if let Some(result) = fetch_result.result { + let r: Value = serde_json::from_str(&result).expect("result from str error"); + let v = JsValue::from_json(&r, ctx).unwrap(); + return JsResult::Ok(v); + } + JsResult::Err(JsValue::String(JsString::from(format!("Invoke fetch error: {}", fetch_result.error.unwrap_or("".to_string()))))) +} + +#[wasm_bindgen] +pub fn run_js(script: String) -> String { + let mut ctx = Context::default(); + ctx.register_global_function("fetch", 0, fetch_fn); + let o = match ctx.eval(script) { + JsResult::Ok(o) => o, + JsResult::Err(o) => o, + }; + format!("{}", o.to_json(&mut ctx).unwrap()) +} +