From 60b0f1b736e3aee927ad0bc615c87b2f51053919 Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Fri, 21 Apr 2023 09:25:21 -0400 Subject: [PATCH] This is a working version of kifu-pwa --- flake.lock | 12 +- kifu/ffi/kifu-wasm/Cargo.lock | 348 +++++++++++++++++++++++++++++++++- kifu/ffi/kifu-wasm/Cargo.toml | 3 + kifu/ffi/kifu-wasm/src/lib.rs | 37 ++-- kifu/kifu-core/src/api.rs | 2 +- kifu/kifu-core/src/types.rs | 4 + kifu/kifu-pwa/converter.js | 7 +- kifu/kifu-pwa/core.d.ts | 69 +++++++ 8 files changed, 452 insertions(+), 30 deletions(-) create mode 100644 kifu/kifu-pwa/core.d.ts diff --git a/flake.lock b/flake.lock index 1551ada..ba24339 100644 --- a/flake.lock +++ b/flake.lock @@ -51,11 +51,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1680498889, - "narHash": "sha256-4nGFBm+oILOO6DPoKTPxVlfkZSxCOY4W25zSRHESK48=", + "lastModified": 1681932375, + "narHash": "sha256-tSXbYmpnKSSWpzOrs27ie8X3I0yqKA6AuCzCYNtwbCU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "799d153e4f316143a9db0eb869ecf44d8d4c0356", + "rev": "3d302c67ab8647327dba84fbdb443cdbf0e82744", "type": "github" }, "original": { @@ -185,11 +185,11 @@ }, "unstable": { "locked": { - "lastModified": 1680398059, - "narHash": "sha256-qtbKRe+pWuf5nNINdiCgn6EwOIQZxj0Ig/wybBpFNkQ=", + "lastModified": 1681920287, + "narHash": "sha256-+/d6XQQfhhXVfqfLROJoqj3TuG38CAeoT6jO1g9r1k0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7c656856e9eb863c4d21c83e2601dd77f95f6941", + "rev": "645bc49f34fa8eff95479f0345ff57e55b53437e", "type": "github" }, "original": { diff --git a/kifu/ffi/kifu-wasm/Cargo.lock b/kifu/ffi/kifu-wasm/Cargo.lock index 97f9d62..3af15df 100644 --- a/kifu/ffi/kifu-wasm/Cargo.lock +++ b/kifu/ffi/kifu-wasm/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -20,12 +29,122 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + [[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.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cxx" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.15", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + [[package]] name = "js-sys" version = "0.3.61" @@ -39,7 +158,9 @@ dependencies = [ name = "kifu-core" version = "0.1.0" dependencies = [ + "serde", "tokio", + "typeshare", ] [[package]] @@ -51,6 +172,21 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "libc" +version = "0.2.142" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + [[package]] name = "log" version = "0.4.17" @@ -60,6 +196,25 @@ dependencies = [ "cfg-if", ] +[[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.17.1" @@ -90,6 +245,49 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "serde" +version = "1.0.160" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.160" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + +[[package]] +name = "serde_json" +version = "1.0.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "syn" version = "1.0.109" @@ -112,6 +310,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + [[package]] name = "tokio" version = "1.27.0" @@ -136,12 +343,40 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "typeshare" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f44d1a2f454cb35fbe05b218c410792697e76bd868f48d3a418f2cd1a7d527d6" +dependencies = [ + "chrono", + "serde", + "serde_json", + "typeshare-annotation", +] + +[[package]] +name = "typeshare-annotation" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc670d0e358428857cc3b4bf504c691e572fccaec9542ff09212d3f13d74b7a9" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "unicode-ident" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + [[package]] name = "wasm-bindgen" version = "0.2.84" @@ -218,13 +453,53 @@ dependencies = [ "wasm-bindgen", ] +[[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-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", ] [[package]] @@ -233,13 +508,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] @@ -248,38 +538,80 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/kifu/ffi/kifu-wasm/Cargo.toml b/kifu/ffi/kifu-wasm/Cargo.toml index 3baee6f..d2407ce 100644 --- a/kifu/ffi/kifu-wasm/Cargo.toml +++ b/kifu/ffi/kifu-wasm/Cargo.toml @@ -12,3 +12,6 @@ crate-type = ["cdylib"] kifu-core = { path = "../../kifu-core" } wasm-bindgen = "0.2" wasm-bindgen-futures = "*" + +[package.metadata.wasm-pack.profile.release] +wasm-opt = false diff --git a/kifu/ffi/kifu-wasm/src/lib.rs b/kifu/ffi/kifu-wasm/src/lib.rs index be8d34a..3b14a16 100644 --- a/kifu/ffi/kifu-wasm/src/lib.rs +++ b/kifu/ffi/kifu-wasm/src/lib.rs @@ -6,25 +6,38 @@ extern "C" { pub fn log(s: &str); } +/* #[wasm_bindgen] -pub struct Request(kifu_core::Request); +pub struct CoreRequest(kifu_core::Request); + +#[wasm_bindgen] +impl CoreRequest { + #[wasm_bindgen(constructor)] + pub fn new(request: kifu_core::Request) -> Self { + Self(request) + } +} +*/ /* Somehow uncommenting this code actually causes the module to not load. Maybe a name conflict? * Don't know. + */ #[wasm_bindgen] -pub struct Response(kifu_core::Response); -*/ +pub struct CoreResponse(kifu_core::Response); #[wasm_bindgen] -pub struct CoreApp(kifu_core::CoreApp); +#[derive(Debug)] +pub struct CoreApp; #[wasm_bindgen] -pub fn coreapp_new() -> CoreApp { - log(&format!("coreapp_new")); - CoreApp(kifu_core::CoreApp::new()) -} - -#[wasm_bindgen] -pub async fn coreapp_dispatch(core: &CoreApp) { - log(&format!("coreapp_dispatch")); +impl CoreApp { + #[wasm_bindgen(constructor)] + pub fn new() -> Self { + Self + } + + #[wasm_bindgen] + pub async fn dispatch(&self, param: &JsValue) { + log(&format!("disptach! {:?}", param)); + } } diff --git a/kifu/kifu-core/src/api.rs b/kifu/kifu-core/src/api.rs index 9fb1892..d34e05d 100644 --- a/kifu/kifu-core/src/api.rs +++ b/kifu/kifu-core/src/api.rs @@ -26,7 +26,7 @@ pub enum Response { PlayingFieldView(PlayingFieldView), } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct CoreApp { state: Arc>, } diff --git a/kifu/kifu-core/src/types.rs b/kifu/kifu-core/src/types.rs index fd9ebae..129c9ba 100644 --- a/kifu/kifu-core/src/types.rs +++ b/kifu/kifu-core/src/types.rs @@ -40,6 +40,7 @@ impl Default for Size { } } +#[derive(Debug)] pub struct AppState { pub game: Option, } @@ -64,6 +65,7 @@ impl AppState { } } +#[derive(Debug)] enum Rank { Kyu(u8), Dan(u8), @@ -88,11 +90,13 @@ impl From for String { } } +#[derive(Debug)] pub struct Player { name: String, rank: Rank, } +#[derive(Debug)] pub struct GameState { pub board: Board, pub past_positions: Vec, diff --git a/kifu/kifu-pwa/converter.js b/kifu/kifu-pwa/converter.js index cc0f0b9..564484b 100644 --- a/kifu/kifu-pwa/converter.js +++ b/kifu/kifu-pwa/converter.js @@ -1,4 +1,4 @@ -import init, { coreapp_new, coreapp_dispatch } from "./kifu_wasm.js"; +import init, { CoreApp } from "./kifu_wasm.js"; const inputField = document.getElementById('input-temp'); const fromUnitField = document.getElementById('input-unit'); @@ -44,7 +44,8 @@ form.addEventListener('input', () => { }); init().then(async () => { - let app = coreapp_new(); - await coreapp_dispatch(app); + let app = new CoreApp(); + console.log("app: ", app, CoreApp); + await app.dispatch({ type: "PlayingField" }); console.log("kifu_wasm successfully initted"); }); diff --git a/kifu/kifu-pwa/core.d.ts b/kifu/kifu-pwa/core.d.ts new file mode 100644 index 0000000..c1236cb --- /dev/null +++ b/kifu/kifu-pwa/core.d.ts @@ -0,0 +1,69 @@ +/* + Generated by typeshare 1.5.0 +*/ + +export interface PlayStoneRequest { + column: number; + row: number; +} + +export interface Size { + width: number; + height: number; +} + +export type IntersectionElement = + | { type: "Unplayable", content?: undefined } + | { type: "Empty", content: Request } + | { type: "Filled", content: StoneElement }; + +export interface BoardElement { + size: Size; + spaces: IntersectionElement[]; +} + +export enum Color { + Black = "Black", + White = "White", +} + +export interface PlayerCardElement { + color: Color; + name: string; + rank: string; + clock: string; +} + +export interface ChatElement { + messages: string[]; +} + +export interface TextFieldElement { +} + +export interface PlayingFieldView { + board: BoardElement; + player_card_black: PlayerCardElement; + player_card_white: PlayerCardElement; + chat: ChatElement; + message: TextFieldElement; + current_player: Color; +} + +export interface Jitter { + x: number; + y: number; +} + +export interface StoneElement { + color: Color; + jitter: Jitter; +} + +export type Request = + | { type: "PlayingField", content?: undefined } + | { type: "PlayStoneRequest", content: PlayStoneRequest }; + +export type Response = + | { type: "PlayingFieldView", content: PlayingFieldView }; +