diff --git a/.github/workflows/benchmark-core.yml b/.github/workflows/benchmark-core.yml index b7259056ba7..94d6e6f6c54 100644 --- a/.github/workflows/benchmark-core.yml +++ b/.github/workflows/benchmark-core.yml @@ -1,4 +1,3 @@ ---- name: Benchmark - core on: @@ -32,36 +31,28 @@ jobs: with: toolchain: stable - - name: Restore Rust cache for master + - name: Restore Rust cache for yew packages uses: Swatinem/rust-cache@v2 with: - working-directory: yew-master - key: master - - - name: Restore Rust cache for current pull request - uses: Swatinem/rust-cache@v2 - with: - working-directory: current-pr - key: pr + shared-key: yew-packages + workspaces: | + yew-master + current-pr - name: Run pull request benchmark - run: cargo bench -q > ../output.log working-directory: current-pr/tools/benchmark-core + run: cargo bench -q > ../output.log - name: Run master benchmark - run: cargo bench -q > ../output.log - continue-on-error: true working-directory: yew-master/tools/benchmark-core - - - name: Make sure master's output log exists - run: touch yew-master/tools/output.log + run: cargo bench -q > ../output.log - name: Write Pull Request ID run: | echo "${{ github.event.number }}" > .PR_NUMBER - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: benchmark-core path: | diff --git a/.github/workflows/benchmark-ssr.yml b/.github/workflows/benchmark-ssr.yml index 52ddb31be57..536ccc71387 100644 --- a/.github/workflows/benchmark-ssr.yml +++ b/.github/workflows/benchmark-ssr.yml @@ -1,4 +1,3 @@ ---- name: Benchmark - SSR on: @@ -37,32 +36,28 @@ jobs: toolchain: stable targets: wasm32-unknown-unknown - - name: Restore Rust cache for master + - name: Restore Rust cache for yew packages uses: Swatinem/rust-cache@v2 with: - working-directory: yew-master - key: master - - - name: Restore Rust cache for current pull request - uses: Swatinem/rust-cache@v2 - with: - working-directory: current-pr - key: pr + shared-key: yew-packages + workspaces: | + yew-master + current-pr - name: Run pull request benchmark - run: cargo run --profile=bench -- --output-path ../output.json working-directory: current-pr/tools/benchmark-ssr + run: cargo run --profile=bench -- --output-path ../output.json - name: Run master benchmark - run: cargo run --profile=bench -- --output-path ../output.json working-directory: yew-master/tools/benchmark-ssr + run: cargo run --profile=bench -- --output-path ../output.json - name: Write Pull Request ID run: | echo "${{ github.event.number }}" > .PR_NUMBER - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: benchmark-ssr path: | diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index bb034a4bc5a..fed8ed45f33 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -11,14 +11,15 @@ on: - "website/**" types: [labeled, synchronize, opened, reopened] -permissions: - # deployments permission to deploy GitHub pages website - deployments: write - # contents permission to update benchmark contents in gh-pages branch - contents: write +# Cancel outstanding benchmarks on pull requests +# https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#example-using-a-fallback-value +concurrency: + group: ${{ github.head_ref || github.run_id }} + cancel-in-progress: true jobs: benchmark: + if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'performance') runs-on: ubuntu-latest steps: @@ -37,27 +38,37 @@ jobs: toolchain: stable targets: wasm32-unknown-unknown - - uses: jetli/wasm-pack-action@v0.4.0 - with: - version: "latest" + - name: Setup wasm-pack + uses: jetli/wasm-pack-action@v0.4.0 - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 18 + node-version: ">=18" cache: "npm" cache-dependency-path: js-framework-benchmark/package-lock.json - - uses: Swatinem/rust-cache@v2 + - name: Restore Rust cache for yew packages + uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages + workspaces: | + yew + + - name: Setup chrome + id: setup-chrome + uses: browser-actions/setup-chrome@v1 + with: + install-chromedriver: true - - name: setup js-framework-benchmark + - name: Setup js-framework-benchmark working-directory: js-framework-benchmark run: | npm ci npm run install-server npm run install-webdriver-ts - - name: setup benchmark-struct benchmark + - name: Setup benchmark-struct benchmark run: | ls -lauh rm *.js @@ -65,7 +76,7 @@ jobs: echo "STRUCT_BUILD_DIR=$PWD" >> $GITHUB_ENV working-directory: js-framework-benchmark/frameworks/keyed/yew/bundled-dist/ - - name: build benchmark-struct app + - name: Build benchmark-struct app working-directory: yew/tools/benchmark-struct run: | wasm-pack build \ @@ -75,11 +86,11 @@ jobs: --out-name js-framework-benchmark-yew \ --out-dir $STRUCT_BUILD_DIR - - name: show built benchmark-struct benchmark files + - name: Show built benchmark-struct benchmark files run: | ls -lauh js-framework-benchmark/frameworks/keyed/yew/bundled-dist/ - - name: setup yew-hooks benchmark + - name: Setup yew-hooks benchmark run: | ls -lauh rm *.js @@ -87,7 +98,7 @@ jobs: echo "HOOKS_BUILD_DIR=$PWD" >> $GITHUB_ENV working-directory: js-framework-benchmark/frameworks/keyed/yew-hooks/bundled-dist/ - - name: build benchmark-hooks app + - name: Build benchmark-hooks app working-directory: yew/tools/benchmark-hooks run: | wasm-pack build \ @@ -97,31 +108,33 @@ jobs: --out-name js-framework-benchmark-yew-hooks \ --out-dir $HOOKS_BUILD_DIR - - name: show built benchmark-hooks benchmark files + - name: Show built benchmark-hooks benchmark files run: | ls -lauh js-framework-benchmark/frameworks/keyed/yew-hooks/bundled-dist/ - - name: run js-framework-benchmark server + - name: Run js-framework-benchmark server working-directory: js-framework-benchmark run: | npm start & sleep 5 - - name: js-framework-benchmark/webdriver-ts npm run bench + - name: Run js-framework-benchmark/webdriver-ts npm run bench working-directory: js-framework-benchmark/webdriver-ts - run: xvfb-run npm run bench -- --framework keyed/yew keyed/yew-hooks --runner playwright + run: xvfb-run npm run bench -- --framework keyed/yew keyed/yew-hooks --runner playwright --chromeBinary "${{ steps.setup-chrome.outputs.chrome-path }}" - - name: transform results to be fit for display benchmark-action/github-action-benchmark@v1 + - name: Transform results to be fit for display benchmark-action/github-action-benchmark@v1 run: | mkdir artifacts/ jq -s . js-framework-benchmark/webdriver-ts/results/*.json | cargo run --manifest-path yew/Cargo.toml --release -p process-benchmark-results > artifacts/results.json - echo "$EVENT_INFO" > artifacts/PR_INFO + echo "$EVENT_INFO" > artifacts/.PR_INFO env: EVENT_INFO: ${{ toJSON(github.event) }} - name: Upload result artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: results path: artifacts/ if-no-files-found: error + include-hidden-files: true + retention-days: 1 diff --git a/.github/workflows/build-api-docs.yml b/.github/workflows/build-api-docs.yml index 44a69b3fa0f..b3bdea488a7 100644 --- a/.github/workflows/build-api-docs.yml +++ b/.github/workflows/build-api-docs.yml @@ -16,8 +16,6 @@ on: jobs: build: runs-on: ubuntu-latest - env: - PR_INFO_FILE: ".PR_INFO" steps: - uses: actions/checkout@v4 @@ -46,7 +44,7 @@ jobs: cp -r target/doc/* api-docs/dist/next - name: Upload build artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: api-docs path: api-docs/ @@ -55,12 +53,12 @@ jobs: - if: github.event_name == 'pull_request' name: Build pr info run: | - echo "${{ github.event.number }}" > $PR_INFO_FILE + echo "${{ github.event.number }}" > .PR_INFO - if: github.event_name == 'pull_request' name: Upload pr info - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pr-info - path: "${{ env.PR_INFO_FILE }}" + path: .PR_INFO retention-days: 1 diff --git a/.github/workflows/build-website.yml b/.github/workflows/build-website.yml index 742a5491a83..80110d8f61e 100644 --- a/.github/workflows/build-website.yml +++ b/.github/workflows/build-website.yml @@ -17,8 +17,6 @@ jobs: build: name: Build Website runs-on: ubuntu-latest - env: - PR_INFO_FILE: ".PR_INFO" steps: - uses: actions/checkout@v4 @@ -30,7 +28,7 @@ jobs: - name: Install dependencies run: | cd website - npm install + npm ci - name: Run prettier run: | @@ -48,7 +46,7 @@ jobs: npm run build - name: Upload build artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: website path: website/build/ @@ -57,12 +55,12 @@ jobs: - if: github.event_name == 'pull_request' name: Build pr info run: | - echo "${{ github.event.number }}" > $PR_INFO_FILE + echo "${{ github.event.number }}" > .PR_INFO - if: github.event_name == 'pull_request' name: Upload pr info - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pr-info - path: "${{ env.PR_INFO_FILE }}" + path: .PR_INFO retention-days: 1 diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml index f8abed21053..6afd5bc7590 100644 --- a/.github/workflows/clippy.yml +++ b/.github/workflows/clippy.yml @@ -16,6 +16,9 @@ jobs: feature-soundness: name: Feature Soundness runs-on: ubuntu-latest + # if normal clippy doesn't succeed, do not try to lint feature soundness + needs: clippy + strategy: fail-fast: false matrix: @@ -32,27 +35,16 @@ jobs: components: clippy - uses: Swatinem/rust-cache@v2 + with: + shared-key: clippy - name: Lint feature soundness if: matrix.profile == 'dev' - run: bash ../../ci/feature-soundness.sh - working-directory: packages/yew + run: bash ./ci/feature-soundness.sh - name: Lint feature soundness if: matrix.profile == 'release' - run: bash ../../ci/feature-soundness-release.sh - working-directory: packages/yew - - - name: Run release clippy - if: matrix.profile == 'release' - run: | - ls packages | xargs -I {} \ - cargo clippy \ - -p {} \ - --all-targets \ - --all-features \ - --workspace \ - -- -D warnings + run: bash ./ci/feature-soundness-release.sh clippy: name: Clippy Workspace @@ -73,6 +65,8 @@ jobs: components: clippy - uses: Swatinem/rust-cache@v2 + with: + shared-key: clippy - name: Run clippy run: | diff --git a/.github/workflows/main-checks.yml b/.github/workflows/main-checks.yml index e0bb2ba7e81..a1046bb97af 100644 --- a/.github/workflows/main-checks.yml +++ b/.github/workflows/main-checks.yml @@ -28,6 +28,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages # for wasm-bindgen-cli, always use stable rust - name: Setup toolchain @@ -67,13 +69,15 @@ jobs: fail-fast: false matrix: toolchain: - - 1.64.0 + - 1.76.0 - stable steps: - uses: actions/checkout@v4 - uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages # for wasm-bindgen-cli, always use stable rust - name: Setup toolchain @@ -116,14 +120,12 @@ jobs: fail-fast: false matrix: toolchain: - - 1.64.0 + - 1.76.0 - stable - nightly steps: - uses: actions/checkout@v4 - with: - fetch-depth: 0 - name: Setup toolchain uses: dtolnay/rust-toolchain@master @@ -131,6 +133,8 @@ jobs: toolchain: ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages - name: Run native tests env: @@ -159,6 +163,8 @@ jobs: toolchain: nightly - uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages - name: Run tests env: diff --git a/.github/workflows/post-benchmark-core.yml b/.github/workflows/post-benchmark-core.yml index 5a54eba0471..5f2b563ca3c 100644 --- a/.github/workflows/post-benchmark-core.yml +++ b/.github/workflows/post-benchmark-core.yml @@ -1,4 +1,3 @@ ---- name: Post Comment for Benchmark - core on: @@ -9,8 +8,8 @@ on: jobs: post-benchmark-core: - if: github.event.workflow_run.event == 'pull_request' - name: Post Comment on Pull Request + name: Post Benchmark Comment on Pull Request + if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' runs-on: ubuntu-latest steps: @@ -18,13 +17,12 @@ jobs: uses: actions/checkout@v4 - name: Download Artifact - uses: Legit-Labs/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: benchmark-core.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: benchmark-core - path: "benchmark-core/" + path: benchmark-core/ - name: Make pull request comment run: | @@ -45,13 +43,7 @@ jobs: EOF - name: Read Pull Request ID - run: | - PR_NUMBER=$(cat "benchmark-core/.PR_NUMBER") - if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then - echo "pr number invalid" - exit 1 - fi - echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV + run: echo "PR_NUMBER=$(cat benchmark-core/.PR_NUMBER)" >> $GITHUB_ENV - name: Post Comment uses: actions/github-script@v6 diff --git a/.github/workflows/post-benchmark-ssr.yml b/.github/workflows/post-benchmark-ssr.yml index 2e874e10547..6cddabd8819 100644 --- a/.github/workflows/post-benchmark-ssr.yml +++ b/.github/workflows/post-benchmark-ssr.yml @@ -1,4 +1,3 @@ ---- name: Post Comment for Benchmark - SSR on: @@ -9,8 +8,8 @@ on: jobs: post-benchmark-ssr: - if: github.event.workflow_run.event == 'pull_request' name: Post Comment on Pull Request + if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' runs-on: ubuntu-latest steps: @@ -18,25 +17,18 @@ jobs: uses: actions/checkout@v4 - name: Download Artifact - uses: Legit-Labs/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: benchmark-ssr.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: benchmark-ssr - path: "benchmark-ssr/" + path: benchmark-ssr/ - name: Make pull request comment run: python3 ci/make_benchmark_ssr_cmt.py - name: Read Pull Request ID - run: | - PR_NUMBER=$(cat "benchmark-ssr/.PR_NUMBER") - if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then - echo "pr number invalid" - exit 1 - fi - echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV + run: echo "PR_NUMBER=$(cat benchmark-ssr/.PR_NUMBER)" >> $GITHUB_ENV - name: Post Comment uses: actions/github-script@v6 diff --git a/.github/workflows/post-benchmark.yml b/.github/workflows/post-benchmark.yml index fcbacf90c0a..2350a74a843 100644 --- a/.github/workflows/post-benchmark.yml +++ b/.github/workflows/post-benchmark.yml @@ -8,18 +8,18 @@ on: jobs: post-benchmark-results: - runs-on: ubuntu-latest if: github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest steps: # Checkout repo for the github-action-benchmark action - uses: actions/checkout@v4 - name: Download result artifacts - uses: Legit-Labs/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - workflow: benchmark.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: results path: ./artifacts @@ -27,7 +27,7 @@ jobs: uses: mathiasvr/command-output@v1 id: test-pr with: - run: cat artifacts/PR_INFO + run: cat artifacts/.PR_INFO # gh-pages branch is updated and pushed automatically with extracted benchmark data - name: Store benchmark result @@ -45,3 +45,7 @@ jobs: # Only push when this is a non-pr commit that has been benchmarked, i.e. master auto-push: ${{ fromJSON(steps.test-pr.outputs.stdout).number == '' }} save-data-file: ${{ fromJSON(steps.test-pr.outputs.stdout).number == '' }} + # Enable job summary + summary-always: true + comment-always: true + ref: ${{ github.event.workflow_run.head_sha }} diff --git a/.github/workflows/post-size-cmp.yml b/.github/workflows/post-size-cmp.yml index 1e767b7a92e..ddd3f051018 100644 --- a/.github/workflows/post-size-cmp.yml +++ b/.github/workflows/post-size-cmp.yml @@ -1,4 +1,3 @@ ---- name: Post Comment for Size Comparison on: @@ -9,30 +8,27 @@ on: jobs: post-size-cmp: - name: Post Comment on Pull Request + name: Post Size Comment on Pull Request + if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' runs-on: ubuntu-latest steps: - name: Download Repository uses: actions/checkout@v4 - - if: github.event.workflow_run.event == 'pull_request' - name: Download Artifact (master) - uses: Legit-Labs/action-download-artifact@v2 + - name: Download Artifact (master) + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: size-cmp.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: size-cmp-master-info path: "size-cmp-master-info/" - - if: github.event.workflow_run.event == 'pull_request' - name: Download Artifact (PR) - uses: Legit-Labs/action-download-artifact@v2 + - name: Download Artifact (PR) + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: size-cmp.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: size-cmp-pr-info path: "size-cmp-pr-info/" diff --git a/.github/workflows/publish-api-docs.yml b/.github/workflows/publish-api-docs.yml index 38c8822a348..a889948aee4 100644 --- a/.github/workflows/publish-api-docs.yml +++ b/.github/workflows/publish-api-docs.yml @@ -7,41 +7,34 @@ on: jobs: publish: + if: github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-latest - env: - PR_INFO_FILE: ".PR_INFO" - steps: - - if: github.event.workflow_run.conclusion != 'success' - name: Abort if build failed - run: | - echo "build failed" - exit 1 + steps: # need to checkout to get "firebase.json", ".firebaserc" - uses: actions/checkout@v4 - name: Download build artifact - uses: dawidd6/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: build-api-docs.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: api-docs path: api-docs/ - if: github.event.workflow_run.event == 'pull_request' name: Download pr info - uses: dawidd6/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: build-api-docs.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: pr-info + path: artifacts - if: github.event.workflow_run.event == 'pull_request' name: Apply pull request environment run: | - pr_number=$(cat "$PR_INFO_FILE") + pr_number=$(cat "artifacts/.PR_INFO") if ! [[ "$pr_number" =~ ^[0-9]+$ ]]; then echo "pr number invalid" exit 1 diff --git a/.github/workflows/publish-examples.yml b/.github/workflows/publish-examples.yml index 6a2219188fc..a60c3a300e4 100644 --- a/.github/workflows/publish-examples.yml +++ b/.github/workflows/publish-examples.yml @@ -25,8 +25,10 @@ jobs: components: rust-src - uses: Swatinem/rust-cache@v2 + with: + shared-key: publish-examples - - uses: jetli/trunk-action@v0.4.0 + - uses: jetli/trunk-action@v0.5.0 with: version: 'latest' diff --git a/.github/workflows/publish-website.yml b/.github/workflows/publish-website.yml index 42d897528f1..a12f627f30d 100644 --- a/.github/workflows/publish-website.yml +++ b/.github/workflows/publish-website.yml @@ -7,41 +7,34 @@ on: jobs: publish: + if: github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-latest - env: - PR_INFO_FILE: ".PR_INFO" + steps: - - if: github.event.workflow_run.conclusion != 'success' - name: Abort if build failed - run: | - echo "build failed" - exit 1 # need to checkout to get "firebase.json", ".firebaserc" - uses: actions/checkout@v4 - name: Download build artifact - uses: Legit-Labs/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: build-website.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: website path: website/build - if: github.event.workflow_run.event == 'pull_request' name: Download pr info - uses: Legit-Labs/action-download-artifact@v2 + uses: actions/download-artifact@v4 with: - github_token: "${{ secrets.GITHUB_TOKEN }}" - workflow: build-website.yml - run_id: ${{ github.event.workflow_run.id }} + github-token: "${{ secrets.GITHUB_TOKEN }}" + run-id: ${{ github.event.workflow_run.id }} name: pr-info path: artifacts - if: github.event.workflow_run.event == 'pull_request' name: Apply pull request environment run: | - pr_number=$(cat "artifacts/$PR_INFO_FILE") + pr_number=$(cat "artifacts/.PR_INFO") if ! [[ "$pr_number" =~ ^[0-9]+$ ]]; then echo "pr number invalid" exit 1 @@ -49,10 +42,12 @@ jobs: echo "PR_NUMBER=$pr_number" >> $GITHUB_ENV echo "PR_BRANCH=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_ENV echo "COMMIT_SHA=${{ github.event.workflow_run.head_sha }}" >> $GITHUB_ENV + - if: github.event.workflow_run.event == 'push' name: Apply push environment run: | echo "CHANNEL_ID=live" >> $GITHUB_ENV + - name: Deploy to Firebase uses: siku2/action-hosting-deploy@v1 with: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 93a0676a141..2c589cc5dd1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,7 @@ jobs: fetch-depth: 0 - name: Config Git - uses: oleksiyrudenko/gha-git-credentials@v2.1.1 + uses: oleksiyrudenko/gha-git-credentials@v2.1.2 with: token: "${{ secrets.YEWTEMPBOT_TOKEN }}" @@ -41,7 +41,7 @@ jobs: toolchain: stable - name: Install cargo binary dependencies - uses: baptiste0928/cargo-install@v2 + uses: baptiste0928/cargo-install@v3 with: crate: cargo-release version: =0.23.1 @@ -77,7 +77,7 @@ jobs: branch: ${{ steps.gettag.outputs.tag }} - name: Create a Release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: token: ${{ secrets.YEWTEMPBOT_TOKEN }} tag_name: ${{ steps.gettag.outputs.tag }} diff --git a/.github/workflows/size-cmp.yml b/.github/workflows/size-cmp.yml index 066dbb287c0..a64f682ee12 100644 --- a/.github/workflows/size-cmp.yml +++ b/.github/workflows/size-cmp.yml @@ -1,4 +1,3 @@ ---- name: Size Comparison on: @@ -46,9 +45,11 @@ jobs: - name: Restore Rust cache for master uses: Swatinem/rust-cache@v2 + with: + shared-key: size-compare - name: Setup Trunk - uses: jetli/trunk-action@v0.4.0 + uses: jetli/trunk-action@v0.5.0 with: version: "latest" @@ -65,7 +66,7 @@ jobs: ISSUE_NUMBER: ${{ github.event.number }} - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: size-cmp-${{ matrix.target }}-info path: ".SIZE_CMP_INFO" diff --git a/.github/workflows/test-website.yml b/.github/workflows/test-website.yml index 667fb0074ed..ebafcb6f8b0 100644 --- a/.github/workflows/test-website.yml +++ b/.github/workflows/test-website.yml @@ -1,4 +1,3 @@ ---- name: "Test Website" on: @@ -17,11 +16,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup toolchain - uses: dtolnay/rust-toolchain@master - with: - toolchain: stable - # for wasm-bindgen-cli, always use stable rust - name: Setup toolchain uses: dtolnay/rust-toolchain@master @@ -39,6 +33,8 @@ jobs: targets: wasm32-unknown-unknown - uses: Swatinem/rust-cache@v2 + with: + shared-key: yew-packages - uses: browser-actions/setup-geckodriver@latest with: diff --git a/.gitignore b/.gitignore index ff4c7afbdf4..bec5f8c71aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ target/ +dist/ # backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock index e2075b835f7..6063cb22d8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.19.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -43,57 +43,58 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.1" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cd65a4b849ace0b7f6daeebcc1a1d111282227ca745458c61dbf670e52a597" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.0" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0238ca56c96dfa37bdf7c373c8886dd591322500aceeeccdb2216fe06dc2f796" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "anymap2" @@ -103,13 +104,13 @@ checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] @@ -117,31 +118,37 @@ name = "async_clock" version = "0.0.1" dependencies = [ "chrono", - "futures 0.3.29", - "gloo-net 0.4.0", + "futures 0.3.30", + "gloo-net 0.6.0", "yew", ] [[package]] name = "atomic-polyfill" -version = "0.1.11" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" dependencies = [ "critical-section", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "average" -version = "0.14.1" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d804c74bb2d66e9b7047658d21af0f1c937d7d2466410cbf1aed3b0c04048d4" +checksum = "3a237a6822e1c3c98e700b6db5b293eb341b7524dcb8d227941245702b7431dc" dependencies = [ "easy-cast", "float-ord", @@ -150,18 +157,19 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.20" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" dependencies = [ "async-trait", "axum-core", - "bitflags 1.3.2", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", "itoa", "matchit", "memchr", @@ -173,35 +181,40 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", "tower", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper 1.0.1", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -214,15 +227,15 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.21.5" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" @@ -230,15 +243,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "basic-toml" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" -dependencies = [ - "serde", -] - [[package]] name = "benchmark-core" version = "0.1.0" @@ -289,15 +293,9 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -314,7 +312,7 @@ version = "0.1.0" dependencies = [ "anyhow", "getrandom", - "gloo 0.10.0", + "gloo 0.11.0", "rand", "serde", "web-sys", @@ -323,35 +321,37 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.0.79" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" dependencies = [ "jobserver", + "libc", + "shlex", ] [[package]] @@ -378,23 +378,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.48.1", + "windows-targets", ] [[package]] name = "clap" -version = "4.4.7" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" dependencies = [ "clap_builder", "clap_derive", @@ -402,9 +402,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" dependencies = [ "anstream", "anstyle", @@ -415,21 +415,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "cobs" @@ -439,9 +439,9 @@ checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "communication_child_to_parent" @@ -479,15 +479,15 @@ checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af" [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] @@ -508,17 +508,11 @@ dependencies = [ "yew-agent", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -526,26 +520,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" - -[[package]] -name = "core_affinity" -version = "0.8.1" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" -dependencies = [ - "libc", - "num_cpus", - "winapi", -] +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "counter" version = "0.1.1" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "wasm-bindgen", "yew", @@ -560,18 +543,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.8" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] [[package]] name = "critical-section" -version = "1.1.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" +checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" [[package]] name = "crypto-common" @@ -585,9 +568,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -595,93 +578,100 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] [[package]] name = "derive_builder" -version = "0.12.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" dependencies = [ "derive_builder_macro", ] [[package]] name = "derive_builder_core" -version = "0.12.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" +checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" dependencies = [ "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "derive_builder_macro" -version = "0.12.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" +checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ - "convert_case", "proc-macro2", "quote", - "rustc_version", - "syn 1.0.109", + "syn 2.0.79", ] [[package]] name = "deunicode" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a1abaf4d861455be59f64fd2b55606cb151fce304ede7165f410243ce96bde6" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" [[package]] name = "digest" @@ -695,34 +685,34 @@ dependencies = [ [[package]] name = "divan" -version = "0.1.1" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9fe20b31e5a6a2c689cb9cd6b8ab3e1b417536b2369830b037acfee34b11469" +checksum = "a0d567df2c9c2870a43f3f2bd65aaeb18dbce1c18f217c3e564b4fbaeb3ee56c" dependencies = [ + "cfg-if", "clap", "condtype", - "core_affinity", "divan-macros", - "linkme", + "libc", "regex-lite", ] [[package]] name = "divan-macros" -version = "0.1.1" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c41656525d3cbca56bc91ca045ffb591b7b7d7bd7453750b63bacc35c46f3cc" +checksum = "27540baf49be0d484d8f0130d7d8da3011c32a44d4fc873368154f1510e574a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "dyn_create_destroy_apps" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "slab", "wasm-bindgen", @@ -741,9 +731,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -753,58 +743,57 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] -name = "env_logger" -version = "0.10.0" +name = "env_filter" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ - "humantime", - "is-terminal", "log", "regex", - "termcolor", ] [[package]] -name = "equivalent" -version = "1.0.0" +name = "env_logger" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] [[package]] -name = "errno" -version = "0.3.1" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "errno" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] name = "fake" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26221445034074d46b276e13eb97a265ebdb8ed8da705c4dddd3dd20b66b45d2" +checksum = "2d391ba4af7f1d93f01fcf7b2f29e2bc9348e109dfdbf4dcbdc51dfa38dab0b6" dependencies = [ "deunicode", "rand", @@ -812,29 +801,27 @@ dependencies = [ [[package]] name = "fancy-regex" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" +checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex", + "regex-automata", + "regex-syntax", ] [[package]] name = "fastrand" -version = "1.9.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "file_upload" version = "0.1.0" dependencies = [ - "base64 0.21.5", - "gloo 0.10.0", + "base64 0.22.1", + "gloo 0.11.0", "js-sys", "web-sys", "yew", @@ -869,9 +856,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -881,7 +868,7 @@ name = "function_memory_game" version = "0.1.0" dependencies = [ "getrandom", - "gloo 0.10.0", + "gloo 0.11.0", "nanoid", "rand", "serde", @@ -896,7 +883,7 @@ name = "function_router" version = "0.1.0" dependencies = [ "getrandom", - "gloo 0.10.0", + "gloo 0.11.0", "instant", "lipsum", "log", @@ -912,7 +899,7 @@ dependencies = [ name = "function_todomvc" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "serde", "strum", "strum_macros", @@ -924,7 +911,7 @@ dependencies = [ name = "futures" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "pulldown-cmark", "wasm-bindgen", "wasm-bindgen-futures", @@ -934,9 +921,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -949,9 +936,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -959,15 +946,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -976,38 +963,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1026,7 +1013,7 @@ name = "game_of_life" version = "0.1.4" dependencies = [ "getrandom", - "gloo 0.10.0", + "gloo 0.11.0", "log", "rand", "wasm-logger", @@ -1045,9 +1032,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -1058,17 +1045,17 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "git2" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf97ba92db08df386e10c8ede66a2a0369bd277090afd8710e19e38de9ec0cd" +checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "bitflags 2.4.0", + "bitflags", "libc", "libgit2-sys", "log", @@ -1093,7 +1080,7 @@ dependencies = [ "gloo-dialogs 0.1.1", "gloo-events 0.1.2", "gloo-file 0.2.3", - "gloo-history 0.1.4", + "gloo-history 0.1.5", "gloo-net 0.3.1", "gloo-render 0.1.1", "gloo-storage 0.2.2", @@ -1104,21 +1091,21 @@ dependencies = [ [[package]] name = "gloo" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd35526c28cc55c1db77aed6296de58677dbab863b118483a27845631d870249" +checksum = "d15282ece24eaf4bd338d73ef580c6714c8615155c4190c781290ee3fa0fd372" dependencies = [ "gloo-console 0.3.0", "gloo-dialogs 0.2.0", "gloo-events 0.2.0", "gloo-file 0.3.0", - "gloo-history 0.2.0", - "gloo-net 0.4.0", + "gloo-history 0.2.2", + "gloo-net 0.5.0", "gloo-render 0.2.0", "gloo-storage 0.3.0", "gloo-timers 0.3.0", "gloo-utils 0.2.0", - "gloo-worker 0.4.1", + "gloo-worker 0.5.0", ] [[package]] @@ -1214,14 +1201,14 @@ dependencies = [ [[package]] name = "gloo-history" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfd137a4b629e72b8c949ec56c71ea9bd5491cc66358a0a7787e94875feec71" +checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f" dependencies = [ "gloo-events 0.1.2", "gloo-utils 0.1.7", "serde", - "serde-wasm-bindgen", + "serde-wasm-bindgen 0.5.0", "serde_urlencoded", "thiserror", "wasm-bindgen", @@ -1230,14 +1217,15 @@ dependencies = [ [[package]] name = "gloo-history" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91be9f3dd048f35a59c8de3d716ef6d568360078c73ed35a7700776ed53153c8" +checksum = "903f432be5ba34427eac5e16048ef65604a82061fe93789f2212afc73d8617d6" dependencies = [ + "getrandom", "gloo-events 0.2.0", "gloo-utils 0.2.0", "serde", - "serde-wasm-bindgen", + "serde-wasm-bindgen 0.6.5", "serde_urlencoded", "thiserror", "wasm-bindgen", @@ -1254,7 +1242,7 @@ dependencies = [ "futures-core", "futures-sink", "gloo-utils 0.1.7", - "http", + "http 0.2.12", "js-sys", "pin-project", "serde", @@ -1267,15 +1255,36 @@ dependencies = [ [[package]] name = "gloo-net" -version = "0.4.0" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43aaa242d1239a8822c15c645f02166398da4f8b5c4bae795c1f5b44e9eee173" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http 0.2.12", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-net" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" dependencies = [ "futures-channel", "futures-core", "futures-sink", "gloo-utils 0.2.0", - "http", + "http 1.1.0", "js-sys", "pin-project", "serde", @@ -1403,12 +1412,12 @@ dependencies = [ [[package]] name = "gloo-worker" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cbd4c35cc3a2b1fb792318acc06bd514193f6d058173da5cdbcdabe6514303" +checksum = "085f262d7604911c8150162529cefab3782e91adb20202e8658f7275d2aefe5d" dependencies = [ "bincode", - "futures 0.3.29", + "futures 0.3.30", "gloo-utils 0.2.0", "gloo-worker-macros", "js-sys", @@ -1429,22 +1438,41 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "h2" -version = "0.3.20" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 1.9.3", + "http 0.2.12", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap", "slab", "tokio", "tokio-util", @@ -1462,27 +1490,20 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", + "base64 0.21.7", "bytes", "headers-core", - "http", + "http 0.2.12", "httpdate", "mime", "sha1", @@ -1494,14 +1515,14 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" dependencies = [ - "http", + "http 0.2.12", ] [[package]] name = "heapless" -version = "0.7.16" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" dependencies = [ "atomic-polyfill", "hash32", @@ -1518,19 +1539,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "html-escape" @@ -1543,9 +1561,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -1554,32 +1583,55 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "http", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", "pin-project-lite", ] [[package]] name = "http-range-header" -version = "0.3.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" @@ -1589,22 +1641,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2", "tokio", "tower-service", "tracing", @@ -1612,52 +1664,112 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", - "hyper", - "native-tls", + "futures-channel", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", "tokio", - "tokio-native-tls", + "want", ] [[package]] -name = "iana-time-zone" -version = "0.1.57" +name = "hyper-rustls" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows", + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "cc", + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", ] [[package]] -name = "ident_case" -version = "1.0.1" +name = "hyper-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1675,12 +1787,12 @@ dependencies = [ [[package]] name = "implicit-clone" -version = "0.4.8" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc06a255cbf402a52ae399c05a518c68c569c916ea11423620111df576b9b9bb" +checksum = "1bd41bf647018e1da0e32dac34d02135d61d7204cee650e4633eddbd0b23ec38" dependencies = [ "implicit-clone-derive", - "indexmap 2.0.2", + "indexmap", ] [[package]] @@ -1690,34 +1802,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9311685eb9a34808bbb0608ad2fcab9ae216266beca5848613e95553ac914e3b" dependencies = [ "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.0.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.1", + "hashbrown", ] [[package]] name = "indicatif" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" dependencies = [ "console", "instant", @@ -1730,16 +1832,16 @@ dependencies = [ name = "inner_html" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "web-sys", "yew", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", "js-sys", @@ -1747,55 +1849,38 @@ dependencies = [ "web-sys", ] -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] -name = "is-terminal" -version = "0.4.7" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" -dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", - "rustix 0.37.25", - "windows-sys 0.48.0", -] +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" -version = "0.10.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jemalloc-sys" -version = "0.5.3+5.3.0-patched" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9bd5d616ea7ed58b571b2e209a65759664d7fb021a0819d7a790afc67e47ca1" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" dependencies = [ "cc", "libc", @@ -1813,9 +1898,9 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -1844,9 +1929,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -1878,21 +1963,21 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libgit2-sys" -version = "0.16.2+1.7.2" +version = "0.17.0+1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" +checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" dependencies = [ "cc", "libc", @@ -1904,9 +1989,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libssh2-sys" @@ -1924,9 +2009,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.9" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647" dependencies = [ "cc", "libc", @@ -1934,43 +2019,17 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "linkme" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ed2ee9464ff9707af8e9ad834cffa4802f072caad90639c583dd3c62e6e608" -dependencies = [ - "linkme-impl", -] - -[[package]] -name = "linkme-impl" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba125974b109d512fccbc6c0244e7580143e460895dfd6ea7f8bbb692fd94396" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lipsum" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5e9ef2d2ad6fe67a59ace27c203c8d3a71d195532ee82e3bbe0d5f9a9ca541" +checksum = "636860251af8963cc40f6b4baadee105f02e21b28131d76eba8e40ce84ab8064" dependencies = [ "rand", "rand_chacha", @@ -1978,9 +2037,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1988,21 +2047,21 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.6.3" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -2012,39 +2071,50 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", ] +[[package]] +name = "minicov" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +dependencies = [ + "cc", + "walkdir", +] + [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "mount_point" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "wasm-bindgen", "web-sys", "yew", @@ -2059,7 +2129,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http", + "http 0.2.12", "httparse", "log", "memchr", @@ -2079,11 +2149,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2113,20 +2182,16 @@ dependencies = [ ] [[package]] -name = "nu-ansi-term" -version = "0.46.0" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -2134,11 +2199,11 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] @@ -2150,26 +2215,29 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.30.4" +version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] [[package]] name = "openssl" -version = "0.10.60" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.4.0", + "bitflags", "cfg-if", "foreign-types", "libc", @@ -2186,7 +2254,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] @@ -2197,9 +2265,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.96" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -2207,17 +2275,11 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "papergrid" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ccbe15f2b6db62f9a9871642746427e297b0ceb85f9a7f1ee5ff47d184d0c8" +checksum = "c7419ad52a7de9b60d33e11085a0fe3df1fbd5926aa3f93d3dd53afbc9e86725" dependencies = [ "bytecount", "fnv", @@ -2226,9 +2288,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2236,15 +2298,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.48.1", + "windows-targets", ] [[package]] @@ -2262,35 +2324,35 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -2304,28 +2366,28 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" dependencies = [ - "futures 0.3.29", + "futures 0.3.30", "rustversion", "thiserror", ] [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "portable-atomic" -version = "1.3.3" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "portals" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "wasm-bindgen", "web-sys", "yew", @@ -2333,9 +2395,9 @@ dependencies = [ [[package]] name = "postcard" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" dependencies = [ "cobs", "heapless", @@ -2350,25 +2412,28 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "primes" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a61082d8bceecd71a3870e9162002bb75f7ba9c7aa8b76227e887782fef9c8" +checksum = "0466ef49edd4a5a4bc9d62804a34e89366810bd8bfc3ed537101e3d099f245c5" [[package]] name = "proc-macro-crate" @@ -2377,7 +2442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] @@ -2406,9 +2471,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -2428,7 +2493,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03b55e106e5791fa5a13abd13c85d6127312e8e09098059ca2bc9b03ca4cf488" dependencies = [ - "futures 0.3.29", + "futures 0.3.30", "gloo 0.8.1", "num_cpus", "once_cell", @@ -2441,26 +2506,20 @@ dependencies = [ [[package]] name = "pulldown-cmark" -version = "0.9.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" +checksum = "666f0f59e259aea2d72e6012290c09877a780935cc3c18b1ceded41f3890d59c" dependencies = [ - "bitflags 1.3.2", + "bitflags", "memchr", "unicase", ] -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quote" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2497,18 +2556,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -2518,9 +2577,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -2529,32 +2588,36 @@ dependencies = [ [[package]] name = "regex-lite" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b661b2f27137bdbc16f00eda72866a92bb28af1753ffbd56744fb6e2e9cd8e" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.22" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2563,9 +2626,11 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper 1.0.1", "system-configuration", "tokio", "tokio-native-tls", @@ -2574,7 +2639,22 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", ] [[package]] @@ -2588,7 +2668,7 @@ name = "router" version = "0.1.0" dependencies = [ "getrandom", - "gloo 0.10.0", + "gloo 0.11.0", "instant", "lipsum", "log", @@ -2602,9 +2682,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" @@ -2617,59 +2697,85 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.25" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno", - "io-lifetimes", "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", + "linux-raw-sys", + "windows-sys 0.52.0", ] [[package]] -name = "rustix" -version = "0.38.13" +name = "rustls" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ - "bitflags 2.4.0", - "errno", - "libc", - "linux-raw-sys 0.4.10", - "windows-sys 0.48.0", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.102.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -2680,17 +2786,17 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -2699,9 +2805,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -2709,15 +2815,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.190" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -2733,33 +2839,55 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.11" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -2778,9 +2906,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -2788,19 +2916,16 @@ dependencies = [ ] [[package]] -name = "sharded-slab" -version = "0.1.7" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -2811,15 +2936,15 @@ version = "0.1.0" dependencies = [ "bytes", "clap", - "futures 0.3.29", + "futures 0.3.30", + "log", "reqwest", "serde", - "time", "tokio", - "tracing-subscriber", - "tracing-web", "uuid", "warp", + "wasm-bindgen-futures", + "wasm-logger", "yew", ] @@ -2834,28 +2959,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.9" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" -dependencies = [ - "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2875,8 +2990,9 @@ dependencies = [ "clap", "env_logger", "function_router", - "futures 0.3.29", - "hyper", + "futures 0.3.30", + "hyper 1.4.1", + "hyper-util", "jemallocator", "log", "tokio", @@ -2895,37 +3011,43 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.25.0" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros", ] [[package]] name = "strum_macros" -version = "0.25.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck", + "heck 0.5.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.38", + "syn 2.0.79", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "suspense" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -2945,9 +3067,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -2960,22 +3082,31 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -2983,22 +3114,21 @@ dependencies = [ [[package]] name = "tabled" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe9c3632da101aba5131ed63f9eed38665f8b3c68703a6bb18124835c1a5d22" +checksum = "77c9303ee60b9bedf722012ea29ae3711ba13a67c9b9ae28993838b63057cb1b" dependencies = [ "papergrid", "tabled_derive", - "unicode-width", ] [[package]] name = "tabled_derive" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" +checksum = "bf0fb8bfdc709786c154e24a66777493fb63ae97e3036d914c8666774c477069" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", @@ -3007,75 +3137,64 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.6.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ - "autocfg", "cfg-if", "fastrand", - "redox_syscall", - "rustix 0.37.25", - "windows-sys 0.48.0", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" dependencies = [ - "rustix 0.38.13", - "windows-sys 0.48.0", + "rustix", + "windows-sys 0.59.0", ] [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", + "syn 2.0.79", ] [[package]] name = "time" -version = "0.3.30" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", - "js-sys", + "num-conv", "powerfmt", "serde", "time-core", @@ -3091,7 +3210,7 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" name = "timer" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "wasm-bindgen", "yew", @@ -3101,16 +3220,16 @@ dependencies = [ name = "timer_functional" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "yew", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -3125,7 +3244,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" name = "todomvc" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "serde", "serde_derive", "strum", @@ -3136,32 +3255,31 @@ dependencies = [ [[package]] name = "tokio" -version = "1.33.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] @@ -3174,11 +3292,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -3187,9 +3316,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.20.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" dependencies = [ "futures-util", "log", @@ -3199,45 +3328,72 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.14" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", + "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.18", ] [[package]] name = "tower" -version = "0.4.13" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper 0.1.2", "tokio", "tower-layer", "tower-service", @@ -3246,16 +3402,16 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.3.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +checksum = "8437150ab6bbc8c5f0f519e3d5ed4aa883a83dd4cdd3d1b21f9482936046cb97" dependencies = [ - "bitflags 1.3.2", + "bitflags", "bytes", - "futures-core", "futures-util", - "http", - "http-body", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", "http-range-header", "httpdate", "mime", @@ -3266,19 +3422,20 @@ dependencies = [ "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -3300,7 +3457,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] @@ -3310,78 +3467,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "tracing-web" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e6a141feebd51f8d91ebfd785af50fca223c570b86852166caa3b141defe7c" -dependencies = [ - "js-sys", - "tracing-core", - "tracing-subscriber", - "wasm-bindgen", - "web-sys", ] [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "trybuild" -version = "1.0.85" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196a58260a906cedb9bf6d8034b6379d0c11f552416960452f267402ceeddff1" +checksum = "207aa50d36c4be8d8c6ea829478be44a372c6a77669937bb39c698e52f1491e8" dependencies = [ - "basic-toml", "glob", - "once_cell", "serde", "serde_derive", "serde_json", "termcolor", + "toml", ] [[package]] name = "tungstenite" -version = "0.20.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" dependencies = [ "byteorder", "bytes", "data-encoding", - "http", + "http 1.1.0", "httparse", "log", "rand", @@ -3395,57 +3512,63 @@ dependencies = [ name = "two_apps" version = "0.1.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "yew", ] [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -3466,31 +3589,25 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "utf8-width" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.5.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "serde", ] -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - [[package]] name = "vcpkg" version = "0.2.15" @@ -3499,9 +3616,19 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] [[package]] name = "want" @@ -3514,29 +3641,27 @@ dependencies = [ [[package]] name = "warp" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169" +checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" dependencies = [ "bytes", "futures-channel", "futures-util", "headers", - "http", - "hyper", + "http 0.2.12", + "hyper 0.14.30", "log", "mime", "mime_guess", "multer", "percent-encoding", "pin-project", - "rustls-pemfile", "scoped-tls", "serde", "serde_json", "serde_urlencoded", "tokio", - "tokio-stream", "tokio-tungstenite", "tokio-util", "tower-service", @@ -3551,34 +3676,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -3588,9 +3714,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3598,31 +3724,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-bindgen-test" -version = "0.3.37" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e6e302a7ea94f83a6d09e78e7dc7d9ca7b186bc2829c24a22d0753efd680671" +checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" dependencies = [ "console_error_panic_hook", "js-sys", + "minicov", "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", @@ -3631,12 +3758,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.37" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecb993dd8c836930ed130e020e77d9b2e65dd0fbab1b67c790b0f5d80b11a575" +checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" dependencies = [ "proc-macro2", "quote", + "syn 2.0.79", ] [[package]] @@ -3652,9 +3780,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -3698,7 +3826,7 @@ version = "0.1.0" dependencies = [ "derive_more", "glob", - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "tokio", "wasm-bindgen", @@ -3712,209 +3840,151 @@ dependencies = [ ] [[package]] -name = "winapi" -version = "0.3.9" +name = "winapi-util" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "windows-sys 0.59.0", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "winapi", + "windows-targets", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows" -version = "0.48.0" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" dependencies = [ - "windows-targets 0.48.1", + "windows-result", + "windows-strings", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.42.2", + "windows-result", + "windows-targets", ] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.48.1", + "windows-targets", ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.4" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acaaa1190073b2b101e15083c38ee8ec891b5e05cbee516521e94ec008f61e64" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] -name = "winreg" -version = "0.50.0" +name = "winnow" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ - "cfg-if", - "windows-sys 0.48.0", + "memchr", ] [[package]] @@ -3924,11 +3994,11 @@ dependencies = [ "base64ct", "bincode", "console_error_panic_hook", - "futures 0.3.29", - "gloo 0.10.0", + "futures 0.3.30", + "gloo 0.11.0", "html-escape", "implicit-clone", - "indexmap 2.0.2", + "indexmap", "js-sys", "prokio", "rustversion", @@ -3949,8 +4019,8 @@ dependencies = [ name = "yew-agent" version = "0.3.0" dependencies = [ - "futures 0.3.29", - "gloo-worker 0.4.1", + "futures 0.3.30", + "gloo-worker 0.5.0", "serde", "wasm-bindgen", "yew", @@ -3964,7 +4034,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.38", + "syn 2.0.79", "trybuild", "yew-agent", ] @@ -3977,7 +4047,7 @@ checksum = "58865a8f2470a6ad839274e05c9627170d32930f39a2348f8c425880a6131792" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.79", ] [[package]] @@ -3990,7 +4060,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.38", + "syn 2.0.79", "trybuild", "yew", ] @@ -3999,7 +4069,7 @@ dependencies = [ name = "yew-router" version = "0.18.0" dependencies = [ - "gloo 0.10.0", + "gloo 0.11.0", "js-sys", "route-recognizer", "serde", @@ -4020,7 +4090,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.38", + "syn 2.0.79", "trybuild", "yew-router", ] @@ -4042,25 +4112,53 @@ dependencies = [ name = "yew-worker-prime" version = "0.1.0" dependencies = [ - "futures 0.3.29", + "futures 0.3.30", "primes", "serde", "yew", "yew-agent", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zxcvbn" -version = "2.2.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "103fa851fff70ea29af380e87c25c48ff7faac5c530c70bd0e65366d4e0c94e4" +checksum = "ad76e35b00ad53688d6b90c431cabe3cbf51f7a4a154739e04b63004ab1c736c" dependencies = [ + "chrono", "derive_builder", "fancy-regex", "itertools", - "js-sys", "lazy_static", - "quick-error", "regex", "time", + "wasm-bindgen", + "web-sys", ] diff --git a/Cargo.toml b/Cargo.toml index 9205d8e3dcb..1c5626cc75d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,5 +18,5 @@ opt-level = "z" [profile.bench] lto = true codegen-units = 1 -panic = "abort" opt-level = 3 + diff --git a/ci/build-examples.sh b/ci/build-examples.sh index 2bc3f56b184..dfd0cd8db59 100755 --- a/ci/build-examples.sh +++ b/ci/build-examples.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Must be run from root of the repo: # yew $ ./ci/build-examples.sh @@ -25,15 +26,8 @@ for path in examples/*; do cd "$path" dist_dir="$output/$example" export RUSTFLAGS="--cfg nightly_yew" - if [[ "$example" == "boids" || "$example" == "password_strength" ]]; then - # works around issue rust-lang/rust#96486 - # where the compiler forgets to link some symbols connected to const_eval - # only an issue on nightly and with build-std enabled which we do for code size - # this deoptimizes only the examples that otherwise fail to build - export RUSTFLAGS="-Zshare-generics=n -Clto=thin $RUSTFLAGS" - fi - trunk build --release --dist "$dist_dir" --public-url "$PUBLIC_URL_PREFIX$example" + trunk build --release --dist "$dist_dir" --public-url "$PUBLIC_URL_PREFIX/$example" --no-sri # check that there are no undefined symbols. Those generate an import .. from 'env', # which isn't available in the browser. diff --git a/ci/feature-soundness-release.sh b/ci/feature-soundness-release.sh index 0fd501fba3c..19387aaeabb 100755 --- a/ci/feature-soundness-release.sh +++ b/ci/feature-soundness-release.sh @@ -2,19 +2,19 @@ set -xe # You can extract the feature list with the following command: -# cargo hack check --feature-powerset --exclude-features nightly +# cargo hack -p yew -p yew-agent -p yew-router --feature-powerset --print-command-list clippy --release -- -D warnings -# You need to run this script in packages/yew - -cargo clippy --release --no-default-features -- --deny=warnings -cargo clippy --release --no-default-features --features csr -- --deny=warnings -cargo clippy --release --no-default-features --features default -- --deny=warnings -cargo clippy --release --no-default-features --features csr,default -- --deny=warnings -cargo clippy --release --no-default-features --features hydration -- --deny=warnings -cargo clippy --release --no-default-features --features default,hydration -- --deny=warnings -cargo clippy --release --no-default-features --features ssr -- --deny=warnings -cargo clippy --release --no-default-features --features csr,ssr -- --deny=warnings -cargo clippy --release --no-default-features --features default,ssr -- --deny=warnings -cargo clippy --release --no-default-features --features csr,default,ssr -- --deny=warnings -cargo clippy --release --no-default-features --features hydration,ssr -- --deny=warnings -cargo clippy --release --no-default-features --features default,hydration,ssr -- --deny=warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features default,hydration,ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features csr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features default -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,default -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features hydration -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features default,hydration -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features default,ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,default,ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew/Cargo.toml --no-default-features --features hydration,ssr -- -D warnings +cargo clippy --release --manifest-path packages/yew-agent/Cargo.toml -- -D warnings +cargo clippy --release --manifest-path packages/yew-router/Cargo.toml -- -D warnings diff --git a/ci/feature-soundness.sh b/ci/feature-soundness.sh index b23b2592f73..e4067a531fe 100755 --- a/ci/feature-soundness.sh +++ b/ci/feature-soundness.sh @@ -2,19 +2,19 @@ set -xe # You can extract the feature list with the following command: -# cargo hack check --feature-powerset --exclude-features nightly +# cargo hack -p yew -p yew-agent -p yew-router --feature-powerset --print-command-list clippy -- -D warnings -# You need to run this script in packages/yew - -cargo clippy --no-default-features -- --deny=warnings -cargo clippy --no-default-features --features csr -- --deny=warnings -cargo clippy --no-default-features --features default -- --deny=warnings -cargo clippy --no-default-features --features csr,default -- --deny=warnings -cargo clippy --no-default-features --features hydration -- --deny=warnings -cargo clippy --no-default-features --features default,hydration -- --deny=warnings -cargo clippy --no-default-features --features ssr -- --deny=warnings -cargo clippy --no-default-features --features csr,ssr -- --deny=warnings -cargo clippy --no-default-features --features default,ssr -- --deny=warnings -cargo clippy --no-default-features --features csr,default,ssr -- --deny=warnings -cargo clippy --no-default-features --features hydration,ssr -- --deny=warnings -cargo clippy --no-default-features --features default,hydration,ssr -- --deny=warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features default,hydration,ssr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features csr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features default -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,default -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features hydration -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features default,hydration -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features ssr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,ssr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features default,ssr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features csr,default,ssr -- -D warnings +cargo clippy --manifest-path packages/yew/Cargo.toml --no-default-features --features hydration,ssr -- -D warnings +cargo clippy --manifest-path packages/yew-agent/Cargo.toml -- -D warnings +cargo clippy --manifest-path packages/yew-router/Cargo.toml -- -D warnings diff --git a/ci/install-wasm-bindgen-cli.sh b/ci/install-wasm-bindgen-cli.sh index e592a9c83b2..1962c94b3fd 100755 --- a/ci/install-wasm-bindgen-cli.sh +++ b/ci/install-wasm-bindgen-cli.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if [ ! -f "Cargo.lock" ]; then cargo fetch fi diff --git a/examples/async_clock/Cargo.toml b/examples/async_clock/Cargo.toml index c648b83031a..1127e5c36e9 100644 --- a/examples/async_clock/Cargo.toml +++ b/examples/async_clock/Cargo.toml @@ -9,4 +9,4 @@ license = "MIT OR Apache-2.0" yew = { path = "../../packages/yew", features = ["csr"] } chrono = "0.4" futures = "0.3" -gloo-net = "0.4" +gloo-net = "0.6" diff --git a/examples/boids/Cargo.toml b/examples/boids/Cargo.toml index 1a3a1b8178c..55e2cf676ad 100644 --- a/examples/boids/Cargo.toml +++ b/examples/boids/Cargo.toml @@ -12,7 +12,7 @@ getrandom = { version = "0.2", features = ["js"] } rand = "0.8" serde = { version = "1.0", features = ["derive"] } yew = { path = "../../packages/yew", features = ["csr"] } -gloo = "0.10" +gloo = "0.11" [dependencies.web-sys] version = "0.3" diff --git a/examples/counter/Cargo.toml b/examples/counter/Cargo.toml index 381c2cc0d7f..feaad6adceb 100644 --- a/examples/counter/Cargo.toml +++ b/examples/counter/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" license = "MIT OR Apache-2.0" [dependencies] -gloo = "0.10" +gloo = "0.11" js-sys = "0.3" yew = { path = "../../packages/yew", features = ["csr"] } wasm-bindgen = "0.2" diff --git a/examples/dyn_create_destroy_apps/Cargo.toml b/examples/dyn_create_destroy_apps/Cargo.toml index 7880e6ebe20..f701460f2c2 100644 --- a/examples/dyn_create_destroy_apps/Cargo.toml +++ b/examples/dyn_create_destroy_apps/Cargo.toml @@ -9,11 +9,11 @@ license = "MIT OR Apache-2.0" js-sys = "0.3" yew = { path = "../../packages/yew", features = ["csr"] } slab = "0.4.9" -gloo = "0.10" +gloo = "0.11" wasm-bindgen = "0.2" [dependencies.web-sys] -version = "0.3.64" +version = "0.3.70" features = [ "Document", "Element", diff --git a/examples/file_upload/Cargo.toml b/examples/file_upload/Cargo.toml index 3c4d3817a5e..c01c3d5bc88 100644 --- a/examples/file_upload/Cargo.toml +++ b/examples/file_upload/Cargo.toml @@ -8,9 +8,9 @@ license = "MIT OR Apache-2.0" [dependencies] js-sys = "0.3" yew = { path = "../../packages/yew", features = ["csr"] } -base64 = "0.21.5" -gloo = "0.10" +base64 = "0.22.1" +gloo = "0.11" [dependencies.web-sys] version = "0.3" -features = ["File", "DragEvent", "DataTransfer"] +features = ["DataTransfer"] diff --git a/examples/file_upload/src/main.rs b/examples/file_upload/src/main.rs index 1e882fcbda7..49d66bb7906 100644 --- a/examples/file_upload/src/main.rs +++ b/examples/file_upload/src/main.rs @@ -4,20 +4,19 @@ use std::collections::HashMap; use base64::engine::general_purpose::STANDARD; use base64::Engine; use gloo::file::callbacks::FileReader; -use gloo::file::File; -use web_sys::{DragEvent, Event, FileList, HtmlInputElement}; +use web_sys::{DragEvent, Event, HtmlInputElement}; use yew::html::TargetCast; use yew::{html, Callback, Component, Context, Html}; -struct FileDetails { +pub struct FileDetails { name: String, file_type: String, data: Vec, } pub enum Msg { - Loaded(String, String, Vec), - Files(Vec), + Loaded(FileDetails), + Files(Option), } pub struct App { @@ -38,33 +37,27 @@ impl Component for App { fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { match msg { - Msg::Loaded(file_name, file_type, data) => { - self.files.push(FileDetails { - data, - file_type, - name: file_name.clone(), - }); - self.readers.remove(&file_name); + Msg::Loaded(file) => { + self.readers.remove(&file.name); + self.files.push(file); true } Msg::Files(files) => { - for file in files.into_iter() { - let file_name = file.name(); + for file in gloo::file::FileList::from(files.expect("files")).iter() { + let link = ctx.link().clone(); + let name = file.name().clone(); let file_type = file.raw_mime_type(); let task = { - let link = ctx.link().clone(); - let file_name = file_name.clone(); - - gloo::file::callbacks::read_as_bytes(&file, move |res| { - link.send_message(Msg::Loaded( - file_name, + gloo::file::callbacks::read_as_bytes(file, move |res| { + link.send_message(Msg::Loaded(FileDetails { + data: res.expect("failed to read file"), file_type, - res.expect("failed to read file"), - )) + name, + })) }) }; - self.readers.insert(file_name, task); + self.readers.insert(file.name(), task); } true } @@ -72,6 +65,10 @@ impl Component for App { } fn view(&self, ctx: &Context) -> Html { + let noop_drag = Callback::from(|e: DragEvent| { + e.prevent_default(); + }); + html! {

{ "Upload Your Files To The Cloud" }

@@ -80,15 +77,10 @@ impl Component for App { id="drop-container" ondrop={ctx.link().callback(|event: DragEvent| { event.prevent_default(); - let files = event.data_transfer().unwrap().files(); - Self::upload_files(files) - })} - ondragover={Callback::from(|event: DragEvent| { - event.prevent_default(); - })} - ondragenter={Callback::from(|event: DragEvent| { - event.prevent_default(); + Msg::Files(event.data_transfer().unwrap().files()) })} + ondragover={&noop_drag} + ondragenter={&noop_drag} >

{"Drop your images here or click to select"}

@@ -101,7 +93,7 @@ impl Component for App { multiple={true} onchange={ctx.link().callback(move |e: Event| { let input: HtmlInputElement = e.target_unchecked_into(); - Self::upload_files(input.files()) + Msg::Files(input.files()) })} />
@@ -114,37 +106,24 @@ impl Component for App { impl App { fn view_file(file: &FileDetails) -> Html { + let file_type = file.file_type.to_string(); + let src = format!("data:{};base64,{}", file_type, STANDARD.encode(&file.data)); html! {
-

{ format!("{}", file.name) }

+

{ &file.name }

if file.file_type.contains("image") { - + } else if file.file_type.contains("video") { }
} } - - fn upload_files(files: Option) -> Msg { - let mut result = Vec::new(); - - if let Some(files) = files { - let files = js_sys::try_iter(&files) - .unwrap() - .unwrap() - .map(|v| web_sys::File::from(v.unwrap())) - .map(File::from); - result.extend(files); - } - Msg::Files(result) - } } - fn main() { yew::Renderer::::new().render(); } diff --git a/examples/function_memory_game/Cargo.toml b/examples/function_memory_game/Cargo.toml index 363e2e2b31c..08c8809af27 100644 --- a/examples/function_memory_game/Cargo.toml +++ b/examples/function_memory_game/Cargo.toml @@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0" [dependencies] serde = { version = "1.0", features = ["derive"] } -strum = "0.25" -strum_macros = "0.25" -gloo = "0.10" +strum = "0.26" +strum_macros = "0.26" +gloo = "0.11" nanoid = "0.4" rand = "0.8" getrandom = { version = "0.2", features = ["js"] } diff --git a/examples/function_router/Cargo.toml b/examples/function_router/Cargo.toml index 4e3b73a3ca2..0dd0cfdd201 100644 --- a/examples/function_router/Cargo.toml +++ b/examples/function_router/Cargo.toml @@ -5,13 +5,13 @@ edition = "2021" license = "MIT OR Apache-2.0" [dependencies] -lipsum = "0.9.0" +lipsum = "0.9.1" log = "0.4" rand = { version = "0.8", features = ["small_rng"] } yew = { path = "../../packages/yew" } yew-router = { path = "../../packages/yew-router" } serde = { version = "1.0", features = ["derive"] } -gloo = "0.10" +gloo = "0.11" wasm-logger = "0.2" instant = { version = "0.1", features = ["wasm-bindgen"] } once_cell = "1" diff --git a/examples/function_todomvc/Cargo.toml b/examples/function_todomvc/Cargo.toml index f6dcc2378e2..f089fafb19d 100644 --- a/examples/function_todomvc/Cargo.toml +++ b/examples/function_todomvc/Cargo.toml @@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0" [dependencies] serde = { version = "1.0", features = ["derive"] } -strum = "0.25" -strum_macros = "0.25" -gloo = "0.10" +strum = "0.26" +strum_macros = "0.26" +gloo = "0.11" yew = { path = "../../packages/yew", features = ["csr"] } [dependencies.web-sys] diff --git a/examples/function_todomvc/src/components/entry.rs b/examples/function_todomvc/src/components/entry.rs index 4df733ff159..98f04444c03 100644 --- a/examples/function_todomvc/src/components/entry.rs +++ b/examples/function_todomvc/src/components/entry.rs @@ -19,7 +19,7 @@ pub fn entry(props: &EntryProps) -> Html { let mut class = Classes::from("todo"); // We use the `use_bool_toggle` hook and set the default value to `false` - // as the default we are not editing the the entry. When we want to edit the + // as the default we are not editing the entry. When we want to edit the // entry we can call the toggle method on the `UseBoolToggleHandle` // which will trigger a re-render with the toggle value being `true` for that // render and after that render the value of toggle will be flipped back to diff --git a/examples/futures/Cargo.toml b/examples/futures/Cargo.toml index bd0c70d5bc9..eff1da1f642 100644 --- a/examples/futures/Cargo.toml +++ b/examples/futures/Cargo.toml @@ -6,11 +6,11 @@ edition = "2021" license = "MIT OR Apache-2.0" [dependencies] -pulldown-cmark = { version = "0.9", default-features = false } +pulldown-cmark = { version = "0.12", default-features = false } wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" yew = { path = "../../packages/yew", features = ["csr"] } -gloo = "0.10" +gloo = "0.11" [dependencies.web-sys] version = "0.3" diff --git a/examples/futures/src/main.rs b/examples/futures/src/main.rs index e1e6cb7694c..3abc455658b 100644 --- a/examples/futures/src/main.rs +++ b/examples/futures/src/main.rs @@ -43,9 +43,9 @@ pub enum FetchState { /// Consult the following for an example of the fetch api by the team behind web_sys: /// https://rustwasm.github.io/wasm-bindgen/examples/fetch.html async fn fetch_markdown(url: &'static str) -> Result { - let mut opts = RequestInit::new(); - opts.method("GET"); - opts.mode(RequestMode::Cors); + let opts = RequestInit::new(); + opts.set_method("GET"); + opts.set_mode(RequestMode::Cors); let request = Request::new_with_str_and_init(url, &opts)?; diff --git a/examples/futures/src/markdown.rs b/examples/futures/src/markdown.rs index afdad6bf98f..878396d9355 100644 --- a/examples/futures/src/markdown.rs +++ b/examples/futures/src/markdown.rs @@ -1,199 +1,258 @@ /// Original author of this code is [Nathan Ringo](https://github.com/remexre) /// Source: https://github.com/acmumn/mentoring/blob/master/web-client/src/view/markdown.rs -use std::rc::Rc; - -use pulldown_cmark::{Alignment, CodeBlockKind, Event, Options, Parser, Tag}; +use pulldown_cmark::{Alignment, CodeBlockKind, Event, Options, Parser, Tag, TagEnd}; use yew::virtual_dom::{VNode, VTag, VText}; -use yew::{html, Classes, Html}; - -/// Adds a class to the VTag. -/// You can also provide multiple classes separated by ascii whitespaces. -/// -/// Note that this has a complexity of O(n), -/// where n is the number of classes already in VTag plus -/// the number of classes to be added. -fn add_class(vtag: &mut VTag, class: impl Into) { - let mut classes: Classes = vtag - .attributes - .iter() - .find(|(k, _)| *k == "class") - .map(|(_, v)| Classes::from(v.to_owned())) - .unwrap_or_default(); - classes.push(class); - vtag.add_attribute("class", classes.to_string()); +use yew::Html; + +struct TableContext { + next_cell_index: usize, + in_head: bool, + has_body: bool, + alignment: Vec, } -/// Renders a string of Markdown to HTML with the default options (footnotes -/// disabled, tables enabled). -pub fn render_markdown(src: &str) -> Html { - let mut elems = vec![]; - let mut spine = vec![]; - - macro_rules! add_child { - ($child:expr) => {{ - let l = spine.len(); - assert_ne!(l, 0); - spine[l - 1].add_child($child); - }}; +struct TagWriter { + root_children: Vec, + spine: Vec, + table_ctx: Option, +} + +impl TagWriter { + fn new() -> Self { + Self { + root_children: vec![], + spine: vec![], + table_ctx: None, + } } - let mut options = Options::empty(); - options.insert(Options::ENABLE_TABLES); + fn finish(mut self) -> VNode { + assert!( + self.spine.is_empty(), + "expected all nested elements to be closed" + ); + if self.root_children.len() == 1 { + self.root_children.pop().unwrap() + } else { + self.root_children.into_iter().collect() + } + } - for ev in Parser::new_ext(src, options) { - match ev { - Event::Start(tag) => { - spine.push(make_tag(tag)); - } - Event::End(tag) => { - // TODO Verify stack end. - let l = spine.len(); - assert!(l >= 1); - let mut top = spine.pop().unwrap(); - if let Tag::CodeBlock(_) = tag { - let mut pre = VTag::new("pre"); - pre.add_child(top.into()); - top = pre; - } else if let Tag::Table(aligns) = tag { - if let Some(top_children) = top.children_mut() { - for r in top_children.to_vlist_mut().iter_mut() { - if let VNode::VTag(ref mut vtag) = r { - if let Some(vtag_children) = Rc::make_mut(vtag).children_mut() { - for (i, c) in - vtag_children.to_vlist_mut().iter_mut().enumerate() - { - if let VNode::VTag(ref mut vtag) = c { - match aligns[i] { - Alignment::None => {} - Alignment::Left => { - add_class(Rc::make_mut(vtag), "text-left") - } - Alignment::Center => { - add_class(Rc::make_mut(vtag), "text-center") - } - Alignment::Right => { - add_class(Rc::make_mut(vtag), "text-right") - } - } - } - } - } - } - } + fn add_child(&mut self, child: VNode) { + if let Some(host) = self.spine.last_mut() { + host.add_child(child); + } else { + self.root_children.push(child); + } + } + + fn pop_spine(&mut self) { + let top = self.spine.pop().expect("an element to close"); + self.add_child(top.into()); + } + + fn get_table_ctx(&mut self) -> &mut TableContext { + self.table_ctx.as_mut().expect("a table context") + } + + fn open_table_ctx(&mut self, alignment: Vec) { + assert!(self.table_ctx.is_none(), "nested tables not supported"); + self.table_ctx = Some(TableContext { + next_cell_index: 0, + in_head: false, + has_body: false, + alignment, + }); + } + + fn close_table_ctx(&mut self) -> TableContext { + self.table_ctx.take().expect("expected to be in a table") + } + + fn start_tag(&mut self, tag: Tag) { + let wrapper = match tag { + Tag::Paragraph => VTag::new("p"), + Tag::Heading { level, .. } => VTag::new(level.to_string()), + Tag::BlockQuote(_) => { + let mut el = VTag::new("blockquote"); + el.add_attribute("class", "blockquote"); + el + } + Tag::CodeBlock(code_block_kind) => { + self.spine.push(VTag::new("pre")); + + let mut el = VTag::new("code"); + if let CodeBlockKind::Fenced(lang) = code_block_kind { + // Different color schemes may be used for different code blocks, + // but a different library (likely js based at the moment) would be necessary to + // actually provide the highlighting support by locating the + // language classes and applying dom transforms on their contents. + match lang.as_ref() { + "html" => el.add_attribute("class", "html-language"), + "rust" => el.add_attribute("class", "rust-language"), + "java" => el.add_attribute("class", "java-language"), + "c" => el.add_attribute("class", "c-language"), + _ => {} // Add your own language highlighting support + }; + } + + el + } + Tag::List(None) => VTag::new("ul"), + Tag::List(Some(1)) => VTag::new("ol"), + Tag::List(Some(ref start)) => { + let mut el = VTag::new("ol"); + el.add_attribute("start", start.to_string()); + el + } + Tag::Item => VTag::new("li"), + Tag::Table(alignment) => { + self.open_table_ctx(alignment); + let mut el = VTag::new("table"); + el.add_attribute("class", "table"); + el + } + Tag::TableHead => { + let ctx = self.get_table_ctx(); + ctx.next_cell_index = 0; + ctx.in_head = true; + self.spine.push(VTag::new("thead")); + VTag::new("tr") + } + Tag::TableRow => { + let ctx = self.get_table_ctx(); + ctx.next_cell_index = 0; + if !ctx.has_body { + ctx.has_body = true; + self.spine.push(VTag::new("tbody")); + } + VTag::new("tr") + } + Tag::TableCell => { + let ctx = self.get_table_ctx(); + let idx = ctx.next_cell_index; + ctx.next_cell_index += 1; + + let mut tag = if ctx.in_head { + let mut th = VTag::new("th"); + th.add_attribute("scope", "col"); + th + } else { + VTag::new("td") + }; + match &ctx.alignment[idx] { + Alignment::None => {} + Alignment::Left => { + tag.add_attribute("class", "text-left"); + } + Alignment::Center => { + tag.add_attribute("class", "text-center"); } - } else if let Tag::TableHead = tag { - if let Some(top_children) = top.children_mut() { - for c in top_children.to_vlist_mut().iter_mut() { - if let VNode::VTag(ref mut vtag) = c { - // TODO - // vtag.tag = "th".into(); - Rc::make_mut(vtag).add_attribute("scope", "col"); - } - } + Alignment::Right => { + tag.add_attribute("class", "text-right"); } } - if l == 1 { - elems.push(top); - } else { - spine[l - 2].add_child(top.into()); + tag + } + Tag::Emphasis => { + let mut el = VTag::new("span"); + el.add_attribute("class", "font-italic"); + el + } + Tag::Strong => { + let mut el = VTag::new("span"); + el.add_attribute("class", "font-weight-bold"); + el + } + Tag::Link { + ref dest_url, + ref title, + link_type: _, + id: _, + } => { + let mut el = VTag::new("a"); + el.add_attribute("href", dest_url.to_string()); + let title = title.clone().into_string(); + if !title.is_empty() { + el.add_attribute("title", title); } + el } - Event::Text(text) => add_child!(VText::new(text.to_string()).into()), - Event::Rule => add_child!(VTag::new("hr").into()), - Event::SoftBreak => add_child!(VText::new("\n").into()), - Event::HardBreak => add_child!(VTag::new("br").into()), - _ => println!("Unknown event: {ev:#?}"), - } + Tag::Image { + ref dest_url, + ref title, + link_type: _, + id: _, + } => { + let mut el = VTag::new("img"); + el.add_attribute("src", dest_url.to_string()); + let title = title.clone().into_string(); + if !title.is_empty() { + el.add_attribute("title", title); + } + el + } + Tag::FootnoteDefinition(ref _footnote_id) => VTag::new("span"), // Footnotes are not + // rendered as anything + // special + Tag::Strikethrough => { + let mut el = VTag::new("span"); + el.add_attribute("class", "text-decoration-strikethrough"); + el + } + Tag::HtmlBlock => VTag::new("div"), + _ => { + gloo::console::log!(format!("Unhandled tag: {tag:#?}")); + VTag::new("div") + } + }; + self.spine.push(wrapper); } - if elems.len() == 1 { - VNode::VTag(Rc::new(elems.pop().unwrap())) - } else { - html! { -
{ for elems.into_iter() }
+ fn end_tag(&mut self, tag: TagEnd) { + self.pop_spine(); + match tag { + TagEnd::CodeBlock => { + self.pop_spine(); // Close
+            }
+            TagEnd::TableHead => {
+                self.pop_spine(); // Close 
+                self.get_table_ctx().in_head = false;
+            }
+            TagEnd::Table => {
+                let ctx = self.close_table_ctx();
+                if ctx.has_body {
+                    self.pop_spine(); // Close 
+                }
+            }
+            _ => {}
         }
     }
+
+    fn write_event(&mut self, ev: Event) {
+        match ev {
+            Event::Start(tag) => self.start_tag(tag),
+            Event::End(tag) => self.end_tag(tag),
+            Event::Text(text) => self.add_child(VText::new(text.to_string()).into()),
+            Event::Rule => self.add_child(VTag::new("hr").into()),
+            Event::SoftBreak => self.add_child(VText::new("\n").into()),
+            Event::HardBreak => self.add_child(VTag::new("br").into()),
+            _ => gloo::console::log!(format!("Unhandled event: {ev:#?}")),
+        };
+    }
 }
 
-fn make_tag(t: Tag) -> VTag {
-    match t {
-        Tag::Paragraph => VTag::new("p"),
-        Tag::Heading(n, ..) => VTag::new(n.to_string()),
-        Tag::BlockQuote => {
-            let mut el = VTag::new("blockquote");
-            el.add_attribute("class", "blockquote");
-            el
-        }
-        Tag::CodeBlock(code_block_kind) => {
-            let mut el = VTag::new("code");
-
-            if let CodeBlockKind::Fenced(lang) = code_block_kind {
-                // Different color schemes may be used for different code blocks,
-                // but a different library (likely js based at the moment) would be necessary to
-                // actually provide the highlighting support by locating the
-                // language classes and applying dom transforms on their contents.
-                match lang.as_ref() {
-                    "html" => el.add_attribute("class", "html-language"),
-                    "rust" => el.add_attribute("class", "rust-language"),
-                    "java" => el.add_attribute("class", "java-language"),
-                    "c" => el.add_attribute("class", "c-language"),
-                    _ => {} // Add your own language highlighting support
-                };
-            }
+/// Renders a string of Markdown to HTML with the default options (footnotes
+/// disabled, tables enabled).
+pub fn render_markdown(src: &str) -> Html {
+    let mut writer = TagWriter::new();
 
-            el
-        }
-        Tag::List(None) => VTag::new("ul"),
-        Tag::List(Some(1)) => VTag::new("ol"),
-        Tag::List(Some(ref start)) => {
-            let mut el = VTag::new("ol");
-            el.add_attribute("start", start.to_string());
-            el
-        }
-        Tag::Item => VTag::new("li"),
-        Tag::Table(_) => {
-            let mut el = VTag::new("table");
-            el.add_attribute("class", "table");
-            el
-        }
-        Tag::TableHead => VTag::new("th"),
-        Tag::TableRow => VTag::new("tr"),
-        Tag::TableCell => VTag::new("td"),
-        Tag::Emphasis => {
-            let mut el = VTag::new("span");
-            el.add_attribute("class", "font-italic");
-            el
-        }
-        Tag::Strong => {
-            let mut el = VTag::new("span");
-            el.add_attribute("class", "font-weight-bold");
-            el
-        }
-        Tag::Link(_link_type, ref href, ref title) => {
-            let mut el = VTag::new("a");
-            el.add_attribute("href", href.to_string());
-            let title = title.clone().into_string();
-            if !title.is_empty() {
-                el.add_attribute("title", title);
-            }
-            el
-        }
-        Tag::Image(_link_type, ref src, ref title) => {
-            let mut el = VTag::new("img");
-            el.add_attribute("src", src.to_string());
-            let title = title.clone().into_string();
-            if !title.is_empty() {
-                el.add_attribute("title", title);
-            }
-            el
-        }
-        Tag::FootnoteDefinition(ref _footnote_id) => VTag::new("span"), // Footnotes are not
-        // rendered as anything
-        // special
-        Tag::Strikethrough => {
-            let mut el = VTag::new("span");
-            el.add_attribute("class", "text-decoration-strikethrough");
-            el
-        }
+    let mut options = Options::empty();
+    options.insert(Options::ENABLE_TABLES);
+
+    for ev in Parser::new_ext(src, options) {
+        writer.write_event(ev);
     }
+
+    writer.finish()
 }
diff --git a/examples/game_of_life/Cargo.toml b/examples/game_of_life/Cargo.toml
index 8b81d044a7d..ed153a0f96a 100644
--- a/examples/game_of_life/Cargo.toml
+++ b/examples/game_of_life/Cargo.toml
@@ -15,4 +15,4 @@ log = "0.4"
 rand = "0.8"
 wasm-logger = "0.2"
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
diff --git a/examples/immutable/Cargo.toml b/examples/immutable/Cargo.toml
index df3a2b41b0f..d8902c3652e 100644
--- a/examples/immutable/Cargo.toml
+++ b/examples/immutable/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-implicit-clone = { version = "0.4", features = ["map"] }
+implicit-clone = { version = "0.5", features = ["map"] }
 wasm-bindgen = "0.2"
 web-sys = "0.3"
 yew = { path = "../../packages/yew", features = ["csr"] }
diff --git a/examples/inner_html/Cargo.toml b/examples/inner_html/Cargo.toml
index 9b9a12047bc..37f971a8bf4 100644
--- a/examples/inner_html/Cargo.toml
+++ b/examples/inner_html/Cargo.toml
@@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0"
 
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
 
 [dependencies.web-sys]
 version = "0.3"
diff --git a/examples/keyed_list/Cargo.toml b/examples/keyed_list/Cargo.toml
index 3b1b9eeb4c6..fd4a42256b9 100644
--- a/examples/keyed_list/Cargo.toml
+++ b/examples/keyed_list/Cargo.toml
@@ -6,7 +6,7 @@ edition = "2021"
 license = "MIT OR Apache-2.0"
 
 [dependencies]
-fake = "2.9.1"
+fake = "2.10.0"
 getrandom = { version = "0.2", features = ["js"] }
 instant = { version = "0.1", features = ["wasm-bindgen"] }
 log = "0.4"
diff --git a/examples/mount_point/Cargo.toml b/examples/mount_point/Cargo.toml
index d33af38f6ee..225c10cbe36 100644
--- a/examples/mount_point/Cargo.toml
+++ b/examples/mount_point/Cargo.toml
@@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
 [dependencies]
 wasm-bindgen = "0.2"
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
 
 [dependencies.web-sys]
 version = "0.3"
diff --git a/examples/node_refs/README.md b/examples/node_refs/README.md
index 204a9b86296..379a8a87eef 100644
--- a/examples/node_refs/README.md
+++ b/examples/node_refs/README.md
@@ -6,7 +6,7 @@ This example shows two input fields which are automatically focused when hovered
 
 ## Concepts
 
-The example uses [Refs](https://yew.rs/docs/concepts/components/refs/) to
+The example uses [Refs](https://yew.rs/docs/concepts/function-components/node-refs) to
 manipulate the underlying DOM element directly.
 
 ## Running
diff --git a/examples/password_strength/Cargo.toml b/examples/password_strength/Cargo.toml
index a61491eec51..97c2269ed60 100644
--- a/examples/password_strength/Cargo.toml
+++ b/examples/password_strength/Cargo.toml
@@ -7,9 +7,9 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
-zxcvbn = "2.2.2"
-time = "0.3.30"
-js-sys = "0.3.64"
+zxcvbn = "3.1.0"
+time = "0.3.36"
+js-sys = "0.3.70"
 web-sys = { version = "0.3", features = ["Event","EventTarget","InputEvent"] }
 wasm-bindgen = "0.2"
 chrono = { version = "0.4", features = ["wasmbind"] }
diff --git a/examples/password_strength/src/app.rs b/examples/password_strength/src/app.rs
index 3ffbcfe58ae..72e4854887a 100644
--- a/examples/password_strength/src/app.rs
+++ b/examples/password_strength/src/app.rs
@@ -17,17 +17,16 @@ pub struct App {
 }
 
 impl App {
-    fn get_estimate(&self) -> Option {
-        zxcvbn(&self.password, &[])
-            .ok()
-            .map(|estimate| estimate.score())
+    fn get_estimate(&self) -> u8 {
+        let score = zxcvbn(&self.password, &[]).score();
+        score.into()
     }
 
     fn redout_top_row_text(&self) -> String {
         if self.password.is_empty() {
             return "Provide a password".to_string();
         }
-        let estimate_text = match self.get_estimate().unwrap_or(0) {
+        let estimate_text = match self.get_estimate() {
             0 => "That's a password?",
             1 => "You can do a lot better.",
             2 => "Meh",
diff --git a/examples/portals/Cargo.toml b/examples/portals/Cargo.toml
index a7b04290582..6729e15e8c1 100644
--- a/examples/portals/Cargo.toml
+++ b/examples/portals/Cargo.toml
@@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0"
 
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
 wasm-bindgen = "0.2"
 
 [dependencies.web-sys]
diff --git a/examples/router/Cargo.toml b/examples/router/Cargo.toml
index 9c21071b012..0c96778db32 100644
--- a/examples/router/Cargo.toml
+++ b/examples/router/Cargo.toml
@@ -6,7 +6,7 @@ license = "MIT OR Apache-2.0"
 
 [dependencies]
 instant = { version = "0.1", features = ["wasm-bindgen"] }
-lipsum = "0.9.0"
+lipsum = "0.9.1"
 log = "0.4"
 getrandom = { version = "0.2", features = ["js"] }
 rand = { version = "0.8", features = ["small_rng"] }
@@ -15,4 +15,4 @@ yew = { path = "../../packages/yew", features = ["csr"] }
 yew-router = { path = "../../packages/yew-router" }
 serde = { version = "1.0", features = ["derive"] }
 once_cell = "1"
-gloo = "0.10"
+gloo = "0.11"
diff --git a/examples/simple_ssr/Cargo.toml b/examples/simple_ssr/Cargo.toml
index cb602eb4e70..00cda4c08e4 100644
--- a/examples/simple_ssr/Cargo.toml
+++ b/examples/simple_ssr/Cargo.toml
@@ -14,11 +14,11 @@ required-features = ["ssr"]
 
 [dependencies]
 yew = { path = "../../packages/yew" }
-reqwest = { version = "0.11.22", features = ["json"] }
-serde = { version = "1.0.190", features = ["derive"] }
-uuid = { version = "1.5.0", features = ["serde"] }
+reqwest = { version = "0.12.8", features = ["json"] }
+serde = { version = "1.0.210", features = ["derive"] }
+uuid = { version = "1.10.0", features = ["serde"] }
 futures = "0.3"
-bytes = "1.5"
+bytes = "1.7"
 
 [target.'cfg(target_arch = "wasm32")'.dependencies]
 wasm-bindgen-futures = "0.4"
@@ -26,7 +26,7 @@ wasm-logger = "0.2"
 log = "0.4"
 
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-tokio = { version = "1.33.0", features = ["full"] }
+tokio = { version = "1.40.0", features = ["full"] }
 warp = "0.3"
 clap = { version = "4", features = ["derive"] }
 
diff --git a/examples/ssr_router/Cargo.toml b/examples/ssr_router/Cargo.toml
index 84a23c63653..59ec34e76b5 100644
--- a/examples/ssr_router/Cargo.toml
+++ b/examples/ssr_router/Cargo.toml
@@ -18,19 +18,20 @@ yew = { path = "../../packages/yew" }
 function_router = { path = "../function_router" }
 log = "0.4"
 futures = { version = "0.3", features = ["std"], default-features = false }
+hyper-util = "0.1.9"
 
 [target.'cfg(target_arch = "wasm32")'.dependencies]
 wasm-bindgen-futures = "0.4"
 wasm-logger = "0.2"
 
 [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-tokio = { version = "1.33.0", features = ["full"] }
-axum = "0.6"
-tower = { version = "0.4", features = ["make"] }
-tower-http = { version = "0.3", features = ["fs"] }
-env_logger = "0.10"
+tokio = { version = "1.40.0", features = ["full"] }
+axum = "0.7"
+tower = { version = "0.5", features = ["make"] }
+tower-http = { version = "0.6", features = ["fs"] }
+env_logger = "0.11"
 clap = { version = "4", features = ["derive"] }
-hyper = { version = "0.14", features = ["server", "http1"] }
+hyper = { version = "1.4", features = ["server", "http1"] }
 
 [target.'cfg(unix)'.dependencies]
 jemallocator = "0.5"
diff --git a/examples/ssr_router/src/bin/ssr_router_server.rs b/examples/ssr_router/src/bin/ssr_router_server.rs
index 9ecd2c57c99..95819169754 100644
--- a/examples/ssr_router/src/bin/ssr_router_server.rs
+++ b/examples/ssr_router/src/bin/ssr_router_server.rs
@@ -1,21 +1,24 @@
 use std::collections::HashMap;
 use std::convert::Infallible;
 use std::future::Future;
+use std::net::SocketAddr;
 use std::path::PathBuf;
 
-use axum::body::StreamBody;
-use axum::error_handling::HandleError;
-use axum::extract::{Query, State};
+use axum::body::Body;
+use axum::extract::{Query, Request, State};
 use axum::handler::HandlerWithoutStateExt;
-use axum::http::{StatusCode, Uri};
+use axum::http::Uri;
 use axum::response::IntoResponse;
 use axum::routing::get;
 use axum::Router;
 use clap::Parser;
 use function_router::{ServerApp, ServerAppProps};
 use futures::stream::{self, StreamExt};
-use hyper::server::Server;
-use tower::ServiceExt;
+use hyper::body::Incoming;
+use hyper_util::rt::TokioIo;
+use hyper_util::server;
+use tokio::net::TcpListener;
+use tower::Service;
 use tower_http::services::ServeDir;
 use yew::platform::Runtime;
 
@@ -37,14 +40,14 @@ async fn render(
     Query(queries): Query>,
     State((index_html_before, index_html_after)): State<(String, String)>,
 ) -> impl IntoResponse {
-    let url = url.to_string();
+    let url = url.path().to_owned();
 
     let renderer = yew::ServerRenderer::::with_props(move || ServerAppProps {
         url: url.into(),
         queries,
     });
 
-    StreamBody::new(
+    Body::from_stream(
         stream::once(async move { index_html_before })
             .chain(renderer.render_stream())
             .chain(stream::once(async move { index_html_after }))
@@ -75,7 +78,7 @@ where
 }
 
 #[tokio::main]
-async fn main() {
+async fn main() -> Result<(), Box> {
     let exec = Executor::default();
 
     env_logger::init();
@@ -92,30 +95,61 @@ async fn main() {
 
     let index_html_after = index_html_after.to_owned();
 
-    let handle_error = |e| async move {
-        (
-            StatusCode::INTERNAL_SERVER_ERROR,
-            format!("error occurred: {e}"),
-        )
-    };
-
-    let app = Router::new().fallback_service(HandleError::new(
+    let app = Router::new().fallback_service(
         ServeDir::new(opts.dir)
             .append_index_html_on_directories(false)
             .fallback(
                 get(render)
                     .with_state((index_html_before.clone(), index_html_after.clone()))
-                    .into_service()
-                    .map_err(|err| -> std::io::Error { match err {} }),
+                    .into_service(),
             ),
-        handle_error,
-    ));
+    );
+
+    let addr: SocketAddr = ([127, 0, 0, 1], 8080).into();
 
     println!("You can view the website at: http://localhost:8080/");
 
-    Server::bind(&"127.0.0.1:8080".parse().unwrap())
-        .executor(exec)
-        .serve(app.into_make_service())
-        .await
-        .unwrap();
+    let listener = TcpListener::bind(addr).await?;
+
+    // Continuously accept new connections.
+    loop {
+        // In this example we discard the remote address. See `fn serve_with_connect_info` for how
+        // to expose that.
+        let (socket, _remote_addr) = listener.accept().await.unwrap();
+
+        // We don't need to call `poll_ready` because `Router` is always ready.
+        let tower_service = app.clone();
+
+        let exec = exec.clone();
+        // Spawn a task to handle the connection. That way we can handle multiple connections
+        // concurrently.
+        tokio::spawn(async move {
+            // Hyper has its own `AsyncRead` and `AsyncWrite` traits and doesn't use tokio.
+            // `TokioIo` converts between them.
+            let socket = TokioIo::new(socket);
+
+            // Hyper also has its own `Service` trait and doesn't use tower. We can use
+            // `hyper::service::service_fn` to create a hyper `Service` that calls our app through
+            // `tower::Service::call`.
+            let hyper_service = hyper::service::service_fn(move |request: Request| {
+                // We have to clone `tower_service` because hyper's `Service` uses `&self` whereas
+                // tower's `Service` requires `&mut self`.
+                //
+                // We don't need to call `poll_ready` since `Router` is always ready.
+                tower_service.clone().call(request)
+            });
+
+            // `server::conn::auto::Builder` supports both http1 and http2.
+            //
+            // `TokioExecutor` tells hyper to use `tokio::spawn` to spawn tasks.
+            if let Err(err) = server::conn::auto::Builder::new(exec)
+                // `serve_connection_with_upgrades` is required for websockets. If you don't need
+                // that you can use `serve_connection` instead.
+                .serve_connection_with_upgrades(socket, hyper_service)
+                .await
+            {
+                eprintln!("failed to serve connection: {err:#}");
+            }
+        });
+    }
 }
diff --git a/examples/suspense/Cargo.toml b/examples/suspense/Cargo.toml
index 170984be100..d8ff4f9252c 100644
--- a/examples/suspense/Cargo.toml
+++ b/examples/suspense/Cargo.toml
@@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
 
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = { version = "0.10", features = ["futures"] }
+gloo = { version = "0.11", features = ["futures"] }
 wasm-bindgen-futures = "0.4"
 wasm-bindgen = "0.2"
 
diff --git a/examples/timer/Cargo.toml b/examples/timer/Cargo.toml
index d8e3545e4e4..3e7d0dd3d32 100644
--- a/examples/timer/Cargo.toml
+++ b/examples/timer/Cargo.toml
@@ -8,5 +8,5 @@ license = "MIT OR Apache-2.0"
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
 js-sys = "0.3"
-gloo = "0.10"
+gloo = "0.11"
 wasm-bindgen = "0.2"
diff --git a/examples/timer_functional/Cargo.toml b/examples/timer_functional/Cargo.toml
index aaa13975bf2..d0b9588a00e 100644
--- a/examples/timer_functional/Cargo.toml
+++ b/examples/timer_functional/Cargo.toml
@@ -6,6 +6,6 @@ edition = "2021"
 license = "MIT OR Apache-2.0"
 
 [dependencies]
-gloo = "0.10.0"
-js-sys = "0.3.64"
+gloo = "0.11.0"
+js-sys = "0.3.70"
 yew = { path = "../../packages/yew", features = ["csr"] }
diff --git a/examples/todomvc/Cargo.toml b/examples/todomvc/Cargo.toml
index dfb83760194..261d90b24fb 100644
--- a/examples/todomvc/Cargo.toml
+++ b/examples/todomvc/Cargo.toml
@@ -6,12 +6,12 @@ edition = "2021"
 license = "MIT OR Apache-2.0"
 
 [dependencies]
-strum = "0.25"
-strum_macros = "0.25"
+strum = "0.26"
+strum_macros = "0.26"
 serde = "1"
 serde_derive = "1"
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
 
 [dependencies.web-sys]
 version = "0.3"
diff --git a/examples/todomvc/src/main.rs b/examples/todomvc/src/main.rs
index 2024805290d..4cd1aed36bd 100644
--- a/examples/todomvc/src/main.rs
+++ b/examples/todomvc/src/main.rs
@@ -73,7 +73,7 @@ impl Component for App {
                     .filter(|e| self.state.filter.fits(e))
                     .nth(idx)
                     .unwrap();
-                self.state.edit_value = entry.description.clone();
+                self.state.edit_value.clone_from(&entry.description);
                 self.state.clear_all_edit();
                 self.state.toggle_edit(idx);
             }
diff --git a/examples/two_apps/Cargo.toml b/examples/two_apps/Cargo.toml
index 01fa89c05d3..679db2b2477 100644
--- a/examples/two_apps/Cargo.toml
+++ b/examples/two_apps/Cargo.toml
@@ -7,4 +7,4 @@ license = "MIT OR Apache-2.0"
 
 [dependencies]
 yew = { path = "../../packages/yew", features = ["csr"] }
-gloo = "0.10"
+gloo = "0.11"
diff --git a/examples/web_worker_fib/Cargo.toml b/examples/web_worker_fib/Cargo.toml
index 74291540861..d07c5755fc3 100644
--- a/examples/web_worker_fib/Cargo.toml
+++ b/examples/web_worker_fib/Cargo.toml
@@ -11,4 +11,4 @@ wasm-bindgen = "0.2"
 js-sys = "0.3"
 web-sys = { version = "0.3", features = [ "HtmlInputElement" ] }
 serde = { version = "1", features = ["derive"] }
-postcard = "1.0.8"
+postcard = "1.0.10"
diff --git a/examples/web_worker_prime/Cargo.toml b/examples/web_worker_prime/Cargo.toml
index f33cdccf54e..7ade92872b6 100644
--- a/examples/web_worker_prime/Cargo.toml
+++ b/examples/web_worker_prime/Cargo.toml
@@ -6,6 +6,6 @@ edition = "2021"
 [dependencies]
 yew-agent = { path = "../../packages/yew-agent" }
 yew = { path = "../../packages/yew", features = ["csr"] }
-futures = "0.3.29"
-primes = "0.3.0"
-serde = { version = "1.0.190", features = ["derive"] }
+futures = "0.3.30"
+primes = "0.4.0"
+serde = { version = "1.0.210", features = ["derive"] }
diff --git a/packages/yew-agent-macro/Cargo.toml b/packages/yew-agent-macro/Cargo.toml
index 149198c5cee..383213dcdd0 100644
--- a/packages/yew-agent-macro/Cargo.toml
+++ b/packages/yew-agent-macro/Cargo.toml
@@ -2,7 +2,7 @@
 name = "yew-agent-macro"
 version = "0.2.0"
 edition = "2021"
-rust-version = "1.64.0"
+rust-version = "1.76.0"
 authors = ["Kaede Hoshikawa "]
 repository = "https://github.com/yewstack/yew"
 homepage = "https://yew.rs"
diff --git a/packages/yew-agent/Cargo.toml b/packages/yew-agent/Cargo.toml
index 2007b54f86f..629e068504c 100644
--- a/packages/yew-agent/Cargo.toml
+++ b/packages/yew-agent/Cargo.toml
@@ -9,15 +9,15 @@ edition = "2021"
 readme = "../../README.md"
 description = "Agents for Yew"
 license = "MIT OR Apache-2.0"
-rust-version = "1.64.0"
+rust-version = "1.76.0"
 
 [dependencies]
 yew = { version = "0.21.0", path = "../yew" }
-gloo-worker = { version = "0.4", features = ["futures"] }
+gloo-worker = { version = "0.5", features = ["futures"] }
 wasm-bindgen = "0.2"
 serde = { version = "1", features = ["derive"] }
 futures = "0.3"
 yew-agent-macro = { version = "0.2", path = "../yew-agent-macro" }
 
 [dev-dependencies]
-serde = "1.0.190"
+serde = "1.0.210"
diff --git a/packages/yew-macro/Cargo.toml b/packages/yew-macro/Cargo.toml
index 9d497486b92..7825f2850f7 100644
--- a/packages/yew-macro/Cargo.toml
+++ b/packages/yew-macro/Cargo.toml
@@ -10,7 +10,7 @@ license = "MIT OR Apache-2.0"
 keywords = ["web", "wasm", "frontend", "webasm", "webassembly"]
 categories = ["gui", "web-programming", "wasm"]
 description = "A framework for making client-side single-page apps"
-rust-version = "1.64.0"
+rust-version = "1.76.0"
 
 [lib]
 proc-macro = true
@@ -28,3 +28,7 @@ prettyplease = "0.2"
 rustversion = "1"
 trybuild = "1"
 yew = { path = "../yew" }
+
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(nightly_yew)'] }
+
diff --git a/packages/yew-macro/Makefile.toml b/packages/yew-macro/Makefile.toml
index b679fa4fa51..f1a5a6ad133 100644
--- a/packages/yew-macro/Makefile.toml
+++ b/packages/yew-macro/Makefile.toml
@@ -1,6 +1,6 @@
 [tasks.test]
 clear = true
-toolchain = "1.64.0"
+toolchain = "1.76.0"
 command = "cargo"
 # test target can be optionally specified like `cargo make test html_macro`,
 args = ["test", "${@}"]
diff --git a/packages/yew-macro/src/derive_props/field.rs b/packages/yew-macro/src/derive_props/field.rs
index 37dc28c8bc3..91e2ba08fad 100644
--- a/packages/yew-macro/src/derive_props/field.rs
+++ b/packages/yew-macro/src/derive_props/field.rs
@@ -12,7 +12,7 @@ use crate::derive_props::generics::push_type_param;
 
 #[allow(clippy::large_enum_variant)]
 #[derive(PartialEq, Eq)]
-enum PropAttr {
+pub enum PropAttr {
     Required { wrapped_name: Ident },
     PropOr(Expr),
     PropOrElse(Expr),
@@ -21,9 +21,9 @@ enum PropAttr {
 
 #[derive(Eq)]
 pub struct PropField {
-    ty: Type,
+    pub ty: Type,
     name: Ident,
-    attr: PropAttr,
+    pub attr: PropAttr,
     extra_attrs: Vec,
 }
 
@@ -57,7 +57,7 @@ impl PropField {
         props_name: &'a Ident,
         vis: &'a Visibility,
         token: &'a GenericParam,
-    ) -> PropFieldCheck<'_> {
+    ) -> PropFieldCheck<'a> {
         let check_struct = self.to_check_name(props_name);
         let check_arg = self.to_check_arg_name(props_name);
         PropFieldCheck {
diff --git a/packages/yew-macro/src/derive_props/mod.rs b/packages/yew-macro/src/derive_props/mod.rs
index db18527222f..017f3fd7fb2 100644
--- a/packages/yew-macro/src/derive_props/mod.rs
+++ b/packages/yew-macro/src/derive_props/mod.rs
@@ -10,9 +10,16 @@ use field::PropField;
 use proc_macro2::{Ident, Span};
 use quote::{format_ident, quote, ToTokens};
 use syn::parse::{Parse, ParseStream, Result};
-use syn::{Attribute, DeriveInput, Generics, Visibility};
+use syn::punctuated::Pair;
+use syn::visit_mut::VisitMut;
+use syn::{
+    AngleBracketedGenericArguments, Attribute, ConstParam, DeriveInput, GenericArgument,
+    GenericParam, Generics, Path, PathArguments, PathSegment, Type, TypeParam, TypePath,
+    Visibility,
+};
 use wrapper::PropsWrapper;
 
+use self::field::PropAttr;
 use self::generics::to_arguments;
 
 pub struct DerivePropsInput {
@@ -23,6 +30,76 @@ pub struct DerivePropsInput {
     preserved_attrs: Vec,
 }
 
+/// AST visitor that replaces all occurences of the keyword `Self` with `new_self`
+struct Normaliser<'ast> {
+    new_self: &'ast Ident,
+    generics: &'ast Generics,
+    /// `Option` for one-time initialisation
+    new_self_full: Option,
+}
+
+impl<'ast> Normaliser<'ast> {
+    pub fn new(new_self: &'ast Ident, generics: &'ast Generics) -> Self {
+        Self {
+            new_self,
+            generics,
+            new_self_full: None,
+        }
+    }
+
+    fn get_new_self(&mut self) -> PathSegment {
+        self.new_self_full
+            .get_or_insert_with(|| {
+                PathSegment {
+                    ident: self.new_self.clone(),
+                    arguments: if self.generics.lt_token.is_some() {
+                        PathArguments::AngleBracketed(AngleBracketedGenericArguments {
+                            colon2_token: Some(Default::default()),
+                            lt_token: Default::default(),
+                            args: self
+                                .generics
+                                .params
+                                .pairs()
+                                .map(|pair| {
+                                    let (value, punct) = pair.cloned().into_tuple();
+                                    let value = match value {
+                                        GenericParam::Lifetime(param) => {
+                                            GenericArgument::Lifetime(param.lifetime)
+                                        }
+                                        GenericParam::Type(TypeParam { ident, .. })
+                                        | GenericParam::Const(ConstParam { ident, .. }) => {
+                                            GenericArgument::Type(Type::Path(TypePath {
+                                                qself: None,
+                                                path: ident.into(),
+                                            }))
+                                        }
+                                    };
+                                    Pair::new(value, punct)
+                                })
+                                .collect(),
+                            gt_token: Default::default(),
+                        })
+                    } else {
+                        // if no generics were defined for the struct
+                        PathArguments::None
+                    },
+                }
+            })
+            .clone()
+    }
+}
+
+impl VisitMut for Normaliser<'_> {
+    fn visit_path_mut(&mut self, path: &mut Path) {
+        if let Some(first) = path.segments.first_mut() {
+            if first.ident == "Self" {
+                *first = self.get_new_self();
+            }
+            syn::visit_mut::visit_path_mut(self, path)
+        }
+    }
+}
+
 /// Some attributes on the original struct are to be preserved and added to the builder struct,
 /// in order to avoid warnings (sometimes reported as errors) in the output.
 fn should_preserve_attr(attr: &Attribute) -> bool {
@@ -74,22 +151,33 @@ impl Parse for DerivePropsInput {
     }
 }
 
+impl DerivePropsInput {
+    /// Replaces all occurences of `Self` in the struct with the actual name of the struct.
+    /// Must be called before tokenising the struct.
+    pub fn normalise(&mut self) {
+        let mut normaliser = Normaliser::new(&self.props_name, &self.generics);
+        for field in &mut self.prop_fields {
+            normaliser.visit_type_mut(&mut field.ty);
+            if let PropAttr::PropOr(expr) | PropAttr::PropOrElse(expr) = &mut field.attr {
+                normaliser.visit_expr_mut(expr)
+            }
+        }
+    }
+}
+
 impl ToTokens for DerivePropsInput {
     fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
         let Self {
             generics,
             props_name,
+            prop_fields,
+            preserved_attrs,
             ..
         } = self;
 
         // The wrapper is a new struct which wraps required props in `Option`
         let wrapper_name = format_ident!("{}Wrapper", props_name, span = Span::mixed_site());
-        let wrapper = PropsWrapper::new(
-            &wrapper_name,
-            generics,
-            &self.prop_fields,
-            &self.preserved_attrs,
-        );
+        let wrapper = PropsWrapper::new(&wrapper_name, generics, prop_fields, preserved_attrs);
         tokens.extend(wrapper.into_token_stream());
 
         // The builder will only build if all required props have been set
@@ -101,7 +189,7 @@ impl ToTokens for DerivePropsInput {
             self,
             &wrapper_name,
             &check_all_props_name,
-            &self.preserved_attrs,
+            preserved_attrs,
         );
         let generic_args = to_arguments(generics);
         tokens.extend(builder.into_token_stream());
diff --git a/packages/yew-macro/src/derive_props/wrapper.rs b/packages/yew-macro/src/derive_props/wrapper.rs
index 148a8e51feb..83ad4774e2e 100644
--- a/packages/yew-macro/src/derive_props/wrapper.rs
+++ b/packages/yew-macro/src/derive_props/wrapper.rs
@@ -48,13 +48,13 @@ impl ToTokens for PropsWrapper<'_> {
     }
 }
 
-impl<'a> PropsWrapper<'_> {
+impl<'a> PropsWrapper<'a> {
     pub fn new(
         name: &'a Ident,
         generics: &'a Generics,
         prop_fields: &'a [PropField],
         extra_attrs: &'a [Attribute],
-    ) -> PropsWrapper<'a> {
+    ) -> Self {
         PropsWrapper {
             wrapper_name: name,
             generics,
@@ -62,9 +62,7 @@ impl<'a> PropsWrapper<'_> {
             extra_attrs,
         }
     }
-}
 
-impl PropsWrapper<'_> {
     fn field_defs(&self) -> impl Iterator {
         self.prop_fields.iter().map(|pf| pf.to_field_def())
     }
diff --git a/packages/yew-macro/src/html_tree/lint/mod.rs b/packages/yew-macro/src/html_tree/lint/mod.rs
index bbb34f24648..82b0c351f04 100644
--- a/packages/yew-macro/src/html_tree/lint/mod.rs
+++ b/packages/yew-macro/src/html_tree/lint/mod.rs
@@ -12,6 +12,7 @@ use crate::props::{ElementProps, Prop};
 /// use `proc-macro-error` (and the `emit_warning!` macro) to produce a warning. At present, these
 /// are only emitted on nightly.
 pub trait Lint {
+    #[cfg_attr(not(yew_lints), allow(dead_code))]
     fn lint(element: &HtmlElement);
 }
 
diff --git a/packages/yew-macro/src/lib.rs b/packages/yew-macro/src/lib.rs
index 5d7216d84a0..acc0d4f8dfa 100644
--- a/packages/yew-macro/src/lib.rs
+++ b/packages/yew-macro/src/lib.rs
@@ -107,7 +107,8 @@ fn is_ide_completion() -> bool {
 
 #[proc_macro_derive(Properties, attributes(prop_or, prop_or_else, prop_or_default))]
 pub fn derive_props(input: TokenStream) -> TokenStream {
-    let input = parse_macro_input!(input as DerivePropsInput);
+    let mut input = parse_macro_input!(input as DerivePropsInput);
+    input.normalise();
     TokenStream::from(input.into_token_stream())
 }
 
diff --git a/packages/yew-macro/src/props/element.rs b/packages/yew-macro/src/props/element.rs
index 17a90e3f9db..a707af77bb8 100644
--- a/packages/yew-macro/src/props/element.rs
+++ b/packages/yew-macro/src/props/element.rs
@@ -61,6 +61,7 @@ static BOOLEAN_SET: Lazy> = Lazy::new(|| {
         "disabled",
         "formnovalidate",
         "hidden",
+        "inert",
         "ismap",
         "itemscope",
         "loop",
diff --git a/packages/yew-macro/tests/classes_macro/classes-fail.stderr b/packages/yew-macro/tests/classes_macro/classes-fail.stderr
index 9d30a817b18..9987bf14a13 100644
--- a/packages/yew-macro/tests/classes_macro/classes-fail.stderr
+++ b/packages/yew-macro/tests/classes_macro/classes-fail.stderr
@@ -17,16 +17,16 @@ error[E0277]: the trait bound `Classes: From<{integer}>` is not satisfied
   |              ^^ the trait `From<{integer}>` is not implemented for `Classes`
   |
   = help: the following other types implement trait `From`:
-            >
-            >>
-            >
-            >
-            >
             >>
-            >>
+            >
+            >>
             >
+            >>
+            >
+            >
+            >
           and $N others
-  = note: required because of the requirements on the impl of `Into` for `{integer}`
+  = note: required for `{integer}` to implement `Into`
 note: required by a bound in `Classes::push`
  --> $WORKSPACE/packages/yew/src/html/classes.rs
   |
@@ -40,16 +40,16 @@ error[E0277]: the trait bound `Classes: From<{float}>` is not satisfied
   |              ^^^^ the trait `From<{float}>` is not implemented for `Classes`
   |
   = help: the following other types implement trait `From`:
-            >
-            >>
-            >
-            >
-            >
             >>
-            >>
+            >
+            >>
             >
+            >>
+            >
+            >
+            >
           and $N others
-  = note: required because of the requirements on the impl of `Into` for `{float}`
+  = note: required for `{float}` to implement `Into`
 note: required by a bound in `Classes::push`
  --> $WORKSPACE/packages/yew/src/html/classes.rs
   |
@@ -60,22 +60,25 @@ error[E0277]: the trait bound `Classes: From<{integer}>` is not satisfied
  --> tests/classes_macro/classes-fail.rs:9:14
   |
 9 |     classes!(vec![42]);
-  |              ^^^ the trait `From<{integer}>` is not implemented for `Classes`
+  |              ---^^^^^
+  |              |
+  |              the trait `From<{integer}>` is not implemented for `Classes`
+  |              required by a bound introduced by this call
   |
   = help: the following other types implement trait `From`:
-            >
-            >>
-            >
-            >
-            >
             >>
-            >>
+            >
+            >>
             >
+            >>
+            >
+            >
+            >
           and $N others
-  = note: required because of the requirements on the impl of `Into` for `{integer}`
-  = note: required because of the requirements on the impl of `From>` for `Classes`
+  = note: required for `{integer}` to implement `Into`
+  = note: required for `Classes` to implement `From>`
   = note: 1 redundant requirement hidden
-  = note: required because of the requirements on the impl of `Into` for `Vec<{integer}>`
+  = note: required for `Vec<{integer}>` to implement `Into`
 note: required by a bound in `Classes::push`
  --> $WORKSPACE/packages/yew/src/html/classes.rs
   |
@@ -89,19 +92,19 @@ error[E0277]: the trait bound `Classes: From<{integer}>` is not satisfied
    |              ^^^^ the trait `From<{integer}>` is not implemented for `Classes`
    |
    = help: the following other types implement trait `From`:
-             >
-             >>
-             >
-             >
-             >
              >>
-             >>
+             >
+             >>
              >
+             >>
+             >
+             >
+             >
            and $N others
-   = note: required because of the requirements on the impl of `Into` for `{integer}`
-   = note: required because of the requirements on the impl of `From>` for `Classes`
+   = note: required for `{integer}` to implement `Into`
+   = note: required for `Classes` to implement `From>`
    = note: 1 redundant requirement hidden
-   = note: required because of the requirements on the impl of `Into` for `Option<{integer}>`
+   = note: required for `Option<{integer}>` to implement `Into`
 note: required by a bound in `Classes::push`
   --> $WORKSPACE/packages/yew/src/html/classes.rs
    |
@@ -115,19 +118,19 @@ error[E0277]: the trait bound `Classes: From` is not satisfied
    |              ^^^^ the trait `From` is not implemented for `Classes`
    |
    = help: the following other types implement trait `From`:
-             >
-             >>
-             >
-             >
-             >
              >>
-             >>
+             >
+             >>
              >
+             >>
+             >
+             >
+             >
            and $N others
-   = note: required because of the requirements on the impl of `Into` for `u32`
-   = note: required because of the requirements on the impl of `From>` for `Classes`
+   = note: required for `u32` to implement `Into`
+   = note: required for `Classes` to implement `From>`
    = note: 1 redundant requirement hidden
-   = note: required because of the requirements on the impl of `Into` for `Option`
+   = note: required for `Option` to implement `Into`
 note: required by a bound in `Classes::push`
   --> $WORKSPACE/packages/yew/src/html/classes.rs
    |
@@ -141,16 +144,16 @@ error[E0277]: the trait bound `Classes: From<{integer}>` is not satisfied
    |                     ^^ the trait `From<{integer}>` is not implemented for `Classes`
    |
    = help: the following other types implement trait `From`:
-             >
-             >>
-             >
-             >
-             >
              >>
-             >>
+             >
+             >>
              >
+             >>
+             >
+             >
+             >
            and $N others
-   = note: required because of the requirements on the impl of `Into` for `{integer}`
+   = note: required for `{integer}` to implement `Into`
 note: required by a bound in `Classes::push`
   --> $WORKSPACE/packages/yew/src/html/classes.rs
    |
diff --git a/packages/yew-macro/tests/classes_macro_test.rs b/packages/yew-macro/tests/classes_macro_test.rs
index e2cadf8cf39..fdf00df084c 100644
--- a/packages/yew-macro/tests/classes_macro_test.rs
+++ b/packages/yew-macro/tests/classes_macro_test.rs
@@ -1,5 +1,5 @@
 #[allow(dead_code)]
-#[rustversion::attr(stable(1.64), test)]
+#[rustversion::attr(stable(1.76), test)]
 fn classes_macro() {
     let t = trybuild::TestCases::new();
     t.pass("tests/classes_macro/*-pass.rs");
diff --git a/packages/yew-macro/tests/derive_props/fail.stderr b/packages/yew-macro/tests/derive_props/fail.stderr
index e3d2c5461ff..b03963506ae 100644
--- a/packages/yew-macro/tests/derive_props/fail.stderr
+++ b/packages/yew-macro/tests/derive_props/fail.stderr
@@ -32,10 +32,12 @@ error[E0277]: the trait bound `Value: Default` is not satisfied
   |                     ^^^^^^^^^^ the trait `Default` is not implemented for `Value`
   |
 note: required by a bound in `Option::::unwrap_or_default`
+ --> $RUST/core/src/option.rs
   = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info)
 help: consider annotating `Value` with `#[derive(Default)]`
   |
-8 |     #[derive(Default)]
+8 +     #[derive(Default)]
+9 |     struct Value;
   |
 
 error[E0369]: binary operation `==` cannot be applied to type `Value`
@@ -47,35 +49,16 @@ error[E0369]: binary operation `==` cannot be applied to type `Value`
 13 |         value: Value,
    |         ^^^^^^^^^^^^
    |
-note: an implementation of `PartialEq<_>` might be missing for `Value`
+note: an implementation of `PartialEq` might be missing for `Value`
   --> tests/derive_props/fail.rs:8:5
    |
 8  |     struct Value;
-   |     ^^^^^^^^^^^^ must implement `PartialEq<_>`
+   |     ^^^^^^^^^^^^ must implement `PartialEq`
    = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
 help: consider annotating `Value` with `#[derive(PartialEq)]`
    |
-8  |     #[derive(PartialEq)]
-   |
-
-error[E0369]: binary operation `!=` cannot be applied to type `Value`
-  --> tests/derive_props/fail.rs:13:9
-   |
-9  |     #[derive(Clone, Properties, PartialEq)]
-   |                                 --------- in this derive macro expansion
-...
-13 |         value: Value,
-   |         ^^^^^^^^^^^^
-   |
-note: an implementation of `PartialEq<_>` might be missing for `Value`
-  --> tests/derive_props/fail.rs:8:5
-   |
-8  |     struct Value;
-   |     ^^^^^^^^^^^^ must implement `PartialEq<_>`
-   = note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
-help: consider annotating `Value` with `#[derive(PartialEq)]`
-   |
-8  |     #[derive(PartialEq)]
+8  +     #[derive(PartialEq)]
+9  |     struct Value;
    |
 
 error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied
@@ -85,26 +68,29 @@ error[E0277]: the trait bound `AssertAllProps: HasProp` is
    |                        ^^^^^ the trait `HasProp` is not implemented for `AssertAllProps`
    |
    = help: the following other types implement trait `HasProp`:
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
            and $N others
-note: required because of the requirements on the impl of `HasAllProps` for `t3::CheckPropsAll`
+note: required for `t3::CheckPropsAll` to implement `HasAllProps`
   --> tests/derive_props/fail.rs:29:21
    |
 29 |     #[derive(Clone, Properties, PartialEq)]
-   |                     ^^^^^^^^^^
-   = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps`
+   |                     ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: required for `AssertAllProps` to implement `AllPropsFor`
 note: required by a bound in `html::component::properties::__macro::PreBuild::::build`
   --> $WORKSPACE/packages/yew/src/html/component/properties.rs
    |
+   |         pub fn build(self) -> B::Output
+   |                ----- required by a bound in this associated function
+   |         where
    |             Token: AllPropsFor,
-   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `html::component::properties::__macro::PreBuild::::build`
+   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build`
    = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied
@@ -114,54 +100,53 @@ error[E0277]: the trait bound `AssertAllProps: HasProp` is
    |                        ^^^^^ the trait `HasProp` is not implemented for `AssertAllProps`
    |
    = help: the following other types implement trait `HasProp`:
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
            and $N others
-note: required because of the requirements on the impl of `HasAllProps` for `t4::CheckPropsAll`
+note: required for `t4::CheckPropsAll` to implement `HasAllProps`
   --> tests/derive_props/fail.rs:41:21
    |
 41 |     #[derive(Clone, Properties, PartialEq)]
-   |                     ^^^^^^^^^^
-   = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps`
+   |                     ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: required for `AssertAllProps` to implement `AllPropsFor`
 note: required by a bound in `html::component::properties::__macro::PreBuild::::build`
   --> $WORKSPACE/packages/yew/src/html/component/properties.rs
    |
+   |         pub fn build(self) -> B::Output
+   |                ----- required by a bound in this associated function
+   |         where
    |             Token: AllPropsFor,
-   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `html::component::properties::__macro::PreBuild::::build`
+   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build`
    = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0308]: mismatched types
   --> tests/derive_props/fail.rs:66:19
    |
 66 |         #[prop_or(123)]
-   |                   ^^^
+   |                   ^^^- help: try using a conversion method: `.to_string()`
    |                   |
-   |                   expected struct `String`, found integer
+   |                   expected `String`, found integer
    |                   arguments to this function are incorrect
    |
-note: associated function defined here
-help: try using a conversion method
-   |
-66 |         #[prop_or(123.to_string())]
-   |                      ++++++++++++
-66 |         #[prop_or(123.to_string())]
-   |                      ++++++++++++
+note: method defined here
+  --> $RUST/core/src/option.rs
 
-error[E0277]: expected a `FnOnce<()>` closure, found `{integer}`
+error[E0277]: expected a `FnOnce()` closure, found `{integer}`
   --> tests/derive_props/fail.rs:76:24
    |
 76 |         #[prop_or_else(123)]
-   |                        ^^^ expected an `FnOnce<()>` closure, found `{integer}`
+   |                        ^^^ expected an `FnOnce()` closure, found `{integer}`
    |
    = help: the trait `FnOnce<()>` is not implemented for `{integer}`
    = note: wrap the `{integer}` in a closure with no arguments: `|| { /* code */ }`
 note: required by a bound in `Option::::unwrap_or_else`
+  --> $RUST/core/src/option.rs
 
 error[E0593]: function is expected to take 0 arguments, but it takes 1 argument
    --> tests/derive_props/fail.rs:96:24
@@ -173,11 +158,13 @@ error[E0593]: function is expected to take 0 arguments, but it takes 1 argument
     |     -------------------------- takes 1 argument
     |
 note: required by a bound in `Option::::unwrap_or_else`
+   --> $RUST/core/src/option.rs
 
-error[E0271]: type mismatch resolving ` i32 {t10::foo} as FnOnce<()>>::Output == String`
+error[E0271]: expected `foo` to be a fn item that returns `String`, but it returns `i32`
    --> tests/derive_props/fail.rs:110:24
     |
 110 |         #[prop_or_else(foo)]
-    |                        ^^^ expected struct `String`, found `i32`
+    |                        ^^^ expected `String`, found `i32`
     |
 note: required by a bound in `Option::::unwrap_or_else`
+   --> $RUST/core/src/option.rs
diff --git a/packages/yew-macro/tests/derive_props_test.rs b/packages/yew-macro/tests/derive_props_test.rs
index c98e8feb953..674d9a76383 100644
--- a/packages/yew-macro/tests/derive_props_test.rs
+++ b/packages/yew-macro/tests/derive_props_test.rs
@@ -1,5 +1,5 @@
 #[allow(dead_code)]
-#[rustversion::attr(stable(1.64), test)]
+#[rustversion::attr(stable(1.76), test)]
 fn derive_props() {
     let t = trybuild::TestCases::new();
     t.pass("tests/derive_props/pass.rs");
diff --git a/packages/yew-macro/tests/function_attr_test.rs b/packages/yew-macro/tests/function_attr_test.rs
index ed3cf9d044a..ec02d263090 100644
--- a/packages/yew-macro/tests/function_attr_test.rs
+++ b/packages/yew-macro/tests/function_attr_test.rs
@@ -1,5 +1,5 @@
 #[allow(dead_code)]
-#[rustversion::attr(stable(1.64), test)]
+#[rustversion::attr(stable(1.76), test)]
 fn tests() {
     let t = trybuild::TestCases::new();
     t.pass("tests/function_component_attr/*-pass.rs");
diff --git a/packages/yew-macro/tests/function_component_attr/bad-return-type-fail.stderr b/packages/yew-macro/tests/function_component_attr/bad-return-type-fail.stderr
index 9b8e8a2ab5d..b5b42e19988 100644
--- a/packages/yew-macro/tests/function_component_attr/bad-return-type-fail.stderr
+++ b/packages/yew-macro/tests/function_component_attr/bad-return-type-fail.stderr
@@ -11,6 +11,6 @@ error[E0277]: the trait bound `u32: IntoHtmlResult` is not satisfied
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `IntoHtmlResult` is not implemented for `u32`
    |
    = help: the following other types implement trait `IntoHtmlResult`:
-             Result
              VNode
+             Result
    = note: this error originates in the attribute macro `function_component` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/packages/yew-macro/tests/function_component_attr/generic-pass.rs b/packages/yew-macro/tests/function_component_attr/generic-pass.rs
index 29df3007d46..40653add2f4 100644
--- a/packages/yew-macro/tests/function_component_attr/generic-pass.rs
+++ b/packages/yew-macro/tests/function_component_attr/generic-pass.rs
@@ -68,10 +68,10 @@ fn const_generics() -> ::yew::Html {
 }
 
 fn compile_pass() {
-    ::yew::html! {  a=10 /> };
-    ::yew::html! {  /> };
+    let _ = ::yew::html! {  a=10 /> };
+    let _ = ::yew::html! {  /> };
 
-    ::yew::html! {  /> };
+    let _ = ::yew::html! {  /> };
 }
 
 fn main() {}
diff --git a/packages/yew-macro/tests/function_component_attr/generic-props-fail.stderr b/packages/yew-macro/tests/function_component_attr/generic-props-fail.stderr
index e60f09af641..df2912f89e0 100644
--- a/packages/yew-macro/tests/function_component_attr/generic-props-fail.stderr
+++ b/packages/yew-macro/tests/function_component_attr/generic-props-fail.stderr
@@ -1,11 +1,13 @@
 error[E0412]: cannot find type `INVALID` in this scope
   --> tests/function_component_attr/generic-props-fail.rs:25:19
    |
-20 | fn compile_fail() {
-   |                - help: you might be missing a type parameter: ``
-...
 25 |     html! {  /> };
    |                   ^^^^^^^ not found in this scope
+   |
+help: you might be missing a type parameter
+   |
+20 | fn compile_fail() {
+   |                +++++++++
 
 error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied
   --> tests/function_component_attr/generic-props-fail.rs:22:14
@@ -14,35 +16,59 @@ error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied
    |              ^^^^ the trait `HasProp` is not implemented for `AssertAllProps`
    |
    = help: the following other types implement trait `HasProp`:
-              as HasProp>>
-              as HasProp>>
+              as HasProp>>
+              as HasProp>>
               as HasProp>>
-              as HasProp>>
-              as HasProp>>
-              as HasProp>>
               as HasProp>>
-              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
+              as HasProp>>
            and $N others
-note: required because of the requirements on the impl of `HasAllProps` for `CheckPropsAll`
+note: required for `CheckPropsAll` to implement `HasAllProps`
   --> tests/function_component_attr/generic-props-fail.rs:3:17
    |
 3  | #[derive(Clone, Properties, PartialEq)]
-   |                 ^^^^^^^^^^
-   = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps`
+   |                 ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro
+   = note: required for `AssertAllProps` to implement `AllPropsFor`
 note: required by a bound in `yew::html::component::properties::__macro::PreBuild::::build`
   --> $WORKSPACE/packages/yew/src/html/component/properties.rs
    |
+   |         pub fn build(self) -> B::Output
+   |                ----- required by a bound in this associated function
+   |         where
    |             Token: AllPropsFor,
-   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `yew::html::component::properties::__macro::PreBuild::::build`
+   |                    ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build`
    = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error[E0277]: the trait bound `Comp: yew::BaseComponent` is not satisfied
   --> tests/function_component_attr/generic-props-fail.rs:27:14
    |
 27 |     html! {  /> };
-   |              ^^^^ the trait `yew::BaseComponent` is not implemented for `Comp`
+   |              ^^^^^^^^^^^^^^^^^^^^^^^ the trait `yew::BaseComponent` is not implemented for `Comp`
    |
    = help: the trait `yew::BaseComponent` is implemented for `Comp

` + +error[E0277]: the trait bound `MissingTypeBounds: yew::Properties` is not satisfied + --> tests/function_component_attr/generic-props-fail.rs:27:14 + | +27 | html! { /> }; + | ^^^^ the trait `yew::Properties` is not implemented for `MissingTypeBounds` + | + = help: the following other types implement trait `yew::Properties`: + Props + ContextProviderProps + ChildrenProps + SuspenseProps + () +note: required by a bound in `Comp` + --> tests/function_component_attr/generic-props-fail.rs:11:8 + | +8 | #[function_component(Comp)] + | ---- required by a bound in this struct +... +11 | P: Properties + PartialEq, + | ^^^^^^^^^^ required by this bound in `Comp` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: the function or associated item `new` exists for struct `VChild>`, but its trait bounds were not satisfied @@ -56,33 +82,25 @@ error[E0599]: the function or associated item `new` exists for struct `VChild: yew::BaseComponent` -note: the following trait must be implemented +note: the trait `yew::BaseComponent` must be implemented --> $WORKSPACE/packages/yew/src/html/component/mod.rs | | pub trait BaseComponent: Sized + 'static { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) -error[E0277]: the trait bound `MissingTypeBounds: yew::Properties` is not satisfied +error[E0277]: the trait bound `Comp: yew::BaseComponent` is not satisfied --> tests/function_component_attr/generic-props-fail.rs:27:14 | 27 | html! { /> }; - | ^^^^ the trait `yew::Properties` is not implemented for `MissingTypeBounds` + | ^^^^ the trait `yew::BaseComponent` is not implemented for `Comp` | - = help: the following other types implement trait `yew::Properties`: - () - ChildrenProps - ContextProviderProps - Props - SuspenseProps -note: required by a bound in `Comp` - --> tests/function_component_attr/generic-props-fail.rs:11:8 + = help: the trait `yew::BaseComponent` is implemented for `Comp

` +note: required by a bound in `VChild` + --> $WORKSPACE/packages/yew/src/virtual_dom/vcomp.rs | -8 | #[function_component(Comp)] - | ---- required by a bound in this -... -11 | P: Properties + PartialEq, - | ^^^^^^^^^^ required by this bound in `Comp` + | pub struct VChild { + | ^^^^^^^^^^^^^ required by this bound in `VChild` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0107]: missing generics for struct `Comp` @@ -101,4 +119,4 @@ note: struct defined here, with 1 generic parameter: `P` help: add missing generic argument | 30 | html! { /> }; - | ~~~~~~~ + | +++ diff --git a/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs b/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs index 7fc8ae6dcc8..dcb7cf84476 100644 --- a/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs +++ b/packages/yew-macro/tests/hook_attr/hook-trait-item-pass.rs @@ -11,7 +11,7 @@ pub trait MyTrait { #[yew::hook] pub fn use_query_state( - selector: impl yew::html::IntoPropValue, + _selector: impl yew::html::IntoPropValue, ) -> QueryState where Props: MyTrait, diff --git a/packages/yew-macro/tests/hook_attr_test.rs b/packages/yew-macro/tests/hook_attr_test.rs index bd0a3b28812..6298193caf1 100644 --- a/packages/yew-macro/tests/hook_attr_test.rs +++ b/packages/yew-macro/tests/hook_attr_test.rs @@ -1,5 +1,5 @@ #[allow(dead_code)] -#[rustversion::attr(stable(1.64), test)] +#[rustversion::attr(stable(1.76), test)] fn tests() { let t = trybuild::TestCases::new(); t.pass("tests/hook_attr/*-pass.rs"); diff --git a/packages/yew-macro/tests/hook_macro_test.rs b/packages/yew-macro/tests/hook_macro_test.rs index 01e81a41345..ebfaa3c053c 100644 --- a/packages/yew-macro/tests/hook_macro_test.rs +++ b/packages/yew-macro/tests/hook_macro_test.rs @@ -1,5 +1,5 @@ #[allow(dead_code)] -#[rustversion::attr(stable(1.64), test)] +#[rustversion::attr(stable(1.76), test)] fn tests() { let t = trybuild::TestCases::new(); t.pass("tests/hook_macro/*-pass.rs"); diff --git a/packages/yew-macro/tests/html_macro/block-fail.stderr b/packages/yew-macro/tests/html_macro/block-fail.stderr index e659ec66f26..a723ea94037 100644 --- a/packages/yew-macro/tests/html_macro/block-fail.stderr +++ b/packages/yew-macro/tests/html_macro/block-fail.stderr @@ -2,16 +2,18 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` --> tests/html_macro/block-fail.rs:6:15 | 6 | { () } - | ^^ `()` cannot be formatted with the default formatter + | ^^ + | | + | `()` cannot be formatted with the default formatter + | required by a bound introduced by this call | = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` - = note: required because of the requirements on the impl of `Into` for `()` + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` + = note: required for `()` to implement `Into` = note: 2 redundant requirements hidden - = note: required because of the requirements on the impl of `Into>` for `()` - = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) + = note: required for `()` to implement `Into>` error[E0277]: `()` doesn't implement `std::fmt::Display` --> tests/html_macro/block-fail.rs:15:17 @@ -21,11 +23,14 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` | = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` - = note: required because of the requirements on the impl of `Into` for `()` + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` + = note: required for `()` to implement `Into` note: required by a bound in `into_node_iter` --> $WORKSPACE/packages/yew/src/utils/mod.rs | + | pub fn into_node_iter(it: IT) -> impl Iterator + | -------------- required by a bound in this function +... | T: Into, | ^^^^^^^ required by this bound in `into_node_iter` diff --git a/packages/yew-macro/tests/html_macro/component-fail.stderr b/packages/yew-macro/tests/html_macro/component-fail.stderr index 440ffed4c64..051f546f2c6 100644 --- a/packages/yew-macro/tests/html_macro/component-fail.stderr +++ b/packages/yew-macro/tests/html_macro/component-fail.stderr @@ -406,7 +406,7 @@ error[E0308]: mismatched types --> tests/html_macro/component-fail.rs:53:22 | 53 | html! { }; - | ----- ^^^^^^^ expected struct `ChildProperties`, found struct `std::ops::Range` + | ----- ^^^^^^^ expected `ChildProperties`, found `Range<_>` | | | expected due to this | @@ -464,6 +464,7 @@ error[E0277]: the trait bound `(): IntoPropValue` is not satisfied | required by a bound introduced by this call | = help: the trait `IntoPropValue` is implemented for `()` + = help: for that trait implementation, expected `VNode`, found `String` note: required by a bound in `ChildPropertiesBuilder::string` --> tests/html_macro/component-fail.rs:4:17 | @@ -471,7 +472,7 @@ note: required by a bound in `ChildPropertiesBuilder::string` | ^^^^^^^^^^ required by this bound in `ChildPropertiesBuilder::string` ... 7 | pub string: String, - | ------ required by a bound in this + | ------ required by a bound in this associated function = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `{integer}: IntoPropValue` is not satisfied @@ -483,14 +484,14 @@ error[E0277]: the trait bound `{integer}: IntoPropValue` is not satisfie | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: - f32 - f64 - i128 + isize + i8 i16 i32 i64 - i8 - isize + i128 + usize + u8 and $N others note: required by a bound in `ChildPropertiesBuilder::string` --> tests/html_macro/component-fail.rs:4:17 @@ -499,7 +500,7 @@ note: required by a bound in `ChildPropertiesBuilder::string` | ^^^^^^^^^^ required by this bound in `ChildPropertiesBuilder::string` ... 7 | pub string: String, - | ------ required by a bound in this + | ------ required by a bound in this associated function = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `{integer}: IntoPropValue` is not satisfied @@ -511,14 +512,14 @@ error[E0277]: the trait bound `{integer}: IntoPropValue` is not satisfie | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: - f32 - f64 - i128 + isize + i8 i16 i32 i64 - i8 - isize + i128 + usize + u8 and $N others note: required by a bound in `ChildPropertiesBuilder::string` --> tests/html_macro/component-fail.rs:4:17 @@ -527,7 +528,7 @@ note: required by a bound in `ChildPropertiesBuilder::string` | ^^^^^^^^^^ required by this bound in `ChildPropertiesBuilder::string` ... 7 | pub string: String, - | ------ required by a bound in this + | ------ required by a bound in this associated function = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0609]: no field `r#ref` on type `ChildProperties` @@ -555,16 +556,8 @@ error[E0277]: the trait bound `u32: IntoPropValue` is not satisfied | | | required by a bound introduced by this call | - = help: the following other types implement trait `IntoPropValue`: - f32 - f64 - i128 - i16 - i32 - i64 - i8 - isize - and $N others + = help: the trait `IntoPropValue` is implemented for `u32` + = help: for that trait implementation, expected `VNode`, found `i32` note: required by a bound in `ChildPropertiesBuilder::int` --> tests/html_macro/component-fail.rs:4:17 | @@ -572,7 +565,7 @@ note: required by a bound in `ChildPropertiesBuilder::int` | ^^^^^^^^^^ required by this bound in `ChildPropertiesBuilder::int` ... 8 | pub int: i32, - | --- required by a bound in this + | --- required by a bound in this associated function = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied @@ -582,26 +575,29 @@ error[E0277]: the trait bound `AssertAllProps: HasProp` is not satisfied | ^^^^^ the trait `HasProp` is not implemented for `AssertAllProps` | = help: the following other types implement trait `HasProp`: - as HasProp>> + as HasProp>> + as HasProp>> as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> as HasProp<_ChildContainerProperties::children, HasChildContainerPropertieschildren>> - as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> and $N others -note: required because of the requirements on the impl of `HasAllProps` for `CheckChildPropertiesAll` +note: required for `CheckChildPropertiesAll` to implement `HasAllProps` --> tests/html_macro/component-fail.rs:4:17 | 4 | #[derive(Clone, Properties, PartialEq)] - | ^^^^^^^^^^ - = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps` + | ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro + = note: required for `AssertAllProps` to implement `AllPropsFor` note: required by a bound in `yew::html::component::properties::__macro::PreBuild::::build` --> $WORKSPACE/packages/yew/src/html/component/properties.rs | + | pub fn build(self) -> B::Output + | ----- required by a bound in this associated function + | where | Token: AllPropsFor, - | ^^^^^^^^^^^^^^^^^^^ required by this bound in `yew::html::component::properties::__macro::PreBuild::::build` + | ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build` = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0609]: no field `children` on type `ChildProperties` @@ -610,7 +606,6 @@ error[E0609]: no field `children` on type `ChildProperties` 103 | html! { { "Not allowed" } }; | ^^^^^ unknown field | - = note: available fields are: `string`, `int` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: no method named `children` found for struct `ChildPropertiesBuilder` in the current scope @@ -630,7 +625,6 @@ error[E0609]: no field `children` on type `ChildProperties` 110 | | ^^^^^ unknown field | - = note: available fields are: `string`, `int` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `AssertAllProps: HasProp<_ChildContainerProperties::children, _>` is not satisfied @@ -640,26 +634,29 @@ error[E0277]: the trait bound `AssertAllProps: HasProp<_ChildContainerProperties | ^^^^^^^^^^^^^^ the trait `HasProp<_ChildContainerProperties::children, _>` is not implemented for `AssertAllProps` | = help: the following other types implement trait `HasProp`: - as HasProp>> + as HasProp>> + as HasProp>> as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> as HasProp<_ChildContainerProperties::children, HasChildContainerPropertieschildren>> - as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> and $N others -note: required because of the requirements on the impl of `HasAllProps` for `CheckChildContainerPropertiesAll` +note: required for `CheckChildContainerPropertiesAll` to implement `HasAllProps` --> tests/html_macro/component-fail.rs:24:17 | 24 | #[derive(Clone, Properties, PartialEq)] - | ^^^^^^^^^^ - = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps` + | ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro + = note: required for `AssertAllProps` to implement `AllPropsFor` note: required by a bound in `yew::html::component::properties::__macro::PreBuild::::build` --> $WORKSPACE/packages/yew/src/html/component/properties.rs | + | pub fn build(self) -> B::Output + | ----- required by a bound in this associated function + | where | Token: AllPropsFor, - | ^^^^^^^^^^^^^^^^^^^ required by this bound in `yew::html::component::properties::__macro::PreBuild::::build` + | ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build` = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `AssertAllProps: HasProp<_ChildContainerProperties::children, _>` is not satisfied @@ -669,33 +666,38 @@ error[E0277]: the trait bound `AssertAllProps: HasProp<_ChildContainerProperties | ^^^^^^^^^^^^^^ the trait `HasProp<_ChildContainerProperties::children, _>` is not implemented for `AssertAllProps` | = help: the following other types implement trait `HasProp`: - as HasProp>> + as HasProp>> + as HasProp>> as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> - as HasProp>> as HasProp<_ChildContainerProperties::children, HasChildContainerPropertieschildren>> - as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> + as HasProp>> and $N others -note: required because of the requirements on the impl of `HasAllProps` for `CheckChildContainerPropertiesAll` +note: required for `CheckChildContainerPropertiesAll` to implement `HasAllProps` --> tests/html_macro/component-fail.rs:24:17 | 24 | #[derive(Clone, Properties, PartialEq)] - | ^^^^^^^^^^ - = note: required because of the requirements on the impl of `AllPropsFor` for `AssertAllProps` + | ^^^^^^^^^^ unsatisfied trait bound introduced in this `derive` macro + = note: required for `AssertAllProps` to implement `AllPropsFor` note: required by a bound in `yew::html::component::properties::__macro::PreBuild::::build` --> $WORKSPACE/packages/yew/src/html/component/properties.rs | + | pub fn build(self) -> B::Output + | ----- required by a bound in this associated function + | where | Token: AllPropsFor, - | ^^^^^^^^^^^^^^^^^^^ required by this bound in `yew::html::component::properties::__macro::PreBuild::::build` + | ^^^^^^^^^^^^^^^^^^^ required by this bound in `PreBuild::::build` = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `yew::virtual_dom::VText: IntoPropValue>>` is not satisfied - --> tests/html_macro/component-fail.rs:117:14 + --> tests/html_macro/component-fail.rs:117:31 | 117 | html! { { "Not allowed" } }; - | ^^^^^^^^^^^^^^ the trait `IntoPropValue>>` is not implemented for `yew::virtual_dom::VText` + | -------------- ^^^^^^^^^^^^^ the trait `IntoPropValue>>` is not implemented for `yew::virtual_dom::VText` + | | + | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: >> @@ -707,8 +709,8 @@ note: required by a bound in `ChildContainerPropertiesBuilder::children` | ^^^^^^^^^^ required by this bound in `ChildContainerPropertiesBuilder::children` 25 | pub struct ChildContainerProperties { 26 | pub children: ChildrenWithProps, - | -------- required by a bound in this - = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) + | -------- required by a bound in this associated function + = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `VChild: From` is not satisfied --> tests/html_macro/component-fail.rs:118:29 @@ -716,15 +718,18 @@ error[E0277]: the trait bound `VChild: From` is not satisfied 118 | html! { <> }; | ^ the trait `From` is not implemented for `VChild` | - = note: required because of the requirements on the impl of `Into>` for `VNode` + = note: required for `VNode` to implement `Into>` error[E0277]: the trait bound `VNode: IntoPropValue>>` is not satisfied - --> tests/html_macro/component-fail.rs:119:14 + --> tests/html_macro/component-fail.rs:119:30 | 119 | html! { }; - | ^^^^^^^^^^^^^^ the trait `IntoPropValue>>` is not implemented for `VNode` + | -------------- ^^^^^ the trait `IntoPropValue>>` is not implemented for `VNode` + | | + | required by a bound introduced by this call | = help: the trait `IntoPropValue>` is implemented for `VNode` + = help: for that trait implementation, expected `VNode`, found `VChild` note: required by a bound in `ChildContainerPropertiesBuilder::children` --> tests/html_macro/component-fail.rs:24:17 | @@ -732,5 +737,5 @@ note: required by a bound in `ChildContainerPropertiesBuilder::children` | ^^^^^^^^^^ required by this bound in `ChildContainerPropertiesBuilder::children` 25 | pub struct ChildContainerProperties { 26 | pub children: ChildrenWithProps, - | -------- required by a bound in this - = note: this error originates in the macro `html` which comes from the expansion of the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) + | -------- required by a bound in this associated function + = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/packages/yew-macro/tests/html_macro/component-unimplemented-fail.stderr b/packages/yew-macro/tests/html_macro/component-unimplemented-fail.stderr index b229ced60b6..3a26724acaa 100644 --- a/packages/yew-macro/tests/html_macro/component-unimplemented-fail.stderr +++ b/packages/yew-macro/tests/html_macro/component-unimplemented-fail.stderr @@ -5,7 +5,7 @@ error[E0277]: the trait bound `Unimplemented: yew::Component` is not satisfied | ^^^^^^^^^^^^^ the trait `yew::Component` is not implemented for `Unimplemented` | = help: the trait `yew::Component` is implemented for `ContextProvider` - = note: required because of the requirements on the impl of `BaseComponent` for `Unimplemented` + = note: required for `Unimplemented` to implement `BaseComponent` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0599]: the function or associated item `new` exists for struct `VChild`, but its trait bounds were not satisfied @@ -19,7 +19,7 @@ error[E0599]: the function or associated item `new` exists for struct `VChild $WORKSPACE/packages/yew/src/html/component/mod.rs | | pub trait BaseComponent: Sized + 'static { diff --git a/packages/yew-macro/tests/html_macro/element-fail.stderr b/packages/yew-macro/tests/html_macro/element-fail.stderr index bcc320a8975..bec8a082cfe 100644 --- a/packages/yew-macro/tests/html_macro/element-fail.stderr +++ b/packages/yew-macro/tests/html_macro/element-fail.stderr @@ -342,7 +342,16 @@ error[E0308]: mismatched types | | expected `bool`, found integer | arguments to this enum variant are incorrect | +help: the type constructed contains `{integer}` due to the type of the argument passed + --> tests/html_macro/element-fail.rs:36:5 + | +36 | html! { }; + | ^^^^^^^^^^^^^^^^^^^^^^^-^^^^^ + | | + | this argument influences the type of `{{root}}` note: tuple variant defined here + --> $RUST/core/src/option.rs + = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0308]: mismatched types --> tests/html_macro/element-fail.rs:37:29 @@ -350,12 +359,25 @@ error[E0308]: mismatched types 37 | html! { }; | ------------------------^^^^^^^^^^^------ | | | - | | expected `bool`, found enum `Option` + | | expected `bool`, found `Option` | arguments to this enum variant are incorrect | = note: expected type `bool` found enum `Option` +help: the type constructed contains `Option` due to the type of the argument passed + --> tests/html_macro/element-fail.rs:37:5 + | +37 | html! { }; + | ^^^^^^^^^^^^^^^^^^^^^^^^-----------^^^^^^ + | | + | this argument influences the type of `{{root}}` note: tuple variant defined here + --> $RUST/core/src/option.rs + = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) +help: use `Option::is_some` to test if the `Option` has a value + | +37 | html! { }; + | ++++++++++ error[E0308]: mismatched types --> tests/html_macro/element-fail.rs:38:29 @@ -376,10 +398,14 @@ error[E0308]: mismatched types --> tests/html_macro/element-fail.rs:39:30 | 39 | html! { }; - | ^^^^^^^^^^ expected `bool`, found enum `Option` + | ^^^^^^^^^^ expected `bool`, found `Option` | = note: expected type `bool` found enum `Option` +help: use `Option::is_some` to test if the `Option` has a value + | +39 | html! { }; + | ++++++++++ error[E0308]: mismatched types --> tests/html_macro/element-fail.rs:40:30 @@ -403,6 +429,7 @@ error[E0277]: the trait bound `(): IntoPropValue>` is not implemented for `()` | = help: the trait `IntoPropValue` is implemented for `()` + = help: for that trait implementation, expected `VNode`, found `Option` error[E0277]: the trait bound `(): IntoPropValue>` is not satisfied --> tests/html_macro/element-fail.rs:44:27 @@ -411,6 +438,7 @@ error[E0277]: the trait bound `(): IntoPropValue>` is not implemented for `()` | = help: the trait `IntoPropValue` is implemented for `()` + = help: for that trait implementation, expected `VNode`, found `Option` error[E0277]: the trait bound `(): IntoPropValue>` is not satisfied --> tests/html_macro/element-fail.rs:45:22 @@ -419,6 +447,7 @@ error[E0277]: the trait bound `(): IntoPropValue>` is not implemented for `()` | = help: the trait `IntoPropValue` is implemented for `()` + = help: for that trait implementation, expected `VNode`, found `Option` error[E0277]: the trait bound `NotToString: IntoPropValue>` is not satisfied --> tests/html_macro/element-fail.rs:46:28 @@ -427,64 +456,70 @@ error[E0277]: the trait bound `NotToString: IntoPropValue>` is not implemented for `NotToString` | = help: the following other types implement trait `IntoPropValue`: - <&'static [(K, V)] as IntoPropValue>> - <&'static [T] as IntoPropValue>> - <&'static str as IntoPropValue> - <&'static str as IntoPropValue>> - <&'static str as IntoPropValue>> - <&'static str as IntoPropValue> - <&'static str as IntoPropValue> - <&String as IntoPropValue> + > + > + > + > + > + > + > + > and $N others error[E0277]: the trait bound `Option: IntoPropValue>` is not satisfied --> tests/html_macro/element-fail.rs:47:23 | 47 | html! { }; - | ^^^^ the trait `IntoPropValue>` is not implemented for `Option` + | ----^^^^^^^^^^^^^ + | | + | the trait `IntoPropValue>` is not implemented for `Option` + | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: - as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>> - as IntoPropValue>>> - > as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>>> as IntoPropValue> + > as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>>> error[E0277]: the trait bound `Option<{integer}>: IntoPropValue>` is not satisfied --> tests/html_macro/element-fail.rs:48:22 | 48 | html! { }; - | ^^^^ the trait `IntoPropValue>` is not implemented for `Option<{integer}>` + | ----^^^ + | | + | the trait `IntoPropValue>` is not implemented for `Option<{integer}>` + | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: - as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>> - as IntoPropValue>>> - > as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>>> as IntoPropValue> + > as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>>> -error[E0277]: expected a `Fn<(MouseEvent,)>` closure, found `{integer}` +error[E0277]: expected a `Fn(MouseEvent)` closure, found `{integer}` --> tests/html_macro/element-fail.rs:51:28 | 51 | html! { }; | -----------------------^----- | | | - | | expected an `Fn<(MouseEvent,)>` closure, found `{integer}` + | | expected an `Fn(MouseEvent)` closure, found `{integer}` | required by a bound introduced by this call | = help: the trait `Fn<(MouseEvent,)>` is not implemented for `{integer}` = help: the following other types implement trait `IntoEventCallback`: - &yew::Callback - Option - Option> yew::Callback - = note: required because of the requirements on the impl of `IntoEventCallback` for `{integer}` + Option> + Option + &yew::Callback + = note: required for `{integer}` to implement `IntoEventCallback` note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` --> $WORKSPACE/packages/yew/src/html/listener/events.rs | @@ -495,23 +530,26 @@ note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` ... | | | ontransitionstart(TransitionEvent) | | } - | |_^ required by this bound in `yew::html::onclick::Wrapper::__macro_new` + | | ^ + | | | + | |_required by a bound in this associated function + | required by this bound in `Wrapper::__macro_new` = note: this error originates in the macro `impl_action` which comes from the expansion of the macro `impl_short` (in Nightly builds, run with -Z macro-backtrace for more info) -error[E0277]: expected a `Fn<(MouseEvent,)>` closure, found `yew::Callback` +error[E0277]: expected a `Fn(MouseEvent)` closure, found `yew::Callback` --> tests/html_macro/element-fail.rs:52:29 | 52 | html! { }; | ------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------ | | | - | | expected an `Fn<(MouseEvent,)>` closure, found `yew::Callback` + | | expected an `Fn(MouseEvent)` closure, found `yew::Callback` | required by a bound introduced by this call | = help: the trait `Fn<(MouseEvent,)>` is not implemented for `yew::Callback` = help: the following other types implement trait `IntoEventCallback`: - &yew::Callback yew::Callback - = note: required because of the requirements on the impl of `IntoEventCallback` for `yew::Callback` + &yew::Callback + = note: required for `yew::Callback` to implement `IntoEventCallback` note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` --> $WORKSPACE/packages/yew/src/html/listener/events.rs | @@ -522,7 +560,10 @@ note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` ... | | | ontransitionstart(TransitionEvent) | | } - | |_^ required by this bound in `yew::html::onclick::Wrapper::__macro_new` + | | ^ + | | | + | |_required by a bound in this associated function + | required by this bound in `Wrapper::__macro_new` = note: this error originates in the macro `impl_action` which comes from the expansion of the macro `impl_short` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `Option<{integer}>: IntoEventCallback` is not satisfied @@ -535,8 +576,8 @@ error[E0277]: the trait bound `Option<{integer}>: IntoEventCallback` | required by a bound introduced by this call | = help: the following other types implement trait `IntoEventCallback`: - Option Option> + Option note: required by a bound in `yew::html::onfocus::Wrapper::__macro_new` --> $WORKSPACE/packages/yew/src/html/listener/events.rs | @@ -547,49 +588,57 @@ note: required by a bound in `yew::html::onfocus::Wrapper::__macro_new` ... | | | ontransitionstart(TransitionEvent) | | } - | |_^ required by this bound in `yew::html::onfocus::Wrapper::__macro_new` + | | ^ + | | | + | |_required by a bound in this associated function + | required by this bound in `Wrapper::__macro_new` = note: this error originates in the macro `impl_action` which comes from the expansion of the macro `impl_short` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `(): IntoPropValue` is not satisfied --> tests/html_macro/element-fail.rs:56:25 | 56 | html! { }; - | ^^ the trait `IntoPropValue` is not implemented for `()` + | ^^ + | | + | the trait `IntoPropValue` is not implemented for `()` + | required by a bound introduced by this call | = help: the trait `IntoPropValue` is implemented for `()` - = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) + = help: for that trait implementation, expected `VNode`, found `yew::NodeRef` error[E0277]: the trait bound `Option: IntoPropValue` is not satisfied --> tests/html_macro/element-fail.rs:57:25 | 57 | html! { }; - | ^^^^ the trait `IntoPropValue` is not implemented for `Option` + | ----^^^^^^^^^^^^^^^^^^^^ + | | + | the trait `IntoPropValue` is not implemented for `Option` + | required by a bound introduced by this call | = help: the following other types implement trait `IntoPropValue`: - as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>> - as IntoPropValue>>> - > as IntoPropValue>> - as IntoPropValue>> > as IntoPropValue>>> as IntoPropValue> - = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) + > as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>> + as IntoPropValue>>> -error[E0277]: expected a `Fn<(MouseEvent,)>` closure, found `yew::Callback` +error[E0277]: expected a `Fn(MouseEvent)` closure, found `yew::Callback` --> tests/html_macro/element-fail.rs:58:29 | 58 | html! { }; | ------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^------ | | | - | | expected an `Fn<(MouseEvent,)>` closure, found `yew::Callback` + | | expected an `Fn(MouseEvent)` closure, found `yew::Callback` | required by a bound introduced by this call | = help: the trait `Fn<(MouseEvent,)>` is not implemented for `yew::Callback` = help: the following other types implement trait `IntoEventCallback`: - &yew::Callback yew::Callback - = note: required because of the requirements on the impl of `IntoEventCallback` for `yew::Callback` + &yew::Callback + = note: required for `yew::Callback` to implement `IntoEventCallback` note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` --> $WORKSPACE/packages/yew/src/html/listener/events.rs | @@ -600,7 +649,10 @@ note: required by a bound in `yew::html::onclick::Wrapper::__macro_new` ... | | | ontransitionstart(TransitionEvent) | | } - | |_^ required by this bound in `yew::html::onclick::Wrapper::__macro_new` + | | ^ + | | | + | |_required by a bound in this associated function + | required by this bound in `Wrapper::__macro_new` = note: this error originates in the macro `impl_action` which comes from the expansion of the macro `impl_short` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: the trait bound `NotToString: IntoPropValue>` is not satisfied @@ -610,24 +662,27 @@ error[E0277]: the trait bound `NotToString: IntoPropValue>` is not implemented for `NotToString` | = help: the following other types implement trait `IntoPropValue`: - <&'static [(K, V)] as IntoPropValue>> - <&'static [T] as IntoPropValue>> - <&'static str as IntoPropValue> - <&'static str as IntoPropValue>> - <&'static str as IntoPropValue>> - <&'static str as IntoPropValue> - <&'static str as IntoPropValue> - <&String as IntoPropValue> + > + > + > + > + > + > + > + > and $N others error[E0277]: the trait bound `(): IntoPropValue` is not satisfied --> tests/html_macro/element-fail.rs:62:25 | 62 | html! { }; - | ^^ the trait `IntoPropValue` is not implemented for `()` + | ^^ + | | + | the trait `IntoPropValue` is not implemented for `()` + | required by a bound introduced by this call | = help: the trait `IntoPropValue` is implemented for `()` - = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) + = help: for that trait implementation, expected `VNode`, found `yew::NodeRef` error[E0277]: the trait bound `implicit_clone::unsync::string::IString: From<{integer}>` is not satisfied --> tests/html_macro/element-fail.rs:77:16 @@ -636,9 +691,10 @@ error[E0277]: the trait bound `implicit_clone::unsync::string::IString: From<{in | ^^ the trait `From<{integer}>` is not implemented for `implicit_clone::unsync::string::IString` | = help: the following other types implement trait `From`: - > - > >> >> > - = note: required because of the requirements on the impl of `Into` for `{integer}` + >> + > + > + = note: required for `{integer}` to implement `Into` diff --git a/packages/yew-macro/tests/html_macro/generic-component-fail.stderr b/packages/yew-macro/tests/html_macro/generic-component-fail.stderr index a0071a87b44..6717522f1e8 100644 --- a/packages/yew-macro/tests/html_macro/generic-component-fail.stderr +++ b/packages/yew-macro/tests/html_macro/generic-component-fail.stderr @@ -20,7 +20,7 @@ error: mismatched closing tags: expected `Generic`, found `Generic --> tests/html_macro/generic-component-fail.rs:50:14 | 50 | html! { >> }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: expected a valid closing tag for component note: found opening tag `>` diff --git a/packages/yew-macro/tests/html_macro/iterable-fail.stderr b/packages/yew-macro/tests/html_macro/iterable-fail.stderr index 54649e26bbe..6b71efea4a1 100644 --- a/packages/yew-macro/tests/html_macro/iterable-fail.stderr +++ b/packages/yew-macro/tests/html_macro/iterable-fail.stderr @@ -11,16 +11,19 @@ error[E0277]: `()` is not an iterator | ^^ `()` is not an iterator | = help: the trait `Iterator` is not implemented for `()` - = note: required because of the requirements on the impl of `IntoIterator` for `()` + = note: required for `()` to implement `IntoIterator` error[E0277]: `()` is not an iterator --> tests/html_macro/iterable-fail.rs:6:17 | 6 | html! { for {()} }; - | ^^^^ `()` is not an iterator + | ^--^ + | || + | |this tail expression is of type `()` + | `()` is not an iterator | = help: the trait `Iterator` is not implemented for `()` - = note: required because of the requirements on the impl of `IntoIterator` for `()` + = note: required for `()` to implement `IntoIterator` error[E0277]: `()` doesn't implement `std::fmt::Display` --> tests/html_macro/iterable-fail.rs:7:17 @@ -31,11 +34,12 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = help: the trait `FromIterator` is implemented for `VNode` - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` - = note: required because of the requirements on the impl of `Into` for `()` - = note: required because of the requirements on the impl of `FromIterator<()>` for `VNode` + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` + = note: required for `()` to implement `Into` + = note: required for `VNode` to implement `FromIterator<()>` note: required by a bound in `collect` + --> $RUST/core/src/iter/traits/iterator.rs error[E0277]: `()` doesn't implement `std::fmt::Display` --> tests/html_macro/iterable-fail.rs:10:17 @@ -46,11 +50,12 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = help: the trait `FromIterator` is implemented for `VNode` - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` - = note: required because of the requirements on the impl of `Into` for `()` - = note: required because of the requirements on the impl of `FromIterator<()>` for `VNode` + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` + = note: required for `()` to implement `Into` + = note: required for `VNode` to implement `FromIterator<()>` note: required by a bound in `collect` + --> $RUST/core/src/iter/traits/iterator.rs error[E0277]: `()` doesn't implement `std::fmt::Display` --> tests/html_macro/iterable-fail.rs:13:17 @@ -61,12 +66,13 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = help: the trait `FromIterator` is implemented for `VNode` - = note: required because of the requirements on the impl of `std::fmt::Display` for `&()` - = note: required because of the requirements on the impl of `ToString` for `&()` - = note: required because of the requirements on the impl of `From<&()>` for `VNode` - = note: required because of the requirements on the impl of `Into` for `&()` - = note: required because of the requirements on the impl of `FromIterator<&()>` for `VNode` + = note: required for `&()` to implement `std::fmt::Display` + = note: required for `&()` to implement `ToString` + = note: required for `VNode` to implement `From<&()>` + = note: required for `&()` to implement `Into` + = note: required for `VNode` to implement `FromIterator<&()>` note: required by a bound in `collect` + --> $RUST/core/src/iter/traits/iterator.rs error[E0277]: `()` is not an iterator --> tests/html_macro/iterable-fail.rs:18:19 @@ -75,9 +81,12 @@ error[E0277]: `()` is not an iterator | ^^ `()` is not an iterator | = help: the trait `Iterator` is not implemented for `()` - = note: required because of the requirements on the impl of `IntoIterator` for `()` + = note: required for `()` to implement `IntoIterator` note: required by a bound in `into_node_iter` --> $WORKSPACE/packages/yew/src/utils/mod.rs | + | pub fn into_node_iter(it: IT) -> impl Iterator + | -------------- required by a bound in this function + | where | IT: IntoIterator, | ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `into_node_iter` diff --git a/packages/yew-macro/tests/html_macro/list-fail.stderr b/packages/yew-macro/tests/html_macro/list-fail.stderr index 6fba4bb44ba..7bed9347ec2 100644 --- a/packages/yew-macro/tests/html_macro/list-fail.stderr +++ b/packages/yew-macro/tests/html_macro/list-fail.stderr @@ -44,7 +44,7 @@ error: expected an expression following this equals sign --> tests/html_macro/list-fail.rs:18:17 | 18 | html! { }; - | ^^ + | ^ error: the property value must be either a literal or enclosed in braces. Consider adding braces around your expression.: Expr::MethodCall { attrs: [], diff --git a/packages/yew-macro/tests/html_macro/node-fail.stderr b/packages/yew-macro/tests/html_macro/node-fail.stderr index 9b5f5a70717..fc94b419875 100644 --- a/packages/yew-macro/tests/html_macro/node-fail.stderr +++ b/packages/yew-macro/tests/html_macro/node-fail.stderr @@ -4,7 +4,7 @@ error: only one root html element is allowed (hint: you can wrap multiple html e 4 | html! { "valid" "invalid" }; | ^^^^^^^^^ -error: unexpected token +error: unexpected token, expected `}` --> tests/html_macro/node-fail.rs:5:29 | 5 | html! { { "valid" "invalid" } }; @@ -42,9 +42,9 @@ error[E0425]: cannot find value `invalid` in this scope | help: consider importing one of these items | -1 | use core::ptr::invalid; +1 + use core::ptr::invalid; | -1 | use std::ptr::invalid; +1 + use std::ptr::invalid; | error[E0277]: `()` doesn't implement `std::fmt::Display` @@ -56,17 +56,17 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = help: the following other types implement trait `From`: - >> - > - >> > + >> + >> > > > > > - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` + > + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0277]: `()` doesn't implement `std::fmt::Display` @@ -78,15 +78,15 @@ error[E0277]: `()` doesn't implement `std::fmt::Display` = help: the trait `std::fmt::Display` is not implemented for `()` = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead = help: the following other types implement trait `From`: - >> - > - >> > + >> + >> > > > > > - = note: required because of the requirements on the impl of `ToString` for `()` - = note: required because of the requirements on the impl of `From<()>` for `VNode` + > + = note: required for `()` to implement `ToString` + = note: required for `VNode` to implement `From<()>` = note: this error originates in the macro `html` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/packages/yew-macro/tests/html_macro_test.rs b/packages/yew-macro/tests/html_macro_test.rs index 4a91060b1fc..69d62934bfa 100644 --- a/packages/yew-macro/tests/html_macro_test.rs +++ b/packages/yew-macro/tests/html_macro_test.rs @@ -1,7 +1,7 @@ use yew::{html, html_nested}; #[allow(dead_code)] -#[rustversion::attr(stable(1.64), test)] +#[rustversion::attr(stable(1.76), test)] fn html_macro() { let t = trybuild::TestCases::new(); diff --git a/packages/yew-macro/tests/props_macro/props-fail.stderr b/packages/yew-macro/tests/props_macro/props-fail.stderr index ed0f4b24e1f..187f81afb57 100644 --- a/packages/yew-macro/tests/props_macro/props-fail.stderr +++ b/packages/yew-macro/tests/props_macro/props-fail.stderr @@ -14,7 +14,7 @@ error: expected ident --> tests/props_macro/props-fail.rs:13:31 | 13 | yew::props!(Props { a: 1, ..props }); - | ^^ + | ^ error[E0425]: cannot find value `does_not_exist` in this scope --> tests/props_macro/props-fail.rs:15:25 @@ -28,7 +28,7 @@ error[E0609]: no field `fail` on type `Props` 10 | yew::props!(Props { a: 5, fail: 10 }); | ^^^^ unknown field | - = note: available fields are: `a` + = note: available field is: `a` error[E0599]: no method named `fail` found for struct `PropsBuilder` in the current scope --> tests/props_macro/props-fail.rs:10:31 @@ -45,7 +45,7 @@ error[E0609]: no field `does_not_exist` on type `Props` 15 | yew::props!(Props { does_not_exist }); | ^^^^^^^^^^^^^^ unknown field | - = note: available fields are: `a` + = note: available field is: `a` error[E0599]: no method named `does_not_exist` found for struct `PropsBuilder` in the current scope --> tests/props_macro/props-fail.rs:15:25 diff --git a/packages/yew-macro/tests/props_macro/props-pass.rs b/packages/yew-macro/tests/props_macro/props-pass.rs index cdd51db77f9..4e1186d9323 100644 --- a/packages/yew-macro/tests/props_macro/props-pass.rs +++ b/packages/yew-macro/tests/props_macro/props-pass.rs @@ -56,6 +56,22 @@ pub struct RawIdentProps { r#pointless_raw_name: ::std::primitive::usize, } +#[derive(::yew::Properties)] +pub struct SelfRefProps<'a, T> { + x: ::std::boxed::Box, + y: ::std::boxed::Box, + z: &'a Self, + a: ::std::marker::PhantomData<(&'a Self, Self)>, + b: ::std::marker::PhantomData<::std::boxed::Box>, + c: fn(&Self) -> Self, +} + +impl ::std::cmp::PartialEq for SelfRefProps<'_, T> { + fn eq(&self, _: &Self) -> ::std::primitive::bool { + ::std::unimplemented!() + } +} + fn pass_raw_idents() { ::yew::props!(RawIdentProps { r#true: 5 }); let (r#true, r#pointless_raw_name) = (3, 5); diff --git a/packages/yew-macro/tests/props_macro/resolve-prop-fail.stderr b/packages/yew-macro/tests/props_macro/resolve-prop-fail.stderr index d58e437a03f..1ea3b75896e 100644 --- a/packages/yew-macro/tests/props_macro/resolve-prop-fail.stderr +++ b/packages/yew-macro/tests/props_macro/resolve-prop-fail.stderr @@ -1,17 +1,42 @@ error[E0277]: can't compare `Props` with `Props` - --> tests/props_macro/resolve-prop-fail.rs:3:17 + --> tests/props_macro/resolve-prop-fail.rs:4:8 | -3 | #[derive(Clone, Properties)] - | ^^^^^^^^^^ no implementation for `Props == Props` +4 | struct Props {} + | ^^^^^ no implementation for `Props == Props` | = help: the trait `PartialEq` is not implemented for `Props` note: required by a bound in `yew::Properties` --> $WORKSPACE/packages/yew/src/html/component/properties.rs | | pub trait Properties: PartialEq { - | ^^^^^^^^^ required by this bound in `yew::Properties` - = note: this error originates in the derive macro `Properties` (in Nightly builds, run with -Z macro-backtrace for more info) + | ^^^^^^^^^ required by this bound in `Properties` help: consider annotating `Props` with `#[derive(PartialEq)]` | -4 | #[derive(PartialEq)] +4 + #[derive(PartialEq)] +5 | struct Props {} | + +error[E0277]: can't compare `Props` with `Props` + --> tests/props_macro/resolve-prop-fail.rs:9:23 + | +9 | type Properties = Props; + | ^^^^^ no implementation for `Props == Props` + | + = help: the trait `PartialEq` is not implemented for `Props` + = help: the following other types implement trait `yew::Properties`: + Props + ContextProviderProps + ChildrenProps + SuspenseProps + () + = note: required for `::Properties` to implement `yew::Properties` +note: required by a bound in `yew::Component::Properties` + --> $WORKSPACE/packages/yew/src/html/component/mod.rs + | + | type Properties: Properties; + | ^^^^^^^^^^ required by this bound in `Component::Properties` +help: consider annotating `Props` with `#[derive(PartialEq)]` + | +4 + #[derive(PartialEq)] +5 | struct Props {} + | diff --git a/packages/yew-macro/tests/props_macro_test.rs b/packages/yew-macro/tests/props_macro_test.rs index b82adc18486..008b161d5d3 100644 --- a/packages/yew-macro/tests/props_macro_test.rs +++ b/packages/yew-macro/tests/props_macro_test.rs @@ -1,5 +1,5 @@ #[allow(dead_code)] -#[rustversion::attr(stable(1.64), test)] +#[rustversion::attr(stable(1.76), test)] fn props_macro() { let t = trybuild::TestCases::new(); t.pass("tests/props_macro/*-pass.rs"); diff --git a/packages/yew-router-macro/Cargo.toml b/packages/yew-router-macro/Cargo.toml index 381f09d03c2..550b84f58cb 100644 --- a/packages/yew-router-macro/Cargo.toml +++ b/packages/yew-router-macro/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" license = "MIT OR Apache-2.0" description = "Contains macros used with yew-router" repository = "https://github.com/yewstack/yew" -rust-version = "1.64.0" +rust-version = "1.76.0" [lib] proc-macro = true diff --git a/packages/yew-router-macro/Makefile.toml b/packages/yew-router-macro/Makefile.toml index 1eae4efc7c4..c194283736b 100644 --- a/packages/yew-router-macro/Makefile.toml +++ b/packages/yew-router-macro/Makefile.toml @@ -1,6 +1,6 @@ [tasks.test] clear = true -toolchain = "1.64.0" +toolchain = "1.76.0" command = "cargo" args = ["test"] diff --git a/packages/yew-router-macro/tests/routable_derive_test.rs b/packages/yew-router-macro/tests/routable_derive_test.rs index 59dbd5e0104..e57f58fdbb6 100644 --- a/packages/yew-router-macro/tests/routable_derive_test.rs +++ b/packages/yew-router-macro/tests/routable_derive_test.rs @@ -1,5 +1,5 @@ #[allow(dead_code)] -#[rustversion::attr(stable(1.64), test)] +#[rustversion::attr(stable(1.76), test)] fn tests() { let t = trybuild::TestCases::new(); t.pass("tests/routable_derive/*-pass.rs"); diff --git a/packages/yew-router/Cargo.toml b/packages/yew-router/Cargo.toml index e5b7d68e18a..056e5633a27 100644 --- a/packages/yew-router/Cargo.toml +++ b/packages/yew-router/Cargo.toml @@ -9,7 +9,7 @@ keywords = ["web", "yew", "router"] categories = ["gui", "web-programming"] description = "A router implementation for the Yew framework" repository = "https://github.com/yewstack/yew" -rust-version = "1.64.0" +rust-version = "1.76.0" [dependencies] yew = { version = "0.21.0", path = "../yew", default-features= false } @@ -17,7 +17,7 @@ yew-router-macro = { version = "0.18.0", path = "../yew-router-macro" } wasm-bindgen = "0.2" js-sys = "0.3" -gloo = { version = "0.10", features = ["futures"] } +gloo = { version = "0.11", features = ["futures"] } route-recognizer = "0.3" serde = "1" serde_urlencoded = "0.7.1" diff --git a/packages/yew-router/src/navigator.rs b/packages/yew-router/src/navigator.rs index 48345609f83..dec228821b8 100644 --- a/packages/yew-router/src/navigator.rs +++ b/packages/yew-router/src/navigator.rs @@ -159,7 +159,7 @@ impl Navigator { pub(crate) fn prefix_basename<'a>(&self, route_s: &'a str) -> Cow<'a, str> { match self.basename() { Some(base) => { - if route_s.is_empty() && route_s.is_empty() { + if base.is_empty() && route_s.is_empty() { Cow::from("/") } else { Cow::from(format!("{base}{route_s}")) diff --git a/packages/yew-router/src/router.rs b/packages/yew-router/src/router.rs index b3becda9ea1..0c4b4dedf4c 100644 --- a/packages/yew-router/src/router.rs +++ b/packages/yew-router/src/router.rs @@ -1,6 +1,8 @@ //! Router Component. +use std::borrow::Cow; use std::rc::Rc; +use gloo::history::query::Raw; use yew::prelude::*; use yew::virtual_dom::AttrValue; @@ -72,16 +74,43 @@ fn base_router(props: &RouterProps) -> Html { basename, } = props.clone(); + let basename = basename.map(|m| strip_slash_suffix(&m).to_owned()); + let navigator = Navigator::new(history.clone(), basename.clone()); + + let old_basename = use_mut_ref(|| Option::::None); + let mut old_basename = old_basename.borrow_mut(); + if basename != *old_basename { + // If `old_basename` is `Some`, path is probably prefixed with `old_basename`. + // If `old_basename` is `None`, path may or may not be prefixed with the new `basename`, + // depending on whether this is the first render. + let old_navigator = Navigator::new( + history.clone(), + old_basename.as_ref().or(basename.as_ref()).cloned(), + ); + *old_basename = basename.clone(); + let location = history.location(); + let stripped = old_navigator.strip_basename(Cow::from(location.path())); + let prefixed = navigator.prefix_basename(&stripped); + + if prefixed != location.path() { + history + .replace_with_query(prefixed, Raw(location.query_str())) + .unwrap_or_else(|never| match never {}); + } else { + // Reaching here is possible if the page loads with the correct path, including the + // initial basename. In that case, the new basename would be stripped and then + // prefixed right back. While replacing the history would probably be harmless, + // we might as well avoid doing it. + } + } + + let navi_ctx = NavigatorContext { navigator }; + let loc_ctx = use_reducer(|| LocationContext { location: history.location(), ctr: 0, }); - let basename = basename.map(|m| strip_slash_suffix(&m).to_string()); - let navi_ctx = NavigatorContext { - navigator: Navigator::new(history.clone(), basename), - }; - { let loc_ctx_dispatcher = loc_ctx.dispatcher(); diff --git a/packages/yew-router/src/utils.rs b/packages/yew-router/src/utils.rs index ba356701725..588e7d5badb 100644 --- a/packages/yew-router/src/utils.rs +++ b/packages/yew-router/src/utils.rs @@ -8,7 +8,7 @@ pub(crate) fn strip_slash_suffix(path: &str) -> &str { static BASE_URL_LOADED: std::sync::Once = std::sync::Once::new(); thread_local! { - static BASE_URL: RefCell> = RefCell::new(None); + static BASE_URL: RefCell> = const { RefCell::new(None) }; } // This exists so we can cache the base url. It costs us a `to_string` call instead of a DOM API diff --git a/packages/yew-router/tests/link.rs b/packages/yew-router/tests/link.rs index 50510b79242..8e3f5bc5f41 100644 --- a/packages/yew-router/tests/link.rs +++ b/packages/yew-router/tests/link.rs @@ -1,5 +1,8 @@ +use std::sync::atomic::{AtomicU8, Ordering}; use std::time::Duration; +use gloo::utils::window; +use js_sys::{JsString, Object, Reflect}; use serde::{Deserialize, Serialize}; use wasm_bindgen_test::{wasm_bindgen_test as test, wasm_bindgen_test_configure}; use yew::functional::function_component; @@ -47,8 +50,20 @@ enum Routes { Search, } +#[derive(PartialEq, Properties)] +struct NavigationMenuProps { + #[prop_or(None)] + assertion: Option, +} + #[function_component(NavigationMenu)] -fn navigation_menu() -> Html { +fn navigation_menu(props: &NavigationMenuProps) -> Html { + let navigator = use_navigator().unwrap(); + let location = use_location().unwrap(); + if let Some(assertion) = props.assertion { + assertion(&navigator, &location); + } + html! {