diff --git a/.github/workflows/advisory-cron.yaml b/.github/workflows/advisory-cron.yaml
deleted file mode 100644
index 31bac5a3..00000000
--- a/.github/workflows/advisory-cron.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-name: Advisories
-on:
- schedule:
- - cron: '0 18 * * *'
-jobs:
- cargo-deny:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- checks:
- - advisories
- - bans licenses sources
- steps:
- - uses: actions/checkout@v2
- - uses: EmbarkStudios/cargo-deny-action@v1
- with:
- command: check ${{ matrix.checks }}
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
deleted file mode 100644
index 8519ac5e..00000000
--- a/.github/workflows/ci.yaml
+++ /dev/null
@@ -1,177 +0,0 @@
-name: CI
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
-jobs:
- fmt:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- default: true
- components: rustfmt
- - uses: Swatinem/rust-cache@v1
- - run: ./scripts/ci/fmt
- shell: bash
-
- lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- default: true
- components: clippy
- - uses: Swatinem/rust-cache@v1
- - run: ./scripts/ci/lint
- shell: bash
-
- docs:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- default: true
- - uses: Swatinem/rust-cache@v1
- - name: Build rust docs
- run: ./scripts/ci/rust-docs
- shell: bash
- - name: Install doxygen
- run: sudo apt-get install -y doxygen
- shell: bash
-
- cargo-deny:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- checks:
- - advisories
- - bans licenses sources
- continue-on-error: ${{ matrix.checks == 'advisories' }}
- steps:
- - uses: actions/checkout@v2
- - uses: EmbarkStudios/cargo-deny-action@v1
- with:
- arguments: '--manifest-path ./rust/Cargo.toml'
- command: check ${{ matrix.checks }}
-
- wasm_tests:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli wasm-opt
- - name: Install wasm32 target
- run: rustup target add wasm32-unknown-unknown
- - name: run tests
- run: ./scripts/ci/wasm_tests
- deno_tests:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: denoland/setup-deno@v1
- with:
- deno-version: v1.x
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli wasm-opt
- - name: Install wasm32 target
- run: rustup target add wasm32-unknown-unknown
- - name: run tests
- run: ./scripts/ci/deno_tests
-
- js_fmt:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: install
- run: yarn global add prettier
- - name: format
- run: prettier -c javascript/.prettierrc javascript
-
- js_tests:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli wasm-opt
- - name: Install wasm32 target
- run: rustup target add wasm32-unknown-unknown
- - name: run tests
- run: ./scripts/ci/js_tests
-
- cmake_build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: nightly-2023-01-26
- default: true
- - uses: Swatinem/rust-cache@v1
- - name: Install CMocka
- run: sudo apt-get install -y libcmocka-dev
- - name: Install/update CMake
- uses: jwlawson/actions-setup-cmake@v1.12
- with:
- cmake-version: latest
- - name: Install rust-src
- run: rustup component add rust-src
- - name: Build and test C bindings
- run: ./scripts/ci/cmake-build Release Static
- shell: bash
-
- linux:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- toolchain:
- - 1.67.0
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: ${{ matrix.toolchain }}
- default: true
- - uses: Swatinem/rust-cache@v1
- - run: ./scripts/ci/build-test
- shell: bash
-
- macos:
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- default: true
- - uses: Swatinem/rust-cache@v1
- - run: ./scripts/ci/build-test
- shell: bash
-
- windows:
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v2
- - uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: 1.67.0
- default: true
- - uses: Swatinem/rust-cache@v1
- - run: ./scripts/ci/build-test
- shell: bash
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
deleted file mode 100644
index b501d526..00000000
--- a/.github/workflows/docs.yaml
+++ /dev/null
@@ -1,52 +0,0 @@
-on:
- push:
- branches:
- - main
-
-name: Documentation
-
-jobs:
- deploy-docs:
- concurrency: deploy-docs
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
-
- - name: Toolchain
- uses: actions-rs/toolchain@v1
- with:
- profile: minimal
- toolchain: stable
- override: true
-
- - name: Cache
- uses: Swatinem/rust-cache@v1
-
- - name: Clean docs dir
- run: rm -rf docs
- shell: bash
-
- - name: Clean Rust docs dir
- uses: actions-rs/cargo@v1
- with:
- command: clean
- args: --manifest-path ./rust/Cargo.toml --doc
-
- - name: Build Rust docs
- uses: actions-rs/cargo@v1
- with:
- command: doc
- args: --manifest-path ./rust/Cargo.toml --workspace --all-features --no-deps
-
- - name: Move Rust docs
- run: mkdir -p docs && mv rust/target/doc/* docs/.
- shell: bash
-
- - name: Configure root page
- run: echo '' > docs/index.html
-
- - name: Deploy docs
- uses: peaceiris/actions-gh-pages@v3
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: ./docs
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
deleted file mode 100644
index 762671ff..00000000
--- a/.github/workflows/release.yaml
+++ /dev/null
@@ -1,214 +0,0 @@
-name: Release
-on:
- push:
- branches:
- - main
-
-jobs:
- check_if_wasm_version_upgraded:
- name: Check if WASM version has been upgraded
- runs-on: ubuntu-latest
- outputs:
- wasm_version: ${{ steps.version-updated.outputs.current-package-version }}
- wasm_has_updated: ${{ steps.version-updated.outputs.has-updated }}
- steps:
- - uses: JiPaix/package-json-updated-action@v1.0.5
- id: version-updated
- with:
- path: rust/automerge-wasm/package.json
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- publish-wasm:
- name: Publish WASM package
- runs-on: ubuntu-latest
- needs:
- - check_if_wasm_version_upgraded
- # We create release only if the version in the package.json has been upgraded
- if: needs.check_if_wasm_version_upgraded.outputs.wasm_has_updated == 'true'
- steps:
- - uses: actions/setup-node@v3
- with:
- node-version: '16.x'
- registry-url: 'https://registry.npmjs.org'
- - uses: denoland/setup-deno@v1
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- ref: ${{ github.ref }}
- - name: Get rid of local github workflows
- run: rm -r .github/workflows
- - name: Remove tmp_branch if it exists
- run: git push origin :tmp_branch || true
- - run: git checkout -b tmp_branch
- - name: Install wasm-bindgen-cli
- run: cargo install wasm-bindgen-cli wasm-opt
- - name: Install wasm32 target
- run: rustup target add wasm32-unknown-unknown
- - name: run wasm js tests
- id: wasm_js_tests
- run: ./scripts/ci/wasm_tests
- - name: run wasm deno tests
- id: wasm_deno_tests
- run: ./scripts/ci/deno_tests
- - name: build release
- id: build_release
- run: |
- npm --prefix $GITHUB_WORKSPACE/rust/automerge-wasm run release
- - name: Collate deno release files
- if: steps.wasm_js_tests.outcome == 'success' && steps.wasm_deno_tests.outcome == 'success'
- run: |
- mkdir $GITHUB_WORKSPACE/deno_wasm_dist
- cp $GITHUB_WORKSPACE/rust/automerge-wasm/deno/* $GITHUB_WORKSPACE/deno_wasm_dist
- cp $GITHUB_WORKSPACE/rust/automerge-wasm/index.d.ts $GITHUB_WORKSPACE/deno_wasm_dist
- cp $GITHUB_WORKSPACE/rust/automerge-wasm/README.md $GITHUB_WORKSPACE/deno_wasm_dist
- cp $GITHUB_WORKSPACE/rust/automerge-wasm/LICENSE $GITHUB_WORKSPACE/deno_wasm_dist
- sed -i '1i /// ' $GITHUB_WORKSPACE/deno_wasm_dist/automerge_wasm.js
- - name: Create npm release
- if: steps.wasm_js_tests.outcome == 'success' && steps.wasm_deno_tests.outcome == 'success'
- run: |
- if [ "$(npm --prefix $GITHUB_WORKSPACE/rust/automerge-wasm show . version)" = "$VERSION" ]; then
- echo "This version is already published"
- exit 0
- fi
- EXTRA_ARGS="--access public"
- if [[ $VERSION == *"alpha."* ]] || [[ $VERSION == *"beta."* ]] || [[ $VERSION == *"rc."* ]]; then
- echo "Is pre-release version"
- EXTRA_ARGS="$EXTRA_ARGS --tag next"
- fi
- if [ "$NODE_AUTH_TOKEN" = "" ]; then
- echo "Can't publish on NPM, You need a NPM_TOKEN secret."
- false
- fi
- npm publish $GITHUB_WORKSPACE/rust/automerge-wasm $EXTRA_ARGS
- env:
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- VERSION: ${{ needs.check_if_wasm_version_upgraded.outputs.wasm_version }}
- - name: Commit wasm deno release files
- run: |
- git config --global user.name "actions"
- git config --global user.email actions@github.com
- git add $GITHUB_WORKSPACE/deno_wasm_dist
- git commit -am "Add deno release files"
- git push origin tmp_branch
- - name: Tag wasm release
- if: steps.wasm_js_tests.outcome == 'success' && steps.wasm_deno_tests.outcome == 'success'
- uses: softprops/action-gh-release@v1
- with:
- name: Automerge Wasm v${{ needs.check_if_wasm_version_upgraded.outputs.wasm_version }}
- tag_name: js/automerge-wasm-${{ needs.check_if_wasm_version_upgraded.outputs.wasm_version }}
- target_commitish: tmp_branch
- generate_release_notes: false
- draft: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Remove tmp_branch
- run: git push origin :tmp_branch
- check_if_js_version_upgraded:
- name: Check if JS version has been upgraded
- runs-on: ubuntu-latest
- outputs:
- js_version: ${{ steps.version-updated.outputs.current-package-version }}
- js_has_updated: ${{ steps.version-updated.outputs.has-updated }}
- steps:
- - uses: JiPaix/package-json-updated-action@v1.0.5
- id: version-updated
- with:
- path: javascript/package.json
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- publish-js:
- name: Publish JS package
- runs-on: ubuntu-latest
- needs:
- - check_if_js_version_upgraded
- - check_if_wasm_version_upgraded
- - publish-wasm
- # We create release only if the version in the package.json has been upgraded and after the WASM release
- if: |
- (always() && ! cancelled()) &&
- (needs.publish-wasm.result == 'success' || needs.publish-wasm.result == 'skipped') &&
- needs.check_if_js_version_upgraded.outputs.js_has_updated == 'true'
- steps:
- - uses: actions/setup-node@v3
- with:
- node-version: '16.x'
- registry-url: 'https://registry.npmjs.org'
- - uses: denoland/setup-deno@v1
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
- ref: ${{ github.ref }}
- - name: Get rid of local github workflows
- run: rm -r .github/workflows
- - name: Remove js_tmp_branch if it exists
- run: git push origin :js_tmp_branch || true
- - run: git checkout -b js_tmp_branch
- - name: check js formatting
- run: |
- yarn global add prettier
- prettier -c javascript/.prettierrc javascript
- - name: run js tests
- id: js_tests
- run: |
- cargo install wasm-bindgen-cli wasm-opt
- rustup target add wasm32-unknown-unknown
- ./scripts/ci/js_tests
- - name: build js release
- id: build_release
- run: |
- npm --prefix $GITHUB_WORKSPACE/javascript run build
- - name: build js deno release
- id: build_deno_release
- run: |
- VERSION=$WASM_VERSION npm --prefix $GITHUB_WORKSPACE/javascript run deno:build
- env:
- WASM_VERSION: ${{ needs.check_if_wasm_version_upgraded.outputs.wasm_version }}
- - name: run deno tests
- id: deno_tests
- run: |
- npm --prefix $GITHUB_WORKSPACE/javascript run deno:test
- - name: Collate deno release files
- if: steps.js_tests.outcome == 'success' && steps.deno_tests.outcome == 'success'
- run: |
- mkdir $GITHUB_WORKSPACE/deno_js_dist
- cp $GITHUB_WORKSPACE/javascript/deno_dist/* $GITHUB_WORKSPACE/deno_js_dist
- - name: Create npm release
- if: steps.js_tests.outcome == 'success' && steps.deno_tests.outcome == 'success'
- run: |
- if [ "$(npm --prefix $GITHUB_WORKSPACE/javascript show . version)" = "$VERSION" ]; then
- echo "This version is already published"
- exit 0
- fi
- EXTRA_ARGS="--access public"
- if [[ $VERSION == *"alpha."* ]] || [[ $VERSION == *"beta."* ]] || [[ $VERSION == *"rc."* ]]; then
- echo "Is pre-release version"
- EXTRA_ARGS="$EXTRA_ARGS --tag next"
- fi
- if [ "$NODE_AUTH_TOKEN" = "" ]; then
- echo "Can't publish on NPM, You need a NPM_TOKEN secret."
- false
- fi
- npm publish $GITHUB_WORKSPACE/javascript $EXTRA_ARGS
- env:
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
- VERSION: ${{ needs.check_if_js_version_upgraded.outputs.js_version }}
- - name: Commit js deno release files
- run: |
- git config --global user.name "actions"
- git config --global user.email actions@github.com
- git add $GITHUB_WORKSPACE/deno_js_dist
- git commit -am "Add deno js release files"
- git push origin js_tmp_branch
- - name: Tag JS release
- if: steps.js_tests.outcome == 'success' && steps.deno_tests.outcome == 'success'
- uses: softprops/action-gh-release@v1
- with:
- name: Automerge v${{ needs.check_if_js_version_upgraded.outputs.js_version }}
- tag_name: js/automerge-${{ needs.check_if_js_version_upgraded.outputs.js_version }}
- target_commitish: js_tmp_branch
- generate_release_notes: false
- draft: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Remove js_tmp_branch
- run: git push origin :js_tmp_branch
diff --git a/.gitignore b/.gitignore
index f77865d0..d5e150a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,8 @@
-/.direnv
-perf.*
-/Cargo.lock
-build/
-.vim/*
/target
+**/*.rs.bk
+Cargo.lock
+libtest.rmeta
+
+.direnv/
+result
+result-lib
diff --git a/.rustfmt.toml b/.rustfmt.toml
new file mode 100644
index 00000000..44b6aab5
--- /dev/null
+++ b/.rustfmt.toml
@@ -0,0 +1,2 @@
+group_imports = "StdExternalCrate"
+imports_granularity = "Crate"
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..7fd26c8a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,74 @@
+os: linux
+dist: xenial
+language: rust
+
+if: branch = main
+
+install:
+- rustup self update
+- rustup component add clippy
+- rustup component add rustfmt
+- curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
+- nvm install 12
+
+jobs:
+ allow_failures:
+ - rust: nightly
+ fast_finish: true
+ include:
+ - name: Stable - Format, Clippy and Docs
+ rust: stable
+ script:
+ - cargo fmt --all -- --check
+ - cargo clippy --all-targets --all-features -- -D warnings
+ - cargo doc --workspace --all-features
+ - name: Stable - Build and Test
+ rust: stable
+ script:
+ - cargo build --all-targets --workspace
+ - cargo test --workspace
+ - name: Stable - Wasm and Interop
+ rust: stable
+ script:
+ - wasm-pack test automerge-frontend --node
+ - cd automerge-backend-wasm
+ - yarn dev
+ - yarn test:js
+
+ - name: Beta - Format, Clippy and Docs
+ rust: beta
+ script:
+ - cargo fmt --all -- --check
+ - cargo clippy --all-targets --all-features -- -D warnings
+ - cargo doc --workspace --all-features
+ - name: Beta - Build and Test
+ rust: beta
+ script:
+ - cargo build --all-targets --workspace
+ - cargo test --workspace
+ - name: Beta - Wasm and Interop
+ rust: beta
+ script:
+ - wasm-pack test automerge-frontend --node
+ - cd automerge-backend-wasm
+ - yarn dev
+ - yarn test:js
+
+ - name: Nightly - Format, Clippy and Docs
+ rust: nightly
+ script:
+ - cargo fmt --all -- --check
+ - cargo clippy --all-targets --all-features -- -D warnings
+ - cargo doc --workspace --all-features
+ - name: Nightly - Build and Test
+ rust: nightly
+ script:
+ - cargo build --all-targets --workspace
+ - cargo test --workspace
+ - name: Nightly - Wasm and Interop
+ rust: nightly
+ script:
+ - wasm-pack test automerge-frontend --node
+ - cd automerge-backend-wasm
+ - yarn dev
+ - yarn test:js
diff --git a/Cargo.nix b/Cargo.nix
new file mode 100644
index 00000000..7cd85208
--- /dev/null
+++ b/Cargo.nix
@@ -0,0 +1,6844 @@
+
+# This file was @generated by crate2nix 0.9.0 with the command:
+# "generate"
+# See https://github.com/kolloch/crate2nix for more info.
+
+{ nixpkgs ?
+, pkgs ? import nixpkgs { config = {}; }
+, lib ? pkgs.lib
+, stdenv ? pkgs.stdenv
+, buildRustCrateForPkgs ? if buildRustCrate != null
+ then lib.warn "`buildRustCrate` is deprecated, use `buildRustCrateForPkgs` instead" (_: buildRustCrate)
+ else pkgs: pkgs.buildRustCrate
+ # Deprecated
+, buildRustCrate ? null
+ # This is used as the `crateOverrides` argument for `buildRustCrate`.
+, defaultCrateOverrides ? pkgs.defaultCrateOverrides
+ # The features to enable for the root_crate or the workspace_members.
+, rootFeatures ? [ "default" ]
+ # If true, throw errors instead of issueing deprecation warnings.
+, strictDeprecation ? false
+ # Used for conditional compilation based on CPU feature detection.
+, targetFeatures ? []
+ # Whether to perform release builds: longer compile times, faster binaries.
+, release ? true
+ # Additional crate2nix configuration if it exists.
+, crateConfig
+ ? if builtins.pathExists ./crate-config.nix
+ then pkgs.callPackage ./crate-config.nix {}
+ else {}
+}:
+
+rec {
+ #
+ # "public" attributes that we attempt to keep stable with new versions of crate2nix.
+ #
+
+
+ # Refer your crate build derivation by name here.
+ # You can override the features with
+ # workspaceMembers."${crateName}".build.override { features = [ "default" "feature1" ... ]; }.
+ workspaceMembers = {
+ "automerge" = rec {
+ packageId = "automerge";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-backend" = rec {
+ packageId = "automerge-backend";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-backend";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-backend-wasm" = rec {
+ packageId = "automerge-backend-wasm";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-backend-wasm";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-c" = rec {
+ packageId = "automerge-c";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-c";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-c-v2" = rec {
+ packageId = "automerge-c-v2";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-c-v2";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-cli" = rec {
+ packageId = "automerge-cli";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-cli";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-frontend" = rec {
+ packageId = "automerge-frontend";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-frontend";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-fuzz" = rec {
+ packageId = "automerge-fuzz";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-fuzz";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "automerge-protocol" = rec {
+ packageId = "automerge-protocol";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "automerge-protocol";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ "perf" = rec {
+ packageId = "perf";
+ build = internal.buildRustCrateWithFeatures {
+ packageId = "perf";
+ };
+
+ # Debug support which might change between releases.
+ # File a bug if you depend on any for non-debug work!
+ debug = internal.debugCrate { inherit packageId; };
+ };
+ };
+
+ # A derivation that joins the outputs of all workspace members together.
+ allWorkspaceMembers = pkgs.symlinkJoin {
+ name = "all-workspace-members";
+ paths =
+ let members = builtins.attrValues workspaceMembers;
+ in builtins.map (m: m.build) members;
+ };
+
+ #
+ # "internal" ("private") attributes that may change in every new version of crate2nix.
+ #
+
+ internal = rec {
+ # Build and dependency information for crates.
+ # Many of the fields are passed one-to-one to buildRustCrate.
+ #
+ # Noteworthy:
+ # * `dependencies`/`buildDependencies`: similar to the corresponding fields for buildRustCrate.
+ # but with additional information which is used during dependency/feature resolution.
+ # * `resolvedDependencies`: the selected default features reported by cargo - only included for debugging.
+ # * `devDependencies` as of now not used by `buildRustCrate` but used to
+ # inject test dependencies into the build
+
+ crates = {
+ "adler" = rec {
+ crateName = "adler";
+ version = "1.0.2";
+ edition = "2015";
+ sha256 = "1zim79cvzd5yrkzl3nyfx0avijwgk9fqv3yrscdy1cc79ih02qpj";
+ authors = [
+ "Jonas Schievink "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "rustc-dep-of-std" = [ "core" "compiler_builtins" ];
+ };
+ };
+ "aho-corasick" = rec {
+ crateName = "aho-corasick";
+ version = "0.7.18";
+ edition = "2018";
+ sha256 = "0vv50b3nvkhyy7x7ip19qnsq11bqlnffkmj2yx2xlyk5wzawydqy";
+ libName = "aho_corasick";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "memchr";
+ packageId = "memchr";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "memchr/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "ansi_term 0.11.0" = rec {
+ crateName = "ansi_term";
+ version = "0.11.0";
+ edition = "2015";
+ sha256 = "16wpvrghvd0353584i1idnsgm0r3vchg8fyrm0x8ayv1rgvbljgf";
+ authors = [
+ "ogham@bsago.me"
+ "Ryan Scheel (Havvy) "
+ "Josh Triplett "
+ ];
+ dependencies = [
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."os" == "windows");
+ features = [ "errhandlingapi" "consoleapi" "processenv" ];
+ }
+ ];
+
+ };
+ "ansi_term 0.12.1" = rec {
+ crateName = "ansi_term";
+ version = "0.12.1";
+ edition = "2015";
+ sha256 = "1ljmkbilxgmhavxvxqa7qvm6f3fjggi7q2l3a72q9x0cxjvrnanm";
+ authors = [
+ "ogham@bsago.me"
+ "Ryan Scheel (Havvy) "
+ "Josh Triplett "
+ ];
+ dependencies = [
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."os" == "windows");
+ features = [ "consoleapi" "errhandlingapi" "fileapi" "handleapi" "processenv" ];
+ }
+ ];
+ features = {
+ "derive_serde_style" = [ "serde" ];
+ };
+ };
+ "anyhow" = rec {
+ crateName = "anyhow";
+ version = "1.0.41";
+ edition = "2018";
+ sha256 = "0qaa0vgsa7ybq7wqk57508l52l1lr3sbx49vk9hf43w9yql2dbqm";
+ authors = [
+ "David Tolnay "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "arbitrary" = rec {
+ crateName = "arbitrary";
+ version = "1.0.1";
+ edition = "2018";
+ sha256 = "14a6r7q9b1kf1m7810p8bcl51q11mrwc5z7fjkz0lx6kdvyk0x13";
+ authors = [
+ "The Rust-Fuzz Project Developers"
+ "Nick Fitzgerald "
+ "Manish Goregaokar "
+ "Simonas Kazlauskas "
+ "Brian L. Troutwine "
+ "Corey Farwell "
+ ];
+ dependencies = [
+ {
+ name = "derive_arbitrary";
+ packageId = "derive_arbitrary";
+ optional = true;
+ }
+ ];
+ features = {
+ "derive" = [ "derive_arbitrary" ];
+ };
+ resolvedDefaultFeatures = [ "derive" "derive_arbitrary" ];
+ };
+ "atty" = rec {
+ crateName = "atty";
+ version = "0.2.14";
+ edition = "2015";
+ sha256 = "1s7yslcs6a28c5vz7jwj63lkfgyx8mx99fdirlhi9lbhhzhrpcyr";
+ authors = [
+ "softprops "
+ ];
+ dependencies = [
+ {
+ name = "hermit-abi";
+ packageId = "hermit-abi";
+ target = { target, features }: (target."os" == "hermit");
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ usesDefaultFeatures = false;
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "consoleapi" "processenv" "minwinbase" "minwindef" "winbase" ];
+ }
+ ];
+
+ };
+ "autocfg" = rec {
+ crateName = "autocfg";
+ version = "1.0.1";
+ edition = "2015";
+ sha256 = "0jj6i9zn4gjl03kjvziqdji6rwx8ykz8zk2ngpc331z2g3fk3c6d";
+ authors = [
+ "Josh Stone "
+ ];
+
+ };
+ "automerge" = rec {
+ crateName = "automerge";
+ version = "0.0.2";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge; };
+ authors = [
+ "Alex Good "
+ ];
+ dependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "automerge-frontend";
+ packageId = "automerge-frontend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "uuid";
+ packageId = "uuid";
+ features = [ "v4" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "criterion";
+ packageId = "criterion";
+ }
+ {
+ name = "env_logger";
+ packageId = "env_logger";
+ }
+ {
+ name = "hex";
+ packageId = "hex";
+ }
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "pretty_assertions";
+ packageId = "pretty_assertions";
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.8.4";
+ }
+ {
+ name = "smol_str";
+ packageId = "smol_str";
+ }
+ {
+ name = "test-env-log";
+ packageId = "test-env-log";
+ usesDefaultFeatures = false;
+ features = [ "trace" ];
+ }
+ {
+ name = "tracing";
+ packageId = "tracing";
+ }
+ {
+ name = "tracing-subscriber";
+ packageId = "tracing-subscriber";
+ features = [ "chrono" "env-filter" "fmt" ];
+ }
+ {
+ name = "unicode-segmentation";
+ packageId = "unicode-segmentation";
+ }
+ ];
+
+ };
+ "automerge-backend" = rec {
+ crateName = "automerge-backend";
+ version = "0.0.1";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-backend; };
+ authors = [
+ "Alex Good "
+ ];
+ dependencies = [
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "flate2";
+ packageId = "flate2";
+ }
+ {
+ name = "fxhash";
+ packageId = "fxhash";
+ }
+ {
+ name = "hex";
+ packageId = "hex";
+ }
+ {
+ name = "itertools";
+ packageId = "itertools 0.9.0";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "leb128";
+ packageId = "leb128";
+ }
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "nonzero_ext";
+ packageId = "nonzero_ext";
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.7.3";
+ features = [ "small_rng" ];
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "sha2";
+ packageId = "sha2";
+ }
+ {
+ name = "smol_str";
+ packageId = "smol_str";
+ }
+ {
+ name = "thiserror";
+ packageId = "thiserror";
+ }
+ {
+ name = "tracing";
+ packageId = "tracing";
+ features = [ "log" ];
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ {
+ name = "web-sys";
+ packageId = "web-sys";
+ features = [ "console" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "env_logger";
+ packageId = "env_logger";
+ }
+ {
+ name = "pretty_assertions";
+ packageId = "pretty_assertions";
+ }
+ {
+ name = "test-env-log";
+ packageId = "test-env-log";
+ }
+ {
+ name = "tracing-subscriber";
+ packageId = "tracing-subscriber";
+ features = [ "chrono" "env-filter" "fmt" ];
+ }
+ ];
+
+ };
+ "automerge-backend-wasm" = rec {
+ crateName = "automerge-backend-wasm";
+ version = "0.1.0";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-backend-wasm; };type = [ "cdylib" "rlib" ];
+ authors = [
+ "Alex Good "
+ "Orion Henry "
+ "Martin Kleppmann"
+ ];
+ dependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "console_error_panic_hook";
+ packageId = "console_error_panic_hook";
+ optional = true;
+ }
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.2.3";
+ features = [ "js" ];
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde-wasm-bindgen";
+ packageId = "serde-wasm-bindgen";
+ }
+ {
+ name = "serde_bytes";
+ packageId = "serde_bytes";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "uuid";
+ packageId = "uuid";
+ features = [ "v4" "wasm-bindgen" "serde" ];
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ features = [ "serde-serialize" ];
+ }
+ {
+ name = "web-sys";
+ packageId = "web-sys";
+ features = [ "console" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "futures";
+ packageId = "futures 0.1.31";
+ }
+ {
+ name = "wasm-bindgen-futures";
+ packageId = "wasm-bindgen-futures 0.3.27";
+ }
+ {
+ name = "wasm-bindgen-test";
+ packageId = "wasm-bindgen-test";
+ }
+ ];
+ features = {
+ "default" = [ "console_error_panic_hook" ];
+ };
+ resolvedDefaultFeatures = [ "console_error_panic_hook" "default" ];
+ };
+ "automerge-c" = rec {
+ crateName = "automerge-c";
+ version = "0.1.0";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-c; };type = [ "cdylib" "staticlib" ];
+ authors = [
+ "Orion Henry "
+ ];
+ dependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "errno";
+ packageId = "errno";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "cbindgen";
+ packageId = "cbindgen";
+ }
+ ];
+
+ };
+ "automerge-c-v2" = rec {
+ crateName = "automerge-c-v2";
+ version = "0.1.0";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-c-v2; };type = [ "cdylib" "staticlib" ];
+ authors = [
+ "Orion Henry "
+ ];
+ dependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "errno";
+ packageId = "errno";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ }
+ {
+ name = "rmp";
+ packageId = "rmp";
+ }
+ {
+ name = "rmp-serde";
+ packageId = "rmp-serde";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "thiserror";
+ packageId = "thiserror";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "cbindgen";
+ packageId = "cbindgen";
+ }
+ ];
+
+ };
+ "automerge-cli" = rec {
+ crateName = "automerge-cli";
+ version = "0.1.0";
+ edition = "2018";
+ crateBin = [
+ { name = "automerge"; path = "src/main.rs"; }
+ ];
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-cli; };
+ authors = [
+ "Alex Good "
+ ];
+ dependencies = [
+ {
+ name = "anyhow";
+ packageId = "anyhow";
+ }
+ {
+ name = "atty";
+ packageId = "atty";
+ }
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "automerge-frontend";
+ packageId = "automerge-frontend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "clap";
+ packageId = "clap 3.0.0-beta.2";
+ }
+ {
+ name = "colored_json";
+ packageId = "colored_json";
+ }
+ {
+ name = "combine";
+ packageId = "combine";
+ }
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "thiserror";
+ packageId = "thiserror";
+ }
+ ];
+ devDependencies = [
+ {
+ name = "duct";
+ packageId = "duct";
+ }
+ ];
+
+ };
+ "automerge-frontend" = rec {
+ crateName = "automerge-frontend";
+ version = "0.1.0";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-frontend; };
+ authors = [
+ "Alex Good "
+ ];
+ dependencies = [
+ {
+ name = "arbitrary";
+ packageId = "arbitrary";
+ optional = true;
+ features = [ "derive" ];
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "futures";
+ packageId = "futures 0.3.15";
+ }
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.2.3";
+ target = { target, features }: ((target."arch" == "wasm32") && (target."os" == "unknown"));
+ features = [ "js" ];
+ }
+ {
+ name = "im-rc";
+ packageId = "im-rc";
+ }
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "smol_str";
+ packageId = "smol_str";
+ }
+ {
+ name = "thiserror";
+ packageId = "thiserror";
+ }
+ {
+ name = "unicode-segmentation";
+ packageId = "unicode-segmentation";
+ }
+ {
+ name = "uuid";
+ packageId = "uuid";
+ features = [ "v4" ];
+ }
+ {
+ name = "uuid";
+ packageId = "uuid";
+ target = { target, features }: ((target."arch" == "wasm32") && (target."os" == "unknown"));
+ features = [ "wasm-bindgen" "v4" "serde" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "criterion";
+ packageId = "criterion";
+ }
+ {
+ name = "env_logger";
+ packageId = "env_logger";
+ }
+ {
+ name = "log";
+ packageId = "log";
+ }
+ {
+ name = "pretty_assertions";
+ packageId = "pretty_assertions";
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.8.4";
+ }
+ {
+ name = "wasm-bindgen-test";
+ packageId = "wasm-bindgen-test";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "derive-arbitrary" = [ "arbitrary" "smol_str/arbitrary" ];
+ };
+ resolvedDefaultFeatures = [ "arbitrary" "default" "derive-arbitrary" "std" ];
+ };
+ "automerge-fuzz" = rec {
+ crateName = "automerge-fuzz";
+ version = "0.0.0";
+ edition = "2018";
+ crateBin = [
+ { name = "backend_load"; path = "src/backend_load.rs"; }
+ ];
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./fuzz; };
+ authors = [
+ "Automatically generated"
+ ];
+ dependencies = [
+ {
+ name = "automerge-backend";
+ packageId = "automerge-backend";
+ }
+ {
+ name = "libfuzzer-sys";
+ packageId = "libfuzzer-sys";
+ }
+ ];
+
+ };
+ "automerge-protocol" = rec {
+ crateName = "automerge-protocol";
+ version = "0.1.0";
+ edition = "2018";
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./automerge-protocol; };
+ authors = [
+ "Alex Good "
+ ];
+ dependencies = [
+ {
+ name = "arbitrary";
+ packageId = "arbitrary";
+ optional = true;
+ features = [ "derive" ];
+ }
+ {
+ name = "hex";
+ packageId = "hex";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ {
+ name = "smol_str";
+ packageId = "smol_str";
+ features = [ "serde" ];
+ }
+ {
+ name = "strum";
+ packageId = "strum";
+ features = [ "derive" ];
+ }
+ {
+ name = "thiserror";
+ packageId = "thiserror";
+ }
+ {
+ name = "uuid";
+ packageId = "uuid";
+ features = [ "v4" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "proptest";
+ packageId = "proptest";
+ }
+ {
+ name = "rmp";
+ packageId = "rmp";
+ }
+ {
+ name = "rmp-serde";
+ packageId = "rmp-serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ features = [ "float_roundtrip" ];
+ }
+ ];
+ features = {
+ "derive-arbitrary" = [ "arbitrary" ];
+ };
+ resolvedDefaultFeatures = [ "arbitrary" "derive-arbitrary" ];
+ };
+ "bit-set" = rec {
+ crateName = "bit-set";
+ version = "0.5.2";
+ edition = "2015";
+ sha256 = "1pjrmpsnad5ipwjsv8ppi0qrhqvgpyn3wfbvk7jy8dga6mhf24bf";
+ authors = [
+ "Alexis Beingessner "
+ ];
+ dependencies = [
+ {
+ name = "bit-vec";
+ packageId = "bit-vec";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "bit-vec/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "bit-vec" = rec {
+ crateName = "bit-vec";
+ version = "0.6.3";
+ edition = "2015";
+ sha256 = "1ywqjnv60cdh1slhz67psnp422md6jdliji6alq0gmly2xm9p7rl";
+ authors = [
+ "Alexis Beingessner "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "serde_no_std" = [ "serde/alloc" ];
+ "serde_std" = [ "std" "serde/std" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "bitflags" = rec {
+ crateName = "bitflags";
+ version = "1.2.1";
+ edition = "2015";
+ sha256 = "14qnd5nq8p2almk79m4m8ydqhd413yaxsyjp5xd19g3mikzf47fg";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "bitmaps" = rec {
+ crateName = "bitmaps";
+ version = "2.1.0";
+ edition = "2018";
+ sha256 = "18k4mcwxl96yvii5kcljkpb8pg5j4jj1zbsdn26nsx4r83846403";
+ authors = [
+ "Bodil Stokke "
+ ];
+ dependencies = [
+ {
+ name = "typenum";
+ packageId = "typenum";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "block-buffer" = rec {
+ crateName = "block-buffer";
+ version = "0.7.3";
+ edition = "2015";
+ sha256 = "12v8wizynqin0hqf140kmp9s38q223mp1b0hkqk8j5pk8720v560";
+ authors = [
+ "RustCrypto Developers"
+ ];
+ dependencies = [
+ {
+ name = "block-padding";
+ packageId = "block-padding";
+ }
+ {
+ name = "byte-tools";
+ packageId = "byte-tools";
+ }
+ {
+ name = "byteorder";
+ packageId = "byteorder";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "generic-array";
+ packageId = "generic-array";
+ }
+ ];
+
+ };
+ "block-padding" = rec {
+ crateName = "block-padding";
+ version = "0.1.5";
+ edition = "2015";
+ sha256 = "1xbkmysiz23vimd17rnsjpw9bgjxipwfslwyygqlkx4in3dxwygs";
+ authors = [
+ "RustCrypto Developers"
+ ];
+ dependencies = [
+ {
+ name = "byte-tools";
+ packageId = "byte-tools";
+ }
+ ];
+
+ };
+ "bstr" = rec {
+ crateName = "bstr";
+ version = "0.2.16";
+ edition = "2018";
+ sha256 = "0y8jy9kcqn1myzxjx7c73rbv4amfw08n936ycqz3glrsc66jqs4h";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ {
+ name = "memchr";
+ packageId = "memchr";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "regex-automata";
+ packageId = "regex-automata";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" "unicode" ];
+ "serde1" = [ "std" "serde1-nostd" "serde/std" ];
+ "serde1-nostd" = [ "serde" ];
+ "std" = [ "memchr/std" ];
+ "unicode" = [ "lazy_static" "regex-automata" ];
+ };
+ resolvedDefaultFeatures = [ "default" "lazy_static" "regex-automata" "serde" "serde1" "serde1-nostd" "std" "unicode" ];
+ };
+ "bumpalo" = rec {
+ crateName = "bumpalo";
+ version = "3.7.0";
+ edition = "2018";
+ sha256 = "0ccn025n0x1gc0ijjlabin2xs7dkx5yfagkskr93yw9c06pyfncw";
+ authors = [
+ "Nick Fitzgerald "
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "byte-tools" = rec {
+ crateName = "byte-tools";
+ version = "0.3.1";
+ edition = "2015";
+ sha256 = "1mqi29wsm8njpl51pfwr31wmpzs5ahlcb40wsjyd92l90ixcmdg3";
+ authors = [
+ "RustCrypto Developers"
+ ];
+
+ };
+ "byteorder" = rec {
+ crateName = "byteorder";
+ version = "1.4.3";
+ edition = "2018";
+ sha256 = "0456lv9xi1a5bcm32arknf33ikv76p3fr9yzki4lb2897p2qkh8l";
+ authors = [
+ "Andrew Gallant "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "bytes" = rec {
+ crateName = "bytes";
+ version = "1.0.1";
+ edition = "2018";
+ sha256 = "0h6h1c8g3yj2b4k8g25gr3246mq985y0kl3z685cs784fr1ww05p";
+ authors = [
+ "Carl Lerche "
+ "Sean McArthur "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "cast" = rec {
+ crateName = "cast";
+ version = "0.2.6";
+ edition = "2018";
+ sha256 = "0x2khql6m1d970ps8b6qb6yjb6gplw0n3ayw8i6wpmmaa1fzmkap";
+ authors = [
+ "Jorge Aparicio "
+ ];
+ buildDependencies = [
+ {
+ name = "rustc_version";
+ packageId = "rustc_version";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "cbindgen" = rec {
+ crateName = "cbindgen";
+ version = "0.14.3";
+ edition = "2018";
+ crateBin = [];
+ sha256 = "0n88s072g09sfnvsbbkfw0mgga15isj09wc6ak63brzjbmq3mq76";
+ authors = [
+ "Jeff Muizelaar "
+ "Kartikaya Gupta "
+ "Ryan Hunt "
+ ];
+ dependencies = [
+ {
+ name = "clap";
+ packageId = "clap 2.33.3";
+ optional = true;
+ }
+ {
+ name = "heck";
+ packageId = "heck";
+ }
+ {
+ name = "log";
+ packageId = "log";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ usesDefaultFeatures = false;
+ features = [ "derive" ];
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ usesDefaultFeatures = false;
+ features = [ "clone-impls" "extra-traits" "full" "parsing" "printing" ];
+ }
+ {
+ name = "tempfile";
+ packageId = "tempfile";
+ }
+ {
+ name = "toml";
+ packageId = "toml";
+ }
+ ];
+ features = {
+ "default" = [ "clap" ];
+ };
+ resolvedDefaultFeatures = [ "clap" "default" ];
+ };
+ "cc" = rec {
+ crateName = "cc";
+ version = "1.0.68";
+ edition = "2018";
+ crateBin = [];
+ sha256 = "11ypa8b7iwhjf5fg5j3hvbn2116h9g8v67vyd9s7ljgzq52c4wja";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "parallel" = [ "jobserver" ];
+ };
+ };
+ "cfg-if 0.1.10" = rec {
+ crateName = "cfg-if";
+ version = "0.1.10";
+ edition = "2018";
+ sha256 = "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "core" "compiler_builtins" ];
+ };
+ };
+ "cfg-if 1.0.0" = rec {
+ crateName = "cfg-if";
+ version = "1.0.0";
+ edition = "2018";
+ sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "core" "compiler_builtins" ];
+ };
+ };
+ "chrono" = rec {
+ crateName = "chrono";
+ version = "0.4.19";
+ edition = "2015";
+ sha256 = "0wyfl6c00vhfl562spnfcna3zkw8jqvcp652m9iskhl8j26dc2k7";
+ authors = [
+ "Kang Seonghoon "
+ "Brandon W Maister "
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ optional = true;
+ }
+ {
+ name = "num-integer";
+ packageId = "num-integer";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ optional = true;
+ target = { target, features }: (target."windows" or false);
+ features = [ "std" "minwinbase" "minwindef" "timezoneapi" ];
+ }
+ ];
+ features = {
+ "clock" = [ "libc" "std" "winapi" ];
+ "default" = [ "clock" "std" "oldtime" ];
+ "oldtime" = [ "time" ];
+ "unstable-locales" = [ "pure-rust-locales" "alloc" ];
+ "wasmbind" = [ "wasm-bindgen" "js-sys" ];
+ };
+ resolvedDefaultFeatures = [ "clock" "libc" "std" "winapi" ];
+ };
+ "clap 2.33.3" = rec {
+ crateName = "clap";
+ version = "2.33.3";
+ edition = "2015";
+ sha256 = "00i065a58987k1sbzqmlz721rw521zcg08jmsh40gi3khp3qmr9p";
+ authors = [
+ "Kevin K. "
+ ];
+ dependencies = [
+ {
+ name = "ansi_term";
+ packageId = "ansi_term 0.11.0";
+ optional = true;
+ target = { target, features }: (!(target."windows" or false));
+ }
+ {
+ name = "atty";
+ packageId = "atty";
+ optional = true;
+ }
+ {
+ name = "bitflags";
+ packageId = "bitflags";
+ }
+ {
+ name = "strsim";
+ packageId = "strsim 0.8.0";
+ optional = true;
+ }
+ {
+ name = "textwrap";
+ packageId = "textwrap 0.11.0";
+ }
+ {
+ name = "unicode-width";
+ packageId = "unicode-width";
+ }
+ {
+ name = "vec_map";
+ packageId = "vec_map";
+ optional = true;
+ }
+ ];
+ features = {
+ "color" = [ "ansi_term" "atty" ];
+ "default" = [ "suggestions" "color" "vec_map" ];
+ "doc" = [ "yaml" ];
+ "lints" = [ "clippy" ];
+ "suggestions" = [ "strsim" ];
+ "wrap_help" = [ "term_size" "textwrap/term_size" ];
+ "yaml" = [ "yaml-rust" ];
+ };
+ resolvedDefaultFeatures = [ "ansi_term" "atty" "color" "default" "strsim" "suggestions" "vec_map" ];
+ };
+ "clap 3.0.0-beta.2" = rec {
+ crateName = "clap";
+ version = "3.0.0-beta.2";
+ edition = "2018";
+ sha256 = "0hm1kivw6190rxbfqhdr4hqwlrijvwh90i3d9dyyw0d5k0chdlab";
+ authors = [
+ "Kevin K. "
+ "Clap Maintainers"
+ ];
+ dependencies = [
+ {
+ name = "atty";
+ packageId = "atty";
+ optional = true;
+ }
+ {
+ name = "bitflags";
+ packageId = "bitflags";
+ }
+ {
+ name = "clap_derive";
+ packageId = "clap_derive";
+ optional = true;
+ }
+ {
+ name = "indexmap";
+ packageId = "indexmap";
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ {
+ name = "os_str_bytes";
+ packageId = "os_str_bytes";
+ features = [ "raw" ];
+ }
+ {
+ name = "strsim";
+ packageId = "strsim 0.10.0";
+ optional = true;
+ }
+ {
+ name = "termcolor";
+ packageId = "termcolor";
+ optional = true;
+ }
+ {
+ name = "textwrap";
+ packageId = "textwrap 0.12.1";
+ }
+ {
+ name = "unicode-width";
+ packageId = "unicode-width";
+ }
+ {
+ name = "vec_map";
+ packageId = "vec_map";
+ }
+ ];
+ devDependencies = [
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ ];
+ features = {
+ "cargo" = [ "lazy_static" ];
+ "color" = [ "atty" "termcolor" ];
+ "debug" = [ "clap_derive/debug" ];
+ "default" = [ "suggestions" "color" "derive" "std" "cargo" ];
+ "derive" = [ "clap_derive" "lazy_static" ];
+ "doc" = [ "yaml" "regex" ];
+ "suggestions" = [ "strsim" ];
+ "unstable" = [ "clap_derive/unstable" ];
+ "wrap_help" = [ "terminal_size" "textwrap/terminal_size" ];
+ "yaml" = [ "yaml-rust" ];
+ };
+ resolvedDefaultFeatures = [ "atty" "cargo" "clap_derive" "color" "default" "derive" "lazy_static" "std" "strsim" "suggestions" "termcolor" ];
+ };
+ "clap_derive" = rec {
+ crateName = "clap_derive";
+ version = "3.0.0-beta.2";
+ edition = "2018";
+ sha256 = "18cn82jhcha7m0nkpi1a03jx8k7aaq5kxfcxnsqpaa8ih5dp23rp";
+ procMacro = true;
+ authors = [
+ "Guillaume Pinot "
+ "Clap Maintainers"
+ ];
+ dependencies = [
+ {
+ name = "heck";
+ packageId = "heck";
+ }
+ {
+ name = "proc-macro-error";
+ packageId = "proc-macro-error";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "full" ];
+ }
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "colored_json" = rec {
+ crateName = "colored_json";
+ version = "2.1.0";
+ edition = "2018";
+ sha256 = "0r0sfwhwmzmfd54cr373j8x88x9ch2ky6016ghxj0vh19nsjxlqz";
+ authors = [
+ "Jens Reimann "
+ "Harald Hoyer "
+ ];
+ dependencies = [
+ {
+ name = "ansi_term";
+ packageId = "ansi_term 0.12.1";
+ }
+ {
+ name = "atty";
+ packageId = "atty";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ ];
+
+ };
+ "combine" = rec {
+ crateName = "combine";
+ version = "4.6.0";
+ edition = "2018";
+ sha256 = "1ymj18i7r3qzm7ddvi0kcvhn1klrnqxk2fxmjbj8fsq024dprm52";
+ authors = [
+ "Markus Westerlind "
+ ];
+ dependencies = [
+ {
+ name = "bytes";
+ packageId = "bytes";
+ optional = true;
+ }
+ {
+ name = "memchr";
+ packageId = "memchr";
+ usesDefaultFeatures = false;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "bytes";
+ packageId = "bytes";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "futures-03" = [ "pin-project" "std" "futures-io-03" "futures-util-03" "pin-project-lite" ];
+ "pin-project" = [ "pin-project-lite" ];
+ "std" = [ "memchr/use_std" "bytes" ];
+ "tokio" = [ "tokio-dep" "futures-util-03" "pin-project-lite" ];
+ "tokio-02" = [ "pin-project" "std" "tokio-02-dep" "futures-util-03" "pin-project-lite" "bytes_05" ];
+ "tokio-03" = [ "pin-project" "std" "tokio-03-dep" "futures-util-03" "pin-project-lite" ];
+ };
+ resolvedDefaultFeatures = [ "bytes" "default" "std" ];
+ };
+ "console_error_panic_hook" = rec {
+ crateName = "console_error_panic_hook";
+ version = "0.1.6";
+ edition = "2015";
+ sha256 = "04d2narcrzk9bnddz17rr2l819l82pr0h6d98s2w9q236n87dndq";
+ authors = [
+ "Nick Fitzgerald "
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 0.1.10";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ ];
+
+ };
+ "crc32fast" = rec {
+ crateName = "crc32fast";
+ version = "1.2.1";
+ edition = "2015";
+ sha256 = "06ivjlkzcxxxk7nyshc44aql4zjpmvirq46vmzrakdjax3n6y5c1";
+ authors = [
+ "Sam Rijs "
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "criterion" = rec {
+ crateName = "criterion";
+ version = "0.3.4";
+ edition = "2018";
+ sha256 = "08rx789365x6l9kbsg2r9c5yg25rd3pj1giwyhpcqis56pbpwcmb";
+ authors = [
+ "Jorge Aparicio "
+ "Brook Heisler "
+ ];
+ dependencies = [
+ {
+ name = "atty";
+ packageId = "atty";
+ }
+ {
+ name = "cast";
+ packageId = "cast";
+ }
+ {
+ name = "clap";
+ packageId = "clap 2.33.3";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "criterion-plot";
+ packageId = "criterion-plot";
+ }
+ {
+ name = "csv";
+ packageId = "csv";
+ }
+ {
+ name = "itertools";
+ packageId = "itertools 0.10.1";
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "oorandom";
+ packageId = "oorandom";
+ }
+ {
+ name = "plotters";
+ packageId = "plotters";
+ usesDefaultFeatures = false;
+ features = [ "svg_backend" "area_series" "line_series" ];
+ }
+ {
+ name = "rayon";
+ packageId = "rayon";
+ }
+ {
+ name = "regex";
+ packageId = "regex";
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_cbor";
+ packageId = "serde_cbor";
+ }
+ {
+ name = "serde_derive";
+ packageId = "serde_derive";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "tinytemplate";
+ packageId = "tinytemplate";
+ }
+ {
+ name = "walkdir";
+ packageId = "walkdir";
+ }
+ ];
+ features = {
+ "async" = [ "futures" ];
+ "async_futures" = [ "futures/executor" "async" ];
+ "async_smol" = [ "smol" "async" ];
+ "async_std" = [ "async-std" "async" ];
+ "async_tokio" = [ "tokio" "async" ];
+ "default" = [ "cargo_bench_support" ];
+ };
+ resolvedDefaultFeatures = [ "cargo_bench_support" "default" ];
+ };
+ "criterion-plot" = rec {
+ crateName = "criterion-plot";
+ version = "0.4.3";
+ edition = "2018";
+ sha256 = "17c8v5fv064181yspagkdcfd6jhs7233ba6g94bbl7v0xjnzw8p0";
+ authors = [
+ "Jorge Aparicio "
+ "Brook Heisler "
+ ];
+ dependencies = [
+ {
+ name = "cast";
+ packageId = "cast";
+ }
+ {
+ name = "itertools";
+ packageId = "itertools 0.9.0";
+ }
+ ];
+
+ };
+ "crossbeam-channel" = rec {
+ crateName = "crossbeam-channel";
+ version = "0.5.1";
+ edition = "2018";
+ sha256 = "1d1dnp61g51gnmc45cb4vpjsr5n62wz22an2y3q6avgifzhjgv86";
+ authors = [
+ "The Crossbeam Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "crossbeam-utils";
+ packageId = "crossbeam-utils";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "crossbeam-utils/std" ];
+ };
+ resolvedDefaultFeatures = [ "crossbeam-utils" "default" "std" ];
+ };
+ "crossbeam-deque" = rec {
+ crateName = "crossbeam-deque";
+ version = "0.8.0";
+ edition = "2018";
+ sha256 = "1ad995vzq74k7jd1pgn9zxbacyzj9ii6l0svhlb2dxzy8vxnxbwl";
+ authors = [
+ "The Crossbeam Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "crossbeam-epoch";
+ packageId = "crossbeam-epoch";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "crossbeam-utils";
+ packageId = "crossbeam-utils";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "crossbeam-epoch/std" "crossbeam-utils/std" ];
+ };
+ resolvedDefaultFeatures = [ "crossbeam-epoch" "crossbeam-utils" "default" "std" ];
+ };
+ "crossbeam-epoch" = rec {
+ crateName = "crossbeam-epoch";
+ version = "0.9.5";
+ edition = "2018";
+ sha256 = "1zdpfd6hjf944dr5pb7h7rkiccbwksc958x4mp1y4d56384jxh2f";
+ authors = [
+ "The Crossbeam Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "crossbeam-utils";
+ packageId = "crossbeam-utils";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ {
+ name = "memoffset";
+ packageId = "memoffset";
+ }
+ {
+ name = "scopeguard";
+ packageId = "scopeguard";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "loom" = [ "loom-crate" "crossbeam-utils/loom" ];
+ "nightly" = [ "crossbeam-utils/nightly" "const_fn" ];
+ "std" = [ "alloc" "crossbeam-utils/std" "lazy_static" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "lazy_static" "std" ];
+ };
+ "crossbeam-utils" = rec {
+ crateName = "crossbeam-utils";
+ version = "0.8.5";
+ edition = "2018";
+ sha256 = "1ny481cx8a5pdknypb41jqym03dl8x26i2ldyyp3yb3zrq8zqb6q";
+ authors = [
+ "The Crossbeam Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "lazy_static" ];
+ };
+ resolvedDefaultFeatures = [ "default" "lazy_static" "std" ];
+ };
+ "csv" = rec {
+ crateName = "csv";
+ version = "1.1.6";
+ edition = "2018";
+ sha256 = "1q9nqn0qlamwl18v57p82c8yhxy43lkzf2z1mndmycsvqinkm092";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "bstr";
+ packageId = "bstr";
+ features = [ "serde1" ];
+ }
+ {
+ name = "csv-core";
+ packageId = "csv-core";
+ }
+ {
+ name = "itoa";
+ packageId = "itoa";
+ }
+ {
+ name = "ryu";
+ packageId = "ryu";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ ];
+ devDependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ ];
+
+ };
+ "csv-core" = rec {
+ crateName = "csv-core";
+ version = "0.1.10";
+ edition = "2018";
+ sha256 = "145wcc3560v1kmysqqspvddppiysr2rifqzy4nnlh3r6kxanc91b";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "memchr";
+ packageId = "memchr";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "libc" = [ "memchr/libc" ];
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "ctor" = rec {
+ crateName = "ctor";
+ version = "0.1.20";
+ edition = "2018";
+ sha256 = "0v80naiw5fp81xkyfkds6jpyamf3wx43kz4nif936bkq3any562y";
+ procMacro = true;
+ authors = [
+ "Matt Mastracci "
+ ];
+ dependencies = [
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ usesDefaultFeatures = false;
+ features = [ "full" "parsing" "printing" "proc-macro" ];
+ }
+ ];
+
+ };
+ "derive_arbitrary" = rec {
+ crateName = "derive_arbitrary";
+ version = "1.0.1";
+ edition = "2018";
+ sha256 = "0nig0iydva7a9h9i9qyi6an9w5qjafmn3qlzvdqqiw0x2kp824jz";
+ procMacro = true;
+ authors = [
+ "The Rust-Fuzz Project Developers"
+ "Nick Fitzgerald "
+ "Manish Goregaokar "
+ "Andre Bogus "
+ "Corey Farwell "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "derive" ];
+ }
+ ];
+
+ };
+ "diff" = rec {
+ crateName = "diff";
+ version = "0.1.12";
+ edition = "2015";
+ sha256 = "16b40bhsa2qgvgvxs983l625pkxyp6m0mzmpwg2605cvj53yl98f";
+ authors = [
+ "Utkarsh Kukreti "
+ ];
+
+ };
+ "digest" = rec {
+ crateName = "digest";
+ version = "0.8.1";
+ edition = "2015";
+ sha256 = "1madjl27f3kj5ql7kwgvb9c8b7yb7bv7yfgx7rqzj4i3fp4cil7k";
+ authors = [
+ "RustCrypto Developers"
+ ];
+ dependencies = [
+ {
+ name = "generic-array";
+ packageId = "generic-array";
+ }
+ ];
+ features = {
+ "dev" = [ "blobby" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "duct" = rec {
+ crateName = "duct";
+ version = "0.13.5";
+ edition = "2018";
+ crateBin = [];
+ sha256 = "13bxiy0y1dck3xz28rqw5ylf2ykv6mk8ww6g8408x26hksjs1ihg";
+ authors = [
+ "oconnor663@gmail.com"
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "once_cell";
+ packageId = "once_cell";
+ }
+ {
+ name = "os_pipe";
+ packageId = "os_pipe";
+ }
+ {
+ name = "shared_child";
+ packageId = "shared_child";
+ }
+ ];
+
+ };
+ "either" = rec {
+ crateName = "either";
+ version = "1.6.1";
+ edition = "2015";
+ sha256 = "0mwl9vngqf5jvrhmhn9x60kr5hivxyjxbmby2pybncxfqhf4z3g7";
+ authors = [
+ "bluss"
+ ];
+ features = {
+ "default" = [ "use_std" ];
+ };
+ };
+ "env_logger" = rec {
+ crateName = "env_logger";
+ version = "0.8.4";
+ edition = "2018";
+ sha256 = "1qzw8g11dbdfi7ixm44ldykwcqsxqkh8vx5cgpd88zmclgz8g4d1";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "atty";
+ packageId = "atty";
+ optional = true;
+ }
+ {
+ name = "humantime";
+ packageId = "humantime";
+ optional = true;
+ }
+ {
+ name = "log";
+ packageId = "log";
+ features = [ "std" ];
+ }
+ {
+ name = "regex";
+ packageId = "regex";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" "perf" ];
+ }
+ {
+ name = "termcolor";
+ packageId = "termcolor";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "termcolor" "atty" "humantime" "regex" ];
+ };
+ resolvedDefaultFeatures = [ "atty" "default" "humantime" "regex" "termcolor" ];
+ };
+ "errno" = rec {
+ crateName = "errno";
+ version = "0.2.7";
+ edition = "2015";
+ sha256 = "1zj6rra8n7d7gagppvvs5pvrfblad6x4ln5knb4kg7dfkkxz4s7s";
+ authors = [
+ "Chris Wong "
+ ];
+ dependencies = [
+ {
+ name = "errno-dragonfly";
+ packageId = "errno-dragonfly";
+ target = { target, features }: (target."os" == "dragonfly");
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."os" == "hermit");
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."os" == "wasi");
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "errhandlingapi" "minwindef" "ntdef" "winbase" ];
+ }
+ ];
+
+ };
+ "errno-dragonfly" = rec {
+ crateName = "errno-dragonfly";
+ version = "0.1.1";
+ edition = "2015";
+ sha256 = "0rshlc00nv45f14v2l1w0ma2nf1jg5j7q9pvw7hh018r6r73bjhl";
+ authors = [
+ "Michael Neumann "
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "gcc";
+ packageId = "gcc";
+ }
+ ];
+
+ };
+ "fake-simd" = rec {
+ crateName = "fake-simd";
+ version = "0.1.2";
+ edition = "2015";
+ sha256 = "1vfylvk4va2ivqx85603lyqqp0zk52cgbs4n5nfbbbqx577qm2p8";
+ authors = [
+ "The Rust-Crypto Project Developers"
+ ];
+
+ };
+ "flate2" = rec {
+ crateName = "flate2";
+ version = "1.0.20";
+ edition = "2018";
+ sha256 = "1q5b4r2rclhjbcxlbv5231avp1y6y8bynrf5v3brdzhhvr9yqfnd";
+ authors = [
+ "Alex Crichton "
+ "Josh Triplett "
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "crc32fast";
+ packageId = "crc32fast";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ }
+ {
+ name = "miniz_oxide";
+ packageId = "miniz_oxide";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "miniz_oxide";
+ packageId = "miniz_oxide";
+ usesDefaultFeatures = false;
+ target = { target, features }: ((target."arch" == "wasm32") && (!(target."os" == "emscripten")));
+ }
+ ];
+ features = {
+ "cloudflare_zlib" = [ "any_zlib" "cloudflare-zlib-sys" ];
+ "default" = [ "rust_backend" ];
+ "rust_backend" = [ "miniz_oxide" ];
+ "tokio" = [ "tokio-io" "futures" ];
+ "zlib" = [ "any_zlib" "libz-sys" ];
+ "zlib-ng-compat" = [ "zlib" "libz-sys/zlib-ng" ];
+ };
+ resolvedDefaultFeatures = [ "default" "miniz_oxide" "rust_backend" ];
+ };
+ "fnv" = rec {
+ crateName = "fnv";
+ version = "1.0.7";
+ edition = "2015";
+ sha256 = "1hc2mcqha06aibcaza94vbi81j6pr9a1bbxrxjfhc91zin8yr7iz";
+ libPath = "lib.rs";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "futures 0.1.31" = rec {
+ crateName = "futures";
+ version = "0.1.31";
+ edition = "2015";
+ sha256 = "0y46qbmhi37dqkch8dlfq5aninqpzqgrr98awkb3rn4fxww1lirs";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "use_std" "with-deprecated" ];
+ };
+ resolvedDefaultFeatures = [ "default" "use_std" "with-deprecated" ];
+ };
+ "futures 0.3.15" = rec {
+ crateName = "futures";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "09zwmmfi8d1glhi0bz2didagjyqz3q9gxa7nq4vzmqns0fl46zhf";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "futures-channel";
+ packageId = "futures-channel";
+ usesDefaultFeatures = false;
+ features = [ "sink" ];
+ }
+ {
+ name = "futures-core";
+ packageId = "futures-core";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-executor";
+ packageId = "futures-executor";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-io";
+ packageId = "futures-io";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-sink";
+ packageId = "futures-sink";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-task";
+ packageId = "futures-task";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-util";
+ packageId = "futures-util";
+ usesDefaultFeatures = false;
+ features = [ "sink" ];
+ }
+ ];
+ features = {
+ "alloc" = [ "futures-core/alloc" "futures-task/alloc" "futures-sink/alloc" "futures-channel/alloc" "futures-util/alloc" ];
+ "async-await" = [ "futures-util/async-await" "futures-util/async-await-macro" ];
+ "bilock" = [ "futures-util/bilock" ];
+ "compat" = [ "std" "futures-util/compat" ];
+ "default" = [ "std" "async-await" "executor" ];
+ "executor" = [ "std" "futures-executor/std" ];
+ "io-compat" = [ "compat" "futures-util/io-compat" ];
+ "read-initializer" = [ "futures-io/read-initializer" "futures-util/read-initializer" ];
+ "std" = [ "alloc" "futures-core/std" "futures-task/std" "futures-io/std" "futures-sink/std" "futures-util/std" "futures-util/io" "futures-util/channel" ];
+ "thread-pool" = [ "executor" "futures-executor/thread-pool" ];
+ "unstable" = [ "futures-core/unstable" "futures-task/unstable" "futures-channel/unstable" "futures-io/unstable" "futures-util/unstable" ];
+ "write-all-vectored" = [ "futures-util/write-all-vectored" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "async-await" "default" "executor" "futures-executor" "std" ];
+ };
+ "futures-channel" = rec {
+ crateName = "futures-channel";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "1qki53g079ymjkgdxg3rlh5yivys8qvdqhy18l2xz0m8565sd0p6";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "futures-core";
+ packageId = "futures-core";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-sink";
+ packageId = "futures-sink";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "alloc" = [ "futures-core/alloc" ];
+ "default" = [ "std" ];
+ "sink" = [ "futures-sink" ];
+ "std" = [ "alloc" "futures-core/std" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "futures-sink" "sink" "std" ];
+ };
+ "futures-core" = rec {
+ crateName = "futures-core";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "1lbrw5087ndaqvbjrckbz9ld4ya67k72d6w87c22d6m8v1jzf0h4";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "alloc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "std" ];
+ };
+ "futures-executor" = rec {
+ crateName = "futures-executor";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "0ydbmzg6ig9gankp2nspaq668r3ngzss4806dliygjgs16lsdnms";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "futures-core";
+ packageId = "futures-core";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-task";
+ packageId = "futures-task";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-util";
+ packageId = "futures-util";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "futures-core/std" "futures-task/std" "futures-util/std" ];
+ "thread-pool" = [ "std" "num_cpus" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "futures-io" = rec {
+ crateName = "futures-io";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "1899vd5yri6zv88by53pzxb1h4x96mc42riziy6qyd1vzgg9ki5c";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "futures-macro" = rec {
+ crateName = "futures-macro";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "08fixp6b34lr58cs85kacp3h599bi63njvfd03655pvc92c05i54";
+ procMacro = true;
+ authors = [
+ "Taylor Cramer "
+ "Taiki Endo "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro-hack";
+ packageId = "proc-macro-hack";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "full" ];
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+
+ };
+ "futures-sink" = rec {
+ crateName = "futures-sink";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "10j21j3k358512qyglqpfyxj309kr6bcspj6izg6s3gzrv8flyx5";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "alloc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "std" ];
+ };
+ "futures-task" = rec {
+ crateName = "futures-task";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "1bixscylw61w61dizqxhrdlnb8mv7yg9h775pssxsk8szkwvw5la";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "alloc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "std" ];
+ };
+ "futures-util" = rec {
+ crateName = "futures-util";
+ version = "0.3.15";
+ edition = "2018";
+ sha256 = "0rqr36zy4na270kn9fwk866adx1xkv1b49zxzm7zjavys8wc5dgy";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "futures-channel";
+ packageId = "futures-channel";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "futures-core";
+ packageId = "futures-core";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-io";
+ packageId = "futures-io";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "futures-macro";
+ packageId = "futures-macro";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-sink";
+ packageId = "futures-sink";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "futures-task";
+ packageId = "futures-task";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "memchr";
+ packageId = "memchr";
+ optional = true;
+ }
+ {
+ name = "pin-project-lite";
+ packageId = "pin-project-lite";
+ }
+ {
+ name = "pin-utils";
+ packageId = "pin-utils";
+ }
+ {
+ name = "proc-macro-hack";
+ packageId = "proc-macro-hack";
+ optional = true;
+ }
+ {
+ name = "proc-macro-nested";
+ packageId = "proc-macro-nested";
+ optional = true;
+ }
+ {
+ name = "slab";
+ packageId = "slab";
+ optional = true;
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ "alloc" = [ "futures-core/alloc" "futures-task/alloc" ];
+ "async-await-macro" = [ "async-await" "futures-macro" "proc-macro-hack" "proc-macro-nested" ];
+ "channel" = [ "std" "futures-channel" ];
+ "compat" = [ "std" "futures_01" ];
+ "default" = [ "std" "async-await" "async-await-macro" ];
+ "io" = [ "std" "futures-io" "memchr" ];
+ "io-compat" = [ "io" "compat" "tokio-io" ];
+ "read-initializer" = [ "io" "futures-io/read-initializer" "futures-io/unstable" ];
+ "sink" = [ "futures-sink" ];
+ "std" = [ "alloc" "futures-core/std" "futures-task/std" "slab" ];
+ "unstable" = [ "futures-core/unstable" "futures-task/unstable" ];
+ "write-all-vectored" = [ "io" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "async-await" "async-await-macro" "channel" "futures-channel" "futures-io" "futures-macro" "futures-sink" "io" "memchr" "proc-macro-hack" "proc-macro-nested" "sink" "slab" "std" ];
+ };
+ "fxhash" = rec {
+ crateName = "fxhash";
+ version = "0.2.1";
+ edition = "2015";
+ sha256 = "037mb9ichariqi45xm6mz0b11pa92gj38ba0409z3iz239sns6y3";
+ libPath = "lib.rs";
+ authors = [
+ "cbreeden "
+ ];
+ dependencies = [
+ {
+ name = "byteorder";
+ packageId = "byteorder";
+ }
+ ];
+
+ };
+ "gcc" = rec {
+ crateName = "gcc";
+ version = "0.3.55";
+ edition = "2015";
+ crateBin = [];
+ sha256 = "1hng1sajn4r67hndvhjysswz8niayjwvcj42zphpxzhbz89kjpwg";
+ authors = [
+ "Alex Crichton "
+ ];
+ features = {
+ "parallel" = [ "rayon" ];
+ };
+ };
+ "generic-array" = rec {
+ crateName = "generic-array";
+ version = "0.12.4";
+ edition = "2015";
+ sha256 = "1gfpay78vijl9vrwl1k9v7fbvbhkhcmnrk4kfg9l6x24y4s9zpzz";
+ libName = "generic_array";
+ authors = [
+ "Bartłomiej Kamiński "
+ "Aaron Trent "
+ ];
+ dependencies = [
+ {
+ name = "typenum";
+ packageId = "typenum";
+ }
+ ];
+
+ };
+ "getrandom 0.1.16" = rec {
+ crateName = "getrandom";
+ version = "0.1.16";
+ edition = "2018";
+ sha256 = "1kjzmz60qx9mn615ks1akjbf36n3lkv27zfwbcam0fzmj56wphwg";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ usesDefaultFeatures = false;
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "wasi";
+ packageId = "wasi 0.9.0+wasi-snapshot-preview1";
+ target = { target, features }: (target."os" == "wasi");
+ }
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "compiler_builtins" "core" ];
+ "test-in-browser" = [ "wasm-bindgen" ];
+ "wasm-bindgen" = [ "bindgen" "js-sys" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "getrandom 0.2.3" = rec {
+ crateName = "getrandom";
+ version = "0.2.3";
+ edition = "2018";
+ sha256 = "0lr7mnkvnzdh1xxmwmhhbm4gwg29k3m2rzhpjmjm4k2jcfa9kkbz";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ optional = true;
+ target = { target, features }: ((target."arch" == "wasm32") && (target."os" == "unknown"));
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ usesDefaultFeatures = false;
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "wasi";
+ packageId = "wasi 0.10.2+wasi-snapshot-preview1";
+ target = { target, features }: (target."os" == "wasi");
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ optional = true;
+ usesDefaultFeatures = false;
+ target = { target, features }: ((target."arch" == "wasm32") && (target."os" == "unknown"));
+ }
+ ];
+ features = {
+ "js" = [ "wasm-bindgen" "js-sys" ];
+ "rustc-dep-of-std" = [ "compiler_builtins" "core" "libc/rustc-dep-of-std" "wasi/rustc-dep-of-std" ];
+ };
+ resolvedDefaultFeatures = [ "js" "js-sys" "std" "wasm-bindgen" ];
+ };
+ "half" = rec {
+ crateName = "half";
+ version = "1.7.1";
+ edition = "2018";
+ sha256 = "1wzavaaaa2jwkm4i1dbglmwjfsdhn4n73wrkbdzllaynlams5b32";
+ authors = [
+ "Kathryn Long "
+ ];
+ features = {
+ "serialize" = [ "serde" ];
+ "std" = [ "alloc" ];
+ };
+ };
+ "hashbrown" = rec {
+ crateName = "hashbrown";
+ version = "0.9.1";
+ edition = "2018";
+ sha256 = "016dsm9s4xmxlkw2jfikm54qlz6vyk0qr280gab7kzp342jf9byp";
+ authors = [
+ "Amanieu d'Antras "
+ ];
+ features = {
+ "ahash-compile-time-rng" = [ "ahash/compile-time-rng" ];
+ "default" = [ "ahash" "inline-more" ];
+ "rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" ];
+ };
+ resolvedDefaultFeatures = [ "raw" ];
+ };
+ "heck" = rec {
+ crateName = "heck";
+ version = "0.3.3";
+ edition = "2018";
+ sha256 = "0b0kkr790p66lvzn9nsmfjvydrbmh9z5gb664jchwgw64vxiwqkd";
+ authors = [
+ "Without Boats "
+ ];
+ dependencies = [
+ {
+ name = "unicode-segmentation";
+ packageId = "unicode-segmentation";
+ }
+ ];
+
+ };
+ "hermit-abi" = rec {
+ crateName = "hermit-abi";
+ version = "0.1.19";
+ edition = "2018";
+ sha256 = "0cxcm8093nf5fyn114w8vxbrbcyvv91d4015rdnlgfll7cs6gd32";
+ authors = [
+ "Stefan Lankes"
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "core" "compiler_builtins/rustc-dep-of-std" "libc/rustc-dep-of-std" ];
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "hex" = rec {
+ crateName = "hex";
+ version = "0.4.3";
+ edition = "2018";
+ sha256 = "0w1a4davm1lgzpamwnba907aysmlrnygbqmfis2mqjx5m552a93z";
+ authors = [
+ "KokaKiwi "
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "alloc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "default" "std" ];
+ };
+ "humantime" = rec {
+ crateName = "humantime";
+ version = "2.1.0";
+ edition = "2018";
+ sha256 = "1r55pfkkf5v0ji1x6izrjwdq9v6sc7bv99xj6srywcar37xmnfls";
+ authors = [
+ "Paul Colomiets "
+ ];
+
+ };
+ "im-rc" = rec {
+ crateName = "im-rc";
+ version = "15.0.0";
+ edition = "2018";
+ sha256 = "0gsgcs1nn38r40973l6zr1v4d85f4s9qyl32n5f20jphf5z9ba1w";
+ authors = [
+ "Bodil Stokke "
+ ];
+ dependencies = [
+ {
+ name = "bitmaps";
+ packageId = "bitmaps";
+ }
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ {
+ name = "rand_xoshiro";
+ packageId = "rand_xoshiro";
+ }
+ {
+ name = "sized-chunks";
+ packageId = "sized-chunks";
+ }
+ {
+ name = "typenum";
+ packageId = "typenum";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "version_check";
+ packageId = "version_check";
+ }
+ ];
+ features = {
+ "pool" = [ "refpool" "sized-chunks/refpool" ];
+ };
+ };
+ "indexmap" = rec {
+ crateName = "indexmap";
+ version = "1.6.2";
+ edition = "2018";
+ sha256 = "1wxfh55zlrlpdxfcvvvj6wwc46f23cnb0j9q71190yl9pyh4aj42";
+ authors = [
+ "bluss"
+ "Josh Stone "
+ ];
+ dependencies = [
+ {
+ name = "hashbrown";
+ packageId = "hashbrown";
+ usesDefaultFeatures = false;
+ features = [ "raw" ];
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ "serde-1" = [ "serde" ];
+ };
+ };
+ "itertools 0.10.1" = rec {
+ crateName = "itertools";
+ version = "0.10.1";
+ edition = "2018";
+ sha256 = "1bsyxnm20x05rwc5qskrqy4cfswrcadzlwc26dkqml6hz64vipb9";
+ authors = [
+ "bluss"
+ ];
+ dependencies = [
+ {
+ name = "either";
+ packageId = "either";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "use_std" ];
+ "use_std" = [ "use_alloc" ];
+ };
+ resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ];
+ };
+ "itertools 0.9.0" = rec {
+ crateName = "itertools";
+ version = "0.9.0";
+ edition = "2018";
+ sha256 = "0jyml7ygr7kijkcjdl3fk5f34y5h5jsavclim7l13zjiavw1hkr8";
+ authors = [
+ "bluss"
+ ];
+ dependencies = [
+ {
+ name = "either";
+ packageId = "either";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "use_std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "use_std" ];
+ };
+ "itoa" = rec {
+ crateName = "itoa";
+ version = "0.4.7";
+ edition = "2015";
+ sha256 = "0di7fggbknwfjcw8cgzm1dnm3ik32l2m1f7nmyh8ipmh45h069fx";
+ authors = [
+ "David Tolnay "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "js-sys" = rec {
+ crateName = "js-sys";
+ version = "0.3.51";
+ edition = "2018";
+ sha256 = "0qkhnsidcx4vkgacn4hhl6bf6lxhc3lljfzpad11ms50wfngpgc3";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ ];
+
+ };
+ "lazy_static" = rec {
+ crateName = "lazy_static";
+ version = "1.4.0";
+ edition = "2015";
+ sha256 = "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2";
+ authors = [
+ "Marvin Löbel "
+ ];
+ features = {
+ "spin_no_std" = [ "spin" ];
+ };
+ };
+ "leb128" = rec {
+ crateName = "leb128";
+ version = "0.2.4";
+ edition = "2015";
+ crateBin = [];
+ sha256 = "0aid6qy7qlyqr9rhb3md4s5693b93pdidkfzdw86y3x05dzshxim";
+ authors = [
+ "Nick Fitzgerald "
+ "Philip Craig "
+ ];
+ features = {
+ };
+ };
+ "libc" = rec {
+ crateName = "libc";
+ version = "0.2.97";
+ edition = "2015";
+ sha256 = "1dlgdziv6nkabx287jjmghnlgc5dqv6fgpvh9n7ibpr0synsvf0j";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ features = {
+ "default" = [ "std" ];
+ "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ];
+ "use_std" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "libfuzzer-sys" = rec {
+ crateName = "libfuzzer-sys";
+ version = "0.4.2";
+ edition = "2018";
+ sha256 = "1cyyy436zamxlrvygjlg90c2m6ibvdgfada2n3pxymcbdr5aia9n";
+ authors = [
+ "The rust-fuzz Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "arbitrary";
+ packageId = "arbitrary";
+ }
+ {
+ name = "once_cell";
+ packageId = "once_cell";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "cc";
+ packageId = "cc";
+ }
+ ];
+ features = {
+ "arbitrary-derive" = [ "arbitrary/derive" ];
+ };
+ };
+ "log" = rec {
+ crateName = "log";
+ version = "0.4.14";
+ edition = "2015";
+ sha256 = "04175hv0v62shd82qydq58a48k3bjijmk54v38zgqlbxqkkbpfai";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ ];
+ features = {
+ "kv_unstable" = [ "value-bag" ];
+ "kv_unstable_serde" = [ "kv_unstable_std" "value-bag/serde" "serde" ];
+ "kv_unstable_std" = [ "std" "kv_unstable" "value-bag/error" ];
+ "kv_unstable_sval" = [ "kv_unstable" "value-bag/sval" "sval" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "maplit" = rec {
+ crateName = "maplit";
+ version = "1.0.2";
+ edition = "2015";
+ sha256 = "07b5kjnhrrmfhgqm9wprjw8adx6i225lqp49gasgqg74lahnabiy";
+ authors = [
+ "bluss"
+ ];
+
+ };
+ "matchers" = rec {
+ crateName = "matchers";
+ version = "0.0.1";
+ edition = "2018";
+ sha256 = "1q8ckqmkjqkznvdi9x0z769yz2bmvlqcwx51ad2lpk4mfmgpi6gh";
+ authors = [
+ "Eliza Weisman "
+ ];
+ dependencies = [
+ {
+ name = "regex-automata";
+ packageId = "regex-automata";
+ }
+ ];
+
+ };
+ "memchr" = rec {
+ crateName = "memchr";
+ version = "2.4.0";
+ edition = "2018";
+ sha256 = "1p478fqf4nia2ma0kv4npb8x1hli0zz6k16517ikb51jkryx8sxi";
+ authors = [
+ "Andrew Gallant "
+ "bluss"
+ ];
+ features = {
+ "default" = [ "std" ];
+ "use_std" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" "use_std" ];
+ };
+ "memoffset" = rec {
+ crateName = "memoffset";
+ version = "0.6.4";
+ edition = "2015";
+ sha256 = "1yfx2v8kmkhr2d4gwk8ghihdwg73vapn3vvp0im06f0kgx8crb2r";
+ authors = [
+ "Gilad Naaman "
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "miniz_oxide" = rec {
+ crateName = "miniz_oxide";
+ version = "0.4.4";
+ edition = "2018";
+ sha256 = "0jsfv00hl5rmx1nijn59sr9jmjd4rjnjhh4kdjy8d187iklih9d9";
+ authors = [
+ "Frommi "
+ "oyvindln "
+ ];
+ dependencies = [
+ {
+ name = "adler";
+ packageId = "adler";
+ usesDefaultFeatures = false;
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "adler/rustc-dep-of-std" ];
+ };
+ };
+ "nonzero_ext" = rec {
+ crateName = "nonzero_ext";
+ version = "0.2.0";
+ edition = "2015";
+ sha256 = "0i7lhlzfv62756q2zwsqiqr3wdh37yy0rbv0x9ivmfpak43jk8a4";
+ authors = [
+ "Andreas Fuchs "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "num-integer" = rec {
+ crateName = "num-integer";
+ version = "0.1.44";
+ edition = "2015";
+ sha256 = "1nq152y3304as1iai95hqz8prqnc94lks1s7q05sfjdmcf56kk6j";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ usesDefaultFeatures = false;
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "i128" = [ "num-traits/i128" ];
+ "std" = [ "num-traits/std" ];
+ };
+ };
+ "num-traits" = rec {
+ crateName = "num-traits";
+ version = "0.2.14";
+ edition = "2015";
+ sha256 = "144j176s2p76azy2ngk2vkdzgwdc0bc8c93jhki8c9fsbknb2r4s";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "num_cpus" = rec {
+ crateName = "num_cpus";
+ version = "1.13.0";
+ edition = "2015";
+ sha256 = "1cv6yxhz2zbnwn8pn1yn8grg7zsnd523947fby41a737aqvryj85";
+ authors = [
+ "Sean McArthur "
+ ];
+ dependencies = [
+ {
+ name = "hermit-abi";
+ packageId = "hermit-abi";
+ target = { target, features }: (((target."arch" == "x86_64") || (target."arch" == "aarch64")) && (target."os" == "hermit"));
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ }
+ ];
+
+ };
+ "once_cell" = rec {
+ crateName = "once_cell";
+ version = "1.8.0";
+ edition = "2018";
+ sha256 = "0mkbbxg6416z11r2yzsq91cqrkj9w1iyx5hakq15h5sbnriwnbv9";
+ authors = [
+ "Aleksey Kladov "
+ ];
+ features = {
+ "alloc" = [ "race" ];
+ "default" = [ "std" ];
+ "std" = [ "alloc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "default" "race" "std" ];
+ };
+ "oorandom" = rec {
+ crateName = "oorandom";
+ version = "11.1.3";
+ edition = "2018";
+ sha256 = "0xdm4vd89aiwnrk1xjwzklnchjqvib4klcihlc2bsd4x50mbrc8a";
+ authors = [
+ "Simon Heath "
+ ];
+
+ };
+ "opaque-debug" = rec {
+ crateName = "opaque-debug";
+ version = "0.2.3";
+ edition = "2015";
+ sha256 = "172j6bs8ndclqxa2m64qc0y1772rr73g4l9fg2svscgicnbfff98";
+ authors = [
+ "RustCrypto Developers"
+ ];
+
+ };
+ "os_pipe" = rec {
+ crateName = "os_pipe";
+ version = "0.9.2";
+ edition = "2018";
+ crateBin = [];
+ sha256 = "04yjs1hf88jjm17g8a2lr7ibxyyg460rzbgcw9f1yzihq833y8zv";
+ authors = [
+ "Jack O'Connor"
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (!(target."windows" or false));
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "handleapi" "namedpipeapi" "processthreadsapi" "winnt" ];
+ }
+ ];
+
+ };
+ "os_str_bytes" = rec {
+ crateName = "os_str_bytes";
+ version = "2.4.0";
+ edition = "2018";
+ sha256 = "11agh8n3x2l4sr3sxvx6byc1j3ryb1g6flb1ywn0qhq7xv1y3cmg";
+ authors = [
+ "dylni"
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "raw" ];
+ };
+ "output_vt100" = rec {
+ crateName = "output_vt100";
+ version = "0.1.2";
+ edition = "2018";
+ sha256 = "1ygqplpxz4gg3i8f3rkan2q69pqll7gv65l2mmd8r9dphnvwbkak";
+ authors = [
+ "Phuntsok Drak-pa "
+ ];
+ dependencies = [
+ {
+ name = "winapi";
+ packageId = "winapi";
+ features = [ "winuser" "winbase" "consoleapi" "processenv" ];
+ }
+ ];
+
+ };
+ "perf" = rec {
+ crateName = "perf";
+ version = "0.1.0";
+ edition = "2018";
+ crateBin = [
+ { name = "perf"; path = "src/main.rs"; }
+ ];
+ src = lib.cleanSourceWith { filter = sourceFilter; src = ./perf; };
+ dependencies = [
+ {
+ name = "automerge";
+ packageId = "automerge";
+ }
+ {
+ name = "automerge-frontend";
+ packageId = "automerge-frontend";
+ }
+ {
+ name = "automerge-protocol";
+ packageId = "automerge-protocol";
+ }
+ {
+ name = "maplit";
+ packageId = "maplit";
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.8.4";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ {
+ name = "smol_str";
+ packageId = "smol_str";
+ }
+ {
+ name = "unicode-segmentation";
+ packageId = "unicode-segmentation";
+ }
+ ];
+
+ };
+ "pest" = rec {
+ crateName = "pest";
+ version = "2.1.3";
+ edition = "2015";
+ sha256 = "0lry80bm90x47nq71wxq83kjrm9ashpz4kbm92p90ysdx4m8gx0h";
+ authors = [
+ "Dragoș Tiselice "
+ ];
+ dependencies = [
+ {
+ name = "ucd-trie";
+ packageId = "ucd-trie";
+ }
+ ];
+ features = {
+ "pretty-print" = [ "serde" "serde_json" ];
+ };
+ };
+ "pin-project-lite" = rec {
+ crateName = "pin-project-lite";
+ version = "0.2.7";
+ edition = "2018";
+ sha256 = "0hwl8iyx3h9i3i3jr2vqj07nf4ay1v1w1ga29cbjmdd6d4fd2ccd";
+ authors = [
+ "Taiki Endo "
+ ];
+
+ };
+ "pin-utils" = rec {
+ crateName = "pin-utils";
+ version = "0.1.0";
+ edition = "2018";
+ sha256 = "117ir7vslsl2z1a7qzhws4pd01cg2d3338c47swjyvqv2n60v1wb";
+ authors = [
+ "Josef Brandl "
+ ];
+
+ };
+ "plotters" = rec {
+ crateName = "plotters";
+ version = "0.3.1";
+ edition = "2018";
+ sha256 = "0akgmm5kqghl2b1q1qkzjggiqnb9smaz54fd5374k5qbqfggv8rj";
+ authors = [
+ "Hao Hou "
+ ];
+ dependencies = [
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ }
+ {
+ name = "plotters-backend";
+ packageId = "plotters-backend";
+ }
+ {
+ name = "plotters-svg";
+ packageId = "plotters-svg";
+ optional = true;
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ target = { target, features }: (target."arch" == "wasm32");
+ }
+ {
+ name = "web-sys";
+ packageId = "web-sys";
+ target = { target, features }: (target."arch" == "wasm32");
+ features = [ "Document" "DomRect" "Element" "HtmlElement" "Node" "Window" "HtmlCanvasElement" "CanvasRenderingContext2d" ];
+ }
+ ];
+ features = {
+ "all_elements" = [ "errorbar" "candlestick" "boxplot" "histogram" ];
+ "all_series" = [ "area_series" "line_series" "point_series" "surface_series" ];
+ "bitmap_backend" = [ "plotters-bitmap" "ttf" ];
+ "bitmap_encoder" = [ "plotters-bitmap/image_encoder" ];
+ "bitmap_gif" = [ "plotters-bitmap/gif_backend" ];
+ "datetime" = [ "chrono" ];
+ "default" = [ "bitmap_backend" "bitmap_encoder" "bitmap_gif" "svg_backend" "chrono" "ttf" "image" "deprecated_items" "all_series" "all_elements" ];
+ "evcxr" = [ "svg_backend" ];
+ "svg_backend" = [ "plotters-svg" ];
+ "ttf" = [ "font-kit" "ttf-parser" "lazy_static" "pathfinder_geometry" ];
+ };
+ resolvedDefaultFeatures = [ "area_series" "line_series" "plotters-svg" "svg_backend" ];
+ };
+ "plotters-backend" = rec {
+ crateName = "plotters-backend";
+ version = "0.3.0";
+ edition = "2018";
+ sha256 = "1425kzgyimxxq6n85y1wlhmr4y9vy16lxaiwfpga3cqwvk6zyzxh";
+ authors = [
+ "Hao Hou "
+ ];
+
+ };
+ "plotters-svg" = rec {
+ crateName = "plotters-svg";
+ version = "0.3.0";
+ edition = "2018";
+ sha256 = "04fj393irdjb4mavcdwwk1bjnw7gqjp668415a24nq6r7gi052mk";
+ authors = [
+ "Hao Hou "
+ ];
+ dependencies = [
+ {
+ name = "plotters-backend";
+ packageId = "plotters-backend";
+ }
+ ];
+ features = {
+ };
+ };
+ "ppv-lite86" = rec {
+ crateName = "ppv-lite86";
+ version = "0.2.10";
+ edition = "2018";
+ sha256 = "0ms8198kclg4h96ggbziixxmsdl847s648kmbx11zlmjsqjccx5c";
+ authors = [
+ "The CryptoCorrosion Contributors"
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "simd" "std" ];
+ };
+ "pretty_assertions" = rec {
+ crateName = "pretty_assertions";
+ version = "0.7.2";
+ edition = "2018";
+ sha256 = "12yris0ni87wvzhj23a5nnz7amskvahhnpikx5snhdyg09y0xaqw";
+ authors = [
+ "Colin Kiegel "
+ "Florent Fayolle "
+ "Tom Milligan "
+ ];
+ dependencies = [
+ {
+ name = "ansi_term";
+ packageId = "ansi_term 0.12.1";
+ }
+ {
+ name = "ctor";
+ packageId = "ctor";
+ target = { target, features }: (target."windows" or false);
+ }
+ {
+ name = "diff";
+ packageId = "diff";
+ }
+ {
+ name = "output_vt100";
+ packageId = "output_vt100";
+ target = { target, features }: (target."windows" or false);
+ }
+ ];
+
+ };
+ "proc-macro-error" = rec {
+ crateName = "proc-macro-error";
+ version = "1.0.4";
+ edition = "2018";
+ sha256 = "1373bhxaf0pagd8zkyd03kkx6bchzf6g0dkwrwzsnal9z47lj9fs";
+ authors = [
+ "CreepySkeleton "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro-error-attr";
+ packageId = "proc-macro-error-attr";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "version_check";
+ packageId = "version_check";
+ }
+ ];
+ features = {
+ "default" = [ "syn-error" ];
+ "syn-error" = [ "syn" ];
+ };
+ resolvedDefaultFeatures = [ "default" "syn" "syn-error" ];
+ };
+ "proc-macro-error-attr" = rec {
+ crateName = "proc-macro-error-attr";
+ version = "1.0.4";
+ edition = "2018";
+ sha256 = "0sgq6m5jfmasmwwy8x4mjygx5l7kp8s4j60bv25ckv2j1qc41gm1";
+ procMacro = true;
+ authors = [
+ "CreepySkeleton "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "version_check";
+ packageId = "version_check";
+ }
+ ];
+
+ };
+ "proc-macro-hack" = rec {
+ crateName = "proc-macro-hack";
+ version = "0.5.19";
+ edition = "2018";
+ sha256 = "1rg0kzsj7lj00qj602d3h77spwfz48vixn1wbjp7a4yrq65w9w6v";
+ procMacro = true;
+ authors = [
+ "David Tolnay "
+ ];
+
+ };
+ "proc-macro-nested" = rec {
+ crateName = "proc-macro-nested";
+ version = "0.1.7";
+ edition = "2015";
+ sha256 = "11hh1jynh62f3m1ii0f9gf1l3y0fhkwpmr40lz3704v848n1p25w";
+ authors = [
+ "David Tolnay "
+ ];
+
+ };
+ "proc-macro2" = rec {
+ crateName = "proc-macro2";
+ version = "1.0.27";
+ edition = "2018";
+ sha256 = "0f3h0zl5w5090ajmmvpmhkpr4iwqnn5rip3afacabhc657vwmn7h";
+ authors = [
+ "Alex Crichton "
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "unicode-xid";
+ packageId = "unicode-xid";
+ }
+ ];
+ features = {
+ "default" = [ "proc-macro" ];
+ };
+ resolvedDefaultFeatures = [ "default" "proc-macro" ];
+ };
+ "proptest" = rec {
+ crateName = "proptest";
+ version = "0.10.1";
+ edition = "2018";
+ sha256 = "0vv4cvwn1v7h0zjajmhznll554a2ri8dqw26xql3q49r246cirhj";
+ authors = [
+ "Jason Lingle"
+ ];
+ dependencies = [
+ {
+ name = "bit-set";
+ packageId = "bit-set";
+ optional = true;
+ }
+ {
+ name = "bitflags";
+ packageId = "bitflags";
+ }
+ {
+ name = "byteorder";
+ packageId = "byteorder";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "quick-error";
+ packageId = "quick-error";
+ optional = true;
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.7.3";
+ usesDefaultFeatures = false;
+ features = [ "alloc" ];
+ }
+ {
+ name = "rand_chacha";
+ packageId = "rand_chacha 0.2.2";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "rand_xorshift";
+ packageId = "rand_xorshift";
+ }
+ {
+ name = "regex-syntax";
+ packageId = "regex-syntax";
+ optional = true;
+ }
+ {
+ name = "rusty-fork";
+ packageId = "rusty-fork";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "tempfile";
+ packageId = "tempfile";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "std" "fork" "timeout" "bit-set" "break-dead-code" ];
+ "default-code-coverage" = [ "std" "fork" "timeout" "bit-set" ];
+ "fork" = [ "std" "rusty-fork" "tempfile" ];
+ "hardware-rng" = [ "x86" ];
+ "std" = [ "rand/std" "byteorder/std" "lazy_static" "quick-error" "regex-syntax" "num-traits/std" ];
+ "timeout" = [ "fork" "rusty-fork/timeout" ];
+ };
+ resolvedDefaultFeatures = [ "bit-set" "break-dead-code" "default" "fork" "lazy_static" "quick-error" "regex-syntax" "rusty-fork" "std" "tempfile" "timeout" ];
+ };
+ "quick-error" = rec {
+ crateName = "quick-error";
+ version = "1.2.3";
+ edition = "2015";
+ sha256 = "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51";
+ authors = [
+ "Paul Colomiets "
+ "Colin Kiegel "
+ ];
+
+ };
+ "quote" = rec {
+ crateName = "quote";
+ version = "1.0.9";
+ edition = "2018";
+ sha256 = "19rjmfqzk26rxbgxy5j2ckqc2v12sw2xw8l4gi8bzpn2bmsbkl63";
+ authors = [
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "proc-macro" ];
+ "proc-macro" = [ "proc-macro2/proc-macro" ];
+ };
+ resolvedDefaultFeatures = [ "default" "proc-macro" ];
+ };
+ "rand 0.7.3" = rec {
+ crateName = "rand";
+ version = "0.7.3";
+ edition = "2018";
+ sha256 = "00sdaimkbz491qgi6qxkv582yivl32m2jd401kzbn94vsiwicsva";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.1.16";
+ rename = "getrandom_package";
+ optional = true;
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ optional = true;
+ usesDefaultFeatures = false;
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "rand_chacha";
+ packageId = "rand_chacha 0.2.2";
+ usesDefaultFeatures = false;
+ target = { target, features }: (!(target."os" == "emscripten"));
+ }
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ {
+ name = "rand_hc";
+ packageId = "rand_hc 0.2.0";
+ target = { target, features }: (target."os" == "emscripten");
+ }
+ {
+ name = "rand_pcg";
+ packageId = "rand_pcg";
+ optional = true;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "rand_hc";
+ packageId = "rand_hc 0.2.0";
+ }
+ {
+ name = "rand_pcg";
+ packageId = "rand_pcg";
+ }
+ ];
+ features = {
+ "alloc" = [ "rand_core/alloc" ];
+ "default" = [ "std" ];
+ "getrandom" = [ "getrandom_package" "rand_core/getrandom" ];
+ "nightly" = [ "simd_support" ];
+ "simd_support" = [ "packed_simd" ];
+ "small_rng" = [ "rand_pcg" ];
+ "std" = [ "rand_core/std" "rand_chacha/std" "alloc" "getrandom" "libc" ];
+ "stdweb" = [ "getrandom_package/stdweb" ];
+ "wasm-bindgen" = [ "getrandom_package/wasm-bindgen" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "default" "getrandom" "getrandom_package" "libc" "rand_pcg" "small_rng" "std" ];
+ };
+ "rand 0.8.4" = rec {
+ crateName = "rand";
+ version = "0.8.4";
+ edition = "2018";
+ sha256 = "1n5wska2fbfj4dsfz8mc0pd0dgjlrb6c9anpk5mwym345rip6x9f";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ optional = true;
+ usesDefaultFeatures = false;
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "rand_chacha";
+ packageId = "rand_chacha 0.3.1";
+ optional = true;
+ usesDefaultFeatures = false;
+ target = { target, features }: (!(target."os" == "emscripten"));
+ }
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.6.3";
+ }
+ {
+ name = "rand_hc";
+ packageId = "rand_hc 0.3.1";
+ optional = true;
+ target = { target, features }: (target."os" == "emscripten");
+ }
+ ];
+ devDependencies = [
+ {
+ name = "rand_hc";
+ packageId = "rand_hc 0.3.1";
+ }
+ ];
+ features = {
+ "alloc" = [ "rand_core/alloc" ];
+ "default" = [ "std" "std_rng" ];
+ "getrandom" = [ "rand_core/getrandom" ];
+ "serde1" = [ "serde" "rand_core/serde1" ];
+ "simd_support" = [ "packed_simd" ];
+ "std" = [ "rand_core/std" "rand_chacha/std" "alloc" "getrandom" "libc" ];
+ "std_rng" = [ "rand_chacha" "rand_hc" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "default" "getrandom" "libc" "rand_chacha" "rand_hc" "std" "std_rng" ];
+ };
+ "rand_chacha 0.2.2" = rec {
+ crateName = "rand_chacha";
+ version = "0.2.2";
+ edition = "2018";
+ sha256 = "00il36fkdbsmpr99p9ksmmp6dn1md7rmnwmz0rr77jbrca2yvj7l";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ "The CryptoCorrosion Contributors"
+ ];
+ dependencies = [
+ {
+ name = "ppv-lite86";
+ packageId = "ppv-lite86";
+ usesDefaultFeatures = false;
+ features = [ "simd" ];
+ }
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ ];
+ features = {
+ "default" = [ "std" "simd" ];
+ "std" = [ "ppv-lite86/std" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "rand_chacha 0.3.1" = rec {
+ crateName = "rand_chacha";
+ version = "0.3.1";
+ edition = "2018";
+ sha256 = "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ "The CryptoCorrosion Contributors"
+ ];
+ dependencies = [
+ {
+ name = "ppv-lite86";
+ packageId = "ppv-lite86";
+ usesDefaultFeatures = false;
+ features = [ "simd" ];
+ }
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.6.3";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "serde1" = [ "serde" ];
+ "std" = [ "ppv-lite86/std" ];
+ };
+ resolvedDefaultFeatures = [ "std" ];
+ };
+ "rand_core 0.5.1" = rec {
+ crateName = "rand_core";
+ version = "0.5.1";
+ edition = "2018";
+ sha256 = "06bdvx08v3rkz451cm7z59xwwqn1rkfh6v9ay77b14f8dwlybgch";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.1.16";
+ optional = true;
+ }
+ ];
+ features = {
+ "serde1" = [ "serde" ];
+ "std" = [ "alloc" "getrandom" "getrandom/std" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ];
+ };
+ "rand_core 0.6.3" = rec {
+ crateName = "rand_core";
+ version = "0.6.3";
+ edition = "2018";
+ sha256 = "1rxlxc3bpzgwphcg9c9yasvv9idipcg2z2y4j0vlb52jyl418kyk";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.2.3";
+ optional = true;
+ }
+ ];
+ features = {
+ "serde1" = [ "serde" ];
+ "std" = [ "alloc" "getrandom" "getrandom/std" ];
+ };
+ resolvedDefaultFeatures = [ "alloc" "getrandom" "std" ];
+ };
+ "rand_hc 0.2.0" = rec {
+ crateName = "rand_hc";
+ version = "0.2.0";
+ edition = "2018";
+ sha256 = "0g31sqwpmsirdlwr0svnacr4dbqyz339im4ssl9738cjgfpjjcfa";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ ];
+
+ };
+ "rand_hc 0.3.1" = rec {
+ crateName = "rand_hc";
+ version = "0.3.1";
+ edition = "2018";
+ sha256 = "1rwpykyvhkxs4jvqdja3mzp9dqaqamzn113cxaigs9z2dmcry7nm";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.6.3";
+ }
+ ];
+
+ };
+ "rand_pcg" = rec {
+ crateName = "rand_pcg";
+ version = "0.2.1";
+ edition = "2018";
+ sha256 = "0ab4h6s6x3py833jk61lwadq83qd1c8bih2hgi6yps9rnv0x1aqn";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ ];
+ features = {
+ "serde1" = [ "serde" ];
+ };
+ };
+ "rand_xorshift" = rec {
+ crateName = "rand_xorshift";
+ version = "0.2.0";
+ edition = "2018";
+ sha256 = "1a6wy76lc5fimm1n9n8fzhp4cfjwfwxh4hx63bg3vlh1d2w1dm3p";
+ authors = [
+ "The Rand Project Developers"
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ ];
+ features = {
+ "serde1" = [ "serde" ];
+ };
+ };
+ "rand_xoshiro" = rec {
+ crateName = "rand_xoshiro";
+ version = "0.4.0";
+ edition = "2018";
+ sha256 = "013h45rikipv5bda2ixmwx5rwsk9wpc7mr0a77cz20hxi0pdvz59";
+ authors = [
+ "The Rand Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "rand_core";
+ packageId = "rand_core 0.5.1";
+ }
+ ];
+ features = {
+ "serde1" = [ "serde" ];
+ };
+ };
+ "rayon" = rec {
+ crateName = "rayon";
+ version = "1.5.1";
+ edition = "2018";
+ sha256 = "143dl2453bazgk7rwjrickmyqd0ks3q69nfz8axcins19n0clsn0";
+ authors = [
+ "Niko Matsakis "
+ "Josh Stone "
+ ];
+ dependencies = [
+ {
+ name = "crossbeam-deque";
+ packageId = "crossbeam-deque";
+ }
+ {
+ name = "either";
+ packageId = "either";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "rayon-core";
+ packageId = "rayon-core";
+ }
+ ];
+ buildDependencies = [
+ {
+ name = "autocfg";
+ packageId = "autocfg";
+ }
+ ];
+
+ };
+ "rayon-core" = rec {
+ crateName = "rayon-core";
+ version = "1.9.1";
+ edition = "2018";
+ sha256 = "13kdcnqp2p1a5a3amamfjpnm7ay463vq4dfxy4rrh9shr3i210fp";
+ authors = [
+ "Niko Matsakis "
+ "Josh Stone "
+ ];
+ dependencies = [
+ {
+ name = "crossbeam-channel";
+ packageId = "crossbeam-channel";
+ }
+ {
+ name = "crossbeam-deque";
+ packageId = "crossbeam-deque";
+ }
+ {
+ name = "crossbeam-utils";
+ packageId = "crossbeam-utils";
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ {
+ name = "num_cpus";
+ packageId = "num_cpus";
+ }
+ ];
+
+ };
+ "redox_syscall" = rec {
+ crateName = "redox_syscall";
+ version = "0.2.9";
+ edition = "2018";
+ sha256 = "1vpyfnfrw5ki262720yks8m7vn1a2mg89s4rqi5ir7izvyx9md2s";
+ libName = "syscall";
+ authors = [
+ "Jeremy Soller "
+ ];
+ dependencies = [
+ {
+ name = "bitflags";
+ packageId = "bitflags";
+ }
+ ];
+
+ };
+ "regex" = rec {
+ crateName = "regex";
+ version = "1.5.4";
+ edition = "2018";
+ sha256 = "0qf479kjbmb582h4d1d6gfl75h0j8aq2nrdi5wg6zdcy6llqcynh";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "aho-corasick";
+ packageId = "aho-corasick";
+ optional = true;
+ }
+ {
+ name = "memchr";
+ packageId = "memchr";
+ optional = true;
+ }
+ {
+ name = "regex-syntax";
+ packageId = "regex-syntax";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" "perf" "unicode" "regex-syntax/default" ];
+ "perf" = [ "perf-cache" "perf-dfa" "perf-inline" "perf-literal" ];
+ "perf-literal" = [ "aho-corasick" "memchr" ];
+ "unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" "regex-syntax/unicode" ];
+ "unicode-age" = [ "regex-syntax/unicode-age" ];
+ "unicode-bool" = [ "regex-syntax/unicode-bool" ];
+ "unicode-case" = [ "regex-syntax/unicode-case" ];
+ "unicode-gencat" = [ "regex-syntax/unicode-gencat" ];
+ "unicode-perl" = [ "regex-syntax/unicode-perl" ];
+ "unicode-script" = [ "regex-syntax/unicode-script" ];
+ "unicode-segment" = [ "regex-syntax/unicode-segment" ];
+ "unstable" = [ "pattern" ];
+ "use_std" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "aho-corasick" "memchr" "perf" "perf-cache" "perf-dfa" "perf-inline" "perf-literal" "std" ];
+ };
+ "regex-automata" = rec {
+ crateName = "regex-automata";
+ version = "0.1.10";
+ edition = "2015";
+ sha256 = "0ci1hvbzhrfby5fdpf4ganhf7kla58acad9i1ff1p34dzdrhs8vc";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "regex-syntax";
+ packageId = "regex-syntax";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "regex-syntax" ];
+ "transducer" = [ "std" "fst" ];
+ };
+ resolvedDefaultFeatures = [ "default" "regex-syntax" "std" ];
+ };
+ "regex-syntax" = rec {
+ crateName = "regex-syntax";
+ version = "0.6.25";
+ edition = "2018";
+ sha256 = "16y87hz1bxmmz6kk360cxwfm3jnbsxb3x4zw9x1gzz7khic2i5zl";
+ authors = [
+ "The Rust Project Developers"
+ ];
+ features = {
+ "default" = [ "unicode" ];
+ "unicode" = [ "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
+ };
+ resolvedDefaultFeatures = [ "default" "unicode" "unicode-age" "unicode-bool" "unicode-case" "unicode-gencat" "unicode-perl" "unicode-script" "unicode-segment" ];
+ };
+ "remove_dir_all" = rec {
+ crateName = "remove_dir_all";
+ version = "0.5.3";
+ edition = "2015";
+ sha256 = "1rzqbsgkmr053bxxl04vmvsd1njyz0nxvly97aip6aa2cmb15k9s";
+ authors = [
+ "Aaronepower "
+ ];
+ dependencies = [
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "std" "errhandlingapi" "winerror" "fileapi" "winbase" ];
+ }
+ ];
+
+ };
+ "rmp" = rec {
+ crateName = "rmp";
+ version = "0.8.10";
+ edition = "2018";
+ sha256 = "1mksma1b18yps1s64qx2f4bhg4z19wmfvbjx3zfxbi262kxfamag";
+ authors = [
+ "Evgeny Safronov "
+ ];
+ dependencies = [
+ {
+ name = "byteorder";
+ packageId = "byteorder";
+ }
+ {
+ name = "num-traits";
+ packageId = "num-traits";
+ }
+ ];
+
+ };
+ "rmp-serde" = rec {
+ crateName = "rmp-serde";
+ version = "0.15.5";
+ edition = "2018";
+ sha256 = "178f4qlicldm9iy74q4wdqldk5i11p1ad30wzs9avx04mpwwygkj";
+ authors = [
+ "Evgeny Safronov "
+ ];
+ dependencies = [
+ {
+ name = "byteorder";
+ packageId = "byteorder";
+ }
+ {
+ name = "rmp";
+ packageId = "rmp";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ ];
+ features = {
+ };
+ };
+ "rustc_version" = rec {
+ crateName = "rustc_version";
+ version = "0.3.3";
+ edition = "2018";
+ sha256 = "1vjmw7xcdri0spsf24mkpwpph853wrbqppihhw061i2igh4f5pzh";
+ authors = [
+ "Marvin Löbel "
+ ];
+ dependencies = [
+ {
+ name = "semver";
+ packageId = "semver";
+ }
+ ];
+
+ };
+ "rusty-fork" = rec {
+ crateName = "rusty-fork";
+ version = "0.3.0";
+ edition = "2018";
+ sha256 = "0kxwq5c480gg6q0j3bg4zzyfh2kwmc3v2ba94jw8ncjc8mpcqgfb";
+ authors = [
+ "Jason Lingle"
+ ];
+ dependencies = [
+ {
+ name = "fnv";
+ packageId = "fnv";
+ }
+ {
+ name = "quick-error";
+ packageId = "quick-error";
+ }
+ {
+ name = "tempfile";
+ packageId = "tempfile";
+ }
+ {
+ name = "wait-timeout";
+ packageId = "wait-timeout";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "timeout" ];
+ "timeout" = [ "wait-timeout" ];
+ };
+ resolvedDefaultFeatures = [ "timeout" "wait-timeout" ];
+ };
+ "ryu" = rec {
+ crateName = "ryu";
+ version = "1.0.5";
+ edition = "2018";
+ sha256 = "0vpqv1dj7fksa6hm3zpk5rbsjs0ifbfy7xwzsyyil0rx37a03lvi";
+ authors = [
+ "David Tolnay "
+ ];
+ features = {
+ };
+ };
+ "same-file" = rec {
+ crateName = "same-file";
+ version = "1.0.6";
+ edition = "2018";
+ sha256 = "00h5j1w87dmhnvbv9l8bic3y7xxsnjmssvifw2ayvgx9mb1ivz4k";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "winapi-util";
+ packageId = "winapi-util";
+ target = { target, features }: (target."windows" or false);
+ }
+ ];
+
+ };
+ "scoped-tls" = rec {
+ crateName = "scoped-tls";
+ version = "1.0.0";
+ edition = "2015";
+ sha256 = "1hj8lifzvivdb1z02lfnzkshpvk85nkgzxsy2hc0zky9wf894spa";
+ authors = [
+ "Alex Crichton "
+ ];
+
+ };
+ "scopeguard" = rec {
+ crateName = "scopeguard";
+ version = "1.1.0";
+ edition = "2015";
+ sha256 = "1kbqm85v43rq92vx7hfiay6pmcga03vrjbbfwqpyj3pwsg3b16nj";
+ authors = [
+ "bluss"
+ ];
+ features = {
+ "default" = [ "use_std" ];
+ };
+ };
+ "semver" = rec {
+ crateName = "semver";
+ version = "0.11.0";
+ edition = "2015";
+ sha256 = "1dn6064fipjymnmjccyjhb70miyvqvp08gvw1wbg8vbg4c8ay0gk";
+ authors = [
+ "Steve Klabnik "
+ "The Rust Project Developers"
+ ];
+ dependencies = [
+ {
+ name = "semver-parser";
+ packageId = "semver-parser";
+ }
+ ];
+ features = {
+ "ci" = [ "serde" "diesel/sqlite" ];
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "semver-parser" = rec {
+ crateName = "semver-parser";
+ version = "0.10.2";
+ edition = "2018";
+ crateBin = [];
+ sha256 = "1xqijhqhx3bn77xnl1mlcp032hz8nv7n2fbdacbdzq7rnzsvxc00";
+ authors = [
+ "Steve Klabnik "
+ ];
+ dependencies = [
+ {
+ name = "pest";
+ packageId = "pest";
+ }
+ ];
+
+ };
+ "serde" = rec {
+ crateName = "serde";
+ version = "1.0.126";
+ edition = "2015";
+ sha256 = "00vdk7y3j8h2xv28a2i2ad1d19g5iwrdknbq8yp79v6axamhaxgc";
+ authors = [
+ "Erick Tryzelaar "
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "serde_derive";
+ packageId = "serde_derive";
+ optional = true;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "serde_derive";
+ packageId = "serde_derive";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "derive" = [ "serde_derive" ];
+ };
+ resolvedDefaultFeatures = [ "default" "derive" "serde_derive" "std" ];
+ };
+ "serde-wasm-bindgen" = rec {
+ crateName = "serde-wasm-bindgen";
+ version = "0.1.3";
+ edition = "2018";
+ sha256 = "0djnmksp2dxa56vcam93jkmssb5wp9ys6390alpavryhgqpz3rky";
+ authors = [
+ "Ingvar Stepanyan "
+ ];
+ dependencies = [
+ {
+ name = "fnv";
+ packageId = "fnv";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ ];
+ devDependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ ];
+ features = {
+ };
+ };
+ "serde_bytes" = rec {
+ crateName = "serde_bytes";
+ version = "0.11.5";
+ edition = "2018";
+ sha256 = "1fcb6sw8wkrj4ylm118wkb31hw124nkjnqyhbgqnd8w85zfhgbhn";
+ authors = [
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "alloc" = [ "serde/alloc" ];
+ "default" = [ "std" ];
+ "std" = [ "serde/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "serde_cbor" = rec {
+ crateName = "serde_cbor";
+ version = "0.11.1";
+ edition = "2018";
+ sha256 = "08m62mfqjnpa543kd9r9cyxlqc6y73avhsl3n8svgs4h5zxaq60y";
+ authors = [
+ "Pyfisch "
+ "Steven Fackler "
+ ];
+ dependencies = [
+ {
+ name = "half";
+ packageId = "half";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "alloc" = [ "serde/alloc" ];
+ "default" = [ "std" ];
+ "std" = [ "serde/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "serde_derive" = rec {
+ crateName = "serde_derive";
+ version = "1.0.126";
+ edition = "2015";
+ sha256 = "0hsdh39qj0g187nwndfzg67q4qajbm5g6x0fr5xarblmk2y7sfln";
+ procMacro = true;
+ authors = [
+ "Erick Tryzelaar "
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ }
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "serde_json" = rec {
+ crateName = "serde_json";
+ version = "1.0.64";
+ edition = "2018";
+ sha256 = "0y9gk3yikncrc0zajmwc0pidr7zfwafawb4gidf6mqyskzf9g7kr";
+ authors = [
+ "Erick Tryzelaar "
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "itoa";
+ packageId = "itoa";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "ryu";
+ packageId = "ryu";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "alloc" = [ "serde/alloc" ];
+ "default" = [ "std" ];
+ "preserve_order" = [ "indexmap" ];
+ "std" = [ "serde/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "float_roundtrip" "std" ];
+ };
+ "sha2" = rec {
+ crateName = "sha2";
+ version = "0.8.2";
+ edition = "2015";
+ sha256 = "0s9yddvyg6anaikdl86wmwfim25c0d4m0xq0y2ghs34alxpg8mm2";
+ authors = [
+ "RustCrypto Developers"
+ ];
+ dependencies = [
+ {
+ name = "block-buffer";
+ packageId = "block-buffer";
+ }
+ {
+ name = "digest";
+ packageId = "digest";
+ }
+ {
+ name = "fake-simd";
+ packageId = "fake-simd";
+ }
+ {
+ name = "opaque-debug";
+ packageId = "opaque-debug";
+ }
+ ];
+ devDependencies = [
+ {
+ name = "digest";
+ packageId = "digest";
+ features = [ "dev" ];
+ }
+ ];
+ features = {
+ "asm" = [ "sha2-asm" ];
+ "asm-aarch64" = [ "asm" "libc" ];
+ "default" = [ "std" ];
+ "std" = [ "digest/std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "sharded-slab" = rec {
+ crateName = "sharded-slab";
+ version = "0.1.1";
+ edition = "2018";
+ sha256 = "1qqlmr2jfhpfgav4y7lax46a7rcrzjn4a2pqj1sgjpg0krqikivr";
+ authors = [
+ "Eliza Weisman "
+ ];
+ dependencies = [
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ ];
+
+ };
+ "shared_child" = rec {
+ crateName = "shared_child";
+ version = "0.3.5";
+ edition = "2018";
+ sha256 = "0np6g5fmixncky9c0j5xhqxrp1rkxqnmx5vj7spq652vavazgsbb";
+ authors = [
+ "jacko"
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (!(target."windows" or false));
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "synchapi" "winbase" "winerror" "winnt" ];
+ }
+ ];
+
+ };
+ "sized-chunks" = rec {
+ crateName = "sized-chunks";
+ version = "0.6.5";
+ edition = "2018";
+ sha256 = "07ix5fsdnpf2xsb0k5rbiwlmsicm2237fcx7blirp9p7pljr5mhn";
+ authors = [
+ "Bodil Stokke "
+ ];
+ dependencies = [
+ {
+ name = "bitmaps";
+ packageId = "bitmaps";
+ }
+ {
+ name = "typenum";
+ packageId = "typenum";
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "ringbuffer" = [ "array-ops" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "slab" = rec {
+ crateName = "slab";
+ version = "0.4.3";
+ edition = "2015";
+ sha256 = "09v57dmy9gnfcj3c6gywp7wi09zywxf0ppj07w02hfvy38ysqwzi";
+ authors = [
+ "Carl Lerche "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "smallvec" = rec {
+ crateName = "smallvec";
+ version = "1.6.1";
+ edition = "2018";
+ sha256 = "0kk08axr0ybfbjzk65a41k84mb6sfhyajmfndaka9igkx34kf3zy";
+ authors = [
+ "The Servo Project Developers"
+ ];
+ features = {
+ };
+ };
+ "smol_str" = rec {
+ crateName = "smol_str";
+ version = "0.1.18";
+ edition = "2018";
+ sha256 = "1c53aiylg3h1b4wfn2xbv8md8cqmf2pwg5qw5hkr8mchj2gff0xj";
+ authors = [
+ "Aleksey Kladov "
+ ];
+ dependencies = [
+ {
+ name = "arbitrary";
+ packageId = "arbitrary";
+ optional = true;
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ ];
+ devDependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ features = [ "derive" ];
+ }
+ ];
+
+ resolvedDefaultFeatures = [ "arbitrary" "serde" ];
+ };
+ "strsim 0.10.0" = rec {
+ crateName = "strsim";
+ version = "0.10.0";
+ edition = "2015";
+ sha256 = "08s69r4rcrahwnickvi0kq49z524ci50capybln83mg6b473qivk";
+ authors = [
+ "Danny Guo "
+ ];
+
+ };
+ "strsim 0.8.0" = rec {
+ crateName = "strsim";
+ version = "0.8.0";
+ edition = "2015";
+ sha256 = "0sjsm7hrvjdifz661pjxq5w4hf190hx53fra8dfvamacvff139cf";
+ authors = [
+ "Danny Guo "
+ ];
+
+ };
+ "strum" = rec {
+ crateName = "strum";
+ version = "0.21.0";
+ edition = "2018";
+ sha256 = "1qnd2by1zrwgx7li0hmwy7jbzjwz1ky697qjg85nga8zzny6py5a";
+ authors = [
+ "Peter Glotfelty "
+ ];
+ dependencies = [
+ {
+ name = "strum_macros";
+ packageId = "strum_macros";
+ optional = true;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "strum_macros";
+ packageId = "strum_macros";
+ }
+ ];
+ features = {
+ "derive" = [ "strum_macros" ];
+ };
+ resolvedDefaultFeatures = [ "derive" "strum_macros" ];
+ };
+ "strum_macros" = rec {
+ crateName = "strum_macros";
+ version = "0.21.1";
+ edition = "2018";
+ sha256 = "1v55b1in7dn07s6vxr8dajqpvxkxjbfq6qamnjgcbnq9x3pawsnh";
+ procMacro = true;
+ authors = [
+ "Peter Glotfelty "
+ ];
+ dependencies = [
+ {
+ name = "heck";
+ packageId = "heck";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "parsing" "extra-traits" ];
+ }
+ ];
+
+ };
+ "syn" = rec {
+ crateName = "syn";
+ version = "1.0.73";
+ edition = "2018";
+ sha256 = "1ixw4lscc7009ibaic8g5bvnc94hdcr62ksjk3jjl38363zqj57p";
+ authors = [
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ {
+ name = "unicode-xid";
+ packageId = "unicode-xid";
+ }
+ ];
+ features = {
+ "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ];
+ "printing" = [ "quote" ];
+ "proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ];
+ "test" = [ "syn-test-suite/all-features" ];
+ };
+ resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "quote" "visit" "visit-mut" ];
+ };
+ "tempfile" = rec {
+ crateName = "tempfile";
+ version = "3.2.0";
+ edition = "2018";
+ sha256 = "08pbf3c1i42382dc44dil5bgiawcsi0qk6zdibw10f69rxiwdhfs";
+ authors = [
+ "Steven Allen "
+ "The Rust Project Developers"
+ "Ashley Mannix "
+ "Jason White "
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."unix" or false);
+ }
+ {
+ name = "rand";
+ packageId = "rand 0.8.4";
+ }
+ {
+ name = "redox_syscall";
+ packageId = "redox_syscall";
+ target = { target, features }: (target."os" == "redox");
+ }
+ {
+ name = "remove_dir_all";
+ packageId = "remove_dir_all";
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "fileapi" "handleapi" "winbase" ];
+ }
+ ];
+
+ };
+ "termcolor" = rec {
+ crateName = "termcolor";
+ version = "1.1.2";
+ edition = "2018";
+ sha256 = "1x65i1ny4m6z1by62ra6wdcrd557p2ysm866x0pg60zby2cxizid";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "winapi-util";
+ packageId = "winapi-util";
+ target = { target, features }: (target."windows" or false);
+ }
+ ];
+
+ };
+ "test-env-log" = rec {
+ crateName = "test-env-log";
+ version = "0.2.7";
+ edition = "2018";
+ sha256 = "0i151j7r14j65lrv753s138g7pkslq6l1jyg0q6qmk1hlqrb3r5k";
+ procMacro = true;
+ authors = [
+ "Daniel Mueller "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "full" ];
+ }
+ ];
+ features = {
+ "default" = [ "log" ];
+ };
+ resolvedDefaultFeatures = [ "default" "log" "trace" ];
+ };
+ "textwrap 0.11.0" = rec {
+ crateName = "textwrap";
+ version = "0.11.0";
+ edition = "2015";
+ sha256 = "0q5hky03ik3y50s9sz25r438bc4nwhqc6dqwynv4wylc807n29nk";
+ authors = [
+ "Martin Geisler "
+ ];
+ dependencies = [
+ {
+ name = "unicode-width";
+ packageId = "unicode-width";
+ }
+ ];
+
+ };
+ "textwrap 0.12.1" = rec {
+ crateName = "textwrap";
+ version = "0.12.1";
+ edition = "2018";
+ sha256 = "12978qmkl5gcp94lxndpvp9qxq8mxp7hm9xbrw3422dgikchhc10";
+ authors = [
+ "Martin Geisler "
+ ];
+ dependencies = [
+ {
+ name = "unicode-width";
+ packageId = "unicode-width";
+ }
+ ];
+
+ };
+ "thiserror" = rec {
+ crateName = "thiserror";
+ version = "1.0.25";
+ edition = "2018";
+ sha256 = "1ip9j8riar3xffp261yls4phpasz768xhnafxdz4qlargx2pcvzs";
+ authors = [
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "thiserror-impl";
+ packageId = "thiserror-impl";
+ }
+ ];
+
+ };
+ "thiserror-impl" = rec {
+ crateName = "thiserror-impl";
+ version = "1.0.25";
+ edition = "2018";
+ sha256 = "139i3bxidyncjd1sphkn4c577nkba8lzmphhr9gb26xz1y67cdla";
+ procMacro = true;
+ authors = [
+ "David Tolnay "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ }
+ ];
+
+ };
+ "thread_local" = rec {
+ crateName = "thread_local";
+ version = "1.1.3";
+ edition = "2018";
+ sha256 = "1gccp3grndpi6dyhzylz4hkqnkzc1xyri98n0xwwhnn90i7d4640";
+ authors = [
+ "Amanieu d'Antras "
+ ];
+ dependencies = [
+ {
+ name = "once_cell";
+ packageId = "once_cell";
+ }
+ ];
+
+ };
+ "tinytemplate" = rec {
+ crateName = "tinytemplate";
+ version = "1.2.1";
+ edition = "2015";
+ sha256 = "1g5n77cqkdh9hy75zdb01adxn45mkh9y40wdr7l68xpz35gnnkdy";
+ authors = [
+ "Brook Heisler "
+ ];
+ dependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ }
+ ];
+
+ };
+ "toml" = rec {
+ crateName = "toml";
+ version = "0.5.8";
+ edition = "2018";
+ sha256 = "1apcmjrrjw429pjw7mqlmdwwd67g8305vwqy4kw3swr612bl44d3";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ ];
+ features = {
+ "preserve_order" = [ "indexmap" ];
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "tracing" = rec {
+ crateName = "tracing";
+ version = "0.1.26";
+ edition = "2018";
+ sha256 = "17dqjhixmnbrk0c99ydb3b9pygjnzfb7yhlasb6134s4jy6fpb89";
+ authors = [
+ "Eliza Weisman "
+ "Tokio Contributors "
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "log";
+ packageId = "log";
+ optional = true;
+ }
+ {
+ name = "pin-project-lite";
+ packageId = "pin-project-lite";
+ }
+ {
+ name = "tracing-attributes";
+ packageId = "tracing-attributes";
+ optional = true;
+ }
+ {
+ name = "tracing-core";
+ packageId = "tracing-core";
+ usesDefaultFeatures = false;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "log";
+ packageId = "log";
+ }
+ ];
+ features = {
+ "attributes" = [ "tracing-attributes" ];
+ "default" = [ "std" "attributes" ];
+ "log-always" = [ "log" ];
+ "std" = [ "tracing-core/std" ];
+ };
+ resolvedDefaultFeatures = [ "attributes" "default" "log" "std" "tracing-attributes" ];
+ };
+ "tracing-attributes" = rec {
+ crateName = "tracing-attributes";
+ version = "0.1.15";
+ edition = "2018";
+ sha256 = "1qni83p58nrp20i256zm169dnf7cylfchkfd9iza3j076fjnybn4";
+ procMacro = true;
+ authors = [
+ "Tokio Contributors "
+ "Eliza Weisman "
+ "David Barsky "
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ usesDefaultFeatures = false;
+ features = [ "full" "parsing" "printing" "visit" "visit-mut" "clone-impls" "extra-traits" "proc-macro" ];
+ }
+ ];
+ features = {
+ };
+ };
+ "tracing-core" = rec {
+ crateName = "tracing-core";
+ version = "0.1.18";
+ edition = "2018";
+ sha256 = "0lm0li6lx75jgbbgxsb45439257sqb0j7828caf2hjqsigwi9zx9";
+ authors = [
+ "Tokio Contributors "
+ ];
+ dependencies = [
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "std" = [ "lazy_static" ];
+ };
+ resolvedDefaultFeatures = [ "default" "lazy_static" "std" ];
+ };
+ "tracing-log" = rec {
+ crateName = "tracing-log";
+ version = "0.1.2";
+ edition = "2018";
+ sha256 = "1qv1cwvdqrgvizkszbff4fvkw0m3nn5yz68r3yaw2hcflivk94m6";
+ authors = [
+ "Tokio Contributors "
+ ];
+ dependencies = [
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ {
+ name = "log";
+ packageId = "log";
+ }
+ {
+ name = "tracing-core";
+ packageId = "tracing-core";
+ }
+ ];
+ features = {
+ "default" = [ "log-tracer" "trace-logger" "std" ];
+ "std" = [ "log/std" ];
+ };
+ resolvedDefaultFeatures = [ "log-tracer" "std" ];
+ };
+ "tracing-serde" = rec {
+ crateName = "tracing-serde";
+ version = "0.1.2";
+ edition = "2018";
+ sha256 = "12xjirg0b3cparjdhkd9pksrmv33gz7rdm4gfkvgk15v3x2flrgv";
+ authors = [
+ "Tokio Contributors "
+ ];
+ dependencies = [
+ {
+ name = "serde";
+ packageId = "serde";
+ }
+ {
+ name = "tracing-core";
+ packageId = "tracing-core";
+ }
+ ];
+
+ };
+ "tracing-subscriber" = rec {
+ crateName = "tracing-subscriber";
+ version = "0.2.19";
+ edition = "2018";
+ sha256 = "0j6yg01c5zir4x6qmz9k491vaa254msjnbf6wf5xk97w86bh2sdb";
+ authors = [
+ "Eliza Weisman "
+ "David Barsky "
+ "Tokio Contributors "
+ ];
+ dependencies = [
+ {
+ name = "ansi_term";
+ packageId = "ansi_term 0.12.1";
+ optional = true;
+ }
+ {
+ name = "chrono";
+ packageId = "chrono";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "clock" "std" ];
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ optional = true;
+ }
+ {
+ name = "matchers";
+ packageId = "matchers";
+ optional = true;
+ }
+ {
+ name = "regex";
+ packageId = "regex";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ optional = true;
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ optional = true;
+ }
+ {
+ name = "sharded-slab";
+ packageId = "sharded-slab";
+ optional = true;
+ }
+ {
+ name = "smallvec";
+ packageId = "smallvec";
+ optional = true;
+ }
+ {
+ name = "thread_local";
+ packageId = "thread_local";
+ optional = true;
+ }
+ {
+ name = "tracing";
+ packageId = "tracing";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "tracing-core";
+ packageId = "tracing-core";
+ }
+ {
+ name = "tracing-log";
+ packageId = "tracing-log";
+ optional = true;
+ usesDefaultFeatures = false;
+ features = [ "log-tracer" "std" ];
+ }
+ {
+ name = "tracing-serde";
+ packageId = "tracing-serde";
+ optional = true;
+ }
+ ];
+ devDependencies = [
+ {
+ name = "regex";
+ packageId = "regex";
+ usesDefaultFeatures = false;
+ features = [ "std" ];
+ }
+ {
+ name = "tracing";
+ packageId = "tracing";
+ }
+ {
+ name = "tracing-log";
+ packageId = "tracing-log";
+ }
+ ];
+ features = {
+ "ansi" = [ "fmt" "ansi_term" ];
+ "default" = [ "env-filter" "smallvec" "fmt" "ansi" "chrono" "tracing-log" "json" ];
+ "env-filter" = [ "matchers" "regex" "lazy_static" "tracing" ];
+ "fmt" = [ "registry" ];
+ "json" = [ "tracing-serde" "serde" "serde_json" ];
+ "registry" = [ "sharded-slab" "thread_local" ];
+ };
+ resolvedDefaultFeatures = [ "ansi" "ansi_term" "chrono" "default" "env-filter" "fmt" "json" "lazy_static" "matchers" "regex" "registry" "serde" "serde_json" "sharded-slab" "smallvec" "thread_local" "tracing" "tracing-log" "tracing-serde" ];
+ };
+ "typenum" = rec {
+ crateName = "typenum";
+ version = "1.13.0";
+ edition = "2018";
+ sha256 = "01lbbspn4080yg8wp6y7q3xcqih1c1dmkkx4pwax4z1a9436k7w7";
+ build = "build/main.rs";
+ authors = [
+ "Paho Lurie-Gregg "
+ "Andre Bogus "
+ ];
+ features = {
+ };
+ };
+ "ucd-trie" = rec {
+ crateName = "ucd-trie";
+ version = "0.1.3";
+ edition = "2018";
+ sha256 = "072cblf8v3wzyaz3lhbpzgil4s03dpzg1ppy3gqx2l4v622y3pjn";
+ authors = [
+ "Andrew Gallant "
+ ];
+ features = {
+ "default" = [ "std" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "unicode-segmentation" = rec {
+ crateName = "unicode-segmentation";
+ version = "1.7.1";
+ edition = "2015";
+ sha256 = "15n736z0pbj30pj44jb9s9rjavzrmx8v8pzdgsl5yfmfwrxjw3dv";
+ authors = [
+ "kwantam "
+ "Manish Goregaokar "
+ ];
+ features = {
+ };
+ };
+ "unicode-width" = rec {
+ crateName = "unicode-width";
+ version = "0.1.8";
+ edition = "2015";
+ sha256 = "1qxizyi6xbcqyi4z79p523ywvmgsfcgfqb3zv3c8i6x1jcc5jdwk";
+ authors = [
+ "kwantam "
+ "Manish Goregaokar "
+ ];
+ features = {
+ "rustc-dep-of-std" = [ "std" "core" "compiler_builtins" ];
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "unicode-xid" = rec {
+ crateName = "unicode-xid";
+ version = "0.2.2";
+ edition = "2015";
+ sha256 = "1wrkgcw557v311dkdb6n2hrix9dm2qdsb1zpw7pn79l03zb85jwc";
+ authors = [
+ "erick.tryzelaar "
+ "kwantam "
+ "Manish Goregaokar "
+ ];
+ features = {
+ };
+ resolvedDefaultFeatures = [ "default" ];
+ };
+ "uuid" = rec {
+ crateName = "uuid";
+ version = "0.8.2";
+ edition = "2018";
+ sha256 = "1dy4ldcp7rnzjy56dxh7d2sgrcvn4q77y0a8r0a48946h66zjp5w";
+ authors = [
+ "Ashley Mannix"
+ "Christopher Armstrong"
+ "Dylan DPC"
+ "Hunar Roop Kahlon"
+ ];
+ dependencies = [
+ {
+ name = "getrandom";
+ packageId = "getrandom 0.2.3";
+ optional = true;
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ optional = true;
+ usesDefaultFeatures = false;
+ }
+ ];
+ features = {
+ "default" = [ "std" ];
+ "guid" = [ "winapi" ];
+ "stdweb" = [ "getrandom" "getrandom/js" ];
+ "v3" = [ "md5" ];
+ "v4" = [ "getrandom" ];
+ "v5" = [ "sha1" ];
+ "wasm-bindgen" = [ "getrandom" "getrandom/js" ];
+ };
+ resolvedDefaultFeatures = [ "default" "getrandom" "serde" "std" "v4" "wasm-bindgen" ];
+ };
+ "vec_map" = rec {
+ crateName = "vec_map";
+ version = "0.8.2";
+ edition = "2015";
+ sha256 = "1481w9g1dw9rxp3l6snkdqihzyrd2f8vispzqmwjwsdyhw8xzggi";
+ authors = [
+ "Alex Crichton "
+ "Jorge Aparicio "
+ "Alexis Beingessner "
+ "Brian Anderson <>"
+ "tbu- <>"
+ "Manish Goregaokar <>"
+ "Aaron Turon "
+ "Adolfo Ochagavía <>"
+ "Niko Matsakis <>"
+ "Steven Fackler <>"
+ "Chase Southwood "
+ "Eduard Burtescu <>"
+ "Florian Wilkens <>"
+ "Félix Raimundo <>"
+ "Tibor Benke <>"
+ "Markus Siemens "
+ "Josh Branchaud "
+ "Huon Wilson "
+ "Corey Farwell "
+ "Aaron Liblong <>"
+ "Nick Cameron "
+ "Patrick Walton "
+ "Felix S Klock II <>"
+ "Andrew Paseltiner "
+ "Sean McArthur "
+ "Vadim Petrochenkov <>"
+ ];
+ features = {
+ "eders" = [ "serde" ];
+ };
+ };
+ "version_check" = rec {
+ crateName = "version_check";
+ version = "0.9.3";
+ edition = "2015";
+ sha256 = "1zmkcgj2m0pq0l4wnhrp1wl1lygf7x2h5p7pvjwc4719lnlxrv2z";
+ authors = [
+ "Sergio Benitez "
+ ];
+
+ };
+ "wait-timeout" = rec {
+ crateName = "wait-timeout";
+ version = "0.2.0";
+ edition = "2015";
+ crateBin = [];
+ sha256 = "1xpkk0j5l9pfmjfh1pi0i89invlavfrd9av5xp0zhxgb29dhy84z";
+ authors = [
+ "Alex Crichton "
+ ];
+ dependencies = [
+ {
+ name = "libc";
+ packageId = "libc";
+ target = { target, features }: (target."unix" or false);
+ }
+ ];
+
+ };
+ "walkdir" = rec {
+ crateName = "walkdir";
+ version = "2.3.2";
+ edition = "2018";
+ sha256 = "0mnszy33685v8y9js8mw6x2p3iddqs8vfj7n2dhqddnlbirz5340";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "same-file";
+ packageId = "same-file";
+ }
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "std" "winnt" ];
+ }
+ {
+ name = "winapi-util";
+ packageId = "winapi-util";
+ target = { target, features }: (target."windows" or false);
+ }
+ ];
+
+ };
+ "wasi 0.10.2+wasi-snapshot-preview1" = rec {
+ crateName = "wasi";
+ version = "0.10.2+wasi-snapshot-preview1";
+ edition = "2018";
+ sha256 = "1ii7nff4y1mpcrxzzvbpgxm7a1nn3szjf1n21jnx37c2g6dbsvzx";
+ authors = [
+ "The Cranelift Project Developers"
+ ];
+ features = {
+ "default" = [ "std" ];
+ "rustc-dep-of-std" = [ "compiler_builtins" "core" "rustc-std-workspace-alloc" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "wasi 0.9.0+wasi-snapshot-preview1" = rec {
+ crateName = "wasi";
+ version = "0.9.0+wasi-snapshot-preview1";
+ edition = "2018";
+ sha256 = "06g5v3vrdapfzvfq662cij7v8a1flwr2my45nnncdv2galrdzkfc";
+ authors = [
+ "The Cranelift Project Developers"
+ ];
+ features = {
+ "default" = [ "std" ];
+ "rustc-dep-of-std" = [ "compiler_builtins" "core" "rustc-std-workspace-alloc" ];
+ };
+ resolvedDefaultFeatures = [ "default" "std" ];
+ };
+ "wasm-bindgen" = rec {
+ crateName = "wasm-bindgen";
+ version = "0.2.74";
+ edition = "2018";
+ sha256 = "1zcp57mwb47vdw3r594cl7vbj6pwd503xrkq8a3phvs8xpaf2knm";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "serde";
+ packageId = "serde";
+ optional = true;
+ }
+ {
+ name = "serde_json";
+ packageId = "serde_json";
+ optional = true;
+ }
+ {
+ name = "wasm-bindgen-macro";
+ packageId = "wasm-bindgen-macro";
+ }
+ ];
+ features = {
+ "default" = [ "spans" "std" ];
+ "enable-interning" = [ "std" ];
+ "serde-serialize" = [ "serde" "serde_json" "std" ];
+ "spans" = [ "wasm-bindgen-macro/spans" ];
+ "strict-macro" = [ "wasm-bindgen-macro/strict-macro" ];
+ "xxx_debug_only_print_generated_code" = [ "wasm-bindgen-macro/xxx_debug_only_print_generated_code" ];
+ };
+ resolvedDefaultFeatures = [ "default" "serde" "serde-serialize" "serde_json" "spans" "std" ];
+ };
+ "wasm-bindgen-backend" = rec {
+ crateName = "wasm-bindgen-backend";
+ version = "0.2.74";
+ edition = "2018";
+ sha256 = "005ra6jc8pm1y2wi6swkvn34r2is3knv5f2dv59ymkscd6hgccrv";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "bumpalo";
+ packageId = "bumpalo";
+ }
+ {
+ name = "lazy_static";
+ packageId = "lazy_static";
+ }
+ {
+ name = "log";
+ packageId = "log";
+ }
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "full" ];
+ }
+ {
+ name = "wasm-bindgen-shared";
+ packageId = "wasm-bindgen-shared";
+ }
+ ];
+ features = {
+ "extra-traits" = [ "syn/extra-traits" ];
+ };
+ resolvedDefaultFeatures = [ "spans" ];
+ };
+ "wasm-bindgen-futures 0.3.27" = rec {
+ crateName = "wasm-bindgen-futures";
+ version = "0.3.27";
+ edition = "2018";
+ sha256 = "073p71skp91d9v2wczl6k7z9p0w25vn43br2v2g1ncbc6hvhnhl3";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 0.1.10";
+ }
+ {
+ name = "futures";
+ packageId = "futures 0.1.31";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ {
+ name = "web-sys";
+ packageId = "web-sys";
+ target = { target, features }: (builtins.elem "atomics" targetFeatures);
+ features = [ "MessageEvent" "Worker" ];
+ }
+ ];
+ features = {
+ "futures_0_3" = [ "futures-util-preview" "futures-channel-preview" "lazy_static" ];
+ };
+ };
+ "wasm-bindgen-futures 0.4.24" = rec {
+ crateName = "wasm-bindgen-futures";
+ version = "0.4.24";
+ edition = "2018";
+ sha256 = "1wb75qgv91qjblv685hnka2fn3w4fp0wi05cs3i3rmbrqrw7kfjz";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "cfg-if";
+ packageId = "cfg-if 1.0.0";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ {
+ name = "web-sys";
+ packageId = "web-sys";
+ target = { target, features }: (builtins.elem "atomics" targetFeatures);
+ features = [ "MessageEvent" "Worker" ];
+ }
+ ];
+ features = {
+ "futures-core-03-stream" = [ "futures-core" ];
+ };
+ };
+ "wasm-bindgen-macro" = rec {
+ crateName = "wasm-bindgen-macro";
+ version = "0.2.74";
+ edition = "2018";
+ sha256 = "1m4bn6wlzc2rkp693zgnn7kh05r5fm4w55l0igjy23s3c756k088";
+ procMacro = true;
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "wasm-bindgen-macro-support";
+ packageId = "wasm-bindgen-macro-support";
+ }
+ ];
+ features = {
+ "spans" = [ "wasm-bindgen-macro-support/spans" ];
+ "strict-macro" = [ "wasm-bindgen-macro-support/strict-macro" ];
+ };
+ resolvedDefaultFeatures = [ "spans" ];
+ };
+ "wasm-bindgen-macro-support" = rec {
+ crateName = "wasm-bindgen-macro-support";
+ version = "0.2.74";
+ edition = "2018";
+ sha256 = "15vsk3q4jfk8ax4walc8vy3fgvrpkg86vjz2ym0z5ngk5xa428my";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ {
+ name = "syn";
+ packageId = "syn";
+ features = [ "visit" "full" ];
+ }
+ {
+ name = "wasm-bindgen-backend";
+ packageId = "wasm-bindgen-backend";
+ }
+ {
+ name = "wasm-bindgen-shared";
+ packageId = "wasm-bindgen-shared";
+ }
+ ];
+ features = {
+ "extra-traits" = [ "syn/extra-traits" ];
+ "spans" = [ "wasm-bindgen-backend/spans" ];
+ };
+ resolvedDefaultFeatures = [ "spans" ];
+ };
+ "wasm-bindgen-shared" = rec {
+ crateName = "wasm-bindgen-shared";
+ version = "0.2.74";
+ edition = "2018";
+ sha256 = "0ksbnhjzvnsmzc1n18bs98swnrzrwxjrpx3clrsyv3pip1vgikyp";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+
+ };
+ "wasm-bindgen-test" = rec {
+ crateName = "wasm-bindgen-test";
+ version = "0.3.24";
+ edition = "2018";
+ sha256 = "1s5sw7aaq65pndcrvp0bisq4cc63n1ajvn9fi316814pkdm43awc";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "console_error_panic_hook";
+ packageId = "console_error_panic_hook";
+ }
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "scoped-tls";
+ packageId = "scoped-tls";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ {
+ name = "wasm-bindgen-futures";
+ packageId = "wasm-bindgen-futures 0.4.24";
+ }
+ {
+ name = "wasm-bindgen-test-macro";
+ packageId = "wasm-bindgen-test-macro";
+ }
+ ];
+
+ };
+ "wasm-bindgen-test-macro" = rec {
+ crateName = "wasm-bindgen-test-macro";
+ version = "0.3.24";
+ edition = "2018";
+ sha256 = "10p7s3zg8pinmb99yi5sgrnqbgf69h821xwbv7q1wm7kdky46ifx";
+ procMacro = true;
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "proc-macro2";
+ packageId = "proc-macro2";
+ }
+ {
+ name = "quote";
+ packageId = "quote";
+ }
+ ];
+
+ };
+ "web-sys" = rec {
+ crateName = "web-sys";
+ version = "0.3.51";
+ edition = "2018";
+ sha256 = "10p514z7zmwzxqll0z0zqhlswv3hadbrwais3l8zfgcz6xxl2a78";
+ authors = [
+ "The wasm-bindgen Developers"
+ ];
+ dependencies = [
+ {
+ name = "js-sys";
+ packageId = "js-sys";
+ }
+ {
+ name = "wasm-bindgen";
+ packageId = "wasm-bindgen";
+ }
+ ];
+ features = {
+ "AbortSignal" = [ "EventTarget" ];
+ "AnalyserNode" = [ "AudioNode" "EventTarget" ];
+ "Animation" = [ "EventTarget" ];
+ "AnimationEvent" = [ "Event" ];
+ "AnimationPlaybackEvent" = [ "Event" ];
+ "Attr" = [ "EventTarget" "Node" ];
+ "AudioBufferSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
+ "AudioContext" = [ "BaseAudioContext" "EventTarget" ];
+ "AudioDestinationNode" = [ "AudioNode" "EventTarget" ];
+ "AudioNode" = [ "EventTarget" ];
+ "AudioProcessingEvent" = [ "Event" ];
+ "AudioScheduledSourceNode" = [ "AudioNode" "EventTarget" ];
+ "AudioStreamTrack" = [ "EventTarget" "MediaStreamTrack" ];
+ "AudioTrackList" = [ "EventTarget" ];
+ "AudioWorklet" = [ "Worklet" ];
+ "AudioWorkletGlobalScope" = [ "WorkletGlobalScope" ];
+ "AudioWorkletNode" = [ "AudioNode" "EventTarget" ];
+ "AuthenticatorAssertionResponse" = [ "AuthenticatorResponse" ];
+ "AuthenticatorAttestationResponse" = [ "AuthenticatorResponse" ];
+ "BaseAudioContext" = [ "EventTarget" ];
+ "BatteryManager" = [ "EventTarget" ];
+ "BeforeUnloadEvent" = [ "Event" ];
+ "BiquadFilterNode" = [ "AudioNode" "EventTarget" ];
+ "BlobEvent" = [ "Event" ];
+ "Bluetooth" = [ "EventTarget" ];
+ "BluetoothAdvertisingEvent" = [ "Event" ];
+ "BluetoothDevice" = [ "EventTarget" ];
+ "BluetoothPermissionResult" = [ "EventTarget" "PermissionStatus" ];
+ "BluetoothRemoteGattCharacteristic" = [ "EventTarget" ];
+ "BluetoothRemoteGattService" = [ "EventTarget" ];
+ "BroadcastChannel" = [ "EventTarget" ];
+ "CanvasCaptureMediaStream" = [ "EventTarget" "MediaStream" ];
+ "CdataSection" = [ "CharacterData" "EventTarget" "Node" "Text" ];
+ "ChannelMergerNode" = [ "AudioNode" "EventTarget" ];
+ "ChannelSplitterNode" = [ "AudioNode" "EventTarget" ];
+ "CharacterData" = [ "EventTarget" "Node" ];
+ "ChromeWorker" = [ "EventTarget" "Worker" ];
+ "Clipboard" = [ "EventTarget" ];
+ "ClipboardEvent" = [ "Event" ];
+ "CloseEvent" = [ "Event" ];
+ "Comment" = [ "CharacterData" "EventTarget" "Node" ];
+ "CompositionEvent" = [ "Event" "UiEvent" ];
+ "ConstantSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
+ "ConvolverNode" = [ "AudioNode" "EventTarget" ];
+ "CssAnimation" = [ "Animation" "EventTarget" ];
+ "CssConditionRule" = [ "CssGroupingRule" "CssRule" ];
+ "CssCounterStyleRule" = [ "CssRule" ];
+ "CssFontFaceRule" = [ "CssRule" ];
+ "CssFontFeatureValuesRule" = [ "CssRule" ];
+ "CssGroupingRule" = [ "CssRule" ];
+ "CssImportRule" = [ "CssRule" ];
+ "CssKeyframeRule" = [ "CssRule" ];
+ "CssKeyframesRule" = [ "CssRule" ];
+ "CssMediaRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ];
+ "CssNamespaceRule" = [ "CssRule" ];
+ "CssPageRule" = [ "CssRule" ];
+ "CssStyleRule" = [ "CssRule" ];
+ "CssStyleSheet" = [ "StyleSheet" ];
+ "CssSupportsRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ];
+ "CssTransition" = [ "Animation" "EventTarget" ];
+ "CustomEvent" = [ "Event" ];
+ "DedicatedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
+ "DelayNode" = [ "AudioNode" "EventTarget" ];
+ "DeviceLightEvent" = [ "Event" ];
+ "DeviceMotionEvent" = [ "Event" ];
+ "DeviceOrientationEvent" = [ "Event" ];
+ "DeviceProximityEvent" = [ "Event" ];
+ "Document" = [ "EventTarget" "Node" ];
+ "DocumentFragment" = [ "EventTarget" "Node" ];
+ "DocumentTimeline" = [ "AnimationTimeline" ];
+ "DocumentType" = [ "EventTarget" "Node" ];
+ "DomMatrix" = [ "DomMatrixReadOnly" ];
+ "DomPoint" = [ "DomPointReadOnly" ];
+ "DomRect" = [ "DomRectReadOnly" ];
+ "DomRequest" = [ "EventTarget" ];
+ "DragEvent" = [ "Event" "MouseEvent" "UiEvent" ];
+ "DynamicsCompressorNode" = [ "AudioNode" "EventTarget" ];
+ "Element" = [ "EventTarget" "Node" ];
+ "ErrorEvent" = [ "Event" ];
+ "EventSource" = [ "EventTarget" ];
+ "ExtendableEvent" = [ "Event" ];
+ "ExtendableMessageEvent" = [ "Event" "ExtendableEvent" ];
+ "FetchEvent" = [ "Event" "ExtendableEvent" ];
+ "FetchObserver" = [ "EventTarget" ];
+ "File" = [ "Blob" ];
+ "FileReader" = [ "EventTarget" ];
+ "FileSystemDirectoryEntry" = [ "FileSystemEntry" ];
+ "FileSystemFileEntry" = [ "FileSystemEntry" ];
+ "FocusEvent" = [ "Event" "UiEvent" ];
+ "FontFaceSet" = [ "EventTarget" ];
+ "FontFaceSetLoadEvent" = [ "Event" ];
+ "GainNode" = [ "AudioNode" "EventTarget" ];
+ "GamepadAxisMoveEvent" = [ "Event" "GamepadEvent" ];
+ "GamepadButtonEvent" = [ "Event" "GamepadEvent" ];
+ "GamepadEvent" = [ "Event" ];
+ "GpuDevice" = [ "EventTarget" ];
+ "GpuUncapturedErrorEvent" = [ "Event" ];
+ "HashChangeEvent" = [ "Event" ];
+ "HtmlAnchorElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlAudioElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ];
+ "HtmlBaseElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlBodyElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlBrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlButtonElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlCanvasElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDataElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDataListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDetailsElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDialogElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDirectoryElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDivElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlDocument" = [ "Document" "EventTarget" "Node" ];
+ "HtmlElement" = [ "Element" "EventTarget" "Node" ];
+ "HtmlEmbedElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlFieldSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlFontElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlFormControlsCollection" = [ "HtmlCollection" ];
+ "HtmlFormElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlFrameSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlHeadElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlHeadingElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlHrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlHtmlElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlIFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlImageElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlInputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlLabelElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlLegendElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlLiElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlLinkElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMapElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMediaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMenuElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMenuItemElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMetaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlMeterElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlModElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlOListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlObjectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlOptGroupElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlOptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlOptionsCollection" = [ "HtmlCollection" ];
+ "HtmlOutputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlParagraphElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlParamElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlPictureElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlPreElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlProgressElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlQuoteElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlScriptElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlSelectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlSlotElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlSourceElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlSpanElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlStyleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableCaptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableCellElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableColElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableRowElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTableSectionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTemplateElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTextAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTimeElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTitleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlTrackElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlUListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlUnknownElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ];
+ "HtmlVideoElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ];
+ "IdbCursorWithValue" = [ "IdbCursor" ];
+ "IdbDatabase" = [ "EventTarget" ];
+ "IdbFileHandle" = [ "EventTarget" ];
+ "IdbFileRequest" = [ "DomRequest" "EventTarget" ];
+ "IdbLocaleAwareKeyRange" = [ "IdbKeyRange" ];
+ "IdbMutableFile" = [ "EventTarget" ];
+ "IdbOpenDbRequest" = [ "EventTarget" "IdbRequest" ];
+ "IdbRequest" = [ "EventTarget" ];
+ "IdbTransaction" = [ "EventTarget" ];
+ "IdbVersionChangeEvent" = [ "Event" ];
+ "IirFilterNode" = [ "AudioNode" "EventTarget" ];
+ "ImageCaptureErrorEvent" = [ "Event" ];
+ "InputEvent" = [ "Event" "UiEvent" ];
+ "KeyboardEvent" = [ "Event" "UiEvent" ];
+ "KeyframeEffect" = [ "AnimationEffect" ];
+ "LocalMediaStream" = [ "EventTarget" "MediaStream" ];
+ "MediaDevices" = [ "EventTarget" ];
+ "MediaElementAudioSourceNode" = [ "AudioNode" "EventTarget" ];
+ "MediaEncryptedEvent" = [ "Event" ];
+ "MediaKeyError" = [ "Event" ];
+ "MediaKeyMessageEvent" = [ "Event" ];
+ "MediaKeySession" = [ "EventTarget" ];
+ "MediaQueryList" = [ "EventTarget" ];
+ "MediaQueryListEvent" = [ "Event" ];
+ "MediaRecorder" = [ "EventTarget" ];
+ "MediaRecorderErrorEvent" = [ "Event" ];
+ "MediaSource" = [ "EventTarget" ];
+ "MediaStream" = [ "EventTarget" ];
+ "MediaStreamAudioDestinationNode" = [ "AudioNode" "EventTarget" ];
+ "MediaStreamAudioSourceNode" = [ "AudioNode" "EventTarget" ];
+ "MediaStreamEvent" = [ "Event" ];
+ "MediaStreamTrack" = [ "EventTarget" ];
+ "MediaStreamTrackEvent" = [ "Event" ];
+ "MessageEvent" = [ "Event" ];
+ "MessagePort" = [ "EventTarget" ];
+ "MidiAccess" = [ "EventTarget" ];
+ "MidiConnectionEvent" = [ "Event" ];
+ "MidiInput" = [ "EventTarget" "MidiPort" ];
+ "MidiMessageEvent" = [ "Event" ];
+ "MidiOutput" = [ "EventTarget" "MidiPort" ];
+ "MidiPort" = [ "EventTarget" ];
+ "MouseEvent" = [ "Event" "UiEvent" ];
+ "MouseScrollEvent" = [ "Event" "MouseEvent" "UiEvent" ];
+ "MutationEvent" = [ "Event" ];
+ "NetworkInformation" = [ "EventTarget" ];
+ "Node" = [ "EventTarget" ];
+ "Notification" = [ "EventTarget" ];
+ "NotificationEvent" = [ "Event" "ExtendableEvent" ];
+ "OfflineAudioCompletionEvent" = [ "Event" ];
+ "OfflineAudioContext" = [ "BaseAudioContext" "EventTarget" ];
+ "OfflineResourceList" = [ "EventTarget" ];
+ "OffscreenCanvas" = [ "EventTarget" ];
+ "OscillatorNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ];
+ "PageTransitionEvent" = [ "Event" ];
+ "PaintWorkletGlobalScope" = [ "WorkletGlobalScope" ];
+ "PannerNode" = [ "AudioNode" "EventTarget" ];
+ "PaymentMethodChangeEvent" = [ "Event" "PaymentRequestUpdateEvent" ];
+ "PaymentRequestUpdateEvent" = [ "Event" ];
+ "Performance" = [ "EventTarget" ];
+ "PerformanceMark" = [ "PerformanceEntry" ];
+ "PerformanceMeasure" = [ "PerformanceEntry" ];
+ "PerformanceNavigationTiming" = [ "PerformanceEntry" "PerformanceResourceTiming" ];
+ "PerformanceResourceTiming" = [ "PerformanceEntry" ];
+ "PermissionStatus" = [ "EventTarget" ];
+ "PointerEvent" = [ "Event" "MouseEvent" "UiEvent" ];
+ "PopStateEvent" = [ "Event" ];
+ "PopupBlockedEvent" = [ "Event" ];
+ "PresentationAvailability" = [ "EventTarget" ];
+ "PresentationConnection" = [ "EventTarget" ];
+ "PresentationConnectionAvailableEvent" = [ "Event" ];
+ "PresentationConnectionCloseEvent" = [ "Event" ];
+ "PresentationConnectionList" = [ "EventTarget" ];
+ "PresentationRequest" = [ "EventTarget" ];
+ "ProcessingInstruction" = [ "CharacterData" "EventTarget" "Node" ];
+ "ProgressEvent" = [ "Event" ];
+ "PromiseRejectionEvent" = [ "Event" ];
+ "PublicKeyCredential" = [ "Credential" ];
+ "PushEvent" = [ "Event" "ExtendableEvent" ];
+ "RadioNodeList" = [ "NodeList" ];
+ "RtcDataChannel" = [ "EventTarget" ];
+ "RtcDataChannelEvent" = [ "Event" ];
+ "RtcPeerConnection" = [ "EventTarget" ];
+ "RtcPeerConnectionIceEvent" = [ "Event" ];
+ "RtcTrackEvent" = [ "Event" ];
+ "RtcdtmfSender" = [ "EventTarget" ];
+ "RtcdtmfToneChangeEvent" = [ "Event" ];
+ "Screen" = [ "EventTarget" ];
+ "ScreenOrientation" = [ "EventTarget" ];
+ "ScriptProcessorNode" = [ "AudioNode" "EventTarget" ];
+ "ScrollAreaEvent" = [ "Event" "UiEvent" ];
+ "SecurityPolicyViolationEvent" = [ "Event" ];
+ "ServiceWorker" = [ "EventTarget" ];
+ "ServiceWorkerContainer" = [ "EventTarget" ];
+ "ServiceWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
+ "ServiceWorkerRegistration" = [ "EventTarget" ];
+ "ShadowRoot" = [ "DocumentFragment" "EventTarget" "Node" ];
+ "SharedWorker" = [ "EventTarget" ];
+ "SharedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ];
+ "SourceBuffer" = [ "EventTarget" ];
+ "SourceBufferList" = [ "EventTarget" ];
+ "SpeechRecognition" = [ "EventTarget" ];
+ "SpeechRecognitionError" = [ "Event" ];
+ "SpeechRecognitionEvent" = [ "Event" ];
+ "SpeechSynthesis" = [ "EventTarget" ];
+ "SpeechSynthesisErrorEvent" = [ "Event" "SpeechSynthesisEvent" ];
+ "SpeechSynthesisEvent" = [ "Event" ];
+ "SpeechSynthesisUtterance" = [ "EventTarget" ];
+ "StereoPannerNode" = [ "AudioNode" "EventTarget" ];
+ "StorageEvent" = [ "Event" ];
+ "SvgAnimateElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
+ "SvgAnimateMotionElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
+ "SvgAnimateTransformElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
+ "SvgAnimationElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgCircleElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgClipPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgComponentTransferFunctionElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgDefsElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgDescElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgElement" = [ "Element" "EventTarget" "Node" ];
+ "SvgEllipseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgFilterElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgForeignObjectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgGeometryElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgGraphicsElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgLineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgLinearGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ];
+ "SvgMarkerElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgMaskElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgMetadataElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgPathSegArcAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegArcRel" = [ "SvgPathSeg" ];
+ "SvgPathSegClosePath" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoCubicAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoCubicRel" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoCubicSmoothAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoCubicSmoothRel" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoQuadraticAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoQuadraticRel" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoQuadraticSmoothAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegCurvetoQuadraticSmoothRel" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoHorizontalAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoHorizontalRel" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoRel" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoVerticalAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegLinetoVerticalRel" = [ "SvgPathSeg" ];
+ "SvgPathSegMovetoAbs" = [ "SvgPathSeg" ];
+ "SvgPathSegMovetoRel" = [ "SvgPathSeg" ];
+ "SvgPatternElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgPolygonElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgPolylineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgRadialGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ];
+ "SvgRectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ];
+ "SvgScriptElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgSetElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ];
+ "SvgStopElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgStyleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgSwitchElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgSymbolElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgTextContentElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgTextElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ];
+ "SvgTextPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ];
+ "SvgTextPositioningElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ];
+ "SvgTitleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgUseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgViewElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgaElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgfeBlendElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeColorMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeComponentTransferElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeCompositeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeConvolveMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeDiffuseLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeDisplacementMapElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeDistantLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeDropShadowElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeFloodElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeFuncAElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
+ "SvgfeFuncBElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
+ "SvgfeFuncGElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
+ "SvgfeFuncRElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ];
+ "SvgfeGaussianBlurElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeMergeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeMergeNodeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeMorphologyElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeOffsetElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfePointLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeSpecularLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeSpotLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeTileElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgfeTurbulenceElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvggElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgmPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ];
+ "SvgsvgElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ];
+ "SvgtSpanElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ];
+ "TcpServerSocket" = [ "EventTarget" ];
+ "TcpServerSocketEvent" = [ "Event" ];
+ "TcpSocket" = [ "EventTarget" ];
+ "TcpSocketErrorEvent" = [ "Event" ];
+ "TcpSocketEvent" = [ "Event" ];
+ "Text" = [ "CharacterData" "EventTarget" "Node" ];
+ "TextTrack" = [ "EventTarget" ];
+ "TextTrackCue" = [ "EventTarget" ];
+ "TextTrackList" = [ "EventTarget" ];
+ "TimeEvent" = [ "Event" ];
+ "TouchEvent" = [ "Event" "UiEvent" ];
+ "TrackEvent" = [ "Event" ];
+ "TransitionEvent" = [ "Event" ];
+ "UiEvent" = [ "Event" ];
+ "Usb" = [ "EventTarget" ];
+ "UsbConnectionEvent" = [ "Event" ];
+ "UsbPermissionResult" = [ "EventTarget" "PermissionStatus" ];
+ "UserProximityEvent" = [ "Event" ];
+ "ValueEvent" = [ "Event" ];
+ "VideoStreamTrack" = [ "EventTarget" "MediaStreamTrack" ];
+ "VideoTrackList" = [ "EventTarget" ];
+ "VrDisplay" = [ "EventTarget" ];
+ "VttCue" = [ "EventTarget" "TextTrackCue" ];
+ "WaveShaperNode" = [ "AudioNode" "EventTarget" ];
+ "WebGlContextEvent" = [ "Event" ];
+ "WebKitCssMatrix" = [ "DomMatrix" "DomMatrixReadOnly" ];
+ "WebSocket" = [ "EventTarget" ];
+ "WheelEvent" = [ "Event" "MouseEvent" "UiEvent" ];
+ "Window" = [ "EventTarget" ];
+ "WindowClient" = [ "Client" ];
+ "Worker" = [ "EventTarget" ];
+ "WorkerDebuggerGlobalScope" = [ "EventTarget" ];
+ "WorkerGlobalScope" = [ "EventTarget" ];
+ "XmlDocument" = [ "Document" "EventTarget" "Node" ];
+ "XmlHttpRequest" = [ "EventTarget" "XmlHttpRequestEventTarget" ];
+ "XmlHttpRequestEventTarget" = [ "EventTarget" ];
+ "XmlHttpRequestUpload" = [ "EventTarget" "XmlHttpRequestEventTarget" ];
+ "Xr" = [ "EventTarget" ];
+ "XrBoundedReferenceSpace" = [ "EventTarget" "XrReferenceSpace" "XrSpace" ];
+ "XrInputSourceEvent" = [ "Event" ];
+ "XrInputSourcesChangeEvent" = [ "Event" ];
+ "XrReferenceSpace" = [ "EventTarget" "XrSpace" ];
+ "XrReferenceSpaceEvent" = [ "Event" ];
+ "XrSession" = [ "EventTarget" ];
+ "XrSessionEvent" = [ "Event" ];
+ "XrSpace" = [ "EventTarget" ];
+ "XrViewerPose" = [ "XrPose" ];
+ };
+ resolvedDefaultFeatures = [ "CanvasRenderingContext2d" "Document" "DomRect" "DomRectReadOnly" "Element" "Event" "EventTarget" "HtmlCanvasElement" "HtmlElement" "MessageEvent" "Node" "Window" "Worker" "console" ];
+ };
+ "winapi" = rec {
+ crateName = "winapi";
+ version = "0.3.9";
+ edition = "2015";
+ sha256 = "06gl025x418lchw1wxj64ycr7gha83m44cjr5sarhynd9xkrm0sw";
+ authors = [
+ "Peter Atashian "
+ ];
+ dependencies = [
+ {
+ name = "winapi-i686-pc-windows-gnu";
+ packageId = "winapi-i686-pc-windows-gnu";
+ target = { target, features }: (stdenv.hostPlatform.config == "i686-pc-windows-gnu");
+ }
+ {
+ name = "winapi-x86_64-pc-windows-gnu";
+ packageId = "winapi-x86_64-pc-windows-gnu";
+ target = { target, features }: (stdenv.hostPlatform.config == "x86_64-pc-windows-gnu");
+ }
+ ];
+ features = {
+ "debug" = [ "impl-debug" ];
+ };
+ resolvedDefaultFeatures = [ "consoleapi" "errhandlingapi" "fileapi" "handleapi" "minwinbase" "minwindef" "namedpipeapi" "ntdef" "processenv" "processthreadsapi" "std" "synchapi" "timezoneapi" "winbase" "wincon" "winerror" "winnt" "winuser" ];
+ };
+ "winapi-i686-pc-windows-gnu" = rec {
+ crateName = "winapi-i686-pc-windows-gnu";
+ version = "0.4.0";
+ edition = "2015";
+ sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
+ authors = [
+ "Peter Atashian "
+ ];
+
+ };
+ "winapi-util" = rec {
+ crateName = "winapi-util";
+ version = "0.1.5";
+ edition = "2018";
+ sha256 = "0y71bp7f6d536czj40dhqk0d55wfbbwqfp2ymqf1an5ibgl6rv3h";
+ authors = [
+ "Andrew Gallant "
+ ];
+ dependencies = [
+ {
+ name = "winapi";
+ packageId = "winapi";
+ target = { target, features }: (target."windows" or false);
+ features = [ "std" "consoleapi" "errhandlingapi" "fileapi" "minwindef" "processenv" "winbase" "wincon" "winerror" "winnt" ];
+ }
+ ];
+
+ };
+ "winapi-x86_64-pc-windows-gnu" = rec {
+ crateName = "winapi-x86_64-pc-windows-gnu";
+ version = "0.4.0";
+ edition = "2015";
+ sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
+ authors = [
+ "Peter Atashian "
+ ];
+
+ };
+ };
+
+ #
+# crate2nix/default.nix (excerpt start)
+#
+
+ /* Target (platform) data for conditional dependencies.
+ This corresponds roughly to what buildRustCrate is setting.
+ */
+ defaultTarget = {
+ unix = true;
+ windows = false;
+ fuchsia = true;
+ test = false;
+
+ # This doesn't appear to be officially documented anywhere yet.
+ # See https://github.com/rust-lang-nursery/rust-forge/issues/101.
+ os =
+ if stdenv.hostPlatform.isDarwin
+ then "macos"
+ else stdenv.hostPlatform.parsed.kernel.name;
+ arch = stdenv.hostPlatform.parsed.cpu.name;
+ family = "unix";
+ env = "gnu";
+ endian =
+ if stdenv.hostPlatform.parsed.cpu.significantByte.name == "littleEndian"
+ then "little" else "big";
+ pointer_width = toString stdenv.hostPlatform.parsed.cpu.bits;
+ vendor = stdenv.hostPlatform.parsed.vendor.name;
+ debug_assertions = false;
+ };
+
+ /* Filters common temp files and build files. */
+ # TODO(pkolloch): Substitute with gitignore filter
+ sourceFilter = name: type:
+ let
+ baseName = builtins.baseNameOf (builtins.toString name);
+ in
+ ! (
+ # Filter out git
+ baseName == ".gitignore"
+ || (type == "directory" && baseName == ".git")
+
+ # Filter out build results
+ || (
+ type == "directory" && (
+ baseName == "target"
+ || baseName == "_site"
+ || baseName == ".sass-cache"
+ || baseName == ".jekyll-metadata"
+ || baseName == "build-artifacts"
+ )
+ )
+
+ # Filter out nix-build result symlinks
+ || (
+ type == "symlink" && lib.hasPrefix "result" baseName
+ )
+
+ # Filter out IDE config
+ || (
+ type == "directory" && (
+ baseName == ".idea" || baseName == ".vscode"
+ )
+ ) || lib.hasSuffix ".iml" baseName
+
+ # Filter out nix build files
+ || baseName == "Cargo.nix"
+
+ # Filter out editor backup / swap files.
+ || lib.hasSuffix "~" baseName
+ || builtins.match "^\\.sw[a-z]$$" baseName != null
+ || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null
+ || lib.hasSuffix ".tmp" baseName
+ || lib.hasSuffix ".bak" baseName
+ || baseName == "tests.nix"
+ );
+
+ /* Returns a crate which depends on successful test execution
+ of crate given as the second argument.
+
+ testCrateFlags: list of flags to pass to the test exectuable
+ testInputs: list of packages that should be available during test execution
+ */
+ crateWithTest = { crate, testCrate, testCrateFlags, testInputs }:
+ assert builtins.typeOf testCrateFlags == "list";
+ assert builtins.typeOf testInputs == "list";
+ let
+ # override the `crate` so that it will build and execute tests instead of
+ # building the actual lib and bin targets We just have to pass `--test`
+ # to rustc and it will do the right thing. We execute the tests and copy
+ # their log and the test executables to $out for later inspection.
+ test =
+ let
+ drv = testCrate.override
+ (
+ _: {
+ buildTests = true;
+ }
+ );
+ in
+ pkgs.runCommand "run-tests-${testCrate.name}"
+ {
+ inherit testCrateFlags;
+ buildInputs = testInputs;
+ } ''
+ set -ex
+
+ export RUST_BACKTRACE=1
+
+ # recreate a file hierarchy as when running tests with cargo
+
+ # the source for test data
+ ${pkgs.xorg.lndir}/bin/lndir ${crate.src}
+
+ # build outputs
+ testRoot=target/debug
+ mkdir -p $testRoot
+
+ # executables of the crate
+ # we copy to prevent std::env::current_exe() to resolve to a store location
+ for i in ${crate}/bin/*; do
+ cp "$i" "$testRoot"
+ done
+ chmod +w -R .
+
+ # test harness executables are suffixed with a hash, like cargo does
+ # this allows to prevent name collision with the main
+ # executables of the crate
+ hash=$(basename $out)
+ for file in ${drv}/tests/*; do
+ f=$testRoot/$(basename $file)-$hash
+ cp $file $f
+ $f $testCrateFlags 2>&1 | tee -a $out
+ done
+ '';
+ in
+ pkgs.runCommand "${crate.name}-linked"
+ {
+ inherit (crate) outputs crateName;
+ passthru = (crate.passthru or { }) // {
+ inherit test;
+ };
+ } ''
+ echo tested by ${test}
+ ${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs}
+ '';
+
+ /* A restricted overridable version of builtRustCratesWithFeatures. */
+ buildRustCrateWithFeatures =
+ { packageId
+ , features ? rootFeatures
+ , crateOverrides ? defaultCrateOverrides
+ , buildRustCrateForPkgsFunc ? null
+ , runTests ? false
+ , testCrateFlags ? [ ]
+ , testInputs ? [ ]
+ }:
+ lib.makeOverridable
+ (
+ { features
+ , crateOverrides
+ , runTests
+ , testCrateFlags
+ , testInputs
+ }:
+ let
+ buildRustCrateForPkgsFuncOverriden =
+ if buildRustCrateForPkgsFunc != null
+ then buildRustCrateForPkgsFunc
+ else
+ (
+ if crateOverrides == pkgs.defaultCrateOverrides
+ then buildRustCrateForPkgs
+ else
+ pkgs: (buildRustCrateForPkgs pkgs).override {
+ defaultCrateOverrides = crateOverrides;
+ }
+ );
+ builtRustCrates = builtRustCratesWithFeatures {
+ inherit packageId features;
+ buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden;
+ runTests = false;
+ };
+ builtTestRustCrates = builtRustCratesWithFeatures {
+ inherit packageId features;
+ buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden;
+ runTests = true;
+ };
+ drv = builtRustCrates.crates.${packageId};
+ testDrv = builtTestRustCrates.crates.${packageId};
+ derivation =
+ if runTests then
+ crateWithTest
+ {
+ crate = drv;
+ testCrate = testDrv;
+ inherit testCrateFlags testInputs;
+ }
+ else drv;
+ in
+ derivation
+ )
+ { inherit features crateOverrides runTests testCrateFlags testInputs; };
+
+ /* Returns an attr set with packageId mapped to the result of buildRustCrateForPkgsFunc
+ for the corresponding crate.
+ */
+ builtRustCratesWithFeatures =
+ { packageId
+ , features
+ , crateConfigs ? crates
+ , buildRustCrateForPkgsFunc
+ , runTests
+ , target ? defaultTarget
+ } @ args:
+ assert (builtins.isAttrs crateConfigs);
+ assert (builtins.isString packageId);
+ assert (builtins.isList features);
+ assert (builtins.isAttrs target);
+ assert (builtins.isBool runTests);
+ let
+ rootPackageId = packageId;
+ mergedFeatures = mergePackageFeatures
+ (
+ args // {
+ inherit rootPackageId;
+ target = target // { test = runTests; };
+ }
+ );
+ # Memoize built packages so that reappearing packages are only built once.
+ builtByPackageIdByPkgs = mkBuiltByPackageIdByPkgs pkgs;
+ mkBuiltByPackageIdByPkgs = pkgs:
+ let
+ self = {
+ crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
+ build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
+ };
+ in
+ self;
+ buildByPackageIdForPkgsImpl = self: pkgs: packageId:
+ let
+ features = mergedFeatures."${packageId}" or [ ];
+ crateConfig' = crateConfigs."${packageId}";
+ crateConfig =
+ builtins.removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ];
+ devDependencies =
+ lib.optionals
+ (runTests && packageId == rootPackageId)
+ (crateConfig'.devDependencies or [ ]);
+ dependencies =
+ dependencyDerivations {
+ inherit features target;
+ buildByPackageId = depPackageId:
+ # proc_macro crates must be compiled for the build architecture
+ if crateConfigs.${depPackageId}.procMacro or false
+ then self.build.crates.${depPackageId}
+ else self.crates.${depPackageId};
+ dependencies =
+ (crateConfig.dependencies or [ ])
+ ++ devDependencies;
+ };
+ buildDependencies =
+ dependencyDerivations {
+ inherit features target;
+ buildByPackageId = depPackageId:
+ self.build.crates.${depPackageId};
+ dependencies = crateConfig.buildDependencies or [ ];
+ };
+ filterEnabledDependenciesForThis = dependencies: filterEnabledDependencies {
+ inherit dependencies features target;
+ };
+ dependenciesWithRenames =
+ lib.filter (d: d ? "rename")
+ (
+ filterEnabledDependenciesForThis
+ (
+ (crateConfig.buildDependencies or [ ])
+ ++ (crateConfig.dependencies or [ ])
+ ++ devDependencies
+ )
+ );
+ # Crate renames have the form:
+ #
+ # {
+ # crate_name = [
+ # { version = "1.2.3"; rename = "crate_name01"; }
+ # ];
+ # # ...
+ # }
+ crateRenames =
+ let
+ grouped =
+ lib.groupBy
+ (dependency: dependency.name)
+ dependenciesWithRenames;
+ versionAndRename = dep:
+ let
+ package = crateConfigs."${dep.packageId}";
+ in
+ { inherit (dep) rename; version = package.version; };
+ in
+ lib.mapAttrs (name: choices: builtins.map versionAndRename choices) grouped;
+ in
+ buildRustCrateForPkgsFunc pkgs
+ (
+ crateConfig // {
+ src = crateConfig.src or (
+ pkgs.fetchurl rec {
+ name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
+ # https://www.pietroalbini.org/blog/downloading-crates-io/
+ # Not rate-limited, CDN URL.
+ url = "https://static.crates.io/crates/${crateConfig.crateName}/${crateConfig.crateName}-${crateConfig.version}.crate";
+ sha256 =
+ assert (lib.assertMsg (crateConfig ? sha256) "Missing sha256 for ${name}");
+ crateConfig.sha256;
+ }
+ );
+ extraRustcOpts = lib.lists.optional (targetFeatures != [ ]) "-C target-feature=${lib.concatMapStringsSep "," (x: "+${x}") targetFeatures}";
+ inherit features dependencies buildDependencies crateRenames release;
+ }
+ );
+ in
+ builtByPackageIdByPkgs;
+
+ /* Returns the actual derivations for the given dependencies. */
+ dependencyDerivations =
+ { buildByPackageId
+ , features
+ , dependencies
+ , target
+ }:
+ assert (builtins.isList features);
+ assert (builtins.isList dependencies);
+ assert (builtins.isAttrs target);
+ let
+ enabledDependencies = filterEnabledDependencies {
+ inherit dependencies features target;
+ };
+ depDerivation = dependency: buildByPackageId dependency.packageId;
+ in
+ map depDerivation enabledDependencies;
+
+ /* Returns a sanitized version of val with all values substituted that cannot
+ be serialized as JSON.
+ */
+ sanitizeForJson = val:
+ if builtins.isAttrs val
+ then lib.mapAttrs (n: v: sanitizeForJson v) val
+ else if builtins.isList val
+ then builtins.map sanitizeForJson val
+ else if builtins.isFunction val
+ then "function"
+ else val;
+
+ /* Returns various tools to debug a crate. */
+ debugCrate = { packageId, target ? defaultTarget }:
+ assert (builtins.isString packageId);
+ let
+ debug = rec {
+ # The built tree as passed to buildRustCrate.
+ buildTree = buildRustCrateWithFeatures {
+ buildRustCrateForPkgsFunc = _: lib.id;
+ inherit packageId;
+ };
+ sanitizedBuildTree = sanitizeForJson buildTree;
+ dependencyTree = sanitizeForJson
+ (
+ buildRustCrateWithFeatures {
+ buildRustCrateForPkgsFunc = _: crate: {
+ "01_crateName" = crate.crateName or false;
+ "02_features" = crate.features or [ ];
+ "03_dependencies" = crate.dependencies or [ ];
+ };
+ inherit packageId;
+ }
+ );
+ mergedPackageFeatures = mergePackageFeatures {
+ features = rootFeatures;
+ inherit packageId target;
+ };
+ diffedDefaultPackageFeatures = diffDefaultPackageFeatures {
+ inherit packageId target;
+ };
+ };
+ in
+ { internal = debug; };
+
+ /* Returns differences between cargo default features and crate2nix default
+ features.
+
+ This is useful for verifying the feature resolution in crate2nix.
+ */
+ diffDefaultPackageFeatures =
+ { crateConfigs ? crates
+ , packageId
+ , target
+ }:
+ assert (builtins.isAttrs crateConfigs);
+ let
+ prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; });
+ mergedFeatures =
+ prefixValues
+ "crate2nix"
+ (mergePackageFeatures { inherit crateConfigs packageId target; features = [ "default" ]; });
+ configs = prefixValues "cargo" crateConfigs;
+ combined = lib.foldAttrs (a: b: a // b) { } [ mergedFeatures configs ];
+ onlyInCargo =
+ builtins.attrNames
+ (lib.filterAttrs (n: v: !(v ? "crate2nix") && (v ? "cargo")) combined);
+ onlyInCrate2Nix =
+ builtins.attrNames
+ (lib.filterAttrs (n: v: (v ? "crate2nix") && !(v ? "cargo")) combined);
+ differentFeatures = lib.filterAttrs
+ (
+ n: v:
+ (v ? "crate2nix")
+ && (v ? "cargo")
+ && (v.crate2nix.features or [ ]) != (v."cargo".resolved_default_features or [ ])
+ )
+ combined;
+ in
+ builtins.toJSON {
+ inherit onlyInCargo onlyInCrate2Nix differentFeatures;
+ };
+
+ /* Returns an attrset mapping packageId to the list of enabled features.
+
+ If multiple paths to a dependency enable different features, the
+ corresponding feature sets are merged. Features in rust are additive.
+ */
+ mergePackageFeatures =
+ { crateConfigs ? crates
+ , packageId
+ , rootPackageId ? packageId
+ , features ? rootFeatures
+ , dependencyPath ? [ crates.${packageId}.crateName ]
+ , featuresByPackageId ? { }
+ , target
+ # Adds devDependencies to the crate with rootPackageId.
+ , runTests ? false
+ , ...
+ } @ args:
+ assert (builtins.isAttrs crateConfigs);
+ assert (builtins.isString packageId);
+ assert (builtins.isString rootPackageId);
+ assert (builtins.isList features);
+ assert (builtins.isList dependencyPath);
+ assert (builtins.isAttrs featuresByPackageId);
+ assert (builtins.isAttrs target);
+ assert (builtins.isBool runTests);
+ let
+ crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}");
+ expandedFeatures = expandFeatures (crateConfig.features or { }) features;
+ depWithResolvedFeatures = dependency:
+ let
+ packageId = dependency.packageId;
+ features = dependencyFeatures expandedFeatures dependency;
+ in
+ { inherit packageId features; };
+ resolveDependencies = cache: path: dependencies:
+ assert (builtins.isAttrs cache);
+ assert (builtins.isList dependencies);
+ let
+ enabledDependencies = filterEnabledDependencies {
+ inherit dependencies target;
+ features = expandedFeatures;
+ };
+ directDependencies = map depWithResolvedFeatures enabledDependencies;
+ foldOverCache = op: lib.foldl op cache directDependencies;
+ in
+ foldOverCache
+ (
+ cache: { packageId, features }:
+ let
+ cacheFeatures = cache.${packageId} or [ ];
+ combinedFeatures = sortedUnique (cacheFeatures ++ features);
+ in
+ if cache ? ${packageId} && cache.${packageId} == combinedFeatures
+ then cache
+ else
+ mergePackageFeatures {
+ features = combinedFeatures;
+ featuresByPackageId = cache;
+ inherit crateConfigs packageId target runTests rootPackageId;
+ }
+ );
+ cacheWithSelf =
+ let
+ cacheFeatures = featuresByPackageId.${packageId} or [ ];
+ combinedFeatures = sortedUnique (cacheFeatures ++ expandedFeatures);
+ in
+ featuresByPackageId // {
+ "${packageId}" = combinedFeatures;
+ };
+ cacheWithDependencies =
+ resolveDependencies cacheWithSelf "dep"
+ (
+ crateConfig.dependencies or [ ]
+ ++ lib.optionals
+ (runTests && packageId == rootPackageId)
+ (crateConfig.devDependencies or [ ])
+ );
+ cacheWithAll =
+ resolveDependencies
+ cacheWithDependencies "build"
+ (crateConfig.buildDependencies or [ ]);
+ in
+ cacheWithAll;
+
+ /* Returns the enabled dependencies given the enabled features. */
+ filterEnabledDependencies = { dependencies, features, target }:
+ assert (builtins.isList dependencies);
+ assert (builtins.isList features);
+ assert (builtins.isAttrs target);
+
+ lib.filter
+ (
+ dep:
+ let
+ targetFunc = dep.target or (features: true);
+ in
+ targetFunc { inherit features target; }
+ && (
+ !(dep.optional or false)
+ || builtins.any (doesFeatureEnableDependency dep) features
+ )
+ )
+ dependencies;
+
+ /* Returns whether the given feature should enable the given dependency. */
+ doesFeatureEnableDependency = { name, rename ? null, ... }: feature:
+ let
+ prefix = "${name}/";
+ len = builtins.stringLength prefix;
+ startsWithPrefix = builtins.substring 0 len feature == prefix;
+ in
+ (rename == null && feature == name)
+ || (rename != null && rename == feature)
+ || startsWithPrefix;
+
+ /* Returns the expanded features for the given inputFeatures by applying the
+ rules in featureMap.
+
+ featureMap is an attribute set which maps feature names to lists of further
+ feature names to enable in case this feature is selected.
+ */
+ expandFeatures = featureMap: inputFeatures:
+ assert (builtins.isAttrs featureMap);
+ assert (builtins.isList inputFeatures);
+ let
+ expandFeature = feature:
+ assert (builtins.isString feature);
+ [ feature ] ++ (expandFeatures featureMap (featureMap."${feature}" or [ ]));
+ outFeatures = lib.concatMap expandFeature inputFeatures;
+ in
+ sortedUnique outFeatures;
+
+ /*
+ Returns the actual features for the given dependency.
+
+ features: The features of the crate that refers this dependency.
+ */
+ dependencyFeatures = features: dependency:
+ assert (builtins.isList features);
+ assert (builtins.isAttrs dependency);
+ let
+ defaultOrNil =
+ if dependency.usesDefaultFeatures or true
+ then [ "default" ]
+ else [ ];
+ explicitFeatures = dependency.features or [ ];
+ additionalDependencyFeatures =
+ let
+ dependencyPrefix = (dependency.rename or dependency.name) + "/";
+ dependencyFeatures =
+ builtins.filter (f: lib.hasPrefix dependencyPrefix f) features;
+ in
+ builtins.map (lib.removePrefix dependencyPrefix) dependencyFeatures;
+ in
+ defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures;
+
+ /* Sorts and removes duplicates from a list of strings. */
+ sortedUnique = features:
+ assert (builtins.isList features);
+ assert (builtins.all builtins.isString features);
+ let
+ outFeaturesSet = lib.foldl (set: feature: set // { "${feature}" = 1; }) { } features;
+ outFeaturesUnique = builtins.attrNames outFeaturesSet;
+ in
+ builtins.sort (a: b: a < b) outFeaturesUnique;
+
+ deprecationWarning = message: value:
+ if strictDeprecation
+ then builtins.throw "strictDeprecation enabled, aborting: ${message}"
+ else builtins.trace message value;
+
+ #
+ # crate2nix/default.nix (excerpt end)
+ #
+
+ };
+}
\ No newline at end of file
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 00000000..8d2584f9
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,17 @@
+[workspace]
+
+members = [
+ "automerge",
+ "automerge-c",
+ "automerge-c-v2",
+ "automerge-backend",
+ "automerge-backend-wasm",
+ "automerge-frontend",
+ "automerge-cli",
+ "automerge-protocol",
+ "fuzz",
+ "perf",
+]
+
+[profile.release]
+lto = true
diff --git a/LICENSE b/LICENSE
index 18812465..dfa2838f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,19 +1,7 @@
-Copyright (c) 2019-2021 the Automerge contributors
+Copyright 2019 Alex Good
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..f77cf889
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,41 @@
+.PHONY: all
+all: ci
+
+.PHONY: fmt
+fmt:
+ cargo fmt --all -- --check
+
+.PHONY: clippy
+clippy:
+ cargo clippy --all-targets --all-features -- -D warnings
+
+.PHONY: doc
+doc:
+ cargo doc --workspace --all-features
+
+.PHONY: build
+build:
+ cargo build --all-targets --workspace
+
+.PHONY: build-wasm
+build-wasm:
+ cd automerge-backend-wasm && yarn dev
+
+.PHONY: test
+test: test-rust test-wasm test-js
+ cargo test --workspace
+
+.PHONY: test-rust
+test-rust:
+ cargo test --workspace
+
+.PHONY: test-wasm
+test-wasm:
+ wasm-pack test automerge-frontend --node
+
+.PHONY: test-js
+test-js: build-wasm
+ cd automerge-backend-wasm && yarn test:js
+
+.PHONY: ci
+ci: fmt clippy doc build test
diff --git a/README.md b/README.md
index ad174da4..7668a018 100644
--- a/README.md
+++ b/README.md
@@ -1,147 +1,55 @@
# Automerge
-
+[](https://docs.rs/automerge)
+[](https://crates.io/crates/automerge)
+[](https://travis-ci.org/automerge/automerge-rs)
-[](https://automerge.org/)
-[](https://automerge.org/automerge-rs/automerge/)
-[](https://github.com/automerge/automerge-rs/actions/workflows/ci.yaml)
-[](https://github.com/automerge/automerge-rs/actions/workflows/docs.yaml)
+This is a rust implementation of
+[automerge](https://github.com/automerge/automerge). Currently this repo
+contains an implementation of the "backend" of the Automerge library, designed
+to be used via FFI from many different platforms. Very soon there will also be
+a frontend which will be designed for Rust application developers to use.
-Automerge is a library which provides fast implementations of several different
-CRDTs, a compact compression format for these CRDTs, and a sync protocol for
-efficiently transmitting those changes over the network. The objective of the
-project is to support [local-first](https://www.inkandswitch.com/local-first/) applications in the same way that relational
-databases support server applications - by providing mechanisms for persistence
-which allow application developers to avoid thinking about hard distributed
-computing problems. Automerge aims to be PostgreSQL for your local-first app.
+This project is tracking the `performance` branch of the JavaScript reference implementation of Automerge. The `performance` branch contains a lot of backwards incompatible changes and is intended to become a 1.0 release of the library, you can find more information about that [here](https://github.com/automerge/automerge/pull/253). Our goal is to release a pre 1.0 version of the rust library once the JavaScript library hits 1.0. As such we are keeping this project up to date with the frequent and often quite large changes in the `performance` branch of the JavaScript repo - that is to say, don't depend on anything in this repo to stay constant right now.
-If you're looking for documentation on the JavaScript implementation take a look
-at https://automerge.org/docs/hello/. There are other implementations in both
-Rust and C, but they are earlier and don't have documentation yet. You can find
-them in `rust/automerge` and `rust/automerge-c` if you are comfortable
-reading the code and tests to figure out how to use them.
-If you're familiar with CRDTs and interested in the design of Automerge in
-particular take a look at https://automerge.org/docs/how-it-works/backend/
+## Using automerge-backend-wasm with automerge
-Finally, if you want to talk to us about this project please [join the
-Slack](https://join.slack.com/t/automerge/shared_invite/zt-e4p3760n-kKh7r3KRH1YwwNfiZM8ktw)
+This backend is tracking the [performance branch of automerge](https://github.com/automerge/automerge/tree/performance)
-## Status
-
-This project is formed of a core Rust implementation which is exposed via FFI in
-javascript+WASM, C, and soon other languages. Alex
-([@alexjg](https://github.com/alexjg/)]) is working full time on maintaining
-automerge, other members of Ink and Switch are also contributing time and there
-are several other maintainers. The focus is currently on shipping the new JS
-package. We expect to be iterating the API and adding new features over the next
-six months so there will likely be several major version bumps in all packages
-in that time.
-
-In general we try and respect semver.
-
-### JavaScript
-
-A stable release of the javascript package is currently available as
-`@automerge/automerge@2.0.0` where. pre-release verisions of the `2.0.1` are
-available as `2.0.1-alpha.n`. `2.0.1*` packages are also available for Deno at
-https://deno.land/x/automerge
-
-### Rust
-
-The rust codebase is currently oriented around producing a performant backend
-for the Javascript wrapper and as such the API for Rust code is low level and
-not well documented. We will be returning to this over the next few months but
-for now you will need to be comfortable reading the tests and asking questions
-to figure out how to use it. If you are looking to build rust applications which
-use automerge you may want to look into
-[autosurgeon](https://github.com/alexjg/autosurgeon)
-
-## Repository Organisation
-
-- `./rust` - the rust rust implementation and also the Rust components of
- platform specific wrappers (e.g. `automerge-wasm` for the WASM API or
- `automerge-c` for the C FFI bindings)
-- `./javascript` - The javascript library which uses `automerge-wasm`
- internally but presents a more idiomatic javascript interface
-- `./scripts` - scripts which are useful to maintenance of the repository.
- This includes the scripts which are run in CI.
-- `./img` - static assets for use in `.md` files
-
-## Building
-
-To build this codebase you will need:
-
-- `rust`
-- `node`
-- `yarn`
-- `cmake`
-- `cmocka`
-
-You will also need to install the following with `cargo install`
-
-- `wasm-bindgen-cli`
-- `wasm-opt`
-- `cargo-deny`
-
-And ensure you have added the `wasm32-unknown-unknown` target for rust cross-compilation.
-
-The various subprojects (the rust code, the wrapper projects) have their own
-build instructions, but to run the tests that will be run in CI you can run
-`./scripts/ci/run`.
-
-### For macOS
-
-These instructions worked to build locally on macOS 13.1 (arm64) as of
-Nov 29th 2022.
-
-```bash
-# clone the repo
-git clone https://github.com/automerge/automerge-rs
-cd automerge-rs
-
-# install rustup
-curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
-# install homebrew
-/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
-# install cmake, node, cmocka
-brew install cmake node cmocka
-
-# install yarn
-npm install --global yarn
-
-# install javascript dependencies
-yarn --cwd ./javascript
-
-# install rust dependencies
-cargo install wasm-bindgen-cli wasm-opt cargo-deny
-
-# get nightly rust to produce optimized automerge-c builds
-rustup toolchain install nightly
-rustup component add rust-src --toolchain nightly
-
-# add wasm target in addition to current architecture
-rustup target add wasm32-unknown-unknown
-
-# Run ci script
-./scripts/ci/run
-```
-
-If your build fails to find `cmocka.h` you may need to teach it about homebrew's
-installation location:
+To build the wasm backend you'll need to install [wasm-pack](https://rustwasm.github.io/wasm-pack/installer/). Then:
```
-export CPATH=/opt/homebrew/include
-export LIBRARY_PATH=/opt/homebrew/lib
-./scripts/ci/run
+ $ cd automerge-backend-wasm
+ $ yarn release
```
-## Contributing
+Once it is built set the new default backend in your js application like this.
+
+```js
+ const wasmBackend = require(path.resolve(WASM_BACKEND_PATH))
+ Automerge.setDefaultBackend(wasmBackend)
+```
+
+## Backend? Frontend?
+
+Automerge is a JSON CRDT, in this sense it is just a data structure with a set
+of rules about how to merge two different versions of that data structure.
+However, in practice one often needs two separate roles when writing
+applications which use the CRDT:
+
+- A very low latency process, usually running on some kind of UI thread, which
+ records changes made by the user and reflects them in the UI
+- A less latency sensitive process which executes the complex logic of merging changes
+ received from the UI and over the network and send diffs to the frontend to apply
+
+More details can be found [here](https://github.com/automerge/automerge/blob/performance/BINARY_FORMAT.md).
+
+Note that the performance branch of automerge is under active development and is changing quickly.
+
+## Community
+
+Development of automerge rust is currently being coordinated at our [slack channel](https://automerge.slack.com/archives/CTQARU3NZ). Come say hi. =)
+
+
-Please try and split your changes up into relatively independent commits which
-change one subsystem at a time and add good commit messages which describe what
-the change is and why you're making it (err on the side of longer commit
-messages). `git blame` should give future maintainers a good idea of why
-something is the way it is.
diff --git a/automerge-backend-wasm/.gitignore b/automerge-backend-wasm/.gitignore
new file mode 100644
index 00000000..b4fa7794
--- /dev/null
+++ b/automerge-backend-wasm/.gitignore
@@ -0,0 +1,7 @@
+node_modules
+/wasm-pack.log
+/build
+/dev
+
+# Used for js-interop tests
+/automerge-js-temp
diff --git a/rust/automerge-wasm/Cargo.toml b/automerge-backend-wasm/Cargo.toml
similarity index 59%
rename from rust/automerge-wasm/Cargo.toml
rename to automerge-backend-wasm/Cargo.toml
index b6055a7d..9b37a4b8 100644
--- a/rust/automerge-wasm/Cargo.toml
+++ b/automerge-backend-wasm/Cargo.toml
@@ -1,15 +1,14 @@
# You must change these to your own details.
[package]
-name = "automerge-wasm"
+name = "automerge-backend-wasm"
description = "An js/wasm wrapper for the rust implementation of automerge-backend"
repository = "https://github.com/automerge/automerge-rs"
version = "0.1.0"
authors = ["Alex Good ","Orion Henry ", "Martin Kleppmann"]
categories = ["wasm"]
readme = "README.md"
-edition = "2021"
+edition = "2018"
license = "MIT"
-rust-version = "1.57.0"
[lib]
crate-type = ["cdylib","rlib"]
@@ -22,30 +21,19 @@ default = ["console_error_panic_hook"]
[dependencies]
console_error_panic_hook = { version = "^0.1", optional = true }
# wee_alloc = { version = "^0.4", optional = true }
-automerge = { path = "../automerge", features=["wasm"] }
+automerge-backend = { path = "../automerge-backend" }
+automerge-protocol = { path = "../automerge-protocol" }
js-sys = "^0.3"
serde = "^1.0"
serde_json = "^1.0"
-rand = { version = "^0.8.4" }
-getrandom = { version = "^0.2.2", features=["js"] }
-uuid = { version = "^1.2.1", features=["v4", "js", "serde"] }
-serde-wasm-bindgen = "0.4.3"
+getrandom = { version = "0.2.2", features=["js"] }
+uuid = { version = "^0.8.2", features=["v4", "wasm-bindgen", "serde"] }
+serde-wasm-bindgen = "0.1.3"
serde_bytes = "0.11.5"
-hex = "^0.4.3"
-regex = "^1.5"
-itertools = "^0.10.3"
-thiserror = "^1.0.16"
[dependencies.wasm-bindgen]
-version = "^0.2.83"
-#features = ["std"]
-features = ["serde-serialize", "std"]
-
-[package.metadata.wasm-pack.profile.release]
-# wasm-opt = false
-
-[package.metadata.wasm-pack.profile.profiling]
-wasm-opt = false
+version = "^0.2"
+features = ["serde-serialize"]
# The `web-sys` crate allows you to interact with the various browser APIs,
# like the DOM.
@@ -54,9 +42,7 @@ version = "0.3.22"
features = ["console"]
-
[dev-dependencies]
futures = "^0.1"
-proptest = { version = "^1.0.0", default-features = false, features = ["std"] }
-wasm-bindgen-futures = "^0.4"
+wasm-bindgen-futures = "^0.3"
wasm-bindgen-test = "^0.3"
diff --git a/automerge-backend-wasm/GOALS_AND_ISSUES.md b/automerge-backend-wasm/GOALS_AND_ISSUES.md
new file mode 100644
index 00000000..ee9b5096
--- /dev/null
+++ b/automerge-backend-wasm/GOALS_AND_ISSUES.md
@@ -0,0 +1,78 @@
+
+# WASM Goals and Issues
+
+We set out with this project to see if we could create a backend implementation
+for Automerge that could serve as a basis for native ports to many different
+languages but also replace the javascript backend of the current implementation
+without any compromises.
+
+We chose Rust as the basis of this project. It has the same performance
+characteristics as C and C++ making it ideal for implementing a database-like
+tool. It also has safety guarantees C and C++ which will protect us from
+synchronization issues and data races that plague projects like this. Rust
+also has a very mature WASM integration suite of tools.
+
+Our goal was to create a zero compromise implementation of the backend. We
+almost achieved this goal. Here are the details of the compromises we found.
+
+## Problem: WASM memory and garbage collection
+
+Memory allocated in WASM needs to be explicitly freed. And there is no feature
+(yet) in javascript to alert you when an object has been collected by the
+GC. This makes immutable API's undoable since you need the GC to collect old
+versions of objects.
+
+Also this means that an Automerge backend would need to be explicitly freed at the
+end of its life. Under normal circumstances a backend will live indefinitely so this
+would not require a change but in situations where many small databases are being
+created and thrown away this requires an API change.
+
+## Solution
+
+The performance branch of Automerge has made some small but important adjustments to
+the Frontend/Backend API. These now assume the backends to be long lived and possibly
+mutable and disallows creating divergent histories with old handles to the backend.
+A `clone` function was added to allow this behavior if it was intentional and a `free`
+that can do cleanup.
+
+```js
+ let doc1 = Automerge.init();
+ let doc2 = Automerge.clone(doc1);
+ Automerge.free(doc1);
+```
+
+## Problem: WASM in fundamentally async - Automerge is sync
+
+WASM's love of all things async was surely the largest thorn in our side was dealing with this. It basically boils down to this...
+
+1. ### Loading WASM requires IO - IO is async
+
+ WASM binaries are not js - loading them from JS is async (with the notable exception of node's `readFileSync()`)
+
+2. ### WebAssembly.Module(buffer) has a 4k limit on the render thread in browsers
+
+ Even if you can synchronously load and compile the wasm, most browsers impose a 4k limit on synchronous (but not asynchronous) WASM compilation in the render thread. This is not an issue in node applications or in web workers.
+
+## Solutions
+
+1. ### Compile Rust to ASM.js - (no problems except it's big and slow)
+
+ Now it's javascript. All the strangeness of WASM goes away. Webpack will happily inline the code into a bundle. The only downside, 400k of WASM becomes 5M of js and it runs 3 times slower.
+
+2. ### Inline the WASM as a base64 encoded string - (no problems except the render thread)
+
+ This is actually surprisingly effective. The sized added to the js bundle is reasonable and the decode time is trivial. The only issue is, it still wont work in the render thread
+
+3. ### Wait for top level await (no problems - someday)
+
+ There is a proposal for top level await support in js modules. This would allow us to insert an internal await into the backend module and hide the async load from users. Unfortunately its not in JS yet...
+
+4. ### Change Automerge.init to be async (no problems except a breaking api change)
+
+ All of the async strangeness can be boiled down to the Automerge.init() call. This would require introducing an api change that has no purpose in the JS only implementation and represents a non-trivial compromise in adopting WASM
+ ```js
+ const doc = Automerge.init();
+ // becomes
+ const doc = await Automerge.init();
+ ```
+
diff --git a/automerge-backend-wasm/LICENSE b/automerge-backend-wasm/LICENSE
new file mode 100644
index 00000000..592e2105
--- /dev/null
+++ b/automerge-backend-wasm/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2020 Ink & Switch LLC
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/automerge-backend-wasm/README.md b/automerge-backend-wasm/README.md
new file mode 100644
index 00000000..71f47ae2
--- /dev/null
+++ b/automerge-backend-wasm/README.md
@@ -0,0 +1,22 @@
+## automerge-backend-wasm
+
+This is a wrapper for the rust implementation of [automerge-backend](https://github.com/automerge/automerge-rs/tree/master/automerge-backend) to be used with [Automerge](https://github.com/automerge/automerge).
+
+### Using
+
+You can require this synchronously as a CommonJS module or import it as a ES6 module
+
+```js
+let Automerge = require("automerge")
+let Backend = require("automerge-backend-wasm")
+Automerge.setDefaultBackend(Backend)
+```
+
+```js
+import * as Automerge from "automerge"
+import * as Backend from "automerge-backend-wasm"
+Automerge.setDefaultBackend(Backend)
+```
+
+Note that the first uses a synchronous filesystem load of the wasm and will not be transferable to a browser bundle. The second uses ES6 wasm import statements which should work in all modern browsers but require a '--experimental-wasm-modules' flag on nodejs (v13 on) unless you pack/bundle the code into compatible format.
+
diff --git a/automerge-backend-wasm/package.json b/automerge-backend-wasm/package.json
new file mode 100644
index 00000000..d1bc9178
--- /dev/null
+++ b/automerge-backend-wasm/package.json
@@ -0,0 +1,38 @@
+{
+ "collaborators": [
+ "Orion Henry ",
+ "Alex Good "
+ ],
+ "name": "automerge-backend-wasm",
+ "description": "wasm-bindgen bindings to the automerge-backend rust implementation",
+ "version": "0.1.0",
+ "license": "MIT",
+ "files": [
+ "README.md",
+ "pkg.js",
+ "LICENSE",
+ "package.json",
+ "automerge_backend_wasm_bg.wasm",
+ "automerge_backend_wasm.js"
+ ],
+ "main": "./dev/index.js",
+ "scripts": {
+ "cjs-release": "wasm-pack build --target nodejs --release --out-name index -d build/cjs && rm build/cjs/package.json",
+ "mjs-release": "wasm-pack build --target bundler --release --out-name index -d build/mjs && cp package.mjs.json build/mjs/package.json",
+ "prep-release": "rm build/*/.gitignore build/*/README.md build/*/LICENSE build/*/*.ts",
+ "release": "yarn cjs-release && yarn mjs-release && yarn prep-release && cp package.pkg.json build/package.json && cp README.md LICENSE build",
+ "cjs": "wasm-pack build --target nodejs --dev --out-name index -d build/cjs && rm build/cjs/package.json",
+ "mjs": "wasm-pack build --target bundler --dev --out-name index -d build/mjs && cp package.mjs.json build/mjs/package.json",
+ "dev": "yarn cjs && yarn mjs && yarn prep-release && cp package.pkg.json build/package.json && cp README.md LICENSE build",
+ "build": "rm -rf dev && wasm-pack build --target nodejs --dev --out-name index -d dev",
+ "profiling": "wasm-pack build --target nodejs --profiling --out-name index -d dev",
+ "mocha": "yarn build && mocha --bail --full-trace",
+ "webpack": "webpack",
+ "test": "cargo test && wasm-pack test --node",
+ "test:js": "./scripts/js_tests.sh"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "mocha": "^7.1.1"
+ }
+}
diff --git a/automerge-backend-wasm/package.mjs.json b/automerge-backend-wasm/package.mjs.json
new file mode 100644
index 00000000..3dbc1ca5
--- /dev/null
+++ b/automerge-backend-wasm/package.mjs.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/automerge-backend-wasm/package.pkg.json b/automerge-backend-wasm/package.pkg.json
new file mode 100644
index 00000000..208b16d0
--- /dev/null
+++ b/automerge-backend-wasm/package.pkg.json
@@ -0,0 +1,35 @@
+{
+ "name": "automerge-backend-wasm",
+ "collaborators": [
+ "Alex Good ",
+ "Orion Henry ",
+ "Martin Kleppmann"
+ ],
+ "description": "A js/wasm wrapper for the rust implementation of automerge-backend",
+ "version": "0.1.4",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/automerge/automerge-rs"
+ },
+ "files": [
+ "README.md",
+ "LICENSE",
+ "cjs/index_bg.wasm",
+ "cjs/index.js",
+ "mjs/package.json",
+ "mjs/index_bg.wasm",
+ "mjs/index_bg.js",
+ "mjs/index.js"
+ ],
+ "type": "commonjs",
+ "exports": {
+ ".": {
+ "require": "./cjs/index.js",
+ "default": "./mjs/index.js"
+ }
+ },
+ "main" : "./cjs/index.js",
+ "module" : "./mjs/index.js",
+ "sideEffects": false
+}
diff --git a/automerge-backend-wasm/scripts/js_tests.sh b/automerge-backend-wasm/scripts/js_tests.sh
new file mode 100755
index 00000000..f10e607c
--- /dev/null
+++ b/automerge-backend-wasm/scripts/js_tests.sh
@@ -0,0 +1,41 @@
+#! /usr/bin/env bash
+set -e
+
+ORIGINAL_PWD=$PWD
+if [[ -z $AUTOMERGE_JS_DIR ]]; then
+ COMMIT_HASH=ee09eead68d572725b344bd7ab94bfa3d6d29889
+ AUTOMERGE_JS_DIR="./automerge-js-temp"
+ echo "'AUTOMERGE_JS_DIR' var not set. Using temporary dir: $AUTOMERGE_JS_DIR & commit hash: $COMMIT_HASH"
+ if [[ -d $AUTOMERGE_JS_DIR ]]; then
+ echo "Dir found, skipping clone"
+ cd $AUTOMERGE_JS_DIR
+ git fetch --all
+ if ! git cat-file -e $COMMIT_HASH; then
+ echo "Commit hash: $COMMIT_HASH not found in $AUTOMERGE_JS_DIR"
+ exit 1
+ fi
+ else
+ git clone https://github.com/automerge/automerge.git $AUTOMERGE_JS_DIR
+ fi
+ cd $ORIGINAL_PWD
+ cd $AUTOMERGE_JS_DIR
+ git checkout $COMMIT_HASH
+else
+ # if the env var is set, assume the user is using an existing checkout of automerge
+ echo "Using $AUTOMERGE_JS_DIR"
+ if [[ ! -d $AUTOMERGE_JS_DIR ]]; then
+ echo "$AUTOMERGE_JS_DIR dir not found."
+ exit 1
+ fi
+fi
+
+cd $ORIGINAL_PWD
+cd $AUTOMERGE_JS_DIR
+
+WASM_BACKEND_PATH="$ORIGINAL_PWD/build"
+if [[ ! -d $WASM_BACKEND_PATH ]]; then
+ echo "$WASM_BACKEND_PATH does not exist. Run 'yarn dev' or 'yarn release' to build WASM backend"
+ exit 1
+fi
+yarn install
+WASM_BACKEND_PATH=$WASM_BACKEND_PATH yarn testwasm
diff --git a/automerge-backend-wasm/src/lib.rs b/automerge-backend-wasm/src/lib.rs
new file mode 100644
index 00000000..e9196092
--- /dev/null
+++ b/automerge-backend-wasm/src/lib.rs
@@ -0,0 +1,404 @@
+//#![feature(set_stdio)]
+
+mod types;
+
+use std::{
+ collections::{HashMap, HashSet},
+ convert::TryFrom,
+ fmt::Display,
+};
+
+use automerge_backend::{AutomergeError, Backend, Change, SyncMessage, SyncState};
+use automerge_protocol as amp;
+use automerge_protocol::ChangeHash;
+use js_sys::Array;
+use serde::{de::DeserializeOwned, Serialize};
+use types::{BinaryChange, BinaryDocument, BinarySyncMessage, BinarySyncState, RawSyncMessage};
+use wasm_bindgen::prelude::*;
+
+extern crate web_sys;
+#[allow(unused_macros)]
+macro_rules! log {
+ ( $( $t:tt )* ) => {
+ web_sys::console::log_1(&format!( $( $t )* ).into());
+ };
+}
+
+fn array(data: &[T]) -> Result {
+ let result = Array::new();
+ for d in data {
+ result.push(&rust_to_js(d)?);
+ }
+ Ok(result)
+}
+
+#[cfg(feature = "wee_alloc")]
+#[global_allocator]
+static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
+
+fn js_to_rust(value: &JsValue) -> Result {
+ value.into_serde().map_err(json_error_to_js)
+}
+
+fn rust_to_js(value: T) -> Result {
+ JsValue::from_serde(&value).map_err(json_error_to_js)
+}
+
+#[wasm_bindgen]
+#[derive(Debug)]
+struct State(Backend);
+
+#[wasm_bindgen]
+extern "C" {
+ pub type Object;
+
+ #[wasm_bindgen(constructor)]
+ fn new() -> Object;
+
+ #[wasm_bindgen(method, getter)]
+ fn state(this: &Object) -> State;
+
+ #[wasm_bindgen(method, setter)]
+ fn set_state(this: &Object, state: State);
+
+ #[wasm_bindgen(method, getter)]
+ fn frozen(this: &Object) -> bool;
+
+ #[wasm_bindgen(method, setter)]
+ fn set_frozen(this: &Object, frozen: bool);
+
+ #[wasm_bindgen(method, getter)]
+ fn heads(this: &Object) -> Array;
+
+ #[wasm_bindgen(method, setter)]
+ fn set_heads(this: &Object, heads: Array);
+}
+
+#[wasm_bindgen]
+#[derive(Clone)]
+pub struct JsSyncState(SyncState);
+
+#[wasm_bindgen]
+impl JsSyncState {
+ #[wasm_bindgen(getter, js_name = sharedHeads)]
+ pub fn shared_heads(&self) -> JsValue {
+ rust_to_js(&self.0.shared_heads).unwrap()
+ }
+
+ #[wasm_bindgen(getter, js_name = lastSentHeads)]
+ pub fn last_sent_heads(&self) -> JsValue {
+ rust_to_js(self.0.last_sent_heads.as_ref()).unwrap()
+ }
+
+ #[wasm_bindgen(setter, js_name = lastSentHeads)]
+ pub fn set_last_sent_heads(&mut self, heads: JsValue) {
+ let heads: Option> = js_to_rust(&heads).unwrap();
+ self.0.last_sent_heads = heads
+ }
+
+ #[wasm_bindgen(setter, js_name = sentHashes)]
+ pub fn set_sent_hashes(&mut self, hashes: JsValue) {
+ let hashes_map: HashMap = js_to_rust(&hashes).unwrap();
+ let hashes_set: HashSet = hashes_map.keys().cloned().collect();
+ self.0.sent_hashes = hashes_set
+ }
+}
+
+#[wasm_bindgen]
+pub fn init() -> Result