From 6f29f33e8d040342081852edaa32a58f5b3a2f16 Mon Sep 17 00:00:00 2001 From: Yvan Sraka Date: Thu, 27 Jan 2022 14:44:53 +0100 Subject: [PATCH] Setup `wasm-pack` in intend to use crate in JS app --- Cargo.lock | 77 ++++++++++++++++++++++++++++++++++++------- Cargo.toml | 4 +++ flake.lock | 63 ++++++++++++++++++++++------------- flake.nix | 97 +++++++++++++++++++++++------------------------------- 4 files changed, 152 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d29dd30..6c26412 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,6 +78,16 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + [[package]] name = "countme" version = "2.0.4" @@ -230,9 +240,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" dependencies = [ "wasm-bindgen", ] @@ -398,6 +408,7 @@ dependencies = [ "criterion", "rowan", "smol_str", + "wasm-bindgen-test", ] [[package]] @@ -443,6 +454,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + [[package]] name = "scopeguard" version = "1.1.0" @@ -560,9 +577,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -570,9 +587,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" dependencies = [ "bumpalo", "lazy_static", @@ -583,11 +600,23 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -595,9 +624,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" dependencies = [ "proc-macro2", "quote", @@ -608,9 +637,33 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c8d417d87eefa0087e62e3c75ad086be39433449e2961add9a5d9ce5acc2f1" +dependencies = [ + "console_error_panic_hook", + "js-sys", + "scoped-tls", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0e560d44db5e73b69a9757a15512fe7e1ef93ed2061c928871a4025798293dd" +dependencies = [ + "proc-macro2", + "quote", +] [[package]] name = "web-sys" diff --git a/Cargo.toml b/Cargo.toml index e3e312c..2b1e67b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,9 @@ readme = "README.md" repository = "https://github.com/nix-community/rnix-parser" version = "0.10.1" +[lib] +crate-type = ["cdylib", "rlib"] + [[bench]] harness = false name = "all-packages" @@ -19,3 +22,4 @@ smol_str = "0.1.17" [dev-dependencies] criterion = "0.3.0" +wasm-bindgen-test = "0.3.29" \ No newline at end of file diff --git a/flake.lock b/flake.lock index 080eb20..d4dcd85 100644 --- a/flake.lock +++ b/flake.lock @@ -1,55 +1,74 @@ { "nodes": { - "import-cargo": { + "flake-utils": { "locked": { - "lastModified": 1594305518, - "narHash": "sha256-frtArgN42rSaEcEOYWg8sVPMUK+Zgch3c+wejcpX3DY=", - "owner": "edolstra", - "repo": "import-cargo", - "rev": "25d40be4a73d40a2572e0cc233b83253554f06c5", + "lastModified": 1637014545, + "narHash": "sha256-26IZAc5yzlD9FlDT54io1oqG/bBoyka+FJk5guaX4x4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "bba5dcc8e0b20ab664967ad83d24d64cb64ec4f4", "type": "github" }, "original": { - "owner": "edolstra", - "repo": "import-cargo", + "owner": "numtide", + "repo": "flake-utils", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1634172192, - "narHash": "sha256-FBF4U/T+bMg4sEyT/zkgasvVquGzgdAf4y8uCosKMmo=", + "lastModified": 1643080866, + "narHash": "sha256-iO3Z6jw0HEiie8UnXVpq1SxphprDYBXrVzubEa5D4eE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c07b471b52be8fbc49a7dc194e9b37a6e19ee04d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1637453606, + "narHash": "sha256-Gy6cwUswft9xqsjWxFYEnx/63/qzaFUwatcbV5GF/GQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2cf9db0e3d45b9d00f16f2836cb1297bcadc475e", + "rev": "8afc4e543663ca0a6a4f496262cd05233737e732", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-unstable", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { - "import-cargo": "import-cargo", "nixpkgs": "nixpkgs", - "utils": "utils" + "rust-overlay": "rust-overlay" } }, - "utils": { + "rust-overlay": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_2" + }, "locked": { - "lastModified": 1610051610, - "narHash": "sha256-U9rPz/usA1/Aohhk7Cmc2gBrEEKRzcW4nwPWMPwja4Y=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3982c9903e93927c2164caa727cd3f6a0e6d14cc", + "lastModified": 1642838864, + "narHash": "sha256-pHnhm3HWwtvtOK7NdNHwERih3PgNlacrfeDwachIG8E=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "9fb49daf1bbe1d91e6c837706c481f9ebb3d8097", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "oxalica", + "repo": "rust-overlay", "type": "github" } } diff --git a/flake.nix b/flake.nix index ad569e1..d98e834 100644 --- a/flake.nix +++ b/flake.nix @@ -1,63 +1,50 @@ { description = "Rust-based parser for nix files"; + # Stolen from https://gist.github.com/573/885a062ca49d2db355c22004cc395066 inputs = { - utils.url = "github:numtide/flake-utils"; - nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; - import-cargo.url = github:edolstra/import-cargo; + nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; }; + rust-overlay = { url = "github:oxalica/rust-overlay"; }; }; - outputs = { self, nixpkgs, utils, import-cargo }: + outputs = { nixpkgs, rust-overlay, ... }: + let system = "x86_64-linux"; + in { - overlay = final: prev: let - target = final.rust.toRustTarget final.stdenv.hostPlatform; - flags = "--release --offline --target ${target}"; - inherit (import-cargo.builders) importCargo; - in { - rnix-parser = final.stdenv.mkDerivation { - pname = "rnix-parser"; - version = "0.9.1"; - src = final.lib.cleanSource ./.; - nativeBuildInputs = with final; [ - rustc cargo - (importCargo { lockFile = ./Cargo.lock; inherit (final) pkgs; }).cargoHome - ]; - - outputs = [ "out" "doc" ]; - doCheck = true; - - buildPhase = '' - cargo build ${flags} - cargo doc ${flags} - ''; - - checkPhase = '' - cargo test ${flags} - cargo bench - ''; - - installPhase = '' - mkdir -p $out/lib - mkdir -p $doc/share/doc/rnix - - cp -r ./target/${target}/doc $doc/share/doc/rnix - cp ./target/${target}/release/librnix.rlib $out/lib/ - ''; - }; - }; - } - // utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; }; - in - rec { - # `nix develop` - devShell = pkgs.mkShell { - buildInputs = with pkgs; [ rustfmt rustc cargo ]; - }; - - packages.rnix-parser = pkgs.rnix-parser; - defaultPackage = packages.rnix-parser; - } - ); + devShell.${system} = + let + pkgs = import nixpkgs { + inherit system; + overlays = [ rust-overlay.overlay ]; + }; + in + (({ pkgs, ... }: + pkgs.mkShell { + buildInputs = with pkgs; [ + cargo + cargo-watch + nodejs + wasm-pack + + # Note: to use stable, just replace `nightly` with `stable` + (rust-bin.stable.latest.default.override { + extensions = [ "rust-src" ]; + targets = [ "wasm32-unknown-unknown" ]; + }) + + # Add some extra dependencies from `pkgs` + pkg-config + openssl + ]; + + shellHook = ""; + }) { + pkgs = pkgs; + + # Set Environment Variables + RUST_BACKTRACE = 1; + PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig"; + RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; + }); + }; }