From c66cf452943adedeb72f6f3b7d372447031255d2 Mon Sep 17 00:00:00 2001 From: milo Date: Tue, 5 Mar 2024 19:42:10 -0500 Subject: [PATCH] initial webworker implementation --- Cargo.toml | 6 +- fish-server-wasm/index.js | 20 - fish-server-wasm/package-lock.json | 398 ------------------ fish-server-wasm/package.json | 17 - fish-server-wasm/src/lib.rs | 36 -- .../.cargo/config.toml | 0 .../.gitignore | 2 + .../Cargo.lock | 2 +- .../Cargo.toml | 4 +- fish-webworker/package-lock.json | 68 +++ fish-webworker/package.json | 16 + fish-webworker/src/lib.rs | 13 + fish-webworker/src/worker.js | 29 ++ 13 files changed, 136 insertions(+), 475 deletions(-) delete mode 100644 fish-server-wasm/index.js delete mode 100644 fish-server-wasm/package-lock.json delete mode 100644 fish-server-wasm/package.json delete mode 100644 fish-server-wasm/src/lib.rs rename {fish-server-wasm => fish-webworker}/.cargo/config.toml (100%) rename {fish-server-wasm => fish-webworker}/.gitignore (50%) rename {fish-server-wasm => fish-webworker}/Cargo.lock (99%) rename {fish-server-wasm => fish-webworker}/Cargo.toml (71%) create mode 100644 fish-webworker/package-lock.json create mode 100644 fish-webworker/package.json create mode 100644 fish-webworker/src/lib.rs create mode 100644 fish-webworker/src/worker.js diff --git a/Cargo.toml b/Cargo.toml index 3185c1e..64233cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,17 @@ [workspace] resolver = "2" + +# members share a lockfile in the root of the repo members = [ "mino", "mino-code-gen", "fish", "tidepool", ] + +# excluded packages get their own lockfiles exclude = [ - "fish-server-wasm", + "fish-webworker", ] [profile.release] diff --git a/fish-server-wasm/index.js b/fish-server-wasm/index.js deleted file mode 100644 index 2e1e4fd..0000000 --- a/fish-server-wasm/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import { default as init, incr } from './build/fish_server_wasm.js' - -async function main() { - await init('/fish_server_wasm_bg.wasm'); - - let counter = document.getElementById("counter"); - let button = document.getElementById("incr"); - - function incrAndUpdate() { - counter.innerText = `${incr()}`; - } - - button.addEventListener('click', () => { - incrAndUpdate(); - }); - - incrAndUpdate(); -} - -main() diff --git a/fish-server-wasm/package-lock.json b/fish-server-wasm/package-lock.json deleted file mode 100644 index 8132dc2..0000000 --- a/fish-server-wasm/package-lock.json +++ /dev/null @@ -1,398 +0,0 @@ -{ - "name": "fish-server-wasm", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "fish-server-wasm", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "esbuild": "^0.20.1" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" - } - } - } -} diff --git a/fish-server-wasm/package.json b/fish-server-wasm/package.json deleted file mode 100644 index a0eb535..0000000 --- a/fish-server-wasm/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "fish-server-wasm", - "version": "1.0.0", - "description": "Blockfish engine server for wasm / webworkers", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build-wasm": "cargo build --release && wasm-bindgen target/wasm32-unknown-unknown/release/fish_server_wasm.wasm --out-dir build --target web --no-typescript", - "build-js": "npx esbuild index.js --bundle --outdir=build", - "build": "npm run build-wasm && npm run build-js" - }, - "author": "iitalics", - "license": "ISC", - "dependencies": { - "esbuild": "^0.20.1" - } -} diff --git a/fish-server-wasm/src/lib.rs b/fish-server-wasm/src/lib.rs deleted file mode 100644 index 4a63e0d..0000000 --- a/fish-server-wasm/src/lib.rs +++ /dev/null @@ -1,36 +0,0 @@ -use core::cell::Cell; -use core::mem::MaybeUninit; -use wasm_bindgen_macro::wasm_bindgen; - -#[global_allocator] -static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; - -struct Server { - counter: Cell, -} - -impl Server { - fn new() -> Self { - Self { - counter: Cell::new(0), - } - } - - fn incr(&self) -> u32 { - self.counter.replace(self.counter.get() + 1) - } -} - -static mut SERVER: MaybeUninit = MaybeUninit::uninit(); - -#[wasm_bindgen(start)] -fn start() { - let server = Server::new(); - unsafe { SERVER.write(server) }; -} - -#[wasm_bindgen] -pub fn incr() -> u32 { - let server = unsafe { SERVER.assume_init_ref() }; - server.incr() -} diff --git a/fish-server-wasm/.cargo/config.toml b/fish-webworker/.cargo/config.toml similarity index 100% rename from fish-server-wasm/.cargo/config.toml rename to fish-webworker/.cargo/config.toml diff --git a/fish-server-wasm/.gitignore b/fish-webworker/.gitignore similarity index 50% rename from fish-server-wasm/.gitignore rename to fish-webworker/.gitignore index 00f8641..620f295 100644 --- a/fish-server-wasm/.gitignore +++ b/fish-webworker/.gitignore @@ -1,3 +1,5 @@ target/ build/ node_modules/ +blockfish.js +blockfish.wasm diff --git a/fish-server-wasm/Cargo.lock b/fish-webworker/Cargo.lock similarity index 99% rename from fish-server-wasm/Cargo.lock rename to fish-webworker/Cargo.lock index d51f43a..58bacdc 100644 --- a/fish-server-wasm/Cargo.lock +++ b/fish-webworker/Cargo.lock @@ -21,7 +21,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "fish-server-wasm" +name = "fish-webworker" version = "0.1.0" dependencies = [ "wasm-bindgen", diff --git a/fish-server-wasm/Cargo.toml b/fish-webworker/Cargo.toml similarity index 71% rename from fish-server-wasm/Cargo.toml rename to fish-webworker/Cargo.toml index a9ad5c2..37de6e5 100644 --- a/fish-server-wasm/Cargo.toml +++ b/fish-webworker/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "fish-server-wasm" -description = "Blockfish engine server for wasm / webworkers" +name = "fish-webworker" +description = "Blockfish engine webworker" version = "0.1.0" edition = "2021" diff --git a/fish-webworker/package-lock.json b/fish-webworker/package-lock.json new file mode 100644 index 0000000..6f22449 --- /dev/null +++ b/fish-webworker/package-lock.json @@ -0,0 +1,68 @@ +{ + "name": "@blockfish/webworker", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@blockfish/webworker", + "version": "1.0.0", + "license": "LGPL", + "dependencies": { + "esbuild": "^0.20.1" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + } + } +} diff --git a/fish-webworker/package.json b/fish-webworker/package.json new file mode 100644 index 0000000..26e493b --- /dev/null +++ b/fish-webworker/package.json @@ -0,0 +1,16 @@ +{ + "name": "@blockfish/webworker", + "version": "1.0.0", + "description": "Blockfish engine webworker", + "main": "blockfish.js", + "scripts": { + "prebuild": "cargo build --release && wasm-bindgen target/wasm32-unknown-unknown/release/fish_webworker.wasm --out-dir build --target web --no-typescript", + "build": "npx esbuild src/worker.js --bundle --outdir=build", + "postbuild": "cp build/fish_webworker_bg.wasm ./blockfish.wasm && cp build/worker.js ./blockfish.js" + }, + "author": "iitalics", + "license": "LGPL", + "dependencies": { + "esbuild": "^0.20.1" + } +} diff --git a/fish-webworker/src/lib.rs b/fish-webworker/src/lib.rs new file mode 100644 index 0000000..3567cec --- /dev/null +++ b/fish-webworker/src/lib.rs @@ -0,0 +1,13 @@ +use wasm_bindgen_macro::wasm_bindgen; + +#[global_allocator] +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + +#[wasm_bindgen(start)] +fn start() { +} + +#[wasm_bindgen] +pub fn get_version() -> Result { + Ok("0.0.x".to_owned()) +} diff --git a/fish-webworker/src/worker.js b/fish-webworker/src/worker.js new file mode 100644 index 0000000..2b97151 --- /dev/null +++ b/fish-webworker/src/worker.js @@ -0,0 +1,29 @@ +import { + default as init, + get_version as getVersion, +} from '../build/fish_webworker.js' + +let initPromise = init('/blockfish.wasm'); + +async function handle(msg) { + switch (msg.type) { + case 'init': + return { version: getVersion() }; + + default: + throw `Unrecognized message "${msg.type}"`; + } +} + +self.addEventListener('message', async e => { + await initPromise; + + let resp; + try { + resp = await handle(e.data); + } catch (e) { + resp = { error: e.toString() }; + } + + self.postMessage(resp); +});