From cd6a739abbaac19f8c84b539635be4226e0c84f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Tue, 10 Sep 2024 16:58:18 +0200 Subject: [PATCH] :wrench: Add dummy rust project + build scripts with wasm-pack --- frontend/package.json | 2 + frontend/renderer/.gitignore | 5 ++ frontend/renderer/Cargo.lock | 124 +++++++++++++++++++++++++++++++++++ frontend/renderer/Cargo.toml | 16 +++++ frontend/renderer/src/lib.rs | 27 ++++++++ frontend/yarn.lock | 53 +++++++++++++++ 6 files changed, 227 insertions(+) create mode 100644 frontend/renderer/.gitignore create mode 100644 frontend/renderer/Cargo.lock create mode 100644 frontend/renderer/Cargo.toml create mode 100644 frontend/renderer/src/lib.rs diff --git a/frontend/package.json b/frontend/package.json index 1612361ab..6e56d7f2d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,6 +21,7 @@ "build:storybook": "yarn run build:storybook:assets && yarn run build:storybook:cljs && storybook build", "build:storybook:assets": "node ./scripts/build-storybook-assets.js", "build:storybook:cljs": "clojure -M:dev:shadow-cljs release storybook", + "build:renderer": "yarn wasm-pack build ./renderer --target web --out-dir ../resources/public/js/renderer/ --release", "e2e:server": "node ./scripts/e2e-server.js", "e2e:test": "playwright test --project default", "fmt:clj": "cljfmt fix --parallel=true src/ test/", @@ -86,6 +87,7 @@ "typescript": "^5.4.5", "vite": "^5.1.4", "vitest": "^1.3.1", + "wasm-pack": "^0.13.0", "watcher": "^2.3.1", "workerpool": "^9.1.1" }, diff --git a/frontend/renderer/.gitignore b/frontend/renderer/.gitignore new file mode 100644 index 000000000..391ed4d66 --- /dev/null +++ b/frontend/renderer/.gitignore @@ -0,0 +1,5 @@ +target/ +debug/ + +**/*.rs.bk + diff --git a/frontend/renderer/Cargo.lock b/frontend/renderer/Cargo.lock new file mode 100644 index 000000000..48581574f --- /dev/null +++ b/frontend/renderer/Cargo.lock @@ -0,0 +1,124 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "renderer" +version = "0.1.0" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "syn" +version = "2.0.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" diff --git a/frontend/renderer/Cargo.toml b/frontend/renderer/Cargo.toml new file mode 100644 index 000000000..5faf7d71b --- /dev/null +++ b/frontend/renderer/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "renderer" +version = "0.1.0" +edition = "2021" +repository = "https://github.com/penpot/penpot" +license-file = "../../../../LICENSE" +description = "Wasm-based canvas renderer for Penpot" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wasm-bindgen = "0.2.93" + +[profile.release] +opt-level = "s" diff --git a/frontend/renderer/src/lib.rs b/frontend/renderer/src/lib.rs new file mode 100644 index 000000000..532267bf7 --- /dev/null +++ b/frontend/renderer/src/lib.rs @@ -0,0 +1,27 @@ +use wasm_bindgen::prelude::*; + +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen(js_namespace = console)] + fn log(s: &str); +} + +#[wasm_bindgen] +pub fn print(msg: &str) { + log(msg); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 43a1f3c3e..601bb7c6c 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3871,6 +3871,15 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.26.1": + version: 0.26.1 + resolution: "axios@npm:0.26.1" + dependencies: + follow-redirects: "npm:^1.14.8" + checksum: 10c0/77ad7f1e6ca04fcd3fa8af1795b09d8b7c005b71a31f28d99ba40cda0bdcc12a4627801d7fac5efa62b9f667a8402bd54c669039694373bc8d44f6be611f785c + languageName: node + linkType: hard + "babel-core@npm:^7.0.0-bridge.0": version: 7.0.0-bridge.0 resolution: "babel-core@npm:7.0.0-bridge.0" @@ -3976,6 +3985,17 @@ __metadata: languageName: node linkType: hard +"binary-install@npm:^1.0.1": + version: 1.1.0 + resolution: "binary-install@npm:1.1.0" + dependencies: + axios: "npm:^0.26.1" + rimraf: "npm:^3.0.2" + tar: "npm:^6.1.11" + checksum: 10c0/c0c94a81262c037a1a84f12ff9acfe667b7938b126e764b0f066d5be128d21e0bb8ac5700f4d89f8f7b860b660882deddeaca300dea0ff218d94676999a133a1 + languageName: node + linkType: hard + "bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" @@ -6537,6 +6557,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.14.8": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -6683,6 +6713,7 @@ __metadata: ua-parser-js: "npm:^1.0.38" vite: "npm:^5.1.4" vitest: "npm:^1.3.1" + wasm-pack: "npm:^0.13.0" watcher: "npm:^2.3.1" workerpool: "npm:^9.1.1" xregexp: "npm:^5.1.1" @@ -11176,6 +11207,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + "rimraf@npm:^5.0.7": version: 5.0.7 resolution: "rimraf@npm:5.0.7" @@ -13577,6 +13619,17 @@ __metadata: languageName: node linkType: hard +"wasm-pack@npm:^0.13.0": + version: 0.13.0 + resolution: "wasm-pack@npm:0.13.0" + dependencies: + binary-install: "npm:^1.0.1" + bin: + wasm-pack: run.js + checksum: 10c0/71ed64c9b0082d51098ec71041ce68a9323d7a0027e3a9c0b694c5931f83ce2a58f1df7255c68239ca4ab702e2daf5c550a7886f8af048f0cb76945a510268b6 + languageName: node + linkType: hard + "watcher@npm:^2.3.1": version: 2.3.1 resolution: "watcher@npm:2.3.1"