leptos-query-rs 0.5.1

A powerful, type-safe data fetching and caching library for Leptos 0.8 applications
Documentation
{
  description = "Leptos Query - A powerful data fetching and caching library for Leptos applications";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    rust-overlay.url = "github:oxalica/rust-overlay";
    flake-utils.url = "github:numtide/flake-utils";
    
    # Development tools
    crane = {
      url = "github:ipetkov/crane";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    
    # WASM toolchain
    rust-wasm = {
      url = "github:rustwasm/wasm-pack";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, rust-overlay, flake-utils, crane, rust-wasm }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        overlays = [ (import rust-overlay) ];
        pkgs = import nixpkgs {
          inherit system overlays;
        };
        
        # Rust toolchain with WASM support
        rustToolchain = pkgs.rust-bin.stable.latest.default.override {
          targets = [ "wasm32-unknown-unknown" ];
        };
        
        # Node.js and pnpm
        nodejs = pkgs.nodejs_20;
        pnpm = pkgs.nodePackages.pnpm;
        
        # Development tools
        devTools = with pkgs; [
          # Rust tools
          rustToolchain
          rust-analyzer
          cargo-watch
          cargo-tarpaulin
          cargo-audit
          
          # WASM tools
          wasm-pack
          wasm-bindgen-cli
          trunk
          
          # Node.js tools
          nodejs
          pnpm
          
          # System tools
          git
          gcc
          pkg-config
          openssl
          
          # Additional development tools
          jq
          ripgrep
          fd
          bat
          exa
        ];
        
        # Build inputs for the Rust project
        buildInputs = with pkgs; [
          openssl
          pkg-config
        ];
        
        # Runtime dependencies
        runtimeDeps = with pkgs; [
          openssl
        ];
        
      in {
        # Development shell
        devShells.default = pkgs.mkShell {
          buildInputs = devTools;
          
          # Environment variables
          shellHook = ''
            echo "🚀 Welcome to Leptos Query development environment!"
            echo ""
            echo "Available tools:"
            echo "  • Rust: $(rustc --version)"
            echo "  • Cargo: $(cargo --version)"
            echo "  • Node.js: $(node --version)"
            echo "  • pnpm: $(pnpm --version)"
            echo "  • Trunk: $(trunk --version)"
            echo "  • wasm-pack: $(wasm-pack --version)"
            echo ""
            echo "Quick commands:"
            echo "  • cargo test          - Run Rust tests"
            echo "  • cargo bench         - Run benchmarks"
            echo "  • pnpm test:e2e       - Run Playwright tests"
            echo "  • trunk serve         - Serve demo app"
            echo "  • wasm-pack build     - Build WASM"
            echo ""
            
            # Set up Rust environment
            export RUST_BACKTRACE=1
            export RUST_LOG=info
            
            # Set up Node.js environment
            export NODE_ENV=development
            
            # Add local binaries to PATH
            export PATH="$PWD/target/debug:$PATH"
            export PATH="$PWD/demo/node_modules/.bin:$PATH"
          '';
          
          # Rust-specific environment
          RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
          CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_LINKER = "${pkgs.llvmPackages.lld}/bin/ld.lld";
        };
        
        # Build the Rust project
        packages.default = crane.lib.${system}.buildPackage {
          src = ./.;
          cargoArtifacts = crane.lib.${system}.buildDepsOnly {
            inherit src;
            cargoExtraArgs = "--all-features";
          };
          
          buildInputs = buildInputs;
          
          # Build features
          cargoExtraArgs = "--all-features";
          
          # WASM build
          doCheck = true;
          checkPhase = ''
            cargo test --all-features
            cargo bench --all-features
          '';
          
          # Install phase
          installPhase = ''
            mkdir -p $out/bin
            cp target/release/leptos-query-rs $out/bin/
            
            # Copy documentation
            mkdir -p $out/share/doc
            cp -r docs $out/share/doc/
            cp README.md $out/share/doc/
            cp LICENSE $out/share/doc/
          '';
        };
        
        # WASM package
        packages.wasm = pkgs.stdenv.mkDerivation {
          name = "leptos-query-wasm";
          src = ./.;
          
          buildInputs = [ rustToolchain wasm-pack ];
          
          buildPhase = ''
            wasm-pack build --target web --out-dir dist
          '';
          
          installPhase = ''
            mkdir -p $out
            cp -r dist/* $out/
          '';
        };
        
        # Demo app
        packages.demo = pkgs.stdenv.mkDerivation {
          name = "leptos-query-demo";
          src = ./demo;
          
          buildInputs = [ nodejs pnpm trunk ];
          
          buildPhase = ''
            cd demo
            pnpm install
            trunk build
          '';
          
          installPhase = ''
            mkdir -p $out
            cp -r dist/* $out/
          '';
        };
        
        # Development tools
        packages.dev-tools = pkgs.symlinkJoin {
          name = "leptos-query-dev-tools";
          paths = devTools;
        };
        
        # Apps
        apps = {
          # Development server
          dev = {
            type = "app";
            program = toString (pkgs.writeShellScript "dev" ''
              cd demo
              trunk serve
            '');
          };
          
          # Test runner
          test = {
            type = "app";
            program = toString (pkgs.writeShellScript "test" ''
              cargo test --all-features
              cd demo && pnpm test:e2e
            '');
          };
          
          # Benchmarks
          bench = {
            type = "app";
            program = toString (pkgs.writeShellScript "bench" ''
              cargo bench --all-features
            '');
          };
          
          # WASM build
          wasm = {
            type = "app";
            program = toString (pkgs.writeShellScript "wasm" ''
              wasm-pack build --target web --out-dir dist
            '');
          };
        };
        
        # Checks
        checks = {
          # Rust tests
          rust-tests = crane.lib.${system}.cargoTest {
            src = ./.;
            cargoExtraArgs = "--all-features";
          };
          
          # Rust clippy
          rust-clippy = crane.lib.${system}.cargoClippy {
            src = ./.;
            cargoExtraArgs = "--all-features";
            clippyExtraArgs = "-- -D warnings";
          };
          
          # Rust audit
          rust-audit = crane.lib.${system}.cargoAudit {
            src = ./.;
          };
          
          # Format check
          rust-fmt = crane.lib.${system}.cargoFmt {
            src = ./.;
          };
        };
      }
    );
}