diff --git a/.changeset/large-pants-hide.md b/.changeset/large-pants-hide.md new file mode 100644 index 00000000000..fbaf7bd6008 --- /dev/null +++ b/.changeset/large-pants-hide.md @@ -0,0 +1,6 @@ +--- +'@firebase/firestore': patch +'firebase': patch +--- + +Use lazy encoding in UTF-8 encoded byte comparison for strings. diff --git a/.github/workflows/check-changeset.yml b/.github/workflows/check-changeset.yml deleted file mode 100644 index 3514f409c81..00000000000 --- a/.github/workflows/check-changeset.yml +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Check Changeset - -on: - pull_request: - branches: - - main - -env: - GITHUB_PULL_REQUEST_HEAD_SHA: ${{ github.event.pull_request.head.sha }} - GITHUB_PULL_REQUEST_BASE_SHA: ${{ github.event.pull_request.base.sha }} - -jobs: - check_changeset: - name: Check changeset vs changed files - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so check_changeset script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Yarn install - run: yarn - - name: Run changeset script - # pull main so changeset can diff against it - run: | - git pull -f --no-rebase origin main:main - yarn ts-node-script scripts/ci/check_changeset.ts - id: check-changeset - - name: Print changeset checker output - run: | - cat << 'eof_delimiter_that_will_never_occur_in_CHANGESET_ERROR_MESSAGE' - ${{steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - eof_delimiter_that_will_never_occur_in_CHANGESET_ERROR_MESSAGE - - name: Print blocking failure status - run: echo "${{steps.check-changeset.outputs.BLOCKING_FAILURE}}" - - name: Find Comment - uses: peter-evans/find-comment@v3 - id: fc - with: - issue-number: ${{github.event.number}} - body-includes: Changeset File Check - - name: Create comment (missing packages) - if: ${{!steps.fc.outputs.comment-id && steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - uses: peter-evans/create-or-update-comment@v4 - with: - issue-number: ${{github.event.number}} - body: | - ### Changeset File Check :warning: - ${{steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - - name: Update comment (missing packages) - if: ${{steps.fc.outputs.comment-id && steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - uses: peter-evans/create-or-update-comment@v4 - with: - comment-id: ${{steps.fc.outputs.comment-id}} - edit-mode: replace - body: | - ### Changeset File Check :warning: - ${{steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - - name: Update comment (no missing packages) - if: ${{steps.fc.outputs.comment-id && !steps.check-changeset.outputs.CHANGESET_ERROR_MESSAGE}} - uses: peter-evans/create-or-update-comment@v4 - with: - comment-id: ${{steps.fc.outputs.comment-id}} - edit-mode: replace - body: | - ### Changeset File Check :white_check_mark: - - No modified packages are missing from the changeset file. - - No changeset formatting errors detected. - # Don't want it to throw before editing the comment. - - name: Fail if checker script logged a blocking failure - if: ${{steps.check-changeset.outputs.BLOCKING_FAILURE == 'true'}} - run: exit 1 \ No newline at end of file diff --git a/.github/workflows/check-pkg-paths.yml b/.github/workflows/check-pkg-paths.yml deleted file mode 100644 index 96dfc6f6556..00000000000 --- a/.github/workflows/check-pkg-paths.yml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test Package Paths - -on: pull_request - -jobs: - test: - name: Test Package Paths - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Yarn install - run: yarn - - name: Yarn build - run: yarn build - - name: Swap in public typings - run: yarn release:prepare - - name: Check paths - run: yarn ts-node scripts/ci-test/check-paths.ts \ No newline at end of file diff --git a/.github/workflows/check-vertexai-responses.yml b/.github/workflows/check-vertexai-responses.yml deleted file mode 100644 index 0ce811a6cc0..00000000000 --- a/.github/workflows/check-vertexai-responses.yml +++ /dev/null @@ -1,63 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Check Vertex AI Responses - -on: pull_request - -jobs: - check-version: - runs-on: ubuntu-latest - # Allow GITHUB_TOKEN to have write permissions - permissions: - contents: write - pull-requests: write - steps: - - uses: actions/checkout@v4 - - name: Clone mock responses - run: scripts/update_vertexai_responses.sh - - name: Find cloned and latest versions - run: | - CLONED=$(git describe --tags) - LATEST=$(git tag --sort=v:refname | tail -n1) - echo "cloned_tag=$CLONED" >> $GITHUB_ENV - echo "latest_tag=$LATEST" >> $GITHUB_ENV - working-directory: packages/vertexai/test-utils/vertexai-sdk-test-data - - name: Find comment from previous run if exists - uses: peter-evans/find-comment@v3 - id: fc - with: - issue-number: ${{github.event.number}} - body-includes: Vertex AI Mock Responses Check - - name: Comment on PR if newer version is available - if: ${{env.cloned_tag != env.latest_tag && !steps.fc.outputs.comment-id}} - uses: peter-evans/create-or-update-comment@v4 - with: - issue-number: ${{github.event.number}} - body: > - ### Vertex AI Mock Responses Check :warning: - - A newer major version of the mock responses for Vertex AI unit tests is available. - [update_vertexai_responses.sh](https://github.com/firebase/firebase-js-sdk/blob/main/scripts/update_vertexai_responses.sh) - should be updated to clone the latest version of the responses: `${{env.latest_tag}}` - - name: Delete comment when version gets updated - if: ${{env.cloned_tag == env.latest_tag && steps.fc.outputs.comment-id}} - uses: actions/github-script@v7 - with: - script: | - github.rest.issues.deleteComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.fc.outputs.comment-id }}, - }) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml deleted file mode 100644 index f0bbd672fc3..00000000000 --- a/.github/workflows/format.yml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Formatting Check (Run yarn format locally if this fails) - -on: pull_request - -env: - GITHUB_PULL_REQUEST_HEAD_SHA: ${{ github.event.pull_request.head.sha }} - GITHUB_PULL_REQUEST_BASE_SHA: ${{ github.event.pull_request.base.sha }} - -jobs: - format: - name: Run license and prettier formatting tasks - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # get all history for the diff - fetch-depth: 0 - - name: Set up node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Yarn install - run: yarn - - name: Run formatting script - run: yarn format - - name: Check for changes (fail if so) - run: git diff --exit-code - - name: Formatting needs to be updated. See message below. - if: ${{ failure() }} - run: echo "Something was changed by formatting. Run \`yarn format\` locally to do a prettier/license pass. Use \`yarn format --help\` to see options." \ No newline at end of file diff --git a/.github/workflows/health-metrics-pull-request.yml b/.github/workflows/health-metrics-pull-request.yml deleted file mode 100644 index ff7bd7286c1..00000000000 --- a/.github/workflows/health-metrics-pull-request.yml +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Health Metrics - -on: - push: - branches: ['**'] - pull_request: - -env: - GITHUB_PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} - # TODO(yifany): parse from git commit history directly - # Reason: actions/checkout@v2 does not always honor ${{ github.event.pull_request.base.sha }}, - # therefore "base.sha" sometimes is not the commit that actually gets merged with the - # pull request head commit for CI test. - # See: - # - https://github.com/actions/checkout/issues/27 - # - https://github.com/actions/checkout/issues/237 - GITHUB_PULL_REQUEST_BASE_SHA: ${{ github.event.pull_request.base.sha }} - # Bump Node memory limit - NODE_OPTIONS: "--max-old-space-size=4096" - -jobs: - binary-size: - name: Binary Size - if: (github.event_name == 'push' || !(github.event.pull_request.head.repo.fork)) && (github.actor != 'dependabot[bot]') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - uses: 'google-github-actions/auth@v0' - with: - credentials_json: '${{ secrets.GCP_SA_KEY }}' - - uses: google-github-actions/setup-gcloud@v2 - - run: yarn install - - run: yarn build - - name: Run health-metrics/binary-size test - run: yarn size-report - modular-export-size: - name: Binary Size For Modular Exports - if: (github.event_name == 'push' || !(github.event.pull_request.head.repo.fork)) && (github.actor != 'dependabot[bot]') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - uses: 'google-github-actions/auth@v0' - with: - credentials_json: '${{ secrets.GCP_SA_KEY }}' - - uses: google-github-actions/setup-gcloud@v2 - - run: yarn install - - run: yarn build - - name: Run health-metrics/modular-exports-binary-size test - run: yarn modular-export-size-report - # TODO(yifany): Enable startup times testing on CI. diff --git a/.github/workflows/health-metrics-release.yml b/.github/workflows/health-metrics-release.yml deleted file mode 100644 index 686c9f51496..00000000000 --- a/.github/workflows/health-metrics-release.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Health Metrics - -on: - push: - tags: ['**'] - -jobs: - release-diffing: - name: Release Diffing - runs-on: ubuntu-latest - steps: - - uses: 'google-github-actions/auth@v0' - with: - credentials_json: '${{ secrets.GCP_SA_KEY }}' - - uses: google-github-actions/setup-gcloud@v2 - - uses: FirebaseExtended/github-actions/health-metrics/release-diffing@master - with: - repo: ${{ github.repository }} - ref: ${{ github.ref }} - commit: ${{ github.sha }} diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index dabab3befda..a3c8817887a 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -27,7 +27,7 @@ env: CHROME_VERSION_MISMATCH_MESSAGE: "The Chrome version doesn't match the previously validated version. Consider updating CHROME_VALIDATED_VERSION in the GitHub workflow if tests pass, or rollback the installed Chrome version if tests fail." artifactRetentionDays: 14 # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" + NODE_OPTIONS: "--max_old_space_size=8192" jobs: build: @@ -92,7 +92,7 @@ jobs: - name: Run unit tests # Ignore auth and firestore since they're handled in their own separate jobs. run: | - xvfb-run yarn lerna run --ignore '{firebase-messaging-integration-test,@firebase/auth*,@firebase/firestore*,firebase-firestore-integration-test}' test:ci + yarn lerna run --ignore '{firebase-messaging-integration-test,@firebase/auth*,@firebase/firestore*,firebase-firestore-integration-test}' test:ci node scripts/print_test_logs.js env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} @@ -178,7 +178,7 @@ jobs: run: echo "FIREBASE_CI_TEST_START_TIME=$(date +%s)" >> $GITHUB_ENV - name: Run unit tests run: | - xvfb-run yarn lerna run test:ci --scope '@firebase/firestore*' + yarn lerna run test:ci --scope '@firebase/firestore' --stream --concurrency 1 node scripts/print_test_logs.js env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} @@ -218,7 +218,7 @@ jobs: - run: yarn - run: yarn build:${{ matrix.persistence }} working-directory: integration/firestore - - run: xvfb-run yarn karma:singlerun + - run: yarn karma:singlerun working-directory: integration/firestore env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} diff --git a/.github/workflows/test-changed-auth.yml b/.github/workflows/test-changed-auth.yml deleted file mode 100644 index b72c7cd9e2d..00000000000 --- a/.github/workflows/test-changed-auth.yml +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test Auth - -on: pull_request - -env: - # make chromedriver detect installed Chrome version and download the corresponding driver - DETECT_CHROMEDRIVER_VERSION: true - # The default behavior of chromedriver uses the older Chrome download URLs. We need to override - # the behavior to use the new URLs. - CHROMEDRIVER_CDNURL: https://googlechromelabs.github.io/ - CHROMEDRIVER_CDNBINARIESURL: https://storage.googleapis.com/chrome-for-testing-public - CHROME_VALIDATED_VERSION: linux-120.0.6099.71 - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - test-chrome: - name: Test Auth on Chrome and Node If Changed - runs-on: ubuntu-latest - steps: - # install Chrome first, so the correct version of webdriver can be installed by chromedriver - # when setting up the repo - # - # Note: we only need to check the chrome version change in one job as the warning annotation - # is appended to the entire workflow results, not just this job's results. - - name: install Chrome stable - env: - CHROME_VERSION_MISMATCH_MESSAGE: "The Chrome version doesn't match the previously validated version. Consider updating CHROME_VALIDATED_VERSION in the GitHub workflow if tests pass." - run: | - npx @puppeteer/browsers install chrome@stable - chromeVersionString=$(ls chrome) - if [ "$CHROME_VALIDATED_VERSION" != "$chromeVersionString" ]; then - echo "::warning ::The Chrome version doesn't match the previously validated version. Consider updating CHROME_VALIDATED_VERSION in the GitHub workflow if tests pass." - echo "::warning ::Previously validated version: ${CHROME_VALIDATED_VERSION} vs. Installed version: $chromeVersionString" - echo "CHROME_VERSION_NOTES=$CHROME_VERSION_MISMATCH_MESSAGE" >> "$GITHUB_ENV" - fi - - name: Test Evn TEMP - run: | - echo $CHROME_VERSION_NOTES=$CHROME_VERSION_MISMATCH_MESSAGE - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed auth - - name: Run tests on changed packages - run: xvfb-run yarn test:changed auth - test-firefox: - name: Test Auth on Firefox If Changed - - runs-on: ubuntu-latest - - steps: - - name: install Firefox stable - run: npx @puppeteer/browsers install firefox@stable - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed auth - - name: Run tests on auth changed packages - run: xvfb-run yarn test:changed auth - env: - BROWSERS: 'Firefox' - - test-webkit: - name: Test Auth on Webkit if Changed - runs-on: macos-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - npx playwright install webkit - - name: build - run: yarn build:changed auth - - name: Run tests on changed packages - run: yarn test:changed auth - env: - BROWSERS: 'WebkitHeadless' \ No newline at end of file diff --git a/.github/workflows/test-changed-fcm-integration.yml b/.github/workflows/test-changed-fcm-integration.yml deleted file mode 100644 index ff6023274a4..00000000000 --- a/.github/workflows/test-changed-fcm-integration.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test FCM integration - -on: pull_request - -env: - # make chromedriver detect installed Chrome version and download the corresponding driver - DETECT_CHROMEDRIVER_VERSION: true - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - test: - name: Test FCM integration If Changed - runs-on: ubuntu-latest - - steps: - # install Chrome first, so the correct version of webdriver can be installed by chromedriver when setting up the repo - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed fcm-integration - - name: Run tests if FCM or its dependencies has changed - run: xvfb-run yarn test:changed fcm-integration diff --git a/.github/workflows/test-changed-firestore-integration.yml b/.github/workflows/test-changed-firestore-integration.yml deleted file mode 100644 index d9269a6d1ac..00000000000 --- a/.github/workflows/test-changed-firestore-integration.yml +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test Firestore Integration - -on: pull_request - -env: - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - test: - name: Test Firestore Integration If Changed - runs-on: ubuntu-latest - env: - run_terraform_steps: ${{ secrets.JSSDK_ACTIONS_SA_KEY != '' }} - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - uses: 'google-github-actions/auth@v0' - if: ${{ fromJSON(env.run_terraform_steps) }} - with: - credentials_json: '${{ secrets.JSSDK_ACTIONS_SA_KEY }}' - - # create composite indexes with Terraform - - name: Setup Terraform - if: ${{ fromJSON(env.run_terraform_steps) }} - uses: hashicorp/setup-terraform@v2 - - name: Terraform Init - if: ${{ fromJSON(env.run_terraform_steps) }} - run: | - cp config/ci.config.json config/project.json - cd packages/firestore - terraform init - continue-on-error: true - - name: Terraform Apply - if: github.event_name == 'pull_request' && fromJSON(env.run_terraform_steps) - run: | - cd packages/firestore - - # Define a temporary file, redirect both stdout and stderr to it - output_file=$(mktemp) - if ! terraform apply -var-file=../../config/project.json -auto-approve > "$output_file" 2>&1 ; then - cat "$output_file" - if cat "$output_file" | grep -q "index already exists"; then - echo "===================================================================================" - echo -e "\e[93m\e[1mTerraform apply failed due to index already exists; We can safely ignore this error.\e[0m" - echo "===================================================================================" - fi - exit 1 - fi - rm -f "$output_file" - continue-on-error: true - - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Test setup and yarn install - run: yarn - - name: build - run: yarn build:changed firestore-integration - - name: Run tests if firestore or its dependencies has changed - run: yarn test:changed firestore-integration diff --git a/.github/workflows/test-changed-firestore.yml b/.github/workflows/test-changed-firestore.yml deleted file mode 100644 index 46d36059d14..00000000000 --- a/.github/workflows/test-changed-firestore.yml +++ /dev/null @@ -1,290 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test Firestore - -on: - workflow_dispatch: - pull_request: - -env: - artifactRetentionDays: 14 - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - build: - name: Build Firestore - - runs-on: ubuntu-latest - outputs: - changed: ${{ steps.set-output.outputs.CHANGED }} - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - id: build - run: | - set -o pipefail - yarn build:changed firestore | tee ${{ runner.temp }}/yarn.log.txt - continue-on-error: false - - name: Check if Firestore is changed - id: check-changed - run: egrep "Skipping all" ${{ runner.temp }}/yarn.log.txt - # Continue when "Skipping all" is not found - continue-on-error: true - - name: set output - # This means "Skipping all" was not found - if: steps.check-changed.outcome != 'success' - id: set-output - run: echo "CHANGED=true" >> "$GITHUB_OUTPUT"; - - name: Archive build - if: ${{ !cancelled() && steps.build.outcome == 'success' && steps.check-changed.outcome != 'success' }} - run: | - tar -cf build.tar --exclude=.git . - gzip build.tar - - name: Upload build archive - if: ${{ !cancelled() && steps.build.outcome == 'success' && steps.check-changed.outcome != 'success' }} - uses: actions/upload-artifact@v4 - with: - name: build.tar.gz - path: build.tar.gz - retention-days: ${{ env.artifactRetentionDays }} - - compat-test-chrome: - name: Test Firestore Compatible - runs-on: ubuntu-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Test setup and yarn install - run: cp config/ci.config.json config/project.json - - name: Run compat tests - run: cd packages/firestore-compat && yarn run test:ci - - test-chrome: - name: Test Firestore - strategy: - matrix: - test-name: ["test:browser", "test:travis", "test:lite:browser", "test:browser:prod:nameddb", "test:lite:browser:nameddb"] - runs-on: ubuntu-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Test setup and yarn install - run: cp config/ci.config.json config/project.json - - name: Run tests - run: cd packages/firestore && yarn run ${{ matrix.test-name }} - env: - EXPERIMENTAL_MODE: true - - test-firestore-nightly-with-chrome: - name: Test Nightly Firestore with Chrome - strategy: - matrix: - test-name: ["test:browser:nightly"] - runs-on: ubuntu-latest - needs: build - if: ${{ github.event_name != 'pull_request' }} - steps: - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Test setup against nightly Firestore - env: - INTEG_TESTS_GOOGLE_SERVICES: ${{ secrets.FIRESTORE_SDK_NIGHTLY_PROJECT_JSON }} - run: | - echo $INTEG_TESTS_GOOGLE_SERVICES > config/project.json - - name: Run tests - run: cd packages/firestore && yarn run ${{ matrix.test-name }} - env: - EXPERIMENTAL_MODE: true - - - compat-test-firefox: - name: Test Firestore Compatible on Firefox - runs-on: ubuntu-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: install Firefox stable - run: npx @puppeteer/browsers install firefox@stable - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Test setup and yarn install - run: cp config/ci.config.json config/project.json - - name: Run compat tests - run: cd packages/firestore-compat && xvfb-run yarn run test:ci - env: - BROWSERS: 'Firefox' - - test-firefox: - name: Test Firestore on Firefox - strategy: - matrix: - test-name: ["test:browser", "test:travis", "test:lite:browser", "test:browser:prod:nameddb", "test:lite:browser:nameddb"] - runs-on: ubuntu-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: install Firefox stable - run: npx @puppeteer/browsers install firefox@stable - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: cp config/ci.config.json config/project.json - - name: Run tests - run: cd packages/firestore && xvfb-run yarn run ${{ matrix.test-name }} - env: - BROWSERS: 'Firefox' - EXPERIMENTAL_MODE: true - - compat-test-webkit: - name: Test Firestore Compatible on Webkit - runs-on: macos-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Test setup - run: | - cp config/ci.config.json config/project.json - npx playwright install webkit - - name: Run compat tests - run: cd packages/firestore-compat && yarn run test:ci - env: - BROWSERS: 'WebkitHeadless' - - test-webkit: - name: Test Firestore on Webkit - strategy: - matrix: - # TODO (dlarocque): Add test:travis once the browser tests are isolated - # Exclude test:travis for now, since it includes node tests, which are failing for - # some reason. - test-name: ["test:browser", "test:lite:browser", "test:browser:prod:nameddb", "test:lite:browser:nameddb"] - runs-on: macos-latest - needs: build - if: ${{ needs.build.outputs.changed == 'true'}} - steps: - - name: Download build archive - uses: actions/download-artifact@v4 - with: - name: build.tar.gz - - name: Unzip build artifact - run: tar xf build.tar.gz - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup - run: | - cp config/ci.config.json config/project.json - npx playwright install webkit - - name: Run tests - run: cd packages/firestore && yarn run ${{ matrix.test-name }} - env: - BROWSERS: 'WebkitHeadless' - EXPERIMENTAL_MODE: true - # A job that fails if any required job in the test matrix fails, - # to be used as a required check for merging. - check-required-tests: - runs-on: ubuntu-latest - if: always() - name: Check all required tests results - needs: [build, test-chrome, compat-test-chrome] - steps: - - name: Check test matrix - if: needs.build.result == 'failure' || needs.test-chrome.result == 'failure' || needs.compat-test-chrome.result == 'failure' - run: exit 1 \ No newline at end of file diff --git a/.github/workflows/test-changed-misc.yml b/.github/workflows/test-changed-misc.yml deleted file mode 100644 index ebcb2d1d366..00000000000 --- a/.github/workflows/test-changed-misc.yml +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test @firebase/rules-unit-testing - -on: pull_request - -env: - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - test: - name: Test Misc Packages If Changed - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed misc - - name: Run tests - run: yarn test:changed misc - env: - FIREBASE_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test-changed.yml b/.github/workflows/test-changed.yml deleted file mode 100644 index 948267aa9e7..00000000000 --- a/.github/workflows/test-changed.yml +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Test Modified Packages - -on: pull_request - -env: - # Bump Node memory limit - NODE_OPTIONS: "--max_old_space_size=4096" - -jobs: - test-chrome: - name: Test Packages With Changed Files in Chrome and Node - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # This makes Actions fetch all Git history so run-changed script can diff properly. - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Chrome stable - run: | - sudo apt-get update - sudo apt-get install google-chrome-stable - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed core - - name: Run tests on changed packages - run: xvfb-run yarn test:changed core - - test-firefox: - name: Test Packages With Changed Files in Firefox - runs-on: ubuntu-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: install Firefox stable - run: npx @puppeteer/browsers install firefox@stable - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - - name: build - run: yarn build:changed core - - name: Run tests on changed packages - run: xvfb-run yarn test:changed core - env: - BROWSERS: 'Firefox' - - - test-webkit: - name: Test Packages With Changed Files in Webkit - runs-on: macos-latest - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Set up Node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Test setup and yarn install - run: | - cp config/ci.config.json config/project.json - yarn - npx playwright install webkit - - name: build - run: yarn build:changed core - - name: Run tests on changed packages - run: yarn test:changed core - env: - BROWSERS: 'WebkitHeadless' \ No newline at end of file diff --git a/.github/workflows/update-api-reports.yml b/.github/workflows/update-api-reports.yml deleted file mode 100644 index c961889de98..00000000000 --- a/.github/workflows/update-api-reports.yml +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2023 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name: Update API reports - -on: pull_request - -jobs: - update_api_reports: - name: Update API reports - runs-on: ubuntu-latest - - permissions: - contents: write - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - # checkout HEAD commit instead of merge commit - ref: ${{ github.event.pull_request.head.ref }} - token: ${{ github.token }} - - name: Set up node (20) - uses: actions/setup-node@v4 - with: - node-version: 22.10.0 - - name: Yarn install - run: yarn - - name: Update API reports - # API reports are generated as part of the build - run: yarn build - id: update-api-reports - - name: Commit & Push changes - uses: EndBug/add-and-commit@v9 - with: - add: 'common/api-review/*' - message: 'Update API reports' - default_author: github_actor \ No newline at end of file diff --git a/packages/firestore/karma.conf.js b/packages/firestore/karma.conf.js index 70c5ffef546..7b891dcb86b 100644 --- a/packages/firestore/karma.conf.js +++ b/packages/firestore/karma.conf.js @@ -24,6 +24,9 @@ module.exports = function (config) { browsers: getTestBrowsers(argv), // files to load into karma files: getTestFiles(argv), + browserDisconnectTimeout: 5000, + + concurrency: 1, preprocessors: { 'test/**/*.ts': ['webpack', 'sourcemap'] diff --git a/packages/firestore/package.json b/packages/firestore/package.json index b16c447f957..e1f7adefb7f 100644 --- a/packages/firestore/package.json +++ b/packages/firestore/package.json @@ -28,7 +28,7 @@ "test:lite:browser:nameddb": "karma start --lite --databaseId=test-db", "test:lite:browser:debug": "karma start --browsers=Chrome --lite --auto-watch", "test": "run-s --npm-path npm lint test:all", - "test:ci": "node ../../scripts/run_tests_in_ci.js -s test:all:ci", + "test:ci": "run-s --npm-path npm test:browser test:travis test:lite:browser test:browser:prod:nameddb test:lite:browser:nameddb", "test:all:ci": "run-s --npm-path npm test:browser test:travis test:lite:browser test:browser:prod:nameddb test:lite:browser:nameddb", "test:all": "run-p --npm-path npm test:browser test:lite:browser test:travis test:minified test:browser:prod:nameddb test:lite:browser:nameddb", "test:browser": "karma start", diff --git a/packages/firestore/src/local/indexeddb_remote_document_cache.ts b/packages/firestore/src/local/indexeddb_remote_document_cache.ts index b3d4658d53d..9b23c64fcf5 100644 --- a/packages/firestore/src/local/indexeddb_remote_document_cache.ts +++ b/packages/firestore/src/local/indexeddb_remote_document_cache.ts @@ -655,5 +655,9 @@ export function dbKeyComparator(l: DocumentKey, r: DocumentKey): number { return cmp; } + // TODO(b/329441702): Document IDs should be sorted by UTF-8 encoded byte + // order, but IndexedDB sorts strings lexicographically. Document ID + // comparison here still relies on primitive comparison to avoid mismatches + // observed in snapshot listeners with Unicode characters in documentIds return primitiveComparator(left[left.length - 1], right[right.length - 1]); } diff --git a/packages/firestore/src/model/path.ts b/packages/firestore/src/model/path.ts index 64cb0376a0e..c375b4c56d2 100644 --- a/packages/firestore/src/model/path.ts +++ b/packages/firestore/src/model/path.ts @@ -19,6 +19,7 @@ import { Integer } from '@firebase/webchannel-wrapper/bloom-blob'; import { debugAssert, fail } from '../util/assert'; import { Code, FirestoreError } from '../util/error'; +import { compareUtf8Strings, primitiveComparator } from '../util/misc'; export const DOCUMENT_KEY_NAME = '__name__'; @@ -181,7 +182,7 @@ abstract class BasePath> { return comparison; } } - return Math.sign(p1.length - p2.length); + return primitiveComparator(p1.length, p2.length); } private static compareSegments(lhs: string, rhs: string): number { @@ -201,13 +202,7 @@ abstract class BasePath> { ); } else { // both non-numeric - if (lhs < rhs) { - return -1; - } - if (lhs > rhs) { - return 1; - } - return 0; + return compareUtf8Strings(lhs, rhs); } } diff --git a/packages/firestore/src/model/values.ts b/packages/firestore/src/model/values.ts index 1977767515e..30d8688b776 100644 --- a/packages/firestore/src/model/values.ts +++ b/packages/firestore/src/model/values.ts @@ -25,7 +25,11 @@ import { Value } from '../protos/firestore_proto_api'; import { fail } from '../util/assert'; -import { arrayEquals, primitiveComparator } from '../util/misc'; +import { + arrayEquals, + compareUtf8Strings, + primitiveComparator +} from '../util/misc'; import { forEach, objectSize } from '../util/obj'; import { isNegativeZero } from '../util/types'; @@ -251,7 +255,7 @@ export function valueCompare(left: Value, right: Value): number { getLocalWriteTime(right) ); case TypeOrder.StringValue: - return primitiveComparator(left.stringValue!, right.stringValue!); + return compareUtf8Strings(left.stringValue!, right.stringValue!); case TypeOrder.BlobValue: return compareBlobs(left.bytesValue!, right.bytesValue!); case TypeOrder.RefValue: @@ -400,7 +404,7 @@ function compareMaps(left: MapValue, right: MapValue): number { rightKeys.sort(); for (let i = 0; i < leftKeys.length && i < rightKeys.length; ++i) { - const keyCompare = primitiveComparator(leftKeys[i], rightKeys[i]); + const keyCompare = compareUtf8Strings(leftKeys[i], rightKeys[i]); if (keyCompare !== 0) { return keyCompare; } diff --git a/packages/firestore/src/util/misc.ts b/packages/firestore/src/util/misc.ts index acaff77abb6..42fa568835b 100644 --- a/packages/firestore/src/util/misc.ts +++ b/packages/firestore/src/util/misc.ts @@ -16,6 +16,7 @@ */ import { randomBytes } from '../platform/random_bytes'; +import { newTextEncoder } from '../platform/text_serializer'; import { debugAssert } from './assert'; @@ -74,6 +75,67 @@ export interface Equatable { isEqual(other: T): boolean; } +/** Compare strings in UTF-8 encoded byte order */ +export function compareUtf8Strings(left: string, right: string): number { + let i = 0; + while (i < left.length && i < right.length) { + const leftCodePoint = left.codePointAt(i)!; + const rightCodePoint = right.codePointAt(i)!; + + if (leftCodePoint !== rightCodePoint) { + if (leftCodePoint < 128 && rightCodePoint < 128) { + // ASCII comparison + return primitiveComparator(leftCodePoint, rightCodePoint); + } else { + // Lazy instantiate TextEncoder + const encoder = newTextEncoder(); + + // UTF-8 encode the character at index i for byte comparison. + const leftBytes = encoder.encode(getUtf8SafeSubstring(left, i)); + const rightBytes = encoder.encode(getUtf8SafeSubstring(right, i)); + + const comp = compareByteArrays(leftBytes, rightBytes); + if (comp !== 0) { + return comp; + } else { + // EXTREMELY RARE CASE: Code points differ, but their UTF-8 byte + // representations are identical. This can happen with malformed input + // (invalid surrogate pairs). The backend also actively prevents invalid + // surrogates as INVALID_ARGUMENT errors, so we almost never receive + // invalid strings from backend. + // Fallback to code point comparison for graceful handling. + return primitiveComparator(leftCodePoint, rightCodePoint); + } + } + } + // Increment by 2 for surrogate pairs, 1 otherwise + i += leftCodePoint > 0xffff ? 2 : 1; + } + + // Compare lengths if all characters are equal + return primitiveComparator(left.length, right.length); +} + +function getUtf8SafeSubstring(str: string, index: number): string { + const firstCodePoint = str.codePointAt(index)!; + if (firstCodePoint > 0xffff) { + // It's a surrogate pair, return the whole pair + return str.substring(index, index + 2); + } else { + // It's a single code point, return it + return str.substring(index, index + 1); + } +} + +function compareByteArrays(left: Uint8Array, right: Uint8Array): number { + for (let i = 0; i < left.length && i < right.length; ++i) { + if (left[i] !== right[i]) { + return primitiveComparator(left[i], right[i]); + } + } + return primitiveComparator(left.length, right.length); +} + export interface Iterable { forEach: (cb: (v: V) => void) => void; } diff --git a/packages/firestore/test/integration/api/database.test.ts b/packages/firestore/test/integration/api/database.test.ts index 1cda49d9229..8cbe99b3cd9 100644 --- a/packages/firestore/test/integration/api/database.test.ts +++ b/packages/firestore/test/integration/api/database.test.ts @@ -2424,4 +2424,243 @@ apiDescribe('Database', persistence => { }); }); }); + + describe('Sort unicode strings', () => { + const expectedDocs = [ + 'b', + 'a', + 'h', + 'i', + 'c', + 'f', + 'e', + 'd', + 'g', + 'k', + 'j' + ]; + it('snapshot listener sorts unicode strings the same as server', async () => { + const testDocs = { + 'a': { value: 'Łukasiewicz' }, + 'b': { value: 'SierpiΕ„ski' }, + 'c': { value: '岩澀' }, + 'd': { value: 'πŸ„Ÿ' }, + 'e': { value: 'οΌ°' }, + 'f': { value: 'οΈ’' }, + 'g': { value: '🐡' }, + 'h': { value: 'δ½ ε₯½' }, + 'i': { value: 'δ½ ι‘₯' }, + 'j': { value: '😁' }, + 'k': { value: 'πŸ˜€' } + }; + + return withTestCollection(persistence, testDocs, async collectionRef => { + const orderedQuery = query(collectionRef, orderBy('value')); + + const getSnapshot = await getDocsFromServer(orderedQuery); + expect(toIds(getSnapshot)).to.deep.equal(expectedDocs); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + + await checkOnlineAndOfflineResultsMatch(orderedQuery, ...expectedDocs); + }); + }); + + it('snapshot listener sorts unicode strings in array the same as server', async () => { + const testDocs = { + 'a': { value: ['Łukasiewicz'] }, + 'b': { value: ['SierpiΕ„ski'] }, + 'c': { value: ['岩澀'] }, + 'd': { value: ['πŸ„Ÿ'] }, + 'e': { value: ['οΌ°'] }, + 'f': { value: ['οΈ’'] }, + 'g': { value: ['🐡'] }, + 'h': { value: ['δ½ ε₯½'] }, + 'i': { value: ['δ½ ι‘₯'] }, + 'j': { value: ['😁'] }, + 'k': { value: ['πŸ˜€'] } + }; + + return withTestCollection(persistence, testDocs, async collectionRef => { + const orderedQuery = query(collectionRef, orderBy('value')); + + const getSnapshot = await getDocsFromServer(orderedQuery); + expect(toIds(getSnapshot)).to.deep.equal(expectedDocs); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + + await checkOnlineAndOfflineResultsMatch(orderedQuery, ...expectedDocs); + }); + }); + + it('snapshot listener sorts unicode strings in map the same as server', async () => { + const testDocs = { + 'a': { value: { foo: 'Łukasiewicz' } }, + 'b': { value: { foo: 'SierpiΕ„ski' } }, + 'c': { value: { foo: '岩澀' } }, + 'd': { value: { foo: 'πŸ„Ÿ' } }, + 'e': { value: { foo: 'οΌ°' } }, + 'f': { value: { foo: 'οΈ’' } }, + 'g': { value: { foo: '🐡' } }, + 'h': { value: { foo: 'δ½ ε₯½' } }, + 'i': { value: { foo: 'δ½ ι‘₯' } }, + 'j': { value: { foo: '😁' } }, + 'k': { value: { foo: 'πŸ˜€' } } + }; + + return withTestCollection(persistence, testDocs, async collectionRef => { + const orderedQuery = query(collectionRef, orderBy('value')); + + const getSnapshot = await getDocsFromServer(orderedQuery); + expect(toIds(getSnapshot)).to.deep.equal(expectedDocs); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + + await checkOnlineAndOfflineResultsMatch(orderedQuery, ...expectedDocs); + }); + }); + + it('snapshot listener sorts unicode strings in map key the same as server', async () => { + const testDocs = { + 'a': { value: { 'Łukasiewicz': true } }, + 'b': { value: { 'SierpiΕ„ski': true } }, + 'c': { value: { '岩澀': true } }, + 'd': { value: { 'πŸ„Ÿ': true } }, + 'e': { value: { 'οΌ°': true } }, + 'f': { value: { 'οΈ’': true } }, + 'g': { value: { '🐡': true } }, + 'h': { value: { 'δ½ ε₯½': true } }, + 'i': { value: { 'δ½ ι‘₯': true } }, + 'j': { value: { '😁': true } }, + 'k': { value: { 'πŸ˜€': true } } + }; + + return withTestCollection(persistence, testDocs, async collectionRef => { + const orderedQuery = query(collectionRef, orderBy('value')); + + const getSnapshot = await getDocsFromServer(orderedQuery); + expect(toIds(getSnapshot)).to.deep.equal(expectedDocs); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + + await checkOnlineAndOfflineResultsMatch(orderedQuery, ...expectedDocs); + }); + }); + + it('snapshot listener sorts unicode strings in document key the same as server', async () => { + const testDocs = { + 'Łukasiewicz': { value: true }, + 'SierpiΕ„ski': { value: true }, + '岩澀': { value: true }, + 'πŸ„Ÿ': { value: true }, + 'οΌ°': { value: true }, + 'οΈ’': { value: true }, + '🐡': { value: true }, + 'δ½ ε₯½': { value: true }, + 'δ½ ι‘₯': { value: true }, + '😁': { value: true }, + 'πŸ˜€': { value: true } + }; + + return withTestCollection(persistence, testDocs, async collectionRef => { + const orderedQuery = query(collectionRef, orderBy(documentId())); + + const getSnapshot = await getDocsFromServer(orderedQuery); + const expectedDocs = [ + 'SierpiΕ„ski', + 'Łukasiewicz', + 'δ½ ε₯½', + 'δ½ ι‘₯', + '岩澀', + 'οΈ’', + 'οΌ°', + 'πŸ„Ÿ', + '🐡', + 'πŸ˜€', + '😁' + ]; + expect(toIds(getSnapshot)).to.deep.equal(expectedDocs); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + + await checkOnlineAndOfflineResultsMatch(orderedQuery, ...expectedDocs); + }); + }); + + // eslint-disable-next-line no-restricted-properties + (persistence.storage === 'indexeddb' ? it.skip : it)( + 'snapshot listener sorts unicode strings in document key the same as server with persistence', + async () => { + const testDocs = { + 'Łukasiewicz': { value: true }, + 'SierpiΕ„ski': { value: true }, + '岩澀': { value: true }, + 'πŸ„Ÿ': { value: true }, + 'οΌ°': { value: true }, + 'οΈ’': { value: true }, + '🐡': { value: true }, + 'δ½ ε₯½': { value: true }, + 'δ½ ι‘₯': { value: true }, + '😁': { value: true }, + 'πŸ˜€': { value: true } + }; + + return withTestCollection( + persistence, + testDocs, + async collectionRef => { + const orderedQuery = query(collectionRef, orderBy('value')); + + const getSnapshot = await getDocsFromServer(orderedQuery); + expect(toIds(getSnapshot)).to.deep.equal([ + 'SierpiΕ„ski', + 'Łukasiewicz', + 'δ½ ε₯½', + 'δ½ ι‘₯', + '岩澀', + 'οΈ’', + 'οΌ°', + 'πŸ„Ÿ', + '🐡', + 'πŸ˜€', + '😁' + ]); + + const storeEvent = new EventsAccumulator(); + const unsubscribe = onSnapshot(orderedQuery, storeEvent.storeEvent); + const watchSnapshot = await storeEvent.awaitEvent(); + // TODO: IndexedDB sorts string lexicographically, and misses the document with ID 'πŸ„Ÿ','🐡' + expect(toIds(watchSnapshot)).to.deep.equal(toIds(getSnapshot)); + + unsubscribe(); + } + ); + } + ); + }); }); diff --git a/packages/firestore/test/unit/util/misc.test.ts b/packages/firestore/test/unit/util/misc.test.ts index cc75419c026..0829259a8e8 100644 --- a/packages/firestore/test/unit/util/misc.test.ts +++ b/packages/firestore/test/unit/util/misc.test.ts @@ -18,7 +18,7 @@ import { expect } from 'chai'; import { debugCast } from '../../../src/util/assert'; -import { immediateSuccessor } from '../../../src/util/misc'; +import { compareUtf8Strings, immediateSuccessor } from '../../../src/util/misc'; import { mask } from '../../util/helpers'; describe('immediateSuccessor', () => { @@ -53,3 +53,227 @@ describe('FieldMask', () => { ); }); }); + +describe('CompareUtf8Strings', () => { + it('compareUtf8Strings should return correct results', () => { + const errors = []; + const seed = Math.floor(Math.random() * Number.MAX_SAFE_INTEGER); + let passCount = 0; + const stringGenerator = new StringGenerator(new Random(seed), 0.33, 20); + const stringPairGenerator = new StringPairGenerator(stringGenerator); + + for (let i = 0; i < 1000000 && errors.length < 10; i++) { + const { s1, s2 } = stringPairGenerator.next(); + + const actual = compareUtf8Strings(s1, s2); + const expected = Buffer.from(s1, 'utf8').compare(Buffer.from(s2, 'utf8')); + + if (actual === expected) { + passCount++; + } else { + errors.push( + `compareUtf8Strings(s1="${s1}", s2="${s2}") returned ${actual}, ` + + `but expected ${expected} (i=${i}, s1.length=${s1.length}, s2.length=${s2.length})` + ); + } + } + + if (errors.length > 0) { + console.error( + `${errors.length} test cases failed, ${passCount} test cases passed, seed=${seed};` + ); + errors.forEach((error, index) => + console.error(`errors[${index}]: ${error}`) + ); + throw new Error('Test failed'); + } + }).timeout(20000); + + class StringPair { + constructor(readonly s1: string, readonly s2: string) {} + } + + class StringPairGenerator { + constructor(private stringGenerator: StringGenerator) {} + + next(): StringPair { + const prefix = this.stringGenerator.next(); + const s1 = prefix + this.stringGenerator.next(); + const s2 = prefix + this.stringGenerator.next(); + return new StringPair(s1, s2); + } + } + + class StringGenerator { + private static readonly DEFAULT_SURROGATE_PAIR_PROBABILITY = 0.33; + private static readonly DEFAULT_MAX_LENGTH = 20; + + // Pseudo-random number generator. Seed can be set for repeatable tests. + private readonly rnd: Random; + private readonly surrogatePairProbability: number; + private readonly maxLength: number; + + constructor(seed: number); + constructor( + rnd: Random, + surrogatePairProbability: number, + maxLength: number + ); + constructor( + seedOrRnd: number | Random, + surrogatePairProbability?: number, + maxLength?: number + ) { + if (typeof seedOrRnd === 'number') { + this.rnd = new Random(seedOrRnd); + this.surrogatePairProbability = + StringGenerator.DEFAULT_SURROGATE_PAIR_PROBABILITY; + this.maxLength = StringGenerator.DEFAULT_MAX_LENGTH; + } else { + this.rnd = seedOrRnd; + this.surrogatePairProbability = StringGenerator.validateProbability( + surrogatePairProbability! + ); + this.maxLength = StringGenerator.validateLength(maxLength!); + } + } + + private static validateProbability(probability: number): number { + if (!Number.isFinite(probability)) { + throw new Error( + `invalid surrogate pair probability: ${probability} (must be between 0.0 and 1.0, inclusive)` + ); + } else if (probability < 0.0) { + throw new Error( + `invalid surrogate pair probability: ${probability} (must be greater than or equal to zero)` + ); + } else if (probability > 1.0) { + throw new Error( + `invalid surrogate pair probability: ${probability} (must be less than or equal to 1)` + ); + } + return probability; + } + + private static validateLength(length: number): number { + if (length < 0) { + throw new Error( + `invalid maximum string length: ${length} (must be greater than or equal to zero)` + ); + } + return length; + } + + next(): string { + const length = this.rnd.nextInt(this.maxLength + 1); + const sb = new StringBuilder(); + while (sb.length() < length) { + const codePoint = this.nextCodePoint(); + sb.appendCodePoint(codePoint); + } + return sb.toString(); + } + + private isNextSurrogatePair(): boolean { + return StringGenerator.nextBoolean( + this.rnd, + this.surrogatePairProbability + ); + } + + private static nextBoolean(rnd: Random, probability: number): boolean { + if (probability === 0.0) { + return false; + } else if (probability === 1.0) { + return true; + } else { + return rnd.nextFloat() < probability; + } + } + + private nextCodePoint(): number { + if (this.isNextSurrogatePair()) { + return this.nextSurrogateCodePoint(); + } else { + return this.nextNonSurrogateCodePoint(); + } + } + + private nextSurrogateCodePoint(): number { + const highSurrogateMin = 0xd800; + const highSurrogateMax = 0xdbff; + const lowSurrogateMin = 0xdc00; + const lowSurrogateMax = 0xdfff; + + const highSurrogate = this.nextCodePointRange( + highSurrogateMin, + highSurrogateMax + ); + const lowSurrogate = this.nextCodePointRange( + lowSurrogateMin, + lowSurrogateMax + ); + + return ( + (highSurrogate - 0xd800) * 0x400 + (lowSurrogate - 0xdc00) + 0x10000 + ); + } + + private nextNonSurrogateCodePoint(): number { + let codePoint; + do { + codePoint = this.nextCodePointRange(0, 0xffff); // BMP range + } while (codePoint >= 0xd800 && codePoint <= 0xdfff); // Exclude surrogate range + + return codePoint; + } + + private nextCodePointRange(min: number, max: number): number { + const rangeSize = max - min + 1; + const offset = this.rnd.nextInt(rangeSize); + return min + offset; + } + } + + class Random { + private seed: number; + + constructor(seed: number) { + this.seed = seed; + } + + nextInt(max: number): number { + // Update the seed with pseudo-randomized numbers using a Linear Congruential Generator (LCG). + this.seed = (this.seed * 9301 + 49297) % 233280; + const rnd = this.seed / 233280; + return Math.floor(rnd * max); + } + + nextFloat(): number { + this.seed = (this.seed * 9301 + 49297) % 233280; + return this.seed / 233280; + } + } + + class StringBuilder { + private buffer: string[] = []; + + append(str: string): StringBuilder { + this.buffer.push(str); + return this; + } + + appendCodePoint(codePoint: number): StringBuilder { + this.buffer.push(String.fromCodePoint(codePoint)); + return this; + } + + toString(): string { + return this.buffer.join(''); + } + + length(): number { + return this.buffer.join('').length; + } + } +}); diff --git a/scripts/run_tests_in_ci.js b/scripts/run_tests_in_ci.js index 0cf6a7f5d3c..c52a466990e 100644 --- a/scripts/run_tests_in_ci.js +++ b/scripts/run_tests_in_ci.js @@ -58,6 +58,8 @@ const argv = yargs.options({ (async () => { const myPath = argv.d; let scriptName = argv.s; + console.log(argv.d); + console.log(argv.s); const dir = path.resolve(myPath); const { name } = require(`${dir}/package.json`); @@ -70,14 +72,15 @@ const argv = yargs.options({ } } } - const testProcess = spawn('yarn', ['--cwd', dir, scriptName]); + console.log('Starting: ' + name); + const testProcess = spawn('yarn', ['--cwd', dir, scriptName], { stdio: 'inherit' }); - testProcess.childProcess.stdout.on('data', data => { - testProcessOutput += '[stdout]' + data.toString(); - }); - testProcess.childProcess.stderr.on('data', data => { - testProcessOutput += '[stderr]' + data.toString(); - }); + // testProcess.childProcess.stdout.on('data', data => { + // console.log('[stdout]' + data.toString()); + // }); + // testProcess.childProcess.stderr.on('data', data => { + // console.log('[stderr]' + data.toString()); + // }); await testProcess; console.log('Success: ' + name); diff --git a/testoutput.txt b/testoutput.txt new file mode 100644 index 00000000000..843b534f8b5 --- /dev/null +++ b/testoutput.txt @@ -0,0 +1,11243 @@ +yarn run v1.22.22 +$ /Users/chholland/repos/fb-FRESH/node_modules/.bin/lerna run test:ci --scope '@firebase/firestore*' --stream +@firebase/firestore-types: $ node ../../scripts/run_tests_in_ci.js +@firebase/firestore: $ node ../../scripts/run_tests_in_ci.js -s test:all:ci +@firebase/firestore-types: . +@firebase/firestore-types: test +@firebase/firestore-types: Starting: @firebase/firestore-types +@firebase/firestore: . +@firebase/firestore: test:all:ci +@firebase/firestore: Starting: @firebase/firestore +@firebase/firestore-types: $ tsc +@firebase/firestore: $ run-s --npm-path npm test:browser test:travis test:lite:browser test:browser:prod:nameddb test:lite:browser:nameddb +@firebase/firestore: > @firebase/firestore@4.7.9 test:browser +@firebase/firestore: > karma start +@firebase/firestore: The 'BROWSER' environment variable is undefined. Defaulting to 'ChromeHeadless'. +@firebase/firestore: START: +@firebase/firestore: Webpack bundling... +@firebase/firestore-types: Success: @firebase/firestore-types +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/src/ 842 KiB 259 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/ 171 KiB +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/unit/ 109 KiB 102 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/integration/ 37.5 KiB 37 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/util/*.ts 19.7 KiB 7 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/*.ts 3.43 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/helpers.d.ts 2.23 KiB [compared for emit] +@firebase/firestore: + 2 assets +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/register.d.ts 616 bytes [compared for emit] +@firebase/firestore: assets by status 17.9 MiB [emitted] +@firebase/firestore: asset bootstrap.430169083.js 10.1 MiB [emitted] (name: bootstrap.430169083) 1 related asset +@firebase/firestore: asset bootstrap.2569352933.js 7.78 MiB [emitted] (name: bootstrap.2569352933) 1 related asset +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/*.ts 3.38 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/index.d.ts 2.57 KiB [compared for emit] +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/register.d.ts 829 bytes [compared for emit] +@firebase/firestore: webpack 5.97.1 compiled successfully in 8170 ms +@firebase/firestore: 04 03 2025 14:53:28.288:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/unit/bootstrap.ts +@firebase/firestore: 04 03 2025 14:53:28.296:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/integration/bootstrap.ts +@firebase/firestore: 04 03 2025 14:53:28.309:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/unit/bootstrap.ts +@firebase/firestore: 04 03 2025 14:53:28.316:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/integration/bootstrap.ts +@firebase/firestore: 04 03 2025 14:53:28.323:INFO [karma-server]: Karma v6.4.4 server started at http://localhost:8089/ +@firebase/firestore: 04 03 2025 14:53:28.324:INFO [launcher]: Launching browsers ChromeHeadless with concurrency 1 +@firebase/firestore: 04 03 2025 14:53:28.327:INFO [launcher]: Starting browser ChromeHeadless +@firebase/firestore: 04 03 2025 14:53:28.991:INFO [Chrome Headless 133.0.0.0 (Mac OS 10.15.7)]: Connected on socket 0sjVsPafVYHv_DwFAAAB with id 77278042 +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "(default)"' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "(default)"' +@firebase/firestore: βœ” token is not invalidated once the stream is healthy +@firebase/firestore: aggregateFieldEqual +@firebase/firestore: βœ” equates two equal aggregate fields +@firebase/firestore: βœ” differentiates two different aggregate fields +@firebase/firestore: Bytes +@firebase/firestore: βœ” constructs values from Base64 +@firebase/firestore: βœ” constructs values from Uint8Array +@firebase/firestore: βœ” works with instanceof checks +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: CollectionReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentSnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: Query +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: QuerySnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: SnapshotMetadata +@firebase/firestore: βœ” from DocumentSnapshot support equality checking with isEqual() +@firebase/firestore: βœ” from QuerySnapshot support equality checking with isEqual() +@firebase/firestore: Settings +@firebase/firestore: βœ” cannot use mutually exclusive settings together +@firebase/firestore: βœ” long polling should be in auto-detect mode by default +@firebase/firestore: βœ” long polling should be in force mode if force=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if force=false +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true and force=false +@firebase/firestore: βœ” long polling should be in force mode if autoDetect=false and force=true +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false and force=false +@firebase/firestore: βœ” timeoutSeconds is undefined by default +@firebase/firestore: βœ” timeoutSeconds minimum value is allowed +@firebase/firestore: βœ” timeoutSeconds maximum value is allowed +@firebase/firestore: βœ” timeoutSeconds typical value is allowed +@firebase/firestore: βœ” timeoutSeconds floating point value is allowed +@firebase/firestore: βœ” timeoutSeconds value one less than minimum throws +@firebase/firestore: βœ” timeoutSeconds value one more than maximum throws +@firebase/firestore: βœ” timeoutSeconds value of 0 throws +@firebase/firestore: βœ” timeoutSeconds value of -0 throws +@firebase/firestore: βœ” timeoutSeconds value of -1 throws +@firebase/firestore: βœ” timeoutSeconds value of -infinity throws +@firebase/firestore: βœ” timeoutSeconds value of +infinity throws +@firebase/firestore: βœ” timeoutSeconds value of NaN throws +@firebase/firestore: βœ” long polling autoDetect=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling autoDetect=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling autoDetect=null should be coerced to false +@firebase/firestore: βœ” long polling force=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling force=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling force=null should be coerced to false +@firebase/firestore: βœ” gets settings from useEmulator +@firebase/firestore: βœ” gets privateSettings from useEmulator +@firebase/firestore: WARN: '[2025-03-04T22:53:30.078Z] @firebase/firestore:', 'Firestore (11.3.0): Host has been set in both settings() and connectFirestoreEmulator(), emulator host will be used.' +@firebase/firestore: WARN: '[2025-03-04T22:53:30.078Z] @firebase/firestore:', 'Firestore (11.3.0): Host has been set in both settings() and connectFirestoreEmulator(), emulator host will be used.' +@firebase/firestore: βœ” prefers host from useEmulator to host from settings +@firebase/firestore: βœ” sets credentials based on mockUserToken object +@firebase/firestore: βœ” sets credentials based on mockUserToken string +@firebase/firestore: DocumentChange: +@firebase/firestore: βœ” positions are correct for additions +@firebase/firestore: βœ” positions are correct for deletions +@firebase/firestore: βœ” positions are correct for modifications +@firebase/firestore: βœ” positions are correct for sort order changes +@firebase/firestore: βœ” positions are correct for randomly chosen examples +@firebase/firestore: FieldPath +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: FieldValue +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” support instanceof checks +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: GeoPoint +@firebase/firestore: βœ” constructs values +@firebase/firestore: βœ” GeoPoints throw on invalid values +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: long_polling_options +@firebase/firestore: βœ” longPollingOptionsEqual() should return true for empty objects +@firebase/firestore: βœ” longPollingOptionsEqual() should return true if both objects have the same timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should return false if the objects have different timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should ignore properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: βœ” cloneLongPollingOptions() with an empty object should return an empty object +@firebase/firestore: βœ” cloneLongPollingOptions() should copy timeoutSeconds +@firebase/firestore: βœ” cloneLongPollingOptions() should not copy properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: Timestamp +@firebase/firestore: βœ” constructor should validate the "seconds" argument and store it +@firebase/firestore: βœ” constructor should validate the "nanoseconds" argument and store it +@firebase/firestore: βœ” fromDate +@firebase/firestore: βœ” valueOf +@firebase/firestore: βœ” arithmetic comparison of a Timestamp object to itself +@firebase/firestore: βœ” arithmetic comparison of equivalent, but distinct, Timestamp objects +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose nanoseconds differ +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose seconds differ +@firebase/firestore: βœ” arithmetic comparison of the smallest and largest Timestamp objects +@firebase/firestore: βœ” handles decimal inputs in fromMillis() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: EventManager +@firebase/firestore: βœ” handles many listenables per query +@firebase/firestore: βœ” handles unlisten on unknown listenable gracefully +@firebase/firestore: βœ” notifies listenables in the right order +@firebase/firestore: βœ” will forward onOnlineStateChange calls +@firebase/firestore: QueryListener +@firebase/firestore: βœ” raises collection events +@firebase/firestore: βœ” raises error event +@firebase/firestore: βœ” raises event for empty collection after sync +@firebase/firestore: βœ” raises 'hasPendingWrites' for pending mutation in initial snapshot +@firebase/firestore: βœ” doesn't raise 'hasPendingWrites' for committed mutation in initial snapshot +@firebase/firestore: βœ” does not raise events for metadata changes unless specified +@firebase/firestore: βœ” raises metadata events only when specified +@firebase/firestore: βœ” Metadata-only document changes are filtered out when includeMetadataChanges is false +@firebase/firestore: βœ” Suppresses write acknowledgment if Watch hasn't caught up +@firebase/firestore: βœ” Will wait for sync if online +@firebase/firestore: βœ” Will raise initial event when going offline +@firebase/firestore: βœ” Will raise initial event when going offline and there are no docs +@firebase/firestore: βœ” Will raise initial event when offline and there are no docs +@firebase/firestore: FieldFilter +@firebase/firestore: βœ” exposes field filter members +@firebase/firestore: CompositeFilter +@firebase/firestore: βœ” exposes composite filter members for AND filter +@firebase/firestore: βœ” exposes composite filter members for OR filter +@firebase/firestore: βœ” has working composite filter nested checks +@firebase/firestore: βœ” computes canonical id of flat conjunctions +@firebase/firestore: ListenSequence +@firebase/firestore: βœ” writes the new sequence number to the syncer +@firebase/firestore: βœ” bumps the next value based on notifications from the syncer +@firebase/firestore: Bound +@firebase/firestore: βœ” implements isEqual +@firebase/firestore: βœ” can get collection group +@firebase/firestore: βœ” matches based on document key +@firebase/firestore: βœ” matches correctly for shallow ancestor query +@firebase/firestore: βœ” matches primitive values for filters +@firebase/firestore: βœ” matches array-contains filters +@firebase/firestore: βœ” matches array-contains filters with object values +@firebase/firestore: βœ” matches IN filters +@firebase/firestore: βœ” matches IN filters with object values +@firebase/firestore: βœ” matches not-in filters +@firebase/firestore: βœ” matches not-in filters with object values +@firebase/firestore: βœ” matches array-contains-any filters +@firebase/firestore: βœ” matches array-contains-any filters with object values +@firebase/firestore: βœ” matches NaN for filters +@firebase/firestore: βœ” matches null for filters +@firebase/firestore: βœ” matches complex objects for filters +@firebase/firestore: βœ” doesn't crash querying unset fields +@firebase/firestore: βœ” doesn't remove complex objects with orderBy +@firebase/firestore: βœ” filters based on array value +@firebase/firestore: βœ” filters based on object value +@firebase/firestore: βœ” sorts documents in the correct order +@firebase/firestore: βœ” sorts documents using multiple fields +@firebase/firestore: βœ” sorts documents with descending too +@firebase/firestore: βœ” generates canonical ids +@firebase/firestore: βœ” canonical ids are stable +@firebase/firestore: βœ” generates the correct implicit order by's +@firebase/firestore: βœ” generates the correct implicit order by's for multiple inequality +@firebase/firestore: βœ” matchesAllDocuments() considers filters, orders and bounds +@firebase/firestore: βœ” matches composite queries +@firebase/firestore: βœ” matches composite queries with multiple inequality +@firebase/firestore: βœ” generates appropriate order-bys for aggregate and non-aggregate targets +@firebase/firestore: βœ” generated order-bys are not affected by previously memoized targets +@firebase/firestore: View +@firebase/firestore: βœ” adds documents based on query +@firebase/firestore: βœ” removes documents +@firebase/firestore: βœ” returns null if there are no changes +@firebase/firestore: βœ” does not return null for the first changes +@firebase/firestore: βœ” filters documents based on query with filter +@firebase/firestore: βœ” updates documents based on query with filter +@firebase/firestore: βœ” removes documents for query with limit +@firebase/firestore: βœ” doesn't report changes for documents beyond limit of query +@firebase/firestore: βœ” keeps track of limbo documents +@firebase/firestore: βœ” is marked from cache with limbo documents +@firebase/firestore: βœ” resumes queries without creating limbo documents +@firebase/firestore: βœ” returns needsRefill on delete limit query +@firebase/firestore: βœ” returns needsRefill on reorder in limit query +@firebase/firestore: βœ” doesn't need refill on reorder within limit +@firebase/firestore: βœ” doesn't need refill on reorder after limit query +@firebase/firestore: βœ” doesn't need refill for additions after the limit +@firebase/firestore: βœ” doesn't need refill for deletions when not near the limit +@firebase/firestore: βœ” handles applying irrelevant docs +@firebase/firestore: βœ” computes mutatedDocKeys +@firebase/firestore: βœ” computes removes keys from mutatedDocKeys when new doc does not have local changes +@firebase/firestore: βœ” remembers local mutations from previous snapshot +@firebase/firestore: βœ” remembers local mutations from previous call to computeDocChanges +@firebase/firestore: Md5 +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” update() should accept a string +@firebase/firestore: βœ” update() should accept a string of non-standard characters +@firebase/firestore: βœ” update() should accept a string of UTF-8 encoded non-standard characters +@firebase/firestore: βœ” update() should accept an array of number +@firebase/firestore: βœ” update() should accept a Uint8Array +@firebase/firestore: βœ” update() should honor opt_length on a string +@firebase/firestore: βœ” update() should honor opt_length on an array of number +@firebase/firestore: βœ” update() should honor opt_length on a Uint8Array +@firebase/firestore: βœ” reset() should reset +@firebase/firestore: Integer +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” constructor should construct 1 and -1, 2 and -2 +@firebase/firestore: βœ” constructor should construct big positive values +@firebase/firestore: βœ” constructor should construct big negative values +@firebase/firestore: βœ” add() should produce the sum of the two numbers +@firebase/firestore: βœ” multiply() should produce the product of the two numbers +@firebase/firestore: βœ” modulo() should produce the division remainder of the two numbers +@firebase/firestore: βœ” compare() should correctly compare two numbers for order +@firebase/firestore: βœ” toNumber() should return the correct number +@firebase/firestore: βœ” toString() should return the correct number +@firebase/firestore: βœ” fromNumber() create a new Integer with the given value +@firebase/firestore: βœ” fromString() create a new Integer with the given value +@firebase/firestore: βœ” getBits() create a new Integer with the given value +@firebase/firestore: Ordered Code Writer +@firebase/firestore: βœ” computes number of leading zeros +@firebase/firestore: βœ” converts numbers to bits +@firebase/firestore: βœ” orders numbers correctly +@firebase/firestore: βœ” converts strings to bits +@firebase/firestore: βœ” orders strings correctly +@firebase/firestore: βœ” converts bytes to bits +@firebase/firestore: βœ” orders bytes correctly +@firebase/firestore: βœ” encodes infinity +@firebase/firestore: βœ” seeds bytes +@firebase/firestore: Firestore Index Value Writer +@firebase/firestore: can gracefully handle different format of timestamp +@firebase/firestore: βœ” can handle different format of timestamp +@firebase/firestore: βœ” can handle timestamps with 0 nanoseconds +@firebase/firestore: βœ” can compare timestamps with different formats +@firebase/firestore: βœ” sorts vector as a different type from array and map, with unique rules +@firebase/firestore: UpdateData - v9 +@firebase/firestore: βœ” Supports properties with primitive types +@firebase/firestore: βœ” Supports properties with custom types +@firebase/firestore: given properties with dots +@firebase/firestore: βœ” preserves the value type +@firebase/firestore: βœ” does not allow matching a sub-string|path +@firebase/firestore: given nested objects without index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: UpdateData - v10 +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” allows dot notation for nested index types +@firebase/firestore: βœ” allows dot notation for nested index types that are 2 layers deep +@firebase/firestore: FirestoreTypeConverter +@firebase/firestore: βœ” converter has the minimal typing information +@firebase/firestore: βœ” converter has the minimal typing information plus return types +@firebase/firestore: βœ” has the additional 'merge' version of toFirestore() +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument is missing properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains undeclared properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” updateDoc() successfully compiles even if DbModelType argument is missing properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains undeclared properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” getDoc() returns AppModelType +@firebase/firestore: MemoryBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: IndexedDbBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: MemoryDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: IndexedDbDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: EncodedResourcePath +@firebase/firestore: βœ” encodes resource paths +@firebase/firestore: βœ” orders resource paths +@firebase/firestore: MemoryGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDbGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDb IndexBackfiller +@firebase/firestore: βœ” Writes latest read time to FieldIndex on completion +@firebase/firestore: βœ” Fetches documents after earliest read time +@firebase/firestore: βœ” Writes Index Entries +@firebase/firestore: βœ” Writes oldest document first +@firebase/firestore: βœ” Uses DocumentKey Offset for large Snapshots +@firebase/firestore: βœ” Updates collection groups +@firebase/firestore: βœ” Prioritizes new collection groups +@firebase/firestore: βœ” Writes until cap +@firebase/firestore: βœ” Uses latest read time for empty collections +@firebase/firestore: βœ” Handles local mutations after remote docs +@firebase/firestore: βœ” Mutations up to document limit and updates batchId on index +@firebase/firestore: βœ” Mutation finishes mutation batch even if it exceeds limit +@firebase/firestore: βœ” Mutations from high water mark +@firebase/firestore: βœ” Updates existing doc to new value +@firebase/firestore: βœ” Updates docs that no longer match +@firebase/firestore: βœ” Does not process same document twice +@firebase/firestore: βœ” Applies set to remote doc +@firebase/firestore: βœ” Applies patch to remote doc +@firebase/firestore: βœ” Applies delete to remote doc +@firebase/firestore: βœ” Reindexes documents when new index is added +@firebase/firestore: index_manager.ts top-level functions +@firebase/firestore: displayNameForIndexType() +@firebase/firestore: βœ” IndexType.NONE +@firebase/firestore: βœ” IndexType.FULL +@firebase/firestore: βœ” IndexType.PARTIAL +@firebase/firestore: βœ” invalid IndexType +@firebase/firestore: MemoryIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: IndexedDbIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: βœ” can add indexes +@firebase/firestore: βœ” uses auto-incrementing index id +@firebase/firestore: βœ” can get indexes +@firebase/firestore: βœ” can update collection group +@firebase/firestore: βœ” can get next collection group to update +@firebase/firestore: βœ” deleting field index removes entry from collection group +@firebase/firestore: βœ” deleting field index removes entry from getNextCollectionGroupToUpdate() +@firebase/firestore: βœ” persist index offset +@firebase/firestore: βœ” changes user +@firebase/firestore: βœ” adds documents +@firebase/firestore: βœ” applies orderBy +@firebase/firestore: βœ” applies orderBy with not equals filter +@firebase/firestore: βœ” applies equality filter +@firebase/firestore: βœ” applies nested field equality filter +@firebase/firestore: βœ” applies not equals filter +@firebase/firestore: βœ” applies equals with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter on same field +@firebase/firestore: βœ” applies equals with not equals filter on same field +@firebase/firestore: βœ” applies less than or equals filter +@firebase/firestore: βœ” applies greater than or equals filter +@firebase/firestore: βœ” applies greater than filter +@firebase/firestore: βœ” applies range filter +@firebase/firestore: βœ” applies startAt filter +@firebase/firestore: βœ” applies startAt filter with notIn +@firebase/firestore: βœ” applies startAfter filter +@firebase/firestore: βœ” applies endAt filter +@firebase/firestore: βœ” applies endBefore filter +@firebase/firestore: βœ” applies range with bound filter +@firebase/firestore: βœ” applies in filter +@firebase/firestore: βœ” applies not in filter +@firebase/firestore: βœ” applies not in filter with greater than filter +@firebase/firestore: βœ” applies not in filter with out of bounds greater than filter +@firebase/firestore: βœ” applies array contains filter +@firebase/firestore: βœ” applies array contains any filter +@firebase/firestore: βœ” validates that array contains filter only matches array +@firebase/firestore: βœ” returns empty result when no index exists +@firebase/firestore: βœ” handles when no matching filter exists +@firebase/firestore: βœ” returns empty results when no matching documents exists +@firebase/firestore: βœ” filters by field type +@firebase/firestore: βœ” supports collection group indexes +@firebase/firestore: βœ” applies limit filter +@firebase/firestore: βœ” uses ordering for limit filter +@firebase/firestore: βœ” updates index entries +@firebase/firestore: βœ” removes index entries +@firebase/firestore: βœ” supports order by key +@firebase/firestore: βœ” supports order by filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with less than filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with greater than filter +@firebase/firestore: βœ” cannot expand result set from a cursor +@firebase/firestore: βœ” can have filters on the same field +@firebase/firestore: βœ” can index timestamp fields of different format +@firebase/firestore: βœ” can index VectorValue fields +@firebase/firestore: βœ” support advances queries +@firebase/firestore: βœ” serves partial and full index +@firebase/firestore: βœ” createTargetIndexes() creates full indexes for each sub-target +@firebase/firestore: βœ” createTargetIndexes() upgrades a partial index to a full index +@firebase/firestore: βœ” createTargetIndexes() does nothing if a full index already exists +@firebase/firestore: βœ” deleteAllFieldIndexes() deletes all indexes +@firebase/firestore: IndexedDbSchema: createOrUpgradeDb +@firebase/firestore: βœ” can install schema version 1 +@firebase/firestore: βœ” drops the query cache from 2 to 3 +@firebase/firestore: βœ” can upgrade from schema version 3 to 4 +@firebase/firestore: βœ” can upgrade from schema version 4 to 5 +@firebase/firestore: βœ” can upgrade from version 5 to 6 +@firebase/firestore: βœ” can upgrade from version 6 to 7 +@firebase/firestore: βœ” can upgrade from version 7 to 8 +@firebase/firestore: βœ” rewrites canonical IDs during upgrade from version 9 to 10 +@firebase/firestore: βœ” can use read-time index after schema migration +@firebase/firestore: βœ” can get recent document changes in a collection +@firebase/firestore: βœ” can upgrade from version 11 to 12 +@firebase/firestore: βœ” can upgrade from version 12 to 13 +@firebase/firestore: βœ” can upgrade from schema version 13 to 14 (overlay migration) +@firebase/firestore: βœ” can upgrade from version 13 to 14 +@firebase/firestore: βœ” can upgrade from version 14 to 15 +@firebase/firestore: βœ” can upgrade from version 15 to 16 +@firebase/firestore: βœ” can upgrade from version 16 to 17 +@firebase/firestore: βœ” downgrading throws a custom error +@firebase/firestore: IndexedDb: canActAsPrimary +@firebase/firestore: βœ” is eligible when client is offline and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and visible +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is online and hidden and other client is online and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and visible +@firebase/firestore: βœ” is eligible when only client +@firebase/firestore: βœ” regains lease if available +@firebase/firestore: βœ” obtains lease if forceOwningTab is set +@firebase/firestore: IndexedDb: allowTabSynchronization +@firebase/firestore: βœ” blocks start() on IndexedDbTransactionError when synchronization is disabled +@firebase/firestore: βœ” allows start() with IndexedDbTransactionError when synchronization is enabled +@firebase/firestore: βœ” blocks start() when getHighestListenSequenceNumber() fails +@firebase/firestore: βœ” ignores intermittent IndexedDbTransactionError during lease refresh +@firebase/firestore: βœ” rejects access when synchronization is disabled +@firebase/firestore: βœ” grants access when synchronization is enabled +@firebase/firestore: IndexedDb +@firebase/firestore: βœ” can re-open after close +@firebase/firestore: Local Serializer +@firebase/firestore: βœ” SetMutation + TransformMutation (legacy) are squashed +@firebase/firestore: βœ” PatchMutation + TransformMutation (legacy) are squashed +@firebase/firestore: ERROR: '[2025-03-04T22:53:31.120Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: ERROR: '[2025-03-04T22:53:31.120Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: βœ” TransformMutation (legacy) + TransformMutation (legacy) throw assertion +@firebase/firestore: ERROR: '[2025-03-04T22:53:31.120Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: ERROR: '[2025-03-04T22:53:31.120Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: βœ” DeleteMutation + TransformMutation (legacy) on its own throws assertion +@firebase/firestore: βœ” multiple mutations are squashed +@firebase/firestore: βœ” serializes overlay +@firebase/firestore: βœ” serializes FieldIndex +@firebase/firestore: βœ” serializes IndexState +@firebase/firestore: LocalStore w/ Memory Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: βœ” handles SetMutation -> Ack -> PatchMutation -> Reject +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: βœ” collects garbage after ChangeBatch with no target ids +@firebase/firestore: βœ” collects garbage after ChangeBatch +@firebase/firestore: βœ” collects garbage after acknowledged mutation +@firebase/firestore: βœ” collects garbage after rejected mutation +@firebase/firestore: βœ” pins documents in the local view +@firebase/firestore: βœ” throws away documents with unknown target-ids immediately +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: βœ– persists resume tokens (skipped) +@firebase/firestore: βœ– does not replace resume token with empty resume token (skipped) +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: βœ– handles SetMutation -> Ack -> Transform -> Ack -> Transform (skipped) +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow +@firebase/firestore: βœ” uses target mapping to execute queries +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: βœ– ignores target mapping after existence filter mismatch (skipped) +@firebase/firestore: βœ– queries include locally modified documents (skipped) +@firebase/firestore: βœ– queries include documents from other queries (skipped) +@firebase/firestore: βœ– queries filter documents that no longer match (skipped) +@firebase/firestore: LocalStore w/ IndexedDB Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: βœ– handles SetMutation -> Ack -> PatchMutation -> Reject (skipped) +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: βœ– collects garbage after ChangeBatch with no target ids (skipped) +@firebase/firestore: βœ– collects garbage after ChangeBatch (skipped) +@firebase/firestore: βœ– collects garbage after acknowledged mutation (skipped) +@firebase/firestore: βœ– collects garbage after rejected mutation (skipped) +@firebase/firestore: βœ– pins documents in the local view (skipped) +@firebase/firestore: βœ– throws away documents with unknown target-ids immediately (skipped) +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: βœ” persists resume tokens +@firebase/firestore: βœ” does not replace resume token with empty resume token +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: βœ” handles SetMutation -> Ack -> Transform -> Ack -> Transform +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow +@firebase/firestore: βœ” uses target mapping to execute queries +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: βœ” ignores target mapping after existence filter mismatch +@firebase/firestore: βœ” queries include locally modified documents +@firebase/firestore: βœ” queries include documents from other queries +@firebase/firestore: βœ” queries filter documents that no longer match +@firebase/firestore: LocalStore w/ IndexedDB Persistence (Non generic) +@firebase/firestore: βœ” Adds Indexes +@firebase/firestore: βœ” Removes Indexes +@firebase/firestore: βœ” Does Not Reset Index When Same Index Is Added +@firebase/firestore: βœ” Deleted Document Removes Index +@firebase/firestore: βœ” Uses Indexes +@firebase/firestore: βœ” Uses Partially Indexed Remote Documents When Available +@firebase/firestore: βœ” Uses Partially Indexed Overlays When Available +@firebase/firestore: βœ” Does Not Use Limit When Index Is Outdated +@firebase/firestore: βœ” Uses Index For Limit Query When Index Is Updated +@firebase/firestore: βœ” Indexes Server Timestamps +@firebase/firestore: βœ” can auto-create indexes +@firebase/firestore: βœ” can auto-create indexes works with or query +@firebase/firestore: βœ” does not auto-create indexes for small collections +@firebase/firestore: βœ” does not auto create indexes when index lookup is expensive +@firebase/firestore: βœ” index auto creation works when backfiller runs halfway +@firebase/firestore: βœ” index created by index auto creation exists after turn off auto creation +@firebase/firestore: βœ” disable index auto creation works +@firebase/firestore: βœ” index auto creation works with mutation +@firebase/firestore: βœ” delete all indexes works with index auto creation +@firebase/firestore: βœ” delete all indexes works with manual added indexes +@firebase/firestore: βœ” index auto creation does not work with multiple inequality +@firebase/firestore: IndexedDbLruDelegate +@firebase/firestore: βœ” picks sequence number percentile +@firebase/firestore: βœ” removes targets up through sequence number +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs +@firebase/firestore: βœ” gets cache size +@firebase/firestore: βœ” can be disabled +@firebase/firestore: βœ” skips a cache that is too small +@firebase/firestore: βœ” runs when the cache is large enough +@firebase/firestore: βœ” caps sequence numbers to collect +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets +@firebase/firestore: βœ” with multiple targets in a transaction +@firebase/firestore: βœ” with all collected targets in a single transaction +@firebase/firestore: βœ” with mutation and sequential targets +@firebase/firestore: βœ” with mutations in targets +@firebase/firestore: MemoryLruDelegate +@firebase/firestore: βœ” picks sequence number percentile +@firebase/firestore: βœ” removes targets up through sequence number +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs +@firebase/firestore: βœ” gets cache size +@firebase/firestore: βœ” can be disabled +@firebase/firestore: βœ” skips a cache that is too small +@firebase/firestore: βœ” runs when the cache is large enough +@firebase/firestore: βœ” caps sequence numbers to collect +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets +@firebase/firestore: βœ” with multiple targets in a transaction +@firebase/firestore: βœ” with all collected targets in a single transaction +@firebase/firestore: βœ” with mutation and sequential targets +@firebase/firestore: βœ” with mutations in targets +@firebase/firestore: MemoryMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() +@firebase/firestore: IndexedDbMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() +@firebase/firestore: PersistencePromise +@firebase/firestore: βœ” Can chain synchronous functions +@firebase/firestore: βœ” Can chain asynchronous functions +@firebase/firestore: βœ” Can catch synchronous functions +@firebase/firestore: βœ” Can catch asynchronous functions +@firebase/firestore: βœ” ignores catches without errors +@firebase/firestore: βœ” ignores catches without errors async +@firebase/firestore: βœ” can catch errors twice sync +@firebase/firestore: βœ” can catch errors twice async +@firebase/firestore: βœ” can return undefined sync +@firebase/firestore: βœ” can return undefined async +@firebase/firestore: βœ” can waitFor sync +@firebase/firestore: βœ” can waitFor async +@firebase/firestore: βœ” can waitFor async error +@firebase/firestore: βœ” propagates error for waitFor() +@firebase/firestore: βœ” propagates error for forEach() +@firebase/firestore: MemoryTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: IndexedDbTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: βœ” only invokes onCommittedListener once with retries +@firebase/firestore: QueryEngine +@firebase/firestore: MemoryEagerPersistence +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbPersistence configureCsi=false +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbQueryEngine configureCsi=true +@firebase/firestore: βœ” combines indexed with non-indexed results +@firebase/firestore: βœ” uses partial index for limit queries +@firebase/firestore: βœ” re-fills indexed limit queries +@firebase/firestore: βœ” creates indexes when indexAutoCreationEnabled=true +@firebase/firestore: βœ” does not create indexes when indexAutoCreationEnabled=false +@firebase/firestore: βœ” creates indexes when min collection size is met exactly and relative cost is ever-so-slightly better +@firebase/firestore: βœ” does not create indexes when min collection size is not met by only 1 document +@firebase/firestore: βœ” does not create indexes when relative cost is equal +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: ReferenceSet +@firebase/firestore: βœ” can add/remove references +@firebase/firestore: βœ” can remove all references for a target ID +@firebase/firestore: MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” doesn't keep track of size +@firebase/firestore: LRU MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: IndexedDbRemoteDocumentCache +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: RemoteDocumentChangeBuffer +@firebase/firestore: βœ” can read unchanged entry +@firebase/firestore: βœ” can add entry and read it back +@firebase/firestore: βœ” can remove entry +@firebase/firestore: βœ” can apply changes +@firebase/firestore: βœ” can apply changes with removal +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.877Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.878Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.878Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.878Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:32.878Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: βœ” methods fail after apply. +@firebase/firestore: SimpleDb +@firebase/firestore: βœ” regex test +@firebase/firestore: βœ” can get +@firebase/firestore: βœ” can put +@firebase/firestore: βœ” lets you explicitly abort transactions +@firebase/firestore: βœ” aborts transactions when an error happens +@firebase/firestore: βœ” aborts transactions when persistence promise is rejected +@firebase/firestore: βœ” exposes error from inside a transaction +@firebase/firestore: βœ” can delete +@firebase/firestore: βœ” loadAll +@firebase/firestore: βœ” loadFirst +@firebase/firestore: βœ” deleteAll +@firebase/firestore: βœ” deleteAll in key range +@firebase/firestore: βœ” deleteAll in index range +@firebase/firestore: βœ” can iterate +@firebase/firestore: βœ” can iterate and skip keys +@firebase/firestore: βœ” stops iteration after rejected promise +@firebase/firestore: βœ” can iterate in reverse +@firebase/firestore: βœ” can iterate and skip keys in reverse +@firebase/firestore: βœ” can iterate and skip over the index +@firebase/firestore: βœ” can iterate using index and range and stop before end +@firebase/firestore: βœ” can iterate over index as keys-only +@firebase/firestore: βœ” can iterate over index using a partial bound +@firebase/firestore: βœ” can use arrays as keys and do partial bounds ranges +@firebase/firestore: βœ” correctly sorts keys with nested arrays +@firebase/firestore: βœ” retries transactions +@firebase/firestore: βœ” retries transactions only three times +@firebase/firestore: βœ” does not retry explicitly aborted transactions +@firebase/firestore: βœ– Perf (skipped) +@firebase/firestore: MemoryTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: IndexedDbTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: βœ” persists metadata across restarts +@firebase/firestore: WebStorageSharedClientState +@firebase/firestore: persists mutation batches +@firebase/firestore: βœ” with a pending batch +@firebase/firestore: βœ” with an acknowledged batch +@firebase/firestore: βœ” with a rejected batch +@firebase/firestore: persists query targets +@firebase/firestore: βœ” when empty +@firebase/firestore: βœ” with multiple targets +@firebase/firestore: βœ” with a not-current target +@firebase/firestore: βœ” with a current target +@firebase/firestore: βœ” with an errored target +@firebase/firestore: βœ” garbage collects entry +@firebase/firestore: combines client state +@firebase/firestore: βœ” with targets from existing client +@firebase/firestore: βœ” with targets from new client +@firebase/firestore: βœ” with online state from new client +@firebase/firestore: βœ” ignores online state from inactive client +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.036Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse client data for instance 'A1aZc3E2gJqS1AARTxWz': {"activeTargetIds":[5,"invalid"]}' +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.036Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse client data for instance 'A1aZc3E2gJqS1AARTxWz': {"activeTargetIds":[5,"invalid"]}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes mutation updates +@firebase/firestore: βœ” for pending mutation +@firebase/firestore: βœ” for acknowledged mutation +@firebase/firestore: βœ” for rejected mutation +@firebase/firestore: βœ” handles unauthenticated user +@firebase/firestore: βœ” ignores different user +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.064Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse mutation state for ID '1': {"state":"invalid","updateTimeMs":1741128813064}' +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.064Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse mutation state for ID '1': {"state":"invalid","updateTimeMs":1741128813064}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes target updates +@firebase/firestore: βœ” for added target +@firebase/firestore: βœ” for removed target +@firebase/firestore: βœ” for not-current target +@firebase/firestore: βœ” for current target +@firebase/firestore: βœ” for errored target +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.092Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse target state for ID '1': {"state":"invalid","updateTimeMs":1741128813092}' +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.092Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse target state for ID '1': {"state":"invalid","updateTimeMs":1741128813092}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: syncs sequence numbers +@firebase/firestore: βœ” writes out new sequence numbers +@firebase/firestore: βœ” notifies on new sequence numbers +@firebase/firestore: processes bundles +@firebase/firestore: βœ” writes out collection groups +@firebase/firestore: βœ” supports empty collection groups +@firebase/firestore: Document +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” returns fields correctly +@firebase/firestore: βœ” equals to other same documents +@firebase/firestore: DocumentSet +@firebase/firestore: βœ” keeps documents in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates documents +@firebase/firestore: βœ” adds docs equal to comparator with different keys +@firebase/firestore: βœ” equals to other document set with the same elements and order +@firebase/firestore: field index +@firebase/firestore: βœ” comparator includes collection group +@firebase/firestore: βœ” comparator ignores index id +@firebase/firestore: βœ” comparator ignores index offset +@firebase/firestore: βœ” comparator includes field name +@firebase/firestore: βœ” comparator includes segment kind +@firebase/firestore: βœ” comparator includes segment length +@firebase/firestore: index offset +@firebase/firestore: βœ” supports comparison +@firebase/firestore: βœ” advances seconds +@firebase/firestore: Mutation +@firebase/firestore: βœ” can apply sets to documents +@firebase/firestore: βœ” can apply patches to documents +@firebase/firestore: βœ” can apply patches with merges to missing documents +@firebase/firestore: βœ” can apply patches with merges to null documents +@firebase/firestore: βœ” will delete values from the field-mask +@firebase/firestore: βœ” will patch a primitive value +@firebase/firestore: βœ” patching a NoDocument yields a NoDocument +@firebase/firestore: βœ” can apply local serverTimestamp transforms to documents +@firebase/firestore: βœ” can create arrayUnion() transform. +@firebase/firestore: βœ” can create arrayRemove() transform. +@firebase/firestore: βœ” can apply local arrayUnion transform to missing field +@firebase/firestore: βœ” can apply local arrayUnion transform to non-array field +@firebase/firestore: βœ” can apply local arrayUnion transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate union elements +@firebase/firestore: βœ” can apply local arrayUnion transform with non-primitive elements +@firebase/firestore: βœ” can apply local arrayUnion transform with partially-overlapping elements +@firebase/firestore: βœ” can apply local arrayRemove transform to missing field +@firebase/firestore: βœ” can apply local arrayRemove transform to non-array field +@firebase/firestore: βœ” can apply local arrayRemove transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with non-primitive elements +@firebase/firestore: βœ” can apply server-acked serverTimestamp transform to documents +@firebase/firestore: βœ” can apply server-acked array transforms to document +@firebase/firestore: βœ” can apply numeric add transform to document +@firebase/firestore: βœ” can apply numeric add transform to unexpected type +@firebase/firestore: βœ” can apply numeric add transform to missing field +@firebase/firestore: βœ” can apply numeric add transforms consecutively +@firebase/firestore: βœ” can apply server-acked numeric add transform to document +@firebase/firestore: βœ” can apply deletes to documents +@firebase/firestore: βœ” can apply sets with mutation results +@firebase/firestore: βœ” will apply patches with mutation results +@firebase/firestore: βœ” transitions versions correctly +@firebase/firestore: βœ” extracts null base value for non-transform mutation +@firebase/firestore: βœ” extracts null base value for ServerTimestamp +@firebase/firestore: βœ” extracts base value for increment +@firebase/firestore: βœ” increment twice +@firebase/firestore: βœ” overlay with no mutation +@firebase/firestore: βœ” overlay with mutations fail by preconditions +@firebase/firestore: βœ” overlay with patch on invalid document +@firebase/firestore: βœ” overlay with one set mutation +@firebase/firestore: βœ” overlay with one patch mutation +@firebase/firestore: βœ” overlay with patch then merge +@firebase/firestore: βœ” overlay with delete then patch +@firebase/firestore: βœ” overlay with delete then merge +@firebase/firestore: βœ” overlay with patch then patch to delete field +@firebase/firestore: βœ” overlay with patch then merge with array union +@firebase/firestore: βœ” overlay with array union then remove +@firebase/firestore: βœ” overlay with set then increment +@firebase/firestore: βœ” overlay with set then patch on deleted doc +@firebase/firestore: βœ” overlay with field deletion of nested field +@firebase/firestore: βœ” overlay created from empty set with merge +@firebase/firestore: βœ” overlay with mutation with multiple deletes +@firebase/firestore: βœ” overlay by combinations and permutations +@firebase/firestore: βœ” overlay by combinations and permutations for array transforms +@firebase/firestore: βœ” overlay by combinations and permutations for increments +@firebase/firestore: ObjectValue +@firebase/firestore: βœ” can extract fields +@firebase/firestore: βœ” can overwrite existing fields +@firebase/firestore: βœ” can add new fields +@firebase/firestore: βœ” can add multiple new fields +@firebase/firestore: βœ” can implicitly create objects +@firebase/firestore: βœ” can overwrite primitive values to create objects +@firebase/firestore: βœ” can add to nested objects +@firebase/firestore: βœ” can delete keys +@firebase/firestore: βœ” can delete nested keys +@firebase/firestore: βœ” can delete added keys +@firebase/firestore: βœ” can delete, resulting in empty object +@firebase/firestore: βœ” will not delete nested keys on primitive values +@firebase/firestore: βœ” can delete multiple fields +@firebase/firestore: βœ” provides field mask +@firebase/firestore: MutableObjectValue +@firebase/firestore: βœ” supports empty objectValues +@firebase/firestore: βœ” sets single field +@firebase/firestore: βœ” sets empty object +@firebase/firestore: βœ” sets multiple fields +@firebase/firestore: βœ” sets nested fields +@firebase/firestore: βœ” sets two fields in nested object +@firebase/firestore: βœ” sets field in nested object +@firebase/firestore: βœ” sets deeply nested field in nested object +@firebase/firestore: βœ” sets nested field multiple times +@firebase/firestore: βœ” sets and deletes field +@firebase/firestore: βœ” sets and deletes nested field +@firebase/firestore: βœ” sets single field in existing object +@firebase/firestore: βœ” overwrites field +@firebase/firestore: βœ” overwrites nested field +@firebase/firestore: βœ” overwrites deeply nested field +@firebase/firestore: βœ” merges existing object +@firebase/firestore: βœ” overwrites nested object +@firebase/firestore: βœ” replaces nested object +@firebase/firestore: βœ” deletes single field +@firebase/firestore: βœ” deletes nested object +@firebase/firestore: βœ” deletes non-existing field +@firebase/firestore: βœ” deletes non-existing nested field +@firebase/firestore: Path +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” can index into itself +@firebase/firestore: βœ” can be constructed with offsets +@firebase/firestore: βœ” can pop front repeatedly +@firebase/firestore: βœ” can yield the last segment +@firebase/firestore: βœ” can create child path +@firebase/firestore: βœ” can pop last repeatedly +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” determines prefix correctly +@firebase/firestore: βœ” escapes FieldPath with segments +@firebase/firestore: βœ” can be constructed from field path. +@firebase/firestore: fails to construct from invalid field path +@firebase/firestore: βœ” "" +@firebase/firestore: βœ” "foo\" +@firebase/firestore: βœ” "foo\x" +@firebase/firestore: βœ” "foo." +@firebase/firestore: βœ” ".foo" +@firebase/firestore: βœ” "foo..bar" +@firebase/firestore: Target Bounds +@firebase/firestore: βœ” empty query +@firebase/firestore: βœ” equals query with ascending index +@firebase/firestore: βœ” equals query with descending index +@firebase/firestore: βœ” less than query with ascending index +@firebase/firestore: βœ” less than query with descending index +@firebase/firestore: βœ” less than or equals query with ascending index +@firebase/firestore: βœ” less than or equals query with descending index +@firebase/firestore: βœ” greater than query with ascending index +@firebase/firestore: βœ” greater than query with descending index +@firebase/firestore: βœ” greater than or equals query with ascending index +@firebase/firestore: βœ” greater than or equals query with descending index +@firebase/firestore: βœ” arrayContains query +@firebase/firestore: βœ” arrayContainsAny query +@firebase/firestore: βœ” orderBy query +@firebase/firestore: βœ” orderBy query with filter +@firebase/firestore: βœ” startAt query +@firebase/firestore: βœ” startAt query with filter +@firebase/firestore: βœ” startAfter query with filter +@firebase/firestore: βœ” startAfter does not change bound if not applicable +@firebase/firestore: βœ” endAt query +@firebase/firestore: βœ” endAt query with filter +@firebase/firestore: βœ” endBefore query with filter +@firebase/firestore: βœ” endBefore does not change bound if not applicable +@firebase/firestore: βœ” partial index match with bound +@firebase/firestore: βœ” can use merge join +@firebase/firestore: βœ” can use partial index +@firebase/firestore: βœ” cannot use overspecified index +@firebase/firestore: βœ” equalities with default order +@firebase/firestore: βœ” equalities with ascending order +@firebase/firestore: βœ” equalities with descending order +@firebase/firestore: βœ” inequalities with default order +@firebase/firestore: βœ” inequalities with ascending order +@firebase/firestore: βœ” inequalities with descending order +@firebase/firestore: βœ” inequality uses single field index +@firebase/firestore: βœ” is query uses merge join +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.935Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Collection IDs do not match' +@firebase/firestore: ERROR: '[2025-03-04T22:53:33.935Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Collection IDs do not match' +@firebase/firestore: βœ” validates collection +@firebase/firestore: βœ” with array-contains +@firebase/firestore: βœ” array-contains is independent +@firebase/firestore: βœ” with array-contains and order by +@firebase/firestore: βœ” with equality and descending order +@firebase/firestore: βœ” with multiple equalities +@firebase/firestore: βœ” with multiple equalities and inequality +@firebase/firestore: βœ” with orderBy +@firebase/firestore: βœ” with not equals +@firebase/firestore: βœ” with multiple filters +@firebase/firestore: βœ” multiple filters require matching prefix +@firebase/firestore: βœ” with multiple filters and orderBy +@firebase/firestore: βœ” with multiple inequalities +@firebase/firestore: βœ” with multiple notIns +@firebase/firestore: βœ” with multiple orderBys +@firebase/firestore: βœ” with in and notIn +@firebase/firestore: βœ” with equality and different order by +@firebase/firestore: βœ” with equals and not in +@firebase/firestore: βœ” with in and orderBy +@firebase/firestore: βœ” with in and orderBy on same field +@firebase/firestore: βœ” with equality and inequality on the same field +@firebase/firestore: buildTargetIndex() +@firebase/firestore: βœ” queries with equalities +@firebase/firestore: βœ” queries with inequalities +@firebase/firestore: βœ” queries with array contains +@firebase/firestore: βœ” queries with order bys +@firebase/firestore: βœ” queries with inequalities uses single field index +@firebase/firestore: βœ” query of a collection +@firebase/firestore: βœ” query with array contains and order by +@firebase/firestore: βœ” query with equality and descending order +@firebase/firestore: βœ” query with multiple equalities +@firebase/firestore: βœ” query with in and not in filters +@firebase/firestore: βœ” query with equals and not-in filters +@firebase/firestore: query with multiple equalities and inequality +@firebase/firestore: βœ” inequality last +@firebase/firestore: βœ” inequality in middle +@firebase/firestore: query with multiple filters +@firebase/firestore: βœ” == and > on different fields +@firebase/firestore: βœ” >=, ==, and <= filters on the same field +@firebase/firestore: βœ” not-in and >= on the same field +@firebase/firestore: query with multiple order-bys +@firebase/firestore: βœ” order by fff, bar desc, __name__ +@firebase/firestore: βœ” order by foo, bar, __name__ desc +@firebase/firestore: query with equality and different order-by +@firebase/firestore: βœ” filter on foo and bar, order by qux +@firebase/firestore: βœ” filter on aaa, qqq, ccc, order by fff, bbb +@firebase/firestore: query with in and order-by +@firebase/firestore: βœ” on different fields +@firebase/firestore: βœ” on the same field +@firebase/firestore: query with multiple inequality +@firebase/firestore: βœ” returns null +@firebase/firestore: Values +@firebase/firestore: βœ” compares values for equality +@firebase/firestore: βœ” normalizes values for equality +@firebase/firestore: βœ” orders types correctly +@firebase/firestore: βœ” normalizes values for comparison +@firebase/firestore: βœ” estimates size correctly for fixed sized values +@firebase/firestore: βœ” estimates size correctly for relatively sized values +@firebase/firestore: βœ” computes lower bound +@firebase/firestore: βœ” computes upper bound +@firebase/firestore: βœ” canonicalizes values +@firebase/firestore: βœ” canonical IDs ignore sort order +@firebase/firestore: βœ” clones properties without normalization +@firebase/firestore: BloomFilter +@firebase/firestore: βœ” can instantiate an empty bloom filter +@firebase/firestore: βœ” should throw error if empty bloom filter inputs are invalid +@firebase/firestore: βœ” can instantiate a non empty bloom filter +@firebase/firestore: βœ” should throw error if padding is invalid +@firebase/firestore: βœ” should throw error if hash count is negative +@firebase/firestore: βœ” should throw error if hash count is 0 for non empty bloom filter +@firebase/firestore: βœ” should be able to process non standard characters +@firebase/firestore: βœ” mightContain in empty bloom filter should always return false +@firebase/firestore: βœ” mightContain on empty string might return false positive result +@firebase/firestore: BloomFilter golden tests +@firebase/firestore: βœ” mightContain result for 1 document with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 500 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.0001 false positive rate +@firebase/firestore: βœ– mightContain result for 50000 documents with 1 false positive rate (skipped) +@firebase/firestore: βœ– mightContain result for 50000 documents with 0.01 false positive rate (skipped) +@firebase/firestore: βœ– mightContain result for 50000 documents with 0.0001 false positive rate (skipped) +@firebase/firestore: Datastore +@firebase/firestore: βœ” newDatastore() returns an an instance of Datastore +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() fails if terminated +@firebase/firestore: βœ” Connection.terminate() invoked if Datastore terminated +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() invalidates the token if unauthenticated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() fails if terminated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() invalidates the token if unauthenticated +@firebase/firestore: RemoteEvent +@firebase/firestore: βœ” will accumulate document added and removed events +@firebase/firestore: βœ” will ignore events for pending targets +@firebase/firestore: βœ” will ignore events for removed targets +@firebase/firestore: βœ” will keep reset mapping even with updates +@firebase/firestore: βœ” will handle single reset +@firebase/firestore: βœ” will handle target add and removal in same batch +@firebase/firestore: βœ” target current change will mark the target current +@firebase/firestore: βœ” target added change will reset previous state +@firebase/firestore: βœ” no change will still mark the affected targets +@firebase/firestore: βœ” existence filters clears target mapping +@firebase/firestore: βœ” existence filters removes current changes +@firebase/firestore: βœ” handles document update +@firebase/firestore: βœ” only raises events for updated targets +@firebase/firestore: βœ” synthesizes deletes +@firebase/firestore: βœ” doesn't synthesize deletes in the wrong state +@firebase/firestore: βœ” separates document updates +@firebase/firestore: βœ” tracks limbo documents +@firebase/firestore: RestConnection +@firebase/firestore: βœ” url uses from path +@firebase/firestore: βœ” merges headers +@firebase/firestore: βœ” empty app check token is not added to headers +@firebase/firestore: βœ” returns success +@firebase/firestore: WARN: '[2025-03-04T22:53:34.350Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunQuery' 0x61946e97 failed with error: ', '{"code":"unknown","name":"FirebaseError"}', 'url: ', 'http://example.com/v1/projects/testproject/databases/(default)/documents/coll:runQuery', 'request:', '{}' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.350Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunQuery' 0x61946e97 failed with error: ', '{"code":"unknown","name":"FirebaseError"}', 'url: ', 'http://example.com/v1/projects/testproject/databases/(default)/documents/coll:runQuery', 'request:', '{}' +@firebase/firestore: βœ” returns error +@firebase/firestore: Serializer +@firebase/firestore: βœ” toDocument() / fromDocument +@firebase/firestore: βœ” encodes listen request labels +@firebase/firestore: converts value +@firebase/firestore: βœ” converts NullValue +@firebase/firestore: βœ” converts BooleanValue +@firebase/firestore: βœ” converts IntegerValue +@firebase/firestore: βœ” converts DoubleValue +@firebase/firestore: βœ” converts NaN +@firebase/firestore: βœ” converts Infinity +@firebase/firestore: βœ” converts StringValue +@firebase/firestore: βœ” converts TimestampValue from proto +@firebase/firestore: βœ” converts TimestampValue from string +@firebase/firestore: βœ” converts TimestampValue to string (useProto3Json=true) +@firebase/firestore: βœ” converts GeoPointValue +@firebase/firestore: βœ” converts BlobValue +@firebase/firestore: βœ” converts ArrayValue +@firebase/firestore: βœ” converts empty ArrayValue +@firebase/firestore: βœ” converts empty ObjectValue +@firebase/firestore: βœ” converts nested ObjectValues +@firebase/firestore: βœ” converts RefValue +@firebase/firestore: βœ” converts VectorValue +@firebase/firestore: toKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts a long key +@firebase/firestore: fromKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts default-value containing key +@firebase/firestore: toDocumentMask +@firebase/firestore: βœ– converts a weird path (skipped) +@firebase/firestore: fromDocumentMask +@firebase/firestore: βœ– converts a weird path (skipped) +@firebase/firestore: toMutation +@firebase/firestore: βœ” converts DeleteMutation +@firebase/firestore: toMutation / fromMutation +@firebase/firestore: βœ” SetMutation +@firebase/firestore: βœ” PatchMutation +@firebase/firestore: βœ” PatchMutation without precondition +@firebase/firestore: βœ” DeleteMutation +@firebase/firestore: βœ” ServerTimestamp transform +@firebase/firestore: βœ” Numeric Add transform +@firebase/firestore: βœ” Array transforms +@firebase/firestore: βœ” SetMutation with precondition +@firebase/firestore: βœ” VerifyMutation +@firebase/firestore: to/from UnaryOrFieldFilter +@firebase/firestore: βœ” makes dotted-property names +@firebase/firestore: βœ” converts NotEqual +@firebase/firestore: βœ” converts LessThan +@firebase/firestore: βœ” converts LessThanOrEqual +@firebase/firestore: βœ” converts GreaterThan +@firebase/firestore: βœ” converts GreaterThanOrEqual +@firebase/firestore: βœ” converts key field +@firebase/firestore: βœ” converts array-contains +@firebase/firestore: βœ” converts IN +@firebase/firestore: βœ” converts not-in +@firebase/firestore: βœ” converts not-in with null +@firebase/firestore: βœ” converts array-contains-any +@firebase/firestore: to/from UnaryFilter +@firebase/firestore: βœ” converts null +@firebase/firestore: βœ” converts Nan +@firebase/firestore: βœ” converts not null +@firebase/firestore: βœ” converts not NaN +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: toTarget +@firebase/firestore: βœ” converts first-level key queries +@firebase/firestore: βœ” converts first-level ancestor queries +@firebase/firestore: βœ” converts nested ancestor queries +@firebase/firestore: βœ” converts single filters at first-level collections +@firebase/firestore: βœ” converts multiple filters at first-level collections +@firebase/firestore: βœ” converts single filters on deeper collections +@firebase/firestore: βœ” converts multi-layer composite filters with OR at the first layer +@firebase/firestore: βœ” converts multi-layer composite filters with AND at the first layer +@firebase/firestore: βœ” converts order bys +@firebase/firestore: βœ” converts limits +@firebase/firestore: βœ” converts startAt/endAt +@firebase/firestore: βœ” converts resume tokens +@firebase/firestore: to/from OperatorName +@firebase/firestore: βœ” contains all Operators +@firebase/firestore: to/from Direction +@firebase/firestore: βœ” contains all Directions +@firebase/firestore: to/from PropertyOrder +@firebase/firestore: βœ” renders ascending +@firebase/firestore: βœ” renders descending +@firebase/firestore: fromWatchChange +@firebase/firestore: βœ” converts target change with added +@firebase/firestore: βœ” converts target change with removed +@firebase/firestore: βœ” converts target change with no_change +@firebase/firestore: βœ” converts target change with no_change (omitted in JSON) +@firebase/firestore: βœ” converts target change with snapshot version +@firebase/firestore: βœ” converts document change with target ids +@firebase/firestore: βœ” converts document change with removed target ids +@firebase/firestore: βœ” converts document change with deletions +@firebase/firestore: βœ” converts document removes +@firebase/firestore: Bundles: +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles might lead to limbo doc +@firebase/firestore: βœ” (Memory) Newer docs from bundles might lead to limbo doc +@firebase/firestore: βœ” (Persistence) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Memory) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Persistence) Bundles query can be loaded and resumed from different tabs +@firebase/firestore: βœ– (Memory) Bundles query can be loaded and resumed from different tabs (skipped) +@firebase/firestore: βœ” (Persistence) Load from secondary clients and observe from primary +@firebase/firestore: βœ– (Memory) Load from secondary clients and observe from primary (skipped) +@firebase/firestore: βœ” (Persistence) Load and observe from same secondary client +@firebase/firestore: βœ– (Memory) Load and observe from same secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Load from primary client and observe from secondary +@firebase/firestore: βœ– (Memory) Load from primary client and observe from secondary (skipped) +@firebase/firestore: Collections: +@firebase/firestore: βœ” (Persistence) Events are raised after watch ack +@firebase/firestore: βœ” (Memory) Events are raised after watch ack +@firebase/firestore: βœ” (Persistence) Events are raised for local sets before watch ack +@firebase/firestore: βœ” (Memory) Events are raised for local sets before watch ack +@firebase/firestore: Existence Filters: +@firebase/firestore: βœ” (Persistence) Existence filter match +@firebase/firestore: βœ” (Memory) Existence filter match +@firebase/firestore: βœ” (Persistence) Existence filter match after pending update +@firebase/firestore: βœ” (Memory) Existence filter match after pending update +@firebase/firestore: βœ” (Persistence) Existence filter with empty target +@firebase/firestore: βœ” (Memory) Existence filter with empty target +@firebase/firestore: βœ” (Persistence) Existence filter ignored with pending target +@firebase/firestore: βœ” (Memory) Existence filter ignored with pending target +@firebase/firestore: βœ” (Persistence) Existence filter mismatch triggers re-run of query +@firebase/firestore: βœ” (Memory) Existence filter mismatch triggers re-run of query +@firebase/firestore: βœ” (Persistence) Existence filter mismatch will drop resume token +@firebase/firestore: βœ” (Memory) Existence filter mismatch will drop resume token +@firebase/firestore: βœ” (Persistence) Existence filter handled at global snapshot +@firebase/firestore: βœ” (Memory) Existence filter handled at global snapshot +@firebase/firestore: βœ” (Persistence) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Memory) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Persistence) Existence filter limbo resolution is denied +@firebase/firestore: βœ” (Memory) Existence filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Existence filter clears resume token +@firebase/firestore: βœ– (Memory) Existence filter clears resume token (skipped) +@firebase/firestore: βœ” (Persistence) Full re-query is skipped when bloom filter can identify documents deleted +@firebase/firestore: βœ” (Memory) Full re-query is skipped when bloom filter can identify documents deleted +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter cannot identify documents deleted +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter cannot identify documents deleted +@firebase/firestore: βœ” (Persistence) Bloom filter can process special characters in document name +@firebase/firestore: βœ” (Memory) Bloom filter can process special characters in document name +@firebase/firestore: WARN: '[2025-03-04T22:53:34.677Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.677Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Persistence) Bloom filter fills in default values for undefined padding and hashCount +@firebase/firestore: WARN: '[2025-03-04T22:53:34.679Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.679Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Memory) Bloom filter fills in default values for undefined padding and hashCount +@firebase/firestore: WARN: '[2025-03-04T22:53:34.685Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.685Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter bitmap is invalid +@firebase/firestore: WARN: '[2025-03-04T22:53:34.691Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.691Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter bitmap is invalid +@firebase/firestore: WARN: '[2025-03-04T22:53:34.697Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.697Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter hashCount is invalid +@firebase/firestore: WARN: '[2025-03-04T22:53:34.701Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T22:53:34.701Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter hashCount is invalid +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter is empty +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter is empty +@firebase/firestore: βœ” (Persistence) Same documents can have different bloom filters +@firebase/firestore: βœ” (Memory) Same documents can have different bloom filters +@firebase/firestore: βœ” (Persistence) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Memory) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Persistence) Bloom filter limbo resolution is denied +@firebase/firestore: βœ” (Memory) Bloom filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Bloom filter with large size works as expected +@firebase/firestore: βœ” (Memory) Bloom filter with large size works as expected +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when there is no document changes +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when there is no document changes +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when new documents are added +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when new documents are added +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when existing docs are updated +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when existing docs are updated +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are updated to no longer match the query +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are updated to no longer match the query +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are added, removed and deleted +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are added, removed and deleted +@firebase/firestore: Garbage Collection: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Persistence) Contents of query are removed after listen is removed, and GC threshold is reached +@firebase/firestore: βœ” (Memory) Contents of query are removed after listen is removed, and GC threshold is reached +@firebase/firestore: βœ” (Persistence) Contents of active query are kept while inactive results are removed after GC +@firebase/firestore: βœ” (Memory) Contents of active query are kept while inactive results are removed after GC +@firebase/firestore: Client Side Index +@firebase/firestore: βœ” (Persistence) Index Creation visible on all clients +@firebase/firestore: βœ– (Memory) Index Creation visible on all clients (skipped) +@firebase/firestore: βœ” (Persistence) Index Creation succeeds even if not primary +@firebase/firestore: βœ– (Memory) Index Creation succeeds even if not primary (skipped) +@firebase/firestore: Limbo Documents: +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted without an existence filter +@firebase/firestore: βœ” (Memory) Limbo documents are deleted without an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted with an existence filter +@firebase/firestore: βœ” (Memory) Limbo documents are deleted with an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates in different snapshot than "current" +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates in different snapshot than "current" +@firebase/firestore: βœ” (Persistence) Document remove message will cause docs to go in limbo +@firebase/firestore: βœ” (Memory) Document remove message will cause docs to go in limbo +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT [no document update] +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT [no document update] +@firebase/firestore: βœ” (Persistence) Failed limbo resolution removes document from view +@firebase/firestore: βœ” (Memory) Failed limbo resolution removes document from view +@firebase/firestore: βœ” (Persistence) Limbo docs are resolved by primary client +@firebase/firestore: βœ– (Memory) Limbo docs are resolved by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved after primary tab failover +@firebase/firestore: βœ– (Memory) Limbo documents are resolved after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents survive primary state transitions +@firebase/firestore: βœ– (Memory) Limbo documents survive primary state transitions (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents stay consistent between views +@firebase/firestore: βœ” (Memory) Limbo documents stay consistent between views +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in no expected limbo doc +@firebase/firestore: βœ– (Memory) LimitToLast query from secondary results in no expected limbo doc (skipped) +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in expected limbo doc +@firebase/firestore: βœ– (Memory) LimitToLast query from secondary results in expected limbo doc (skipped) +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with all results at once from watch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with all results at once from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with results one at a time from watch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with results one at a time from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling when a limbo listen is rejected. +@firebase/firestore: βœ” (Memory) Limbo resolution throttling when a limbo listen is rejected. +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with existence filter mismatch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution should wait for full re-query result if there is an existence filter mismatch +@firebase/firestore: βœ” (Memory) Limbo resolution should wait for full re-query result if there is an existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with bloom filter application +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with bloom filter application +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be started if one is already active +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be started if one is already active +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be enqueued if one is already enqueued +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be enqueued if one is already enqueued +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should be removed from the queue when the last query listen stops +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should be removed from the queue when the last query listen stops +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query +@firebase/firestore: βœ” (Persistence) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot +@firebase/firestore: βœ” (Memory) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot +@firebase/firestore: Limits: +@firebase/firestore: βœ” (Persistence) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Memory) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Persistence) Documents outside of limit don't raise hasPendingWrites +@firebase/firestore: βœ” (Memory) Documents outside of limit don't raise hasPendingWrites +@firebase/firestore: βœ” (Persistence) Deleted Document in limbo in full limit query +@firebase/firestore: βœ” (Memory) Deleted Document in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Memory) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Persistence) Documents in limit are can handle removed messages for only one of many query +@firebase/firestore: βœ” (Memory) Documents in limit are can handle removed messages for only one of many query +@firebase/firestore: βœ” (Persistence) Limits are re-filled from cache +@firebase/firestore: βœ” (Memory) Limits are re-filled from cache +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with removal) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with removal) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with update from backend) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with update from backend) +@firebase/firestore: βœ” (Persistence) Resumed limit queries exclude deleted documents +@firebase/firestore: βœ– (Memory) Resumed limit queries exclude deleted documents (skipped) +@firebase/firestore: βœ” (Persistence) Resumed limit queries use updated documents +@firebase/firestore: βœ” (Memory) Resumed limit queries use updated documents +@firebase/firestore: βœ” (Persistence) Multiple docs in limbo in full limit query +@firebase/firestore: βœ” (Memory) Multiple docs in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Limit query is refilled by primary client +@firebase/firestore: βœ– (Memory) Limit query is refilled by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Limit query includes write from secondary client +@firebase/firestore: βœ– (Memory) Limit query includes write from secondary client (skipped) +@firebase/firestore: Listens source options: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ– (Persistence) Documents are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Documents are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Primary client should not invoke watch request while all clients are listening to cache +@firebase/firestore: βœ– (Memory) Primary client should not invoke watch request while all clients are listening to cache (skipped) +@firebase/firestore: βœ” (Persistence) Local mutations notifies listeners sourced from cache in all tabs +@firebase/firestore: βœ– (Memory) Local mutations notifies listeners sourced from cache in all tabs (skipped) +@firebase/firestore: βœ” (Persistence) Listeners with different source shares watch changes between primary and secondary clients +@firebase/firestore: βœ– (Memory) Listeners with different source shares watch changes between primary and secondary clients (skipped) +@firebase/firestore: βœ” (Persistence) Clients can have multiple listeners with different sources +@firebase/firestore: βœ– (Memory) Clients can have multiple listeners with different sources (skipped) +@firebase/firestore: βœ” (Persistence) Query is executed by primary client even if primary client only has listeners sourced from cache +@firebase/firestore: βœ– (Memory) Query is executed by primary client even if primary client only has listeners sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients +@firebase/firestore: βœ– (Memory) Query only raises events in participating clients (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in different clients sourced from cache +@firebase/firestore: βœ– (Memory) Mirror queries being listened in different clients sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in the same secondary client sourced from cache +@firebase/firestore: βœ– (Memory) Mirror queries being listened in the same secondary client sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened from different sources while listening to server in primary tab +@firebase/firestore: βœ– (Memory) Mirror queries being listened from different sources while listening to server in primary tab (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from different sources while listening to server in secondary tab +@firebase/firestore: βœ– (Memory) Mirror queries from different sources while listening to server in secondary tab (skipped) +@firebase/firestore: βœ” (Persistence) Un-listen to listeners from different source +@firebase/firestore: βœ– (Memory) Un-listen to listeners from different source (skipped) +@firebase/firestore: Listens: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ– (Persistence) Documents outside of view are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Documents outside of view are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query update when new data is received. +@firebase/firestore: βœ” (Memory) Contents of query update when new data is received. +@firebase/firestore: βœ” (Persistence) Doesn't raise events for empty target +@firebase/firestore: βœ” (Memory) Doesn't raise events for empty target +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) Ensure correct query results with latency-compensated deletes +@firebase/firestore: βœ” (Memory) Ensure correct query results with latency-compensated deletes +@firebase/firestore: βœ” (Persistence) Does not raise event for initial document delete +@firebase/firestore: βœ” (Memory) Does not raise event for initial document delete +@firebase/firestore: βœ” (Persistence) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Memory) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Persistence) Will re-issue listen for errored target +@firebase/firestore: βœ” (Memory) Will re-issue listen for errored target +@firebase/firestore: βœ” (Persistence) Will gracefully process failed targets +@firebase/firestore: βœ” (Memory) Will gracefully process failed targets +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots +@firebase/firestore: βœ” (Memory) Will gracefully handle watch stream reverting snapshots +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots (with restart) +@firebase/firestore: βœ– (Memory) Will gracefully handle watch stream reverting snapshots (with restart) (skipped) +@firebase/firestore: βœ” (Persistence) Individual documents cannot revert +@firebase/firestore: βœ” (Memory) Individual documents cannot revert +@firebase/firestore: βœ” (Persistence) Individual (deleted) documents cannot revert +@firebase/firestore: βœ” (Memory) Individual (deleted) documents cannot revert +@firebase/firestore: βœ” (Persistence) Waits until Watch catches up to local deletes +@firebase/firestore: βœ” (Memory) Waits until Watch catches up to local deletes +@firebase/firestore: βœ” (Persistence) Listens are reestablished after network disconnect +@firebase/firestore: βœ” (Memory) Listens are reestablished after network disconnect +@firebase/firestore: βœ” (Persistence) Synthesizes deletes for missing document +@firebase/firestore: βœ” (Memory) Synthesizes deletes for missing document +@firebase/firestore: βœ” (Persistence) Re-opens target without existence filter +@firebase/firestore: βœ” (Memory) Re-opens target without existence filter +@firebase/firestore: βœ” (Persistence) Ignores update from inactive target +@firebase/firestore: βœ” (Memory) Ignores update from inactive target +@firebase/firestore: βœ” (Persistence) Does not synthesize deletes for previously acked documents +@firebase/firestore: βœ” (Memory) Does not synthesize deletes for previously acked documents +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to +@firebase/firestore: βœ” (Memory) Query is rejected and re-listened to +@firebase/firestore: βœ” (Persistence) Persists resume token sent with target +@firebase/firestore: βœ” (Memory) Persists resume token sent with target +@firebase/firestore: βœ” (Persistence) Array-contains queries support resuming +@firebase/firestore: βœ” (Memory) Array-contains queries support resuming +@firebase/firestore: βœ” (Persistence) Persists global resume tokens on unlisten +@firebase/firestore: βœ” (Memory) Persists global resume tokens on unlisten +@firebase/firestore: βœ” (Persistence) Omits global resume tokens for a short while +@firebase/firestore: βœ– (Memory) Omits global resume tokens for a short while (skipped) +@firebase/firestore: βœ” (Persistence) Persists global resume tokens if the snapshot is old enough +@firebase/firestore: βœ– (Memory) Persists global resume tokens if the snapshot is old enough (skipped) +@firebase/firestore: βœ” (Persistence) Query is executed by primary client +@firebase/firestore: βœ– (Memory) Query is executed by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is shared between primary and secondary client +@firebase/firestore: βœ– (Memory) Query is shared between primary and secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is joined by primary client +@firebase/firestore: βœ– (Memory) Query is joined by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients +@firebase/firestore: βœ– (Memory) Query only raises events in participating clients (skipped) +@firebase/firestore: βœ” (Persistence) Query is unlistened to by primary client +@firebase/firestore: βœ– (Memory) Query is unlistened to by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is resumed by secondary client +@firebase/firestore: βœ– (Memory) Query is resumed by secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is rejected by primary client +@firebase/firestore: βœ– (Memory) Query is rejected by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to by secondary client +@firebase/firestore: βœ– (Memory) Query is rejected and re-listened to by secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Secondary client raises latency compensated snapshot from primary mutation +@firebase/firestore: βœ– (Memory) Secondary client raises latency compensated snapshot from primary mutation (skipped) +@firebase/firestore: βœ– (Persistence) Secondary client advances query state with global snapshot from primary (skipped) +@firebase/firestore: βœ– (Memory) Secondary client advances query state with global snapshot from primary (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from same secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from same secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from different secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from different secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from primary and secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from primary and secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Can listen/unlisten to mirror queries. +@firebase/firestore: βœ” (Memory) Can listen/unlisten to mirror queries. +@firebase/firestore: βœ” (Persistence) Secondary client uses primary client's online state +@firebase/firestore: βœ– (Memory) Secondary client uses primary client's online state (skipped) +@firebase/firestore: βœ” (Persistence) New client uses existing online state +@firebase/firestore: βœ– (Memory) New client uses existing online state (skipped) +@firebase/firestore: βœ” (Persistence) New client becomes primary if no client has its network enabled +@firebase/firestore: βœ– (Memory) New client becomes primary if no client has its network enabled (skipped) +@firebase/firestore: βœ” (Persistence) Secondary client's online state is ignored +@firebase/firestore: βœ– (Memory) Secondary client's online state is ignored (skipped) +@firebase/firestore: βœ” (Persistence) Offline state doesn't persist if primary is shut down +@firebase/firestore: βœ– (Memory) Offline state doesn't persist if primary is shut down (skipped) +@firebase/firestore: βœ” (Persistence) Listen is re-listened to after primary tab failover +@firebase/firestore: βœ– (Memory) Listen is re-listened to after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Listen is established in new primary tab +@firebase/firestore: βœ– (Memory) Listen is established in new primary tab (skipped) +@firebase/firestore: βœ” (Persistence) Query recovers after primary takeover +@firebase/firestore: βœ– (Memory) Query recovers after primary takeover (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.323Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Release target'.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.323Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Release target'.' +@firebase/firestore: βœ” (Persistence) Query bounces between primaries +@firebase/firestore: βœ– (Memory) Query bounces between primaries (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.339Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Apply remote event'.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.339Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Apply remote event'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores watch update +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores watch update (skipped) +@firebase/firestore: βœ” (Persistence) Listen is established in newly started primary +@firebase/firestore: βœ– (Memory) Listen is established in newly started primary (skipped) +@firebase/firestore: βœ” (Persistence) Previous primary immediately regains primary lease +@firebase/firestore: βœ– (Memory) Previous primary immediately regains primary lease (skipped) +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires when called even if there are no local listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires when called even if there are no local listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for metadata changes +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for metadata changes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires once for multiple event snapshots +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires once for multiple event snapshots +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ– (Memory) Empty initial snapshot is raised from cache in multiple tabs (skipped) +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ– (Memory) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs (skipped) +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount when adding the target +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount when adding the target +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount that does not include pending mutations +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount that does not include pending mutations +@firebase/firestore: βœ” (Persistence) ExpectedCount in listen request should work after coming back online +@firebase/firestore: βœ” (Memory) ExpectedCount in listen request should work after coming back online +@firebase/firestore: βœ” (Persistence) Global snapshots would not alter query state if there is no changes +@firebase/firestore: βœ– (Memory) Global snapshots would not alter query state if there is no changes (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.513Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.513Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: Offline: +@firebase/firestore: βœ” (Persistence) Empty queries are resolved if client goes offline +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.515Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.515Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Empty queries are resolved if client goes offline +@firebase/firestore: βœ” (Persistence) A successful message delays offline status +@firebase/firestore: βœ” (Memory) A successful message delays offline status +@firebase/firestore: βœ– (Persistence) Removing all listeners delays "Offline" status on next listen (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.523Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.523Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Removing all listeners delays "Offline" status on next listen +@firebase/firestore: βœ” (Persistence) Queries revert to fromCache=true when offline. +@firebase/firestore: βœ” (Memory) Queries revert to fromCache=true when offline. +@firebase/firestore: βœ” (Persistence) Queries with limbo documents handle going offline. +@firebase/firestore: βœ” (Memory) Queries with limbo documents handle going offline. +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.551Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.551Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) OnlineState timeout triggers offline behavior +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.557Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.557Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) OnlineState timeout triggers offline behavior +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.563Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.563Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.566Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.566Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.574Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.574Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.577Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.577Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: βœ– (Persistence) Queries return from cache when network disabled (skipped) +@firebase/firestore: βœ” (Memory) Queries return from cache when network disabled +@firebase/firestore: βœ” (Persistence) Client stays offline during credential change +@firebase/firestore: βœ” (Memory) Client stays offline during credential change +@firebase/firestore: OrderBy: +@firebase/firestore: βœ” (Persistence) orderBy applies filtering based on local state +@firebase/firestore: βœ” (Memory) orderBy applies filtering based on local state +@firebase/firestore: βœ” (Persistence) orderBy applies to existing documents +@firebase/firestore: βœ” (Memory) orderBy applies to existing documents +@firebase/firestore: Performance Tests [10 iterations]: +@firebase/firestore: βœ– (Persistence) Insert a new document (skipped) +@firebase/firestore: βœ– (Memory) Insert a new document (skipped) +@firebase/firestore: βœ– (Persistence) Start a listen, write a document, ack the write, handle watch snapshot, unlisten (skipped) +@firebase/firestore: βœ– (Memory) Start a listen, write a document, ack the write, handle watch snapshot, unlisten (skipped) +@firebase/firestore: βœ– (Persistence) Write 100 documents and raise a snapshot (skipped) +@firebase/firestore: βœ– (Memory) Write 100 documents and raise a snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Update a single document (skipped) +@firebase/firestore: βœ– (Memory) Update a single document (skipped) +@firebase/firestore: βœ– (Persistence) Update a document and wait for snapshot with existing listen (skipped) +@firebase/firestore: βœ– (Memory) Update a document and wait for snapshot with existing listen (skipped) +@firebase/firestore: βœ– (Persistence) Process 100 documents from Watch and wait for snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 100 documents from Watch and wait for snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Process 25 target updates and wait for snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 25 target updates and wait for snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Add 500 documents, issue 10 queries that return 10 documents each, unlisten (skipped) +@firebase/firestore: βœ– (Memory) Add 500 documents, issue 10 queries that return 10 documents each, unlisten (skipped) +@firebase/firestore: Persistence: +@firebase/firestore: βœ” (Persistence) Local mutations are persisted and re-sent +@firebase/firestore: βœ– (Memory) Local mutations are persisted and re-sent (skipped) +@firebase/firestore: βœ” (Persistence) Persisted local mutations are visible to listeners +@firebase/firestore: βœ– (Memory) Persisted local mutations are visible to listeners (skipped) +@firebase/firestore: βœ” (Persistence) Remote documents are persisted +@firebase/firestore: βœ– (Memory) Remote documents are persisted (skipped) +@firebase/firestore: βœ” (Persistence) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Persistence) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches +@firebase/firestore: βœ” (Memory) Mutation Queue is persisted across uid switches +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches (with restarts) +@firebase/firestore: βœ– (Memory) Mutation Queue is persisted across uid switches (with restarts) (skipped) +@firebase/firestore: βœ” (Persistence) Visible mutations reflect uid switches +@firebase/firestore: βœ” (Memory) Visible mutations reflect uid switches +@firebase/firestore: βœ” (Persistence) Detects all active clients +@firebase/firestore: βœ– (Memory) Detects all active clients (skipped) +@firebase/firestore: βœ” (Persistence) Single tab acquires primary lease +@firebase/firestore: βœ– (Memory) Single tab acquires primary lease (skipped) +@firebase/firestore: βœ” (Persistence) Foreground tab acquires primary lease +@firebase/firestore: βœ– (Memory) Foreground tab acquires primary lease (skipped) +@firebase/firestore: βœ” (Persistence) Primary lease bound to network state +@firebase/firestore: βœ– (Memory) Primary lease bound to network state (skipped) +@firebase/firestore: βœ” (Persistence) clearPersistence() shuts down other clients +@firebase/firestore: βœ– (Memory) clearPersistence() shuts down other clients (skipped) +@firebase/firestore: Queries: +@firebase/firestore: βœ” (Persistence) Collection Group query +@firebase/firestore: βœ” (Memory) Collection Group query +@firebase/firestore: βœ” (Persistence) Collection Group query with mutations +@firebase/firestore: βœ” (Memory) Collection Group query with mutations +@firebase/firestore: βœ” (Persistence) Latency-compensated updates are included in query results +@firebase/firestore: βœ” (Memory) Latency-compensated updates are included in query results +@firebase/firestore: βœ” (Persistence) Queries in different tabs will not interfere +@firebase/firestore: βœ– (Memory) Queries in different tabs will not interfere (skipped) +@firebase/firestore: Persistence Recovery +@firebase/firestore: βœ” (Persistence) Write is acknowledged by primary client (with recovery) +@firebase/firestore: βœ– (Memory) Write is acknowledged by primary client (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Clients fail to lookup mutations (with recovery) +@firebase/firestore: βœ– (Memory) Clients fail to lookup mutations (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query raises events in secondary client (with recovery) +@firebase/firestore: βœ– (Memory) Query raises events in secondary client (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query is listened to by primary (with recovery) +@firebase/firestore: βœ– (Memory) Query is listened to by primary (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query with active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ– (Memory) Query with active view recovers after primary tab failover (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query without active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ– (Memory) Query without active view recovers after primary tab failover (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Ignores intermittent lease refresh failures (with recovery) +@firebase/firestore: βœ– (Memory) Ignores intermittent lease refresh failures (with recovery) (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.895Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.895Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Persistence) Recovers when write cannot be persisted +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.901Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.901Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Memory) Recovers when write cannot be persisted +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.907Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.907Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Persistence) Does not surface non-persisted writes +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.914Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.914Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Memory) Does not surface non-persisted writes +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when write acknowledgment cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write rejection cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when write rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted (with restart) +@firebase/firestore: βœ– (Memory) Recovers when write acknowledgment cannot be persisted (with restart) (skipped) +@firebase/firestore: βœ” (Persistence) Writes are pending until acknowledgement is persisted +@firebase/firestore: βœ” (Memory) Writes are pending until acknowledgement is persisted +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.971Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.971Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Surfaces local documents if notifyLocalViewChanges fails +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.976Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.976Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Surfaces local documents if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Persistence) Excludes documents from future queries even if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Memory) Excludes documents from future queries even if notifyLocalViewChanges fails +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.994Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T22:53:36.994Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Persistence) Fails targets that cannot be allocated +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.000Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.000Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Memory) Fails targets that cannot be allocated +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.006Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.006Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Persistence) Can re-add failed target +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.010Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.010Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Memory) Can re-add failed target +@firebase/firestore: βœ” (Persistence) Recovers when watch update cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when watch update cannot be persisted +@firebase/firestore: βœ” (Persistence) Handles rejections that cannot be persisted +@firebase/firestore: βœ” (Memory) Handles rejections that cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo acknowledgement cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when Limbo acknowledgement cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo rejection cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when Limbo rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) User change handles transaction failures (with recovery) +@firebase/firestore: βœ– (Memory) User change handles transaction failures (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Multiple user changes during transaction failure (with recovery) +@firebase/firestore: βœ– (Memory) Multiple user changes during transaction failure (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Memory) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Persistence) Can re-listen to query when unlisten fails +@firebase/firestore: βœ” (Memory) Can re-listen to query when unlisten fails +@firebase/firestore: Remote store: +@firebase/firestore: βœ” (Persistence) Waits for watch to remove targets +@firebase/firestore: βœ” (Memory) Waits for watch to remove targets +@firebase/firestore: βœ” (Persistence) Waits for watch to ack last target add +@firebase/firestore: βœ” (Memory) Waits for watch to ack last target add +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.136Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.136Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Cleans up watch state correctly +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.139Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.139Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Cleans up watch state correctly +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.144Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.144Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Handles user changes while offline (b/74749605). +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.147Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.147Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Handles user changes while offline (b/74749605). +@firebase/firestore: Resume tokens: +@firebase/firestore: βœ” (Persistence) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Memory) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Persistence) Resume tokens are used across new listens +@firebase/firestore: βœ” (Memory) Resume tokens are used across new listens +@firebase/firestore: Writes: +@firebase/firestore: βœ” (Persistence) Two sequential writes to different documents smoke test. +@firebase/firestore: βœ” (Memory) Two sequential writes to different documents smoke test. +@firebase/firestore: βœ” (Persistence) Event is raised for a local set before and after the write ack +@firebase/firestore: βœ” (Memory) Event is raised for a local set before and after the write ack +@firebase/firestore: βœ” (Persistence) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Memory) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Persistence) Doesn't raise event for document with pending patch +@firebase/firestore: βœ” (Memory) Doesn't raise event for document with pending patch +@firebase/firestore: βœ” (Persistence) Cache will not keep data for an outdated write ack +@firebase/firestore: βœ” (Memory) Cache will not keep data for an outdated write ack +@firebase/firestore: βœ” (Persistence) Cache raises correct event if write is acked before watch delivers it +@firebase/firestore: βœ” (Memory) Cache raises correct event if write is acked before watch delivers it +@firebase/firestore: βœ” (Persistence) Cache will hold local write until watch catches up +@firebase/firestore: βœ” (Memory) Cache will hold local write until watch catches up +@firebase/firestore: βœ” (Persistence) Local patch is applied to query until watch catches up +@firebase/firestore: βœ” (Memory) Local patch is applied to query until watch catches up +@firebase/firestore: βœ” (Persistence) Writes are pipelined +@firebase/firestore: βœ” (Memory) Writes are pipelined +@firebase/firestore: βœ” (Persistence) Pipelined writes can fail +@firebase/firestore: βœ” (Memory) Pipelined writes can fail +@firebase/firestore: βœ” (Persistence) Failed writes are released immediately. +@firebase/firestore: βœ” (Memory) Failed writes are released immediately. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent. +@firebase/firestore: βœ” (Memory) Writes are not re-sent. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent after disable/enable network. +@firebase/firestore: βœ” (Memory) Writes are not re-sent after disable/enable network. +@firebase/firestore: βœ– (Persistence) Writes are released when there are no queries left (skipped) +@firebase/firestore: βœ” (Memory) Writes are released when there are no queries left +@firebase/firestore: βœ” (Persistence) Writes that fail with code invalid-argument are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code invalid-argument are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code already-exists are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code already-exists are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code permission-denied are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code permission-denied are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code out-of-range are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code out-of-range are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code data-loss are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code data-loss are rejected +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.514Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.514Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.514Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.514Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: βœ” (Persistence) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.515Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.515Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.516Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.516Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: βœ” (Memory) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code aborted are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code aborted are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code cancelled are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code cancelled are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unknown are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unknown are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code deadline-exceeded are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code deadline-exceeded are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code internal are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code internal are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unavailable are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unavailable are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unauthenticated are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unauthenticated are retried +@firebase/firestore: βœ” (Persistence) Ensure correct events after patching a doc (including a delete) and getting watcher events. +@firebase/firestore: βœ” (Memory) Ensure correct events after patching a doc (including a delete) and getting watcher events. +@firebase/firestore: βœ” (Persistence) Writes are resent after network disconnect +@firebase/firestore: βœ” (Memory) Writes are resent after network disconnect +@firebase/firestore: βœ” (Persistence) New writes are sent after write failure +@firebase/firestore: βœ” (Memory) New writes are sent after write failure +@firebase/firestore: βœ” (Persistence) Primary client acknowledges write +@firebase/firestore: βœ– (Memory) Primary client acknowledges write (skipped) +@firebase/firestore: βœ” (Persistence) Primary client rejects write +@firebase/firestore: βœ– (Memory) Primary client rejects write (skipped) +@firebase/firestore: βœ” (Persistence) Pending writes are shared between clients +@firebase/firestore: βœ– (Memory) Pending writes are shared between clients (skipped) +@firebase/firestore: βœ” (Persistence) Pending write is acknowledged by primary client +@firebase/firestore: βœ– (Memory) Pending write is acknowledged by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Pending write is rejected by primary client +@firebase/firestore: βœ– (Memory) Pending write is rejected by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Writes are released by primary client +@firebase/firestore: βœ– (Memory) Writes are released by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Writes are held during primary failover +@firebase/firestore: βœ– (Memory) Writes are held during primary failover (skipped) +@firebase/firestore: βœ” (Persistence) Write are sequenced by multiple clients +@firebase/firestore: βœ– (Memory) Write are sequenced by multiple clients (skipped) +@firebase/firestore: βœ” (Persistence) Write is executed after primary tab failover +@firebase/firestore: βœ– (Memory) Write is executed after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Secondary tabs handle user change +@firebase/firestore: βœ– (Memory) Secondary tabs handle user change (skipped) +@firebase/firestore: βœ” (Persistence) Mutations are scoped by user +@firebase/firestore: βœ– (Memory) Mutations are scoped by user (skipped) +@firebase/firestore: βœ” (Persistence) Mutation recovers after primary takeover +@firebase/firestore: βœ– (Memory) Mutation recovers after primary takeover (skipped) +@firebase/firestore: βœ” (Persistence) Write is sent by newly started primary +@firebase/firestore: βœ– (Memory) Write is sent by newly started primary (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.790Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Acknowledge batch'.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.790Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Acknowledge batch'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores acknowledged write +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores acknowledged write (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.800Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Reject batch'.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.800Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Reject batch'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores rejected write +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores rejected write (skipped) +@firebase/firestore: βœ” (Persistence) Mutation are not sent twice after primary failover +@firebase/firestore: βœ– (Memory) Mutation are not sent twice after primary failover (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves after write acknowledgment +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves after write acknowledgment +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves if another write is issued +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves if another write is issued +@firebase/firestore: βœ” (Persistence) Wait for pending writes waits after restart +@firebase/firestore: βœ– (Memory) Wait for pending writes waits after restart (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves for write in secondary tab +@firebase/firestore: βœ– (Memory) Wait for pending writes resolves for write in secondary tab (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves independently for different tabs +@firebase/firestore: βœ– (Memory) Wait for pending writes resolves independently for different tabs (skipped) +@firebase/firestore: diffArrays +@firebase/firestore: βœ” Missing Element +@firebase/firestore: βœ” AddedElement +@firebase/firestore: βœ” Without Ordering +@firebase/firestore: βœ” Empty Lists +@firebase/firestore: AsyncQueue +@firebase/firestore: βœ” schedules ops in right order +@firebase/firestore: βœ” handles failures +@firebase/firestore: βœ” can schedule ops in the future +@firebase/firestore: βœ” Can cancel delayed operations +@firebase/firestore: βœ” Can run all delayed operations early +@firebase/firestore: βœ” Can run some delayed operations early +@firebase/firestore: βœ” Retries retryable operations +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.978Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.978Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.979Z] @firebase/firestore:', 'Firestore (11.3.0): INTERNAL UNHANDLED ERROR: ', 'Error: FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure +@firebase/firestore: at fail (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4413:7408) +@firebase/firestore: at Array. (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:81503:37) +@firebase/firestore: at AsyncQueueImpl.retryNextOp (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40360) +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40078 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:39715 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:41177' +@firebase/firestore: ERROR: '[2025-03-04T22:53:37.979Z] @firebase/firestore:', 'Firestore (11.3.0): INTERNAL UNHANDLED ERROR: ', 'Error: FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure +@firebase/firestore: at fail (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4413:7408) +@firebase/firestore: at Array. (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:81503:37) +@firebase/firestore: at AsyncQueueImpl.retryNextOp (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40360) +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40078 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:39715 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:41177' +@firebase/firestore: βœ” Doesn't retry internal exceptions +@firebase/firestore: βœ” Schedules first retryable attempt with no delay +@firebase/firestore: βœ” Retries retryable operations with backoff +@firebase/firestore: βœ” Retries retryable operations in order +@firebase/firestore: βœ” Does not delay retryable operations that succeed +@firebase/firestore: βœ” Catches up when retryable operation fails +@firebase/firestore: βœ” Can drain (non-delayed) operations +@firebase/firestore: βœ” Schedules operations with respect to shut down +@firebase/firestore: βœ” Does not run existing operations if opted out +@firebase/firestore: atob +@firebase/firestore: βœ” decodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” decodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: btoa +@firebase/firestore: βœ” encodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” encodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: byteStreamReaderFromString() +@firebase/firestore: βœ” returns a reader stepping readable stream +@firebase/firestore: Bundle +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 4 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 4 +@firebase/firestore: βœ” reads without named query with bytesPerRead 4 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 4 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 4 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 4 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 64 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 64 +@firebase/firestore: βœ” reads without named query with bytesPerRead 64 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 64 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 64 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 64 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1024 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1024 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1024 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1024 +@firebase/firestore: LogicUtils +@firebase/firestore: βœ” implements field filter associativity +@firebase/firestore: βœ” implements composite filter associativity +@firebase/firestore: βœ” implements field filter distribution over field filter +@firebase/firestore: βœ” implements field filter distribution over and filter +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements in expansion for field filters +@firebase/firestore: βœ” implements in expansion for composite filters +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements and filter distribution with and filter +@firebase/firestore: βœ” implements and filter distribution with or filter +@firebase/firestore: βœ” implements or filter distribution with and filter +@firebase/firestore: βœ” implements or filter distribution with or filter +@firebase/firestore: βœ” implements field filter compute DNF +@firebase/firestore: βœ” implements compute dnf flat AND filter +@firebase/firestore: βœ” implements compute dnf flat OR filter +@firebase/firestore: βœ” compute DNF1 +@firebase/firestore: βœ” compute DNF2 +@firebase/firestore: βœ” compute DNF3 +@firebase/firestore: βœ” compute DNF4 +@firebase/firestore: βœ” compute DNF5 +@firebase/firestore: βœ” compute DNF6 +@firebase/firestore: βœ” compute DNF7 +@firebase/firestore: βœ” compute DNF8 +@firebase/firestore: immediateSuccessor +@firebase/firestore: βœ” generates the correct immediate successors +@firebase/firestore: typeCast +@firebase/firestore: βœ” can cast types +@firebase/firestore: ERROR: '[2025-03-04T22:53:38.177Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Expected type 'Bar', but was 'Foo'' +@firebase/firestore: ERROR: '[2025-03-04T22:53:38.177Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Expected type 'Bar', but was 'Foo'' +@firebase/firestore: βœ” validates types +@firebase/firestore: ERROR: '[2025-03-04T22:53:38.177Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: FieldMask contains field that is not unique: a' +@firebase/firestore: ERROR: '[2025-03-04T22:53:38.177Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: FieldMask contains field that is not unique: a' +@firebase/firestore: FieldMask +@firebase/firestore: βœ” cannot contain duplicate fields +@firebase/firestore: CompareUtf8Strings +@firebase/firestore: βœ” compareUtf8Strings should return correct results +@firebase/firestore: ObjectMap +@firebase/firestore: βœ” can get/put/delete values +@firebase/firestore: βœ” can handle collisions +@firebase/firestore: SortedMap Tests +@firebase/firestore: βœ” Create node +@firebase/firestore: βœ” You can search a map for a specific key +@firebase/firestore: βœ” You can insert a new key/value pair into the tree +@firebase/firestore: βœ” You can remove a key/value pair from the map +@firebase/firestore: βœ” More removals +@firebase/firestore: βœ” Removal bug +@firebase/firestore: βœ” Test increasing +@firebase/firestore: βœ” The structure should be valid after insertion (1) +@firebase/firestore: βœ” The structure should be valid after insertion (2) +@firebase/firestore: βœ” Rotate left leaves the tree in a valid state +@firebase/firestore: βœ” Rotate right leaves the tree in a valid state +@firebase/firestore: βœ” The structure should be valid after insertion (3) +@firebase/firestore: βœ” you can overwrite a value +@firebase/firestore: βœ” removing the last element returns an empty map +@firebase/firestore: βœ” empty .get() +@firebase/firestore: βœ” empty .size +@firebase/firestore: βœ” empty .remove() +@firebase/firestore: βœ” .reverseTraversal() works. +@firebase/firestore: βœ” insertion and removal of 100 items in random order. +@firebase/firestore: βœ– Perf (skipped) +@firebase/firestore: βœ– Perf: Insertion and removal with various # of items. (skipped) +@firebase/firestore: βœ– Perf: Comparison with {}: Insertion and removal with various # of items. (skipped) +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” SortedMapIterator empty test. +@firebase/firestore: βœ” forward iterator without start key +@firebase/firestore: βœ” forward iterator with start key. +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” forward iterator with start key larger than max key +@firebase/firestore: βœ” forward iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator without start key +@firebase/firestore: βœ” reverse iterator with start key. +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T22:53:46.115Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” reverse iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator with start key larger than max key +@firebase/firestore: βœ” SortedMap.indexOf returns index. +@firebase/firestore: SortedSet +@firebase/firestore: βœ” keeps elements in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates elements +@firebase/firestore: βœ” can iterate over all elements within a range +@firebase/firestore: βœ” can iterate over all elements while condition +@firebase/firestore: βœ” can find element equal or greater to provided. +@firebase/firestore: βœ” can unionWith another set. +@firebase/firestore: βœ” returns indexes of elements +@firebase/firestore: βœ” diff sorted sets with missing element +@firebase/firestore: βœ” diff sorted sets with added element +@firebase/firestore: βœ” diff sorted sets with empty sets +@firebase/firestore: (Persistence=memory_lru_gc) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: βœ– getCountFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T22:53:48.875Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8865 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"b8yb4xXvADAaJw4HJ8Tg"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T22:53:48.875Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8865 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"b8yb4xXvADAaJw4HJ8Tg"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=indexeddb) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: βœ– getCountFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T22:53:51.405Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8878 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"38js5z0e8tcJmg5y2T5f"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T22:53:51.405Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8878 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"38js5z0e8tcJmg5y2T5f"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: βœ– getAggregateFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T22:53:55.145Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8897 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"MOwX2eJZXVaZExDYwARv"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T22:53:55.145Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f8897 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"MOwX2eJZXVaZExDYwARv"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=indexeddb) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: βœ– getAggregateFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T22:53:59.039Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f88b6 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"ZgSH9wENpYAwnG3C8rde"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T22:53:59.039Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f88b6 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"ZgSH9wENpYAwnG3C8rde"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer +@firebase/firestore: WARN: '[2025-03-04T22:54:01.848Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f88c8 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"JLNDGyHQRQE9OEG1gess"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T22:54:01.848Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f88c8 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"JLNDGyHQRQE9OEG1gess"}]}}}' +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer +@firebase/firestore: (Persistence=indexeddb) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer +@firebase/firestore: WARN: '[2025-03-04T22:54:15.460Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f892e failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"0th8PELc4qSyQRXpNRWD"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T22:54:15.460Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x4e6f892e failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"0th8PELc4qSyQRXpNRWD"}]}}}' +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer +@firebase/firestore: (Persistence=memory_lru_gc) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() +@firebase/firestore: βœ” append to array via update() +@firebase/firestore: βœ” append to array via set(..., {merge: true}) +@firebase/firestore: βœ” append object to array via update() +@firebase/firestore: βœ” remove from array via update() +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) +@firebase/firestore: βœ” remove object from array via update() +@firebase/firestore: βœ” arrayUnion() supports DocumentReference +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc +@firebase/firestore: βœ” update() with no cached base doc +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() +@firebase/firestore: (Persistence=indexeddb) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() +@firebase/firestore: βœ” append to array via update() +@firebase/firestore: βœ” append to array via set(..., {merge: true}) +@firebase/firestore: βœ” append object to array via update() +@firebase/firestore: βœ” remove from array via update() +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) +@firebase/firestore: βœ” remove object from array via update() +@firebase/firestore: βœ” arrayUnion() supports DocumentReference +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc +@firebase/firestore: βœ” update() with no cached base doc +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() +@firebase/firestore: (Persistence=memory_lru_gc) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents +@firebase/firestore: βœ” can set documents with merge +@firebase/firestore: βœ” can update documents +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can delete documents +@firebase/firestore: βœ” commit atomically, raising correct events +@firebase/firestore: βœ” fail atomically, raising correct events +@firebase/firestore: βœ” write the same server timestamp across writes +@firebase/firestore: βœ” can write the same document multiple times +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents +@firebase/firestore: βœ” can set documents with merge +@firebase/firestore: βœ” can update documents +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can delete documents +@firebase/firestore: βœ” commit atomically, raising correct events +@firebase/firestore: βœ” fail atomically, raising correct events +@firebase/firestore: βœ” write the same server timestamp across writes +@firebase/firestore: βœ” can write the same document multiple times +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=memory_lru_gc) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface +@firebase/firestore: βœ” load with documents and queries with promise interface +@firebase/firestore: βœ” load for a second time skips +@firebase/firestore: ERROR: '[2025-03-04T22:54:51.696Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:54:51.696Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” load with documents already pulled from backend +@firebase/firestore: βœ” loaded documents should not be GC-ed right away +@firebase/firestore: WARN: '[2025-03-04T22:54:51.717Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: WARN: '[2025-03-04T22:54:51.717Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: βœ” load with documents from other projects fails +@firebase/firestore: (Persistence=indexeddb) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface +@firebase/firestore: βœ” load with documents and queries with promise interface +@firebase/firestore: βœ” load for a second time skips +@firebase/firestore: ERROR: '[2025-03-04T22:54:52.497Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:54:52.497Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” load with documents already pulled from backend +@firebase/firestore: βœ” loaded documents should not be GC-ed right away +@firebase/firestore: WARN: '[2025-03-04T22:54:52.523Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: WARN: '[2025-03-04T22:54:52.523Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: βœ” load with documents from other projects fails +@firebase/firestore: (Persistence=memory_lru_gc) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters +@firebase/firestore: βœ” can use on special values +@firebase/firestore: βœ” can use with array membership +@firebase/firestore: βœ” can use with nested field +@firebase/firestore: βœ” can use with nested composite filters +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically +@firebase/firestore: βœ” can use multiple explicit order by field +@firebase/firestore: βœ” can use in aggregate query +@firebase/firestore: βœ” can use document ID im multiple inequality query +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can get same result from server and cache +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=indexeddb) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters +@firebase/firestore: βœ” can use on special values +@firebase/firestore: βœ” can use with array membership +@firebase/firestore: βœ” can use with nested field +@firebase/firestore: βœ” can use with nested composite filters +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically +@firebase/firestore: βœ” can use multiple explicit order by field +@firebase/firestore: βœ” can use in aggregate query +@firebase/firestore: βœ” can use document ID im multiple inequality query +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can get same result from server and cache +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=memory_lru_gc) Cursors +@firebase/firestore: βœ” can page through items +@firebase/firestore: βœ” can be created from documents +@firebase/firestore: βœ” can be created from values +@firebase/firestore: βœ” can be created using document id +@firebase/firestore: βœ” can be used with reference values +@firebase/firestore: βœ” can be used in descending queries +@firebase/firestore: βœ” can accept Timestamps as bounds +@firebase/firestore: βœ” can accept Timestamps in where clause +@firebase/firestore: βœ” truncate Timestamps +@firebase/firestore: (Persistence=indexeddb) Cursors +@firebase/firestore: βœ” can page through items +@firebase/firestore: βœ” can be created from documents +@firebase/firestore: βœ” can be created from values +@firebase/firestore: βœ” can be created using document id +@firebase/firestore: βœ” can be used with reference values +@firebase/firestore: βœ” can be used in descending queries +@firebase/firestore: βœ” can accept Timestamps as bounds +@firebase/firestore: βœ” can accept Timestamps in where clause +@firebase/firestore: βœ” truncate Timestamps +@firebase/firestore: (Persistence=memory_lru_gc) Database +@firebase/firestore: βœ” can set a document +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document +@firebase/firestore: βœ” can update existing document +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document +@firebase/firestore: βœ” can merge data with an existing document using set +@firebase/firestore: βœ” can merge server timestamps +@firebase/firestore: βœ” can merge empty object +@firebase/firestore: βœ” update with empty object replaces all fields +@firebase/firestore: βœ” merge with empty object replaces all fields +@firebase/firestore: βœ” can delete field using merge +@firebase/firestore: βœ” can delete field using mergeFields +@firebase/firestore: βœ” can set server timestamps using mergeFields +@firebase/firestore: βœ” can replace an array by merging using set +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask +@firebase/firestore: βœ” doesn't apply field delete outside of mask +@firebase/firestore: βœ” doesn't apply field transform outside of mask +@firebase/firestore: βœ” can set an empty field mask +@firebase/firestore: βœ” can specify fields multiple times in a field mask +@firebase/firestore: βœ” cannot update nonexistent document +@firebase/firestore: βœ” can delete a field with an update +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can specify updated field multiple times +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.383Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.383Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.526Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.526Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.976Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:43.976Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for add data to document +@firebase/firestore: ERROR: '[2025-03-04T22:55:44.718Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:44.718Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for change data in document +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.413Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.413Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.689Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.689Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.689Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:45.689Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” Listen can be called multiple times +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline +@firebase/firestore: βœ– offline writes are sent after restart (skipped) +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: βœ– maintains persistence after restarting app (skipped) +@firebase/firestore: βœ– can clear persistence if the client has been terminated (skipped) +@firebase/firestore: βœ– can clear persistence if the client has not been initialized (skipped) +@firebase/firestore: βœ– cannot clear persistence if the client has been initialized (skipped) +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: ERROR: '[2025-03-04T22:55:47.447Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:55:47.447Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: βœ– can set and get data with auto detect long polling enabled (skipped) +@firebase/firestore: βœ” can keep docs separate with multi-db when online +@firebase/firestore: βœ” can keep docs separate with multi-db when offline +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. +@firebase/firestore: βœ” Lru GC is enabled by default. +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings +@firebase/firestore: βœ” can listen to documents with vectors +@firebase/firestore: βœ” SDK orders vector field same way as backend +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 14:53:29 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server with persistence +@firebase/firestore: (Persistence=indexeddb) Database +@firebase/firestore: βœ” can set a document +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document +@firebase/firestore: βœ” can update existing document +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document +@firebase/firestore: βœ” can merge data with an existing document using set +@firebase/firestore: βœ” can merge server timestamps +@firebase/firestore: βœ” can merge empty object +@firebase/firestore: βœ” update with empty object replaces all fields +@firebase/firestore: βœ” merge with empty object replaces all fields +@firebase/firestore: βœ” can delete field using merge +@firebase/firestore: βœ” can delete field using mergeFields +@firebase/firestore: βœ” can set server timestamps using mergeFields +@firebase/firestore: βœ” can replace an array by merging using set +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask +@firebase/firestore: βœ” doesn't apply field delete outside of mask +@firebase/firestore: βœ” doesn't apply field transform outside of mask +@firebase/firestore: βœ” can set an empty field mask +@firebase/firestore: βœ” can specify fields multiple times in a field mask +@firebase/firestore: βœ” cannot update nonexistent document +@firebase/firestore: βœ” can delete a field with an update +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can specify updated field multiple times +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.198Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.198Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.362Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.362Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.784Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:29.784Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for add data to document +@firebase/firestore: ERROR: '[2025-03-04T22:56:30.481Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:30.481Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for change data in document +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.226Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.226Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.519Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.519Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.519Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:31.519Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” Listen can be called multiple times +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline +@firebase/firestore: WARN: '[2025-03-04T22:56:32.301Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:56:32.301Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” offline writes are sent after restart +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: WARN: '[2025-03-04T22:56:33.009Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:56:33.009Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” maintains persistence after restarting app +@firebase/firestore: WARN: '[2025-03-04T22:56:33.293Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:56:33.293Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can clear persistence if the client has been terminated +@firebase/firestore: WARN: '[2025-03-04T22:56:33.564Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:56:33.564Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can clear persistence if the client has not been initialized +@firebase/firestore: βœ” cannot clear persistence if the client has been initialized +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: ERROR: '[2025-03-04T22:56:34.841Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:56:34.841Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: βœ– can set and get data with auto detect long polling enabled (skipped) +@firebase/firestore: βœ” can keep docs separate with multi-db when online +@firebase/firestore: βœ” can keep docs separate with multi-db when offline +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. +@firebase/firestore: βœ” Lru GC is enabled by default. +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings +@firebase/firestore: βœ” can listen to documents with vectors +@firebase/firestore: βœ” SDK orders vector field same way as backend +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 14:53:29 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server +@firebase/firestore: βœ– snapshot listener sorts unicode strings in document key the same as server with persistence (skipped) +@firebase/firestore: (Persistence=memory_lru_gc) Nested Fields +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: (Persistence=indexeddb) Nested Fields +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: (Persistence=memory_lru_gc) Fields with special characters +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .data() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used in query filters. +@firebase/firestore: βœ” can be used in a query orderBy. +@firebase/firestore: (Persistence=indexeddb) Fields with special characters +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .data() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used in query filters. +@firebase/firestore: βœ” can be used in a query orderBy. +@firebase/firestore: (Persistence=memory_lru_gc) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps +@firebase/firestore: (Persistence=indexeddb) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps +@firebase/firestore: (Persistence=memory_lru_gc) `undefined` properties +@firebase/firestore: βœ” are ignored in set() +@firebase/firestore: βœ” are ignored in set({ merge: true }) +@firebase/firestore: βœ” are ignored in update() +@firebase/firestore: βœ” are ignored in Query.where() +@firebase/firestore: βœ” are ignored in Query.startAt() +@firebase/firestore: (Persistence=indexeddb) `undefined` properties +@firebase/firestore: βœ” are ignored in set() +@firebase/firestore: βœ” are ignored in set({ merge: true }) +@firebase/firestore: βœ” are ignored in update() +@firebase/firestore: βœ” are ignored in Query.where() +@firebase/firestore: βœ” are ignored in Query.startAt() +@firebase/firestore: (Persistence=memory_lru_gc) GetOptions +@firebase/firestore: βœ” get document while online with default get options +@firebase/firestore: βœ” get collection while online with default get options +@firebase/firestore: βœ” get document while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:23.704Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:23.704Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.097Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.097Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.522Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.522Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.937Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:24.937Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:25.360Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:25.360Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with source=cache +@firebase/firestore: βœ” get document while online with source=server +@firebase/firestore: βœ” get collection while online with source=server +@firebase/firestore: βœ” get document while offline with source=server +@firebase/firestore: βœ” get collection while offline with source=server +@firebase/firestore: ERROR: '[2025-03-04T22:57:27.461Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:27.461Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with different get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:27.888Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:27.888Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with different get options +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: βœ– get deleted doc while offline with default get options (skipped) +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache +@firebase/firestore: βœ” get nonexistent doc while online with source=server +@firebase/firestore: βœ” get nonexistent collection while online with source=server +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server +@firebase/firestore: (Persistence=indexeddb) GetOptions +@firebase/firestore: βœ” get document while online with default get options +@firebase/firestore: βœ” get collection while online with default get options +@firebase/firestore: βœ” get document while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:30.491Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:30.491Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:30.922Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:30.922Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:31.350Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:31.350Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:31.770Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:31.770Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with source=cache +@firebase/firestore: ERROR: '[2025-03-04T22:57:32.209Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:32.209Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with source=cache +@firebase/firestore: βœ” get document while online with source=server +@firebase/firestore: βœ” get collection while online with source=server +@firebase/firestore: βœ” get document while offline with source=server +@firebase/firestore: βœ” get collection while offline with source=server +@firebase/firestore: ERROR: '[2025-03-04T22:57:34.335Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:34.335Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with different get options +@firebase/firestore: ERROR: '[2025-03-04T22:57:34.795Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:34.795Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with different get options +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: βœ– get deleted doc while offline with default get options (skipped) +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache +@firebase/firestore: βœ” get nonexistent doc while online with source=server +@firebase/firestore: βœ” get nonexistent collection while online with source=server +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server +@firebase/firestore: WARN: '[2025-03-04T22:57:35.725Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T22:57:35.725Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: (Persistence=memory_lru_gc) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: WARN: '[2025-03-04T22:57:35.725Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T22:57:35.725Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” supports schema +@firebase/firestore: WARN: '[2025-03-04T22:57:35.730Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T22:57:35.730Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: WARN: '[2025-03-04T22:57:35.739Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T22:57:35.739Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=indexeddb) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: βœ” supports schema +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=memory_lru_gc) Numeric Transforms: +@firebase/firestore: βœ” create document with increment +@firebase/firestore: βœ” merge on non-existing document with increment +@firebase/firestore: βœ– increment existing integer with integer (skipped) +@firebase/firestore: βœ” increment existing double with double +@firebase/firestore: βœ” increment existing double with integer +@firebase/firestore: βœ” increment existing integer with double +@firebase/firestore: βœ” increment existing string with integer +@firebase/firestore: βœ” increment existing string with double +@firebase/firestore: βœ” increments with set() and merge:true +@firebase/firestore: βœ– multiple double increments (skipped) +@firebase/firestore: βœ” increment twice in a batch +@firebase/firestore: βœ” increment, delete and increment in a batch +@firebase/firestore: βœ” increment on top of ServerTimestamp +@firebase/firestore: (Persistence=indexeddb) Numeric Transforms: +@firebase/firestore: βœ” create document with increment +@firebase/firestore: βœ” merge on non-existing document with increment +@firebase/firestore: βœ– increment existing integer with integer (skipped) +@firebase/firestore: βœ” increment existing double with double +@firebase/firestore: βœ” increment existing double with integer +@firebase/firestore: βœ” increment existing integer with double +@firebase/firestore: βœ” increment existing string with integer +@firebase/firestore: βœ” increment existing string with double +@firebase/firestore: βœ” increments with set() and merge:true +@firebase/firestore: βœ– multiple double increments (skipped) +@firebase/firestore: βœ” increment twice in a batch +@firebase/firestore: βœ” increment, delete and increment in a batch +@firebase/firestore: βœ” increment on top of ServerTimestamp +@firebase/firestore: (Persistence=memory_lru_gc) PersistentCacheIndexManager +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: (Persistence=indexeddb) PersistentCacheIndexManager +@firebase/firestore: βœ” getPersistentCacheIndexManager() should return distinct instances for distinct Firestore objects +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: enable/disable persistent index auto creation +@firebase/firestore: βœ” enable on new instance should succeed +@firebase/firestore: βœ” disable on new instance should succeed +@firebase/firestore: βœ” enable when already enabled should succeed +@firebase/firestore: βœ” disable when already disabled should succeed +@firebase/firestore: βœ” enabling after terminate() should throw +@firebase/firestore: βœ” disabling after terminate() should throw +@firebase/firestore: βœ” query returns correct results when index is auto-created +@firebase/firestore: delete all persistent cache indexes +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() on new instance should succeed +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is enabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is disabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() after terminate() should throw +@firebase/firestore: βœ” query returns correct results when auto-created index has been deleted +@firebase/firestore: Firestore Provider +@firebase/firestore: βœ” can provide setting +@firebase/firestore: βœ” returns same default instance from named app +@firebase/firestore: βœ” returns different instance from named app +@firebase/firestore: βœ” returns same default instance from default app +@firebase/firestore: βœ” returns different instance from different named app +@firebase/firestore: βœ” can call initializeFirestore() twice if settings are same +@firebase/firestore: WARN: '[2025-03-04T22:57:49.720Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:57:49.720Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can still use enableIndexedDbPersistence() +@firebase/firestore: WARN: '[2025-03-04T22:57:49.728Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T22:57:49.728Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” cannot mix enableIndexedDbPersistence() and settings.cache +@firebase/firestore: βœ” cannot use once terminated +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: WARN: '[2025-03-04T22:57:49.824Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8c9c transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:49.824Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8c9c transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:49.902Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8c9e transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:49.902Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8c9e transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: (Persistence=memory_lru_gc) Queries +@firebase/firestore: βœ” can issue limit queries +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order +@firebase/firestore: WARN: '[2025-03-04T22:57:51.314Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8ca5 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:51.314Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8ca5 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: ERROR: '[2025-03-04T22:57:51.797Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:51.797Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen to limitToLast queries +@firebase/firestore: WARN: '[2025-03-04T22:57:52.374Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cab transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:52.374Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cab transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: ERROR: '[2025-03-04T22:57:52.738Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:52.738Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:52.738Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:57:52.738Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries +@firebase/firestore: βœ” can issue limitToLast queries with cursors +@firebase/firestore: βœ” key order is descending for descending inequality +@firebase/firestore: βœ” can use unary filters +@firebase/firestore: βœ” can filter on infinity +@firebase/firestore: WARN: '[2025-03-04T22:57:55.365Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cb5 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:57:55.365Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cb5 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” will not get metadata only updates +@firebase/firestore: βœ” maintains correct DocumentChange indexes +@firebase/firestore: βœ– can listen for the same query with different options (skipped) +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds +@firebase/firestore: βœ” can listen for QueryMetadata changes +@firebase/firestore: βœ” can listen for metadata changes +@firebase/firestore: βœ” can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID +@firebase/firestore: βœ” can query by document ID +@firebase/firestore: WARN: '[2025-03-04T22:58:00.295Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cc9 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:00.295Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cc9 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can query by document ID using refs +@firebase/firestore: βœ” can query while reconnecting to network +@firebase/firestore: βœ” trigger with isFromCache=true when offline +@firebase/firestore: βœ” can use != filters +@firebase/firestore: βœ” can use != filters by document ID +@firebase/firestore: βœ” can use array-contains filters +@firebase/firestore: WARN: '[2025-03-04T22:58:03.705Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cd7 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:03.705Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cd7 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can use IN filters +@firebase/firestore: βœ” can use IN filters by document ID +@firebase/firestore: βœ” can use NOT_IN filters +@firebase/firestore: βœ” can use NOT_IN filters by document ID +@firebase/firestore: WARN: '[2025-03-04T22:58:07.549Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8ce1 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:07.549Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8ce1 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can use array-contains-any filters +@firebase/firestore: βœ” can query collection groups +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId +@firebase/firestore: βœ” can query custom types +@firebase/firestore: βœ” can use filter with nested field +@firebase/firestore: WARN: '[2025-03-04T22:58:17.411Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cef transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:17.411Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cef transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” resuming a query should use bloom filter to avoid full requery +@firebase/firestore: βœ” bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: WARN: '[2025-03-04T22:58:34.981Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cf6 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:34.981Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8cf6 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: βœ” can use or queries with in +@firebase/firestore: βœ” can use or queries with array membership +@firebase/firestore: βœ” supports using in with array contains any +@firebase/firestore: βœ” supports using in with array contains +@firebase/firestore: βœ” supports order by equality +@firebase/firestore: βœ” supports multiple in ops +@firebase/firestore: ERROR: '[2025-03-04T22:58:53.318Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:53.318Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: ERROR: '[2025-03-04T22:58:53.723Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:53.723Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty +@firebase/firestore: (Persistence=indexeddb) Queries +@firebase/firestore: βœ” can issue limit queries +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order +@firebase/firestore: ERROR: '[2025-03-04T22:58:55.728Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:55.728Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen to limitToLast queries +@firebase/firestore: ERROR: '[2025-03-04T22:58:56.541Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:56.541Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:56.541Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:58:56.541Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries +@firebase/firestore: WARN: '[2025-03-04T22:58:57.281Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8d1b transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:58:57.281Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8d1b transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can issue limitToLast queries with cursors +@firebase/firestore: βœ” key order is descending for descending inequality +@firebase/firestore: βœ” can use unary filters +@firebase/firestore: βœ” can filter on infinity +@firebase/firestore: βœ” will not get metadata only updates +@firebase/firestore: βœ” maintains correct DocumentChange indexes +@firebase/firestore: βœ– can listen for the same query with different options (skipped) +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds +@firebase/firestore: βœ” can listen for QueryMetadata changes +@firebase/firestore: βœ” can listen for metadata changes +@firebase/firestore: βœ” can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID +@firebase/firestore: βœ” can query by document ID +@firebase/firestore: βœ” can query by document ID using refs +@firebase/firestore: βœ” can query while reconnecting to network +@firebase/firestore: βœ” trigger with isFromCache=true when offline +@firebase/firestore: βœ” can use != filters +@firebase/firestore: βœ” can use != filters by document ID +@firebase/firestore: βœ” can use array-contains filters +@firebase/firestore: βœ” can use IN filters +@firebase/firestore: βœ” can use IN filters by document ID +@firebase/firestore: βœ” can use NOT_IN filters +@firebase/firestore: βœ” can use NOT_IN filters by document ID +@firebase/firestore: βœ” can use array-contains-any filters +@firebase/firestore: βœ” can query collection groups +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId +@firebase/firestore: βœ” can query custom types +@firebase/firestore: βœ” can use filter with nested field +@firebase/firestore: βœ” resuming a query should use bloom filter to avoid full requery +@firebase/firestore: βœ” bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: WARN: '[2025-03-04T22:59:40.393Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8d5f transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T22:59:40.393Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8d5f transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: βœ” can use or queries with in +@firebase/firestore: βœ” can use or queries with array membership +@firebase/firestore: βœ” supports using in with array contains any +@firebase/firestore: βœ” supports using in with array contains +@firebase/firestore: βœ” supports order by equality +@firebase/firestore: βœ” supports multiple in ops +@firebase/firestore: ERROR: '[2025-03-04T22:59:56.969Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:59:56.969Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: ERROR: '[2025-03-04T22:59:57.404Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T22:59:57.404Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty +@firebase/firestore: (Persistence=memory_lru_gc) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 +@firebase/firestore: βœ” iteration 1 +@firebase/firestore: βœ” iteration 2 +@firebase/firestore: βœ” iteration 3 +@firebase/firestore: βœ” iteration 4 +@firebase/firestore: βœ” iteration 5 +@firebase/firestore: βœ” iteration 6 +@firebase/firestore: βœ” iteration 7 +@firebase/firestore: βœ” iteration 8 +@firebase/firestore: βœ” iteration 9 +@firebase/firestore: βœ” iteration 10 +@firebase/firestore: βœ” iteration 11 +@firebase/firestore: βœ” iteration 12 +@firebase/firestore: βœ” iteration 13 +@firebase/firestore: βœ” iteration 14 +@firebase/firestore: βœ” iteration 15 +@firebase/firestore: βœ” iteration 16 +@firebase/firestore: βœ” iteration 17 +@firebase/firestore: βœ” iteration 18 +@firebase/firestore: βœ” iteration 19 +@firebase/firestore: (Persistence=indexeddb) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 +@firebase/firestore: βœ” iteration 1 +@firebase/firestore: βœ” iteration 2 +@firebase/firestore: βœ” iteration 3 +@firebase/firestore: βœ” iteration 4 +@firebase/firestore: βœ” iteration 5 +@firebase/firestore: βœ” iteration 6 +@firebase/firestore: βœ” iteration 7 +@firebase/firestore: βœ” iteration 8 +@firebase/firestore: βœ” iteration 9 +@firebase/firestore: βœ” iteration 10 +@firebase/firestore: βœ” iteration 11 +@firebase/firestore: βœ” iteration 12 +@firebase/firestore: βœ” iteration 13 +@firebase/firestore: βœ” iteration 14 +@firebase/firestore: βœ” iteration 15 +@firebase/firestore: βœ” iteration 16 +@firebase/firestore: βœ” iteration 17 +@firebase/firestore: βœ” iteration 18 +@firebase/firestore: βœ” iteration 19 +@firebase/firestore: (Persistence=memory_lru_gc) Server Timestamps +@firebase/firestore: βœ” work via set() +@firebase/firestore: βœ” work via update() +@firebase/firestore: βœ” work via transaction set() +@firebase/firestore: βœ” work via transaction update() +@firebase/firestore: βœ” can return estimated value +@firebase/firestore: βœ” can return previous value of different type +@firebase/firestore: βœ” can return previous value through consecutive updates +@firebase/firestore: βœ” uses previous value from local mutation +@firebase/firestore: βœ” fail via update() on nonexistent document. +@firebase/firestore: WARN: '[2025-03-04T23:00:17.735Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8dba failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/rWK89zav5tNvJoG9Am13","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:17.735Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8dba failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/rWK89zav5tNvJoG9Am13","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” fail via transaction update() on nonexistent document. +@firebase/firestore: (Persistence=indexeddb) Server Timestamps +@firebase/firestore: βœ” work via set() +@firebase/firestore: βœ” work via update() +@firebase/firestore: βœ” work via transaction set() +@firebase/firestore: βœ” work via transaction update() +@firebase/firestore: βœ” can return estimated value +@firebase/firestore: βœ” can return previous value of different type +@firebase/firestore: βœ” can return previous value through consecutive updates +@firebase/firestore: βœ” uses previous value from local mutation +@firebase/firestore: βœ” fail via update() on nonexistent document. +@firebase/firestore: WARN: '[2025-03-04T23:00:23.252Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8dd6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/lCHZOgyK9XGPS4Z6D5vU","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:23.252Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8dd6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/lCHZOgyK9XGPS4Z6D5vU","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” fail via transaction update() on nonexistent document. +@firebase/firestore: (Persistence=memory_lru_gc) Smoke Test +@firebase/firestore: βœ” can write a single document +@firebase/firestore: βœ” can read a written document +@firebase/firestore: βœ” can read a written document with DocumentKey +@firebase/firestore: βœ” will fire local and remote events +@firebase/firestore: βœ” will fire value events for empty collections +@firebase/firestore: βœ” can get collection query +@firebase/firestore: βœ– can query by field and use order by (skipped) +@firebase/firestore: (Persistence=indexeddb) Smoke Test +@firebase/firestore: βœ” can write a single document +@firebase/firestore: βœ” can read a written document +@firebase/firestore: βœ” can read a written document with DocumentKey +@firebase/firestore: βœ” will fire local and remote events +@firebase/firestore: βœ” will fire value events for empty collections +@firebase/firestore: βœ” can get collection query +@firebase/firestore: βœ– can query by field and use order by (skipped) +@firebase/firestore: (Persistence=memory_lru_gc) Snapshot Listener source options +@firebase/firestore: listen to persistence cache +@firebase/firestore: βœ” can raise snapshot from cache for Query +@firebase/firestore: βœ” can raise snapshot from cache for DocumentReference +@firebase/firestore: βœ” listen to cache would not be affected by online status change +@firebase/firestore: βœ” multiple listeners sourced from cache can work independently +@firebase/firestore: βœ” can listen/un-listen/re-listen to mirror queries from cache +@firebase/firestore: βœ” can listen to default source first and then cache +@firebase/firestore: βœ” can listen to cache source first and then default +@firebase/firestore: βœ” will not get metadata only updates if listening to cache only +@firebase/firestore: βœ” will have synced metadata updates when listening to both cache and default source +@firebase/firestore: βœ” can un-listen to default source while still listening to cache +@firebase/firestore: βœ” can un-listen to cache while still listening to server +@firebase/firestore: βœ” can listen/un-listen/re-listen to same query with different source options +@firebase/firestore: βœ” can listen to composite index queries from cache +@firebase/firestore: ERROR: '[2025-03-04T23:00:36.425Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:00:36.425Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: βœ” will not be triggered by transactions while listening to cache +@firebase/firestore: βœ” share server side updates when listening to both cache and default +@firebase/firestore: (Persistence=indexeddb) Snapshot Listener source options +@firebase/firestore: listen to persistence cache +@firebase/firestore: βœ” can raise snapshot from cache for Query +@firebase/firestore: βœ” can raise snapshot from cache for DocumentReference +@firebase/firestore: βœ” listen to cache would not be affected by online status change +@firebase/firestore: βœ” multiple listeners sourced from cache can work independently +@firebase/firestore: βœ” can listen/un-listen/re-listen to mirror queries from cache +@firebase/firestore: βœ” can listen to default source first and then cache +@firebase/firestore: βœ” can listen to cache source first and then default +@firebase/firestore: βœ” will not get metadata only updates if listening to cache only +@firebase/firestore: βœ” will have synced metadata updates when listening to both cache and default source +@firebase/firestore: βœ” can un-listen to default source while still listening to cache +@firebase/firestore: βœ” can un-listen to cache while still listening to server +@firebase/firestore: βœ” can listen/un-listen/re-listen to same query with different source options +@firebase/firestore: βœ” can listen to composite index queries from cache +@firebase/firestore: ERROR: '[2025-03-04T23:00:46.730Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:00:46.730Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: βœ” will not be triggered by transactions while listening to cache +@firebase/firestore: βœ” share server side updates when listening to both cache and default +@firebase/firestore: WARN: '[2025-03-04T23:00:48.835Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e44 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/NxlHnAa2ojRgVKIsFtZE","currentDocument":{"updateTime":"2025-03-04T23:00:48.553790000Z"}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/NxlHnAa2ojRgVKIsFtZE","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:48.835Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e44 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/NxlHnAa2ojRgVKIsFtZE","currentDocument":{"updateTime":"2025-03-04T23:00:48.553790000Z"}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/NxlHnAa2ojRgVKIsFtZE","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:52.054Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8e5e transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:00:52.054Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f8e5e transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: (Persistence=memory_lru_gc) Database transactions +@firebase/firestore: βœ” runs transactions after getting existing document +@firebase/firestore: WARN: '[2025-03-04T23:00:53.409Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e6a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/nB7zrPFyVpiJ8Sq7t7FK","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/nB7zrPFyVpiJ8Sq7t7FK","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:53.409Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e6a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/nB7zrPFyVpiJ8Sq7t7FK","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/nB7zrPFyVpiJ8Sq7t7FK","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions after getting nonexistent document +@firebase/firestore: WARN: '[2025-03-04T23:00:56.959Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e8a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/60oYA05c9WD2egyUXnEZ","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/60oYA05c9WD2egyUXnEZ","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:00:56.959Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8e8a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/60oYA05c9WD2egyUXnEZ","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/60oYA05c9WD2egyUXnEZ","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions after getting a deleted document +@firebase/firestore: WARN: '[2025-03-04T23:01:01.746Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ea6 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/XdWLx6jH6pGIWaIFJqKc"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/XdWLx6jH6pGIWaIFJqKc","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:01.746Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ea6 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/XdWLx6jH6pGIWaIFJqKc"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/XdWLx6jH6pGIWaIFJqKc","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions on existing document +@firebase/firestore: WARN: '[2025-03-04T23:01:04.771Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8eb9 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/vzpwAlMVRs1rZW20V5Gw"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/vzpwAlMVRs1rZW20V5Gw","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:04.771Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8eb9 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/vzpwAlMVRs1rZW20V5Gw"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/vzpwAlMVRs1rZW20V5Gw","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.231Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ebd failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/166RqjftXKinefmY59xB","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/166RqjftXKinefmY59xB"}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.231Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ebd failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/166RqjftXKinefmY59xB","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/166RqjftXKinefmY59xB"}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.478Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ebf failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/467gXGTeTfy6pGy4F7p2","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/467gXGTeTfy6pGy4F7p2","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.478Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ebf failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/467gXGTeTfy6pGy4F7p2","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/467gXGTeTfy6pGy4F7p2","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.585Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ec1 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/y7nn0xIYvPeTntpnP5Tw","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/y7nn0xIYvPeTntpnP5Tw","fields":{"foo":{"stringValue":"bar1"}}}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:05.585Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ec1 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/y7nn0xIYvPeTntpnP5Tw","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/y7nn0xIYvPeTntpnP5Tw","fields":{"foo":{"stringValue":"bar1"}}}}]}' +@firebase/firestore: βœ” runs transactions on nonexistent document +@firebase/firestore: βœ” set document with merge +@firebase/firestore: βœ” can update nested fields transactionally +@firebase/firestore: WARN: '[2025-03-04T23:01:07.383Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ed2 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/cN8vjCq0Vfp2XVhRpyH4","fields":{"count":{"integerValue":"16"}}}},{"verify":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/6FLMAaWr2Ae4K7TOskgl","currentDocument":{"updateTime":"2025-03-04T23:01:07.112539000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:07.383Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8ed2 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/cN8vjCq0Vfp2XVhRpyH4","fields":{"count":{"integerValue":"16"}}}},{"verify":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/6FLMAaWr2Ae4K7TOskgl","currentDocument":{"updateTime":"2025-03-04T23:01:07.112539000Z"}}]}' +@firebase/firestore: βœ” retry when a document that was read without being written changes +@firebase/firestore: βœ” cannot read after writing and does not commit +@firebase/firestore: βœ” cannot read after writing and does not commit, even if the user transaction does not bubble up the error +@firebase/firestore: βœ” cannot read nonexistent document then update, even if document is written after the read +@firebase/firestore: βœ” can have gets without mutations +@firebase/firestore: βœ” does not retry on permanent errors +@firebase/firestore: WARN: '[2025-03-04T23:01:10.766Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8eec failed with error: ', '{"code":"already-exists","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/nonexistent/Yzv9TWmHjap17eYMKA5y","fields":{"count":{"integerValue":"2"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:10.766Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8eec failed with error: ', '{"code":"already-exists","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/nonexistent/Yzv9TWmHjap17eYMKA5y","fields":{"count":{"integerValue":"2"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: βœ” retries when document already exists +@firebase/firestore: βœ” are successful with no transaction operations +@firebase/firestore: βœ” are cancelled on rejected promise +@firebase/firestore: βœ” are cancelled on throw +@firebase/firestore: must return a promise: +@firebase/firestore: βœ” undefined is rejected +@firebase/firestore: βœ” null is rejected +@firebase/firestore: βœ” 5 is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: WARN: '[2025-03-04T23:01:14.460Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f0b failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/IQ1gKy3DvCZY13EOEVxj","currentDocument":{"updateTime":"2025-03-04T23:01:14.254676000Z"}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/IQ1gKy3DvCZY13EOEVxj","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:14.460Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f0b failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/IQ1gKy3DvCZY13EOEVxj","currentDocument":{"updateTime":"2025-03-04T23:01:14.254676000Z"}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/IQ1gKy3DvCZY13EOEVxj","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: (Persistence=indexeddb) Database transactions +@firebase/firestore: βœ” runs transactions after getting existing document +@firebase/firestore: WARN: '[2025-03-04T23:01:18.490Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f30 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/OpVPys8JhXH0hUWzmwOf","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/OpVPys8JhXH0hUWzmwOf","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:18.490Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f30 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/OpVPys8JhXH0hUWzmwOf","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/OpVPys8JhXH0hUWzmwOf","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions after getting nonexistent document +@firebase/firestore: WARN: '[2025-03-04T23:01:21.824Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f50 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/mnpqTRIZ1gwCt4vqsoZo","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/mnpqTRIZ1gwCt4vqsoZo","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:21.824Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f50 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/mnpqTRIZ1gwCt4vqsoZo","currentDocument":{"exists":false}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/mnpqTRIZ1gwCt4vqsoZo","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions after getting a deleted document +@firebase/firestore: WARN: '[2025-03-04T23:01:26.233Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f6c failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/ZBG0DuPa7WzHpHEWfSMV"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/ZBG0DuPa7WzHpHEWfSMV","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:26.233Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f6c failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/ZBG0DuPa7WzHpHEWfSMV"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/ZBG0DuPa7WzHpHEWfSMV","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” runs transactions on existing document +@firebase/firestore: WARN: '[2025-03-04T23:01:29.298Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f7f failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wh4DKHRwQaCvoMtcf01P"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wh4DKHRwQaCvoMtcf01P","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.298Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f7f failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wh4DKHRwQaCvoMtcf01P"},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wh4DKHRwQaCvoMtcf01P","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.602Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f83 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/DXmYIIbG6iPmDTq5jN8G","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/DXmYIIbG6iPmDTq5jN8G"}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.602Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f83 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/DXmYIIbG6iPmDTq5jN8G","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"delete":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/DXmYIIbG6iPmDTq5jN8G"}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.699Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f85 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wos5l4DVGmuzTGL8jm5G","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wos5l4DVGmuzTGL8jm5G","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.699Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f85 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wos5l4DVGmuzTGL8jm5G","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/Wos5l4DVGmuzTGL8jm5G","fields":{"foo":{"stringValue":"bar2"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.790Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f87 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/S9bXIVlDYkXULNt4GCp4","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/S9bXIVlDYkXULNt4GCp4","fields":{"foo":{"stringValue":"bar1"}}}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:29.790Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f87 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/S9bXIVlDYkXULNt4GCp4","fields":{"foo":{"stringValue":"bar1"}}},"updateMask":{"fieldPaths":["foo"]},"currentDocument":{"exists":true}},{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/tester-docref/S9bXIVlDYkXULNt4GCp4","fields":{"foo":{"stringValue":"bar1"}}}}]}' +@firebase/firestore: βœ” runs transactions on nonexistent document +@firebase/firestore: βœ” set document with merge +@firebase/firestore: βœ” can update nested fields transactionally +@firebase/firestore: WARN: '[2025-03-04T23:01:31.700Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f98 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/XjRv08NgO2TtogH9ztSt","fields":{"count":{"integerValue":"16"}}}},{"verify":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/vGo3KbTJuxRfFnRWgt8p","currentDocument":{"updateTime":"2025-03-04T23:01:31.399305000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:31.700Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8f98 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/XjRv08NgO2TtogH9ztSt","fields":{"count":{"integerValue":"16"}}}},{"verify":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/vGo3KbTJuxRfFnRWgt8p","currentDocument":{"updateTime":"2025-03-04T23:01:31.399305000Z"}}]}' +@firebase/firestore: βœ” retry when a document that was read without being written changes +@firebase/firestore: βœ” cannot read after writing and does not commit +@firebase/firestore: βœ” cannot read after writing and does not commit, even if the user transaction does not bubble up the error +@firebase/firestore: βœ” cannot read nonexistent document then update, even if document is written after the read +@firebase/firestore: βœ” can have gets without mutations +@firebase/firestore: βœ” does not retry on permanent errors +@firebase/firestore: WARN: '[2025-03-04T23:01:35.783Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8fb2 failed with error: ', '{"code":"already-exists","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/nonexistent/MwKEDqOD9ixCOzVF4Zjq","fields":{"count":{"integerValue":"2"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:01:35.783Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f8fb2 failed with error: ', '{"code":"already-exists","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/nonexistent/MwKEDqOD9ixCOzVF4Zjq","fields":{"count":{"integerValue":"2"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: βœ” retries when document already exists +@firebase/firestore: βœ” are successful with no transaction operations +@firebase/firestore: βœ” are cancelled on rejected promise +@firebase/firestore: βœ” are cancelled on throw +@firebase/firestore: must return a promise: +@firebase/firestore: βœ” undefined is rejected +@firebase/firestore: βœ” null is rejected +@firebase/firestore: βœ” 5 is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: (Persistence=memory_lru_gc) Firestore +@firebase/firestore: βœ” can read and write null fields +@firebase/firestore: βœ” can read and write number fields +@firebase/firestore: βœ” can read and write array fields +@firebase/firestore: βœ” can read and write geo point fields +@firebase/firestore: βœ” can read and write bytes fields +@firebase/firestore: βœ” can read and write date fields +@firebase/firestore: βœ” can read and write timestamp fields +@firebase/firestore: βœ” can read and write document references +@firebase/firestore: βœ” can read and write document references in an array +@firebase/firestore: WARN: '[2025-03-04T23:01:48.321Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f9001 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:01:48.321Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f9001 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: (Persistence=indexeddb) Firestore +@firebase/firestore: βœ” can read and write null fields +@firebase/firestore: βœ” can read and write number fields +@firebase/firestore: βœ” can read and write array fields +@firebase/firestore: βœ” can read and write geo point fields +@firebase/firestore: βœ” can read and write bytes fields +@firebase/firestore: βœ” can read and write date fields +@firebase/firestore: βœ” can read and write timestamp fields +@firebase/firestore: βœ” can read and write document references +@firebase/firestore: βœ” can read and write document references in an array +@firebase/firestore: (Persistence=memory_lru_gc) Validation: +@firebase/firestore: βœ” Batch writes require correct Document References +@firebase/firestore: βœ” Transaction writes require correct Document References +@firebase/firestore: βœ” Field paths must not have empty segments +@firebase/firestore: βœ” Field paths must not have invalid segments +@firebase/firestore: FirestoreSettings +@firebase/firestore: βœ” disallows changing settings after use +@firebase/firestore: βœ” enforces minimum cache size +@firebase/firestore: βœ” garbage collection can be disabled +@firebase/firestore: βœ” connectFirestoreEmulator() can set host and port +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken object +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() for first time after use +@firebase/firestore: βœ” allows calling connectFirestoreEmulator() after use with same config +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() after use with different config +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken string +@firebase/firestore: βœ” throws if sub / user_id is missing in mockUserToken +@firebase/firestore: WARN: '[2025-03-04T23:01:59.378Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:01:59.378Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: Firestore +@firebase/firestore: βœ” disallows calling enableIndexedDbPersistence() after use +@firebase/firestore: βœ” fails transaction if function doesn't return a Promise. +@firebase/firestore: Collection paths +@firebase/firestore: βœ” must be non-empty strings +@firebase/firestore: βœ” must be odd-length +@firebase/firestore: βœ” must not have empty segments +@firebase/firestore: Document paths +@firebase/firestore: βœ” must be strings +@firebase/firestore: βœ” must be even-length +@firebase/firestore: Writes +@firebase/firestore: βœ” must be objects. +@firebase/firestore: βœ” must not contain custom objects or functions. +@firebase/firestore: βœ” must not contain field value transforms in arrays +@firebase/firestore: βœ” must not contain directly nested arrays. +@firebase/firestore: βœ” may contain indirectly nested arrays. +@firebase/firestore: βœ” must not contain undefined. +@firebase/firestore: βœ” must not contain references to a different database +@firebase/firestore: βœ” must not contain reserved field names. +@firebase/firestore: βœ” must not contain empty field names. +@firebase/firestore: βœ” via set() must not contain deleteField() +@firebase/firestore: βœ” via update() must not contain nested deleteField() +@firebase/firestore: Array transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: βœ” reject invalid elements +@firebase/firestore: βœ” reject arrays +@firebase/firestore: Numeric transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: Queries +@firebase/firestore: βœ” with non-positive limit fail +@firebase/firestore: βœ” cannot be created from documents missing sort values +@firebase/firestore: ERROR: '[2025-03-04T23:02:04.296Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:02:04.296Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” cannot be sorted by an uncommitted server timestamp +@firebase/firestore: βœ” must not have more components than order by. +@firebase/firestore: βœ” order-by-key bounds must be strings without slashes. +@firebase/firestore: βœ” with more than one != query fail +@firebase/firestore: βœ” with != and not-in filters fail +@firebase/firestore: βœ” with multiple disjunctive filters fail +@firebase/firestore: βœ” can have an IN filter with an array-contains filter. +@firebase/firestore: βœ” enforce array requirements for disjunctive filters +@firebase/firestore: βœ” must not specify starting or ending point after orderBy +@firebase/firestore: βœ” must be non-empty strings or references when filtering by document ID +@firebase/firestore: βœ” using IN and document id must have proper document references in array +@firebase/firestore: βœ” cannot pass undefined as a field value +@firebase/firestore: βœ” invalid query filters fail +@firebase/firestore: βœ” passing non-filters to composite operators fails +@firebase/firestore: βœ” conflicting operators inside a nested composite filter +@firebase/firestore: (Persistence=indexeddb) Validation: +@firebase/firestore: βœ” Batch writes require correct Document References +@firebase/firestore: βœ” Transaction writes require correct Document References +@firebase/firestore: βœ” Field paths must not have empty segments +@firebase/firestore: βœ” Field paths must not have invalid segments +@firebase/firestore: FirestoreSettings +@firebase/firestore: βœ” disallows changing settings after use +@firebase/firestore: βœ” enforces minimum cache size +@firebase/firestore: βœ” garbage collection can be disabled +@firebase/firestore: βœ” connectFirestoreEmulator() can set host and port +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken object +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() for first time after use +@firebase/firestore: βœ” allows calling connectFirestoreEmulator() after use with same config +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() after use with different config +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken string +@firebase/firestore: βœ” throws if sub / user_id is missing in mockUserToken +@firebase/firestore: WARN: '[2025-03-04T23:02:07.048Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:02:07.048Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: Firestore +@firebase/firestore: βœ” disallows calling enableIndexedDbPersistence() after use +@firebase/firestore: βœ” fails transaction if function doesn't return a Promise. +@firebase/firestore: Collection paths +@firebase/firestore: βœ” must be non-empty strings +@firebase/firestore: βœ” must be odd-length +@firebase/firestore: βœ” must not have empty segments +@firebase/firestore: Document paths +@firebase/firestore: βœ” must be strings +@firebase/firestore: βœ” must be even-length +@firebase/firestore: Writes +@firebase/firestore: βœ” must be objects. +@firebase/firestore: βœ” must not contain custom objects or functions. +@firebase/firestore: βœ” must not contain field value transforms in arrays +@firebase/firestore: βœ” must not contain directly nested arrays. +@firebase/firestore: βœ” may contain indirectly nested arrays. +@firebase/firestore: βœ” must not contain undefined. +@firebase/firestore: βœ” must not contain references to a different database +@firebase/firestore: βœ” must not contain reserved field names. +@firebase/firestore: βœ” must not contain empty field names. +@firebase/firestore: βœ” via set() must not contain deleteField() +@firebase/firestore: βœ” via update() must not contain nested deleteField() +@firebase/firestore: Array transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: βœ” reject invalid elements +@firebase/firestore: βœ” reject arrays +@firebase/firestore: Numeric transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: Queries +@firebase/firestore: βœ” with non-positive limit fail +@firebase/firestore: βœ” cannot be created from documents missing sort values +@firebase/firestore: ERROR: '[2025-03-04T23:02:10.838Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:02:10.838Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” cannot be sorted by an uncommitted server timestamp +@firebase/firestore: βœ” must not have more components than order by. +@firebase/firestore: βœ” order-by-key bounds must be strings without slashes. +@firebase/firestore: βœ” with more than one != query fail +@firebase/firestore: βœ” with != and not-in filters fail +@firebase/firestore: βœ” with multiple disjunctive filters fail +@firebase/firestore: βœ” can have an IN filter with an array-contains filter. +@firebase/firestore: βœ” enforce array requirements for disjunctive filters +@firebase/firestore: βœ” must not specify starting or ending point after orderBy +@firebase/firestore: βœ” must be non-empty strings or references when filtering by document ID +@firebase/firestore: βœ” using IN and document id must have proper document references in array +@firebase/firestore: βœ” cannot pass undefined as a field value +@firebase/firestore: βœ” invalid query filters fail +@firebase/firestore: βœ” passing non-filters to composite operators fails +@firebase/firestore: βœ” conflicting operators inside a nested composite filter +@firebase/firestore: Initialization +@firebase/firestore: βœ” getAuth() before getFirestore() +@firebase/firestore: βœ” getFirestore() before getAuth() +@firebase/firestore: βœ” lazy-loaded getAuth() +@firebase/firestore: βœ” getDoc() before getAuth() +@firebase/firestore: βœ” uses user from getAuth() +@firebase/firestore: βœ” uses user from asynchronously loaded getAuth() +@firebase/firestore: βœ” uses user from getAuth() +@firebase/firestore: WARN: '[2025-03-04T23:02:11.452Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:02:11.452Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: with IndexedDB +@firebase/firestore: βœ” getAuth() before explicitly initializing Firestore +@firebase/firestore: WARN: '[2025-03-04T23:02:11.599Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:02:11.599Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” explicitly initialize Firestore before getAuth() +@firebase/firestore: WARN: '[2025-03-04T23:02:11.750Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:02:11.750Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” getFirestore() followed by getAuth() followed by explicitly initialization +@firebase/firestore: (Persistence=memory_lru_gc) Database (with internal API) +@firebase/firestore: βœ– will reject the promise if clear persistence fails (skipped) +@firebase/firestore: βœ” waiting for pending writes should fail when user changes +@firebase/firestore: βœ” app delete leads to instance termination +@firebase/firestore: (Persistence=indexeddb) Database (with internal API) +@firebase/firestore: βœ” will reject the promise if clear persistence fails +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: WARN: '[2025-03-04T23:02:12.206Z] @firebase/app:', 'Firebase: Firebase App named 'test-app-1580' already deleted (app/app-deleted).' +@firebase/firestore: βœ” waiting for pending writes should fail when user changes +@firebase/firestore: βœ” app delete leads to instance termination +@firebase/firestore: (Persistence=memory_lru_gc) Idle Timeout +@firebase/firestore: βœ” can write document after idle timeout +@firebase/firestore: βœ” can watch documents after idle timeout +@firebase/firestore: (Persistence=indexeddb) Idle Timeout +@firebase/firestore: βœ” can write document after idle timeout +@firebase/firestore: βœ” can watch documents after idle timeout +@firebase/firestore: WARN: '[2025-03-04T23:02:14.880Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f90fc failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.582929000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:14.880Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f90fc failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.582929000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:14.957Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f90fe failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.582929000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:14.957Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f90fe failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.582929000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:15.261Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9106 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"7"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.812506000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:15.261Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9106 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/4KhFw3as5y1XGH3ny0oE","fields":{"count":{"integerValue":"7"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:14.812506000Z"}}]}' +@firebase/firestore: (Persistence=memory_lru_gc) Database transactions (with internal API) +@firebase/firestore: βœ” should increment transactionally +@firebase/firestore: WARN: '[2025-03-04T23:02:16.208Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9116 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:15.909884000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:16.208Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9116 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:15.909884000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:16.313Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9118 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:15.909884000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:16.313Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9118 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:15.909884000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:16.612Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9120 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"7"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:16.132097000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:16.612Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9120 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/ZJfbttOoUENPsT3OQQbY","fields":{"count":{"integerValue":"7"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:16.132097000Z"}}]}' +@firebase/firestore: βœ” should update transactionally +@firebase/firestore: βœ” should fail transaction (maxAttempts: default) when reading a doc twice with different versions +@firebase/firestore: βœ” should fail transaction (maxAttempts: 1) when reading a doc twice with different versions +@firebase/firestore: WARN: '[2025-03-04T23:02:20.254Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f914c failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:19.946688000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:20.254Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f914c failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:19.946688000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:20.355Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f914e failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:19.946688000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:20.355Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f914e failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"6"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:19.946688000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:20.739Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9156 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"7"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:20.172059000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:20.739Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9156 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/S67w9DuxFix5Fcc117RY","fields":{"count":{"integerValue":"7"}}},"currentDocument":{"updateTime":"2025-03-04T23:02:20.172059000Z"}}]}' +@firebase/firestore: (Persistence=indexeddb) Database transactions (with internal API) +@firebase/firestore: βœ” should increment transactionally +@firebase/firestore: WARN: '[2025-03-04T23:02:21.749Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9166 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.407021000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:21.749Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9166 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.407021000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:21.832Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9168 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.407021000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:21.832Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9168 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"6"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.407021000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:22.138Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9170 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"7"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.651957000Z"}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:02:22.138Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x4e6f9170 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/counters/QuUeH8tlVRMl3Lz9sAeY","fields":{"count":{"integerValue":"7"}}},"updateMask":{"fieldPaths":["count"]},"currentDocument":{"updateTime":"2025-03-04T23:02:21.651957000Z"}}]}' +@firebase/firestore: βœ” should update transactionally +@firebase/firestore: βœ” should fail transaction (maxAttempts: default) when reading a doc twice with different versions +@firebase/firestore: βœ” should fail transaction (maxAttempts: 1) when reading a doc twice with different versions +@firebase/firestore: WebChannel +@firebase/firestore: βœ” receives error messages +@firebase/firestore: Remote Storage +@firebase/firestore: βœ” can write +@firebase/firestore: βœ” can read +@firebase/firestore: βœ” can read deleted documents +@firebase/firestore: Watch Stream +@firebase/firestore: βœ” can be stopped before handshake +@firebase/firestore: βœ” gets connected event before first message +@firebase/firestore: Write Stream +@firebase/firestore: βœ” can be stopped before handshake +@firebase/firestore: ERROR: '[2025-03-04T23:02:26.209Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Handshake must be complete before writing mutations' +@firebase/firestore: ERROR: '[2025-03-04T23:02:26.209Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Handshake must be complete before writing mutations' +@firebase/firestore: βœ” can be stopped after handshake +@firebase/firestore: βœ” closes when idle +@firebase/firestore: βœ” cancels idle on write +@firebase/firestore: WARN: '[2025-03-04T23:02:27.151Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f91a4 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:02:27.151Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x4e6f91a4 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” force refreshes auth token on receiving unauthenticated error +@firebase/firestore: Finished in 8 mins 58.332 secs / 8 mins 48.796 secs @ 15:02:27 GMT-0800 (Pacific Standard Time) +@firebase/firestore: SUMMARY: +@firebase/firestore: βœ” 2918 tests completed +@firebase/firestore: β„Ή 169 tests skipped +@firebase/firestore: TOTAL: 2918 SUCCESS +@firebase/firestore: > @firebase/firestore@4.7.9 test:travis +@firebase/firestore: > ts-node --compiler-options='{"module":"commonjs"}' ../../scripts/emulator-testing/firestore-test-runner.ts +@firebase/firestore: Created temporary directory at [/var/folders/4p/60jxf65d6tsb3k2s8r8jzwk000j4dz/T/tmp-87145-SGUzNPTt5flO]. +@firebase/firestore: Downloading emulator from [https://storage.googleapis.com/firebase-preview-drop/emulator/cloud-firestore-emulator-v1.19.7.jar] ... +@firebase/firestore: Emulator download is done. +@firebase/firestore: Closed downloaded emulator file. +@firebase/firestore: Changed emulator file permissions to 'rwxr-xr-x'. +@firebase/firestore: Cached emulator at /Users/chholland/.cache/firebase-js-sdk/cloud-firestore-emulator-v1.18.1.jar +@firebase/firestore: Waiting for emulator to start up ... +@firebase/firestore: API endpoint: http://localhost:10000 +@firebase/firestore: If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run: +@firebase/firestore: export FIRESTORE_EMULATOR_HOST=localhost:10000 +@firebase/firestore: If you are running a Firestore in Datastore Mode project, run: +@firebase/firestore: export DATASTORE_EMULATOR_HOST=localhost:10000 +@firebase/firestore: Note: Support for Datastore Mode is in preview. If you encounter any bugs please file at https://github.com/firebase/firebase-tools/issues. +@firebase/firestore: Dev App Server is now running. +@firebase/firestore: Ping emulator at [http://127.0.0.1:10000] ... +@firebase/firestore: Emulator has started up after 1.001s! +@firebase/firestore: $ ts-node ./scripts/run-tests.ts --emulator --platform node_lite --main=lite/index.ts 'test/lite/**/*.test.ts' +@firebase/firestore: $ ts-node ./scripts/run-tests.ts --main=test/register.ts --persistence --emulator 'test/{,!(browser|lite)/**/}*.test.ts' +@firebase/firestore: Default Settings: {"host":"localhost:10000","ssl":false} +@firebase/firestore: Default DatabaseId: "(default)" +@firebase/firestore: Default Settings: {"host":"localhost:10000","ssl":false} +@firebase/firestore: Default DatabaseId: "(default)" +@firebase/firestore: Firestore +@firebase/firestore: βœ” can provide setting +@firebase/firestore: βœ” returns same default instance from named app +@firebase/firestore: βœ” returns different instance from named app +@firebase/firestore: βœ” returns same default instance from default app +@firebase/firestore: βœ” returns different instance from different named app +@firebase/firestore: βœ” cannot call initializeFirestore() twice +@firebase/firestore: βœ” cannot use once terminated +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: doc +@firebase/firestore: βœ” can be used relative to Firestore root +@firebase/firestore: βœ” can be used relative to collection +@firebase/firestore: βœ” can be used with multiple arguments +@firebase/firestore: βœ” strips leading and trailing slashes +@firebase/firestore: βœ” can be relative to doc +@firebase/firestore: βœ” validates path +@firebase/firestore: βœ” supports AutoId +@firebase/firestore: collection +@firebase/firestore: βœ” can be used relative to Firestore root +@firebase/firestore: βœ” can be used relative to Firestore root with multiple arguments +@firebase/firestore: βœ” can be used relative to collection +@firebase/firestore: βœ” can be used relative to doc +@firebase/firestore: βœ” can be used relative to collection with multiple arguments +@firebase/firestore: βœ” validates path +@firebase/firestore: parent +@firebase/firestore: βœ” returns CollectionReferences for DocumentReferences +@firebase/firestore: βœ” returns DocumentReferences for CollectionReferences +@firebase/firestore: βœ” returns null for root collection +@firebase/firestore: getDoc() +@firebase/firestore: βœ” can get a non-existing document (433ms) +@firebase/firestore: βœ” can get an existing document (57ms) +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: βœ” enforces that document exists +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: WriteBatch +@firebase/firestore: βœ” can add multiple operations +@firebase/firestore: βœ” cannot add write after commit +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: βœ” enforces that document exists +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: Transaction +@firebase/firestore: βœ” can read and then write +@firebase/firestore: βœ” can read non-existing doc then write +@firebase/firestore: βœ” can read deleted doc then write +@firebase/firestore: βœ” token is not invalidated once the stream is healthy +@firebase/firestore: Initialization +@firebase/firestore: βœ” retries when document is modified (880ms) +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: - enforces that document exists +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: addDoc() +@firebase/firestore: βœ” can add a document +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: DocumentSnapshot +@firebase/firestore: βœ” can represent missing data +@firebase/firestore: βœ” can return data +@firebase/firestore: βœ” getAuth() before getFirestore() (247ms) +@firebase/firestore: βœ” can return single field +@firebase/firestore: βœ” can return nested field +@firebase/firestore: βœ” is properly typed +@firebase/firestore: βœ” returns Bytes +@firebase/firestore: deleteDoc() +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: FieldValue +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” support instanceof checks +@firebase/firestore: βœ” can apply arrayUnion +@firebase/firestore: βœ” can apply arrayRemove +@firebase/firestore: βœ” can apply serverTimestamp +@firebase/firestore: βœ” can delete field +@firebase/firestore: Query +@firebase/firestore: βœ” supports default query (69ms) +@firebase/firestore: βœ” supports empty results +@firebase/firestore: βœ” supports filtered query +@firebase/firestore: βœ” supports filtered query (with FieldPath) +@firebase/firestore: βœ” getFirestore() before getAuth() (198ms) +@firebase/firestore: βœ” supports ordered query (with default order) +@firebase/firestore: βœ” supports ordered query (with asc) +@firebase/firestore: βœ” supports ordered query (with desc) +@firebase/firestore: βœ” supports limit query +@firebase/firestore: βœ” supports limitToLast query +@firebase/firestore: βœ” supports startAt +@firebase/firestore: βœ” supports startAfter +@firebase/firestore: βœ” supports endAt +@firebase/firestore: βœ” supports endBefore +@firebase/firestore: βœ” supports pagination +@firebase/firestore: βœ” supports collection groups +@firebase/firestore: βœ” validates collection groups +@firebase/firestore: βœ” supports query over collection path with special characters +@firebase/firestore: equality +@firebase/firestore: βœ” for collection references +@firebase/firestore: βœ” for document references +@firebase/firestore: βœ” for queries +@firebase/firestore: βœ” for query snapshots +@firebase/firestore: βœ” for document snapshots +@firebase/firestore: withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) applies default converter +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) applies default converter +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” lazy-loaded getAuth() (199ms) +@firebase/firestore: βœ” for Query.withConverter(null) applies default converter +@firebase/firestore: βœ” keeps the converter when calling parent() with a DocumentReference +@firebase/firestore: βœ” drops the converter when calling parent() with a CollectionReference +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” supports primitive types with valid converter +@firebase/firestore: types test +@firebase/firestore: nested partial support +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” validates types in outer and inner fields +@firebase/firestore: βœ” checks for nonexistent properties +@firebase/firestore: βœ” allows omitting fields +@firebase/firestore: WithFieldValue +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” requires all outer fields to be present +@firebase/firestore: βœ” requires all nested fields to be present +@firebase/firestore: βœ” validates inner and outer fields +@firebase/firestore: βœ” checks for nonexistent properties +@firebase/firestore: βœ” allows certain types but not others +@firebase/firestore: used as a type +@firebase/firestore: βœ” supports passing in the object as `T` +@firebase/firestore: βœ” does not allow primitive types to use FieldValue +@firebase/firestore: UpdateData +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” validates inner and outer fields +@firebase/firestore: βœ” supports string-separated fields +@firebase/firestore: βœ” supports optional fields +@firebase/firestore: βœ” supports null fields +@firebase/firestore: βœ” supports union fields +@firebase/firestore: βœ” checks for nonexistent fields +@firebase/firestore: methods +@firebase/firestore: βœ” addDoc() +@firebase/firestore: βœ” WriteBatch.set() +@firebase/firestore: βœ” WriteBatch.update() +@firebase/firestore: βœ” Transaction.set() +@firebase/firestore: βœ” getDoc() before getAuth() (175ms) +@firebase/firestore: βœ” Transaction.update() +@firebase/firestore: Count queries +@firebase/firestore: βœ” uses user from getAuth() +@firebase/firestore: βœ” AggregateQuerySnapshot inherits the original query +@firebase/firestore: βœ” uses user from asynchronously loaded getAuth() +@firebase/firestore: βœ” can run count query getCount with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” uses user from getAuth() +@firebase/firestore: with IndexedDB +@firebase/firestore: βœ” can run count query getCount with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” run count query on empty collection +@firebase/firestore: βœ” run count query on collection with 3 docs +@firebase/firestore: βœ” run count query fails on invalid collection reference +@firebase/firestore: βœ” count query supports filter +@firebase/firestore: βœ” count query supports filter and a small limit size +@firebase/firestore: βœ” count query supports filter and a large limit size +@firebase/firestore: βœ” count query supports order by +@firebase/firestore: βœ” count query supports order by and startAt +@firebase/firestore: βœ” count query supports order by and startAfter +@firebase/firestore: βœ” count query supports order by and endAt +@firebase/firestore: βœ” count query supports order by and endBefore +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries be truthy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries with different documents size be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different queries be falsy +@firebase/firestore: βœ” count query fails on a terminated Firestore +@firebase/firestore: βœ” terminate Firestore not effect count query in flight +@firebase/firestore: - getCount error message contains console link if missing index +@firebase/firestore: Aggregate queries +@firebase/firestore: βœ” AggregateQuerySnapshot inherits the original query +@firebase/firestore: βœ” run aggregate query on empty collection +@firebase/firestore: βœ” run aggregate query on collection with 3 docs +@firebase/firestore: βœ” getAuth() before explicitly initializing Firestore (234ms) +@firebase/firestore: βœ” run aggregate query with duplicate aggregates +@firebase/firestore: βœ” run aggregate query fails on invalid collection reference +@firebase/firestore: βœ” aggregate query supports filter +@firebase/firestore: βœ” aggregate query supports filter and a small limit size +@firebase/firestore: βœ” aggregate query supports filter and a large limit size +@firebase/firestore: βœ” aggregate query supports order by +@firebase/firestore: βœ” aggregate query supports order by and startAt +@firebase/firestore: βœ” aggregate query supports order by and startAfter +@firebase/firestore: βœ” aggregate query supports order by and endAt +@firebase/firestore: βœ” aggregate query supports order by and endBefore +@firebase/firestore: βœ” aggregate query doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries be truthy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries with different documents size be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different queries be falsy +@firebase/firestore: βœ” aggregate query fails on a terminated Firestore +@firebase/firestore: βœ” terminate Firestore not effect aggregate query in flight +@firebase/firestore: - getAggregate error message contains console link if missing index +@firebase/firestore: Aggregate queries - sum / average +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different aggregations to be falsy +@firebase/firestore: βœ” explicitly initialize Firestore before getAuth() (213ms) +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same aggregations with different aliases to be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same aggregations with same aliases to be truthy +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: (Persistence=memory_lru_gc) queries requiring indexes +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: Vectors +@firebase/firestore: βœ” can be read and written using the lite SDK +@firebase/firestore: 192 passing (3s) +@firebase/firestore: 3 pending +@firebase/firestore: βœ” getFirestore() followed by getAuth() followed by explicitly initialization (232ms) +@firebase/firestore: (Persistence=memory_lru_gc) Database (with internal API) +@firebase/firestore: - will reject the promise if clear persistence fails +@firebase/firestore: βœ” waiting for pending writes should fail when user changes +@firebase/firestore: βœ” app delete leads to instance termination +@firebase/firestore: (Persistence=indexeddb) Database (with internal API) +@firebase/firestore: βœ” will reject the promise if clear persistence fails +@firebase/firestore: βœ” waiting for pending writes should fail when user changes (39ms) +@firebase/firestore: βœ” app delete leads to instance termination (42ms) +@firebase/firestore: (Persistence=memory_lru_gc) Idle Timeout +@firebase/firestore: βœ” can write document after idle timeout +@firebase/firestore: βœ” can watch documents after idle timeout +@firebase/firestore: (Persistence=indexeddb) Idle Timeout +@firebase/firestore: βœ” can write document after idle timeout (72ms) +@firebase/firestore: βœ” can watch documents after idle timeout (71ms) +@firebase/firestore: (Persistence=memory_lru_gc) Database transactions (with internal API) +@firebase/firestore: βœ” should increment transactionally (43ms) +@firebase/firestore: βœ” should update transactionally +@firebase/firestore: βœ” should fail transaction (maxAttempts: default) when reading a doc twice with different versions (40ms) +@firebase/firestore: βœ” should fail transaction (maxAttempts: 1) when reading a doc twice with different versions +@firebase/firestore: (Persistence=indexeddb) Database transactions (with internal API) +@firebase/firestore: βœ” should increment transactionally (83ms) +@firebase/firestore: βœ” should update transactionally (80ms) +@firebase/firestore: βœ” should fail transaction (maxAttempts: default) when reading a doc twice with different versions (138ms) +@firebase/firestore: βœ” should fail transaction (maxAttempts: 1) when reading a doc twice with different versions (73ms) +@firebase/firestore: (Persistence=memory_lru_gc) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: - getCountFromServer fails if user is offline +@firebase/firestore: - getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=indexeddb) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer (68ms) +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub (61ms) +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special (55ms) +@firebase/firestore: βœ” count query doesn't use converter (61ms) +@firebase/firestore: βœ” count query supports collection groups (50ms) +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: - getCountFromServer fails if user is offline +@firebase/firestore: - getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: - getAggregateFromServer fails if user is offline +@firebase/firestore: - getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=indexeddb) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer (101ms) +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer (65ms) +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer (61ms) +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer (62ms) +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer (61ms) +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes (63ms) +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer (84ms) +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter (97ms) +@firebase/firestore: βœ” aggregate query supports collection groups (57ms) +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: - getAggregateFromServer fails if user is offline +@firebase/firestore: - getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer +@firebase/firestore: (Persistence=indexeddb) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer (67ms) +@firebase/firestore: βœ” can run average query getAggregationFromServer (63ms) +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer (59ms) +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer (64ms) +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer (60ms) +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer (67ms) +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation (69ms) +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer (68ms) +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer (62ms) +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer (96ms) +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer (59ms) +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer (119ms) +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer (68ms) +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer (64ms) +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer (58ms) +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 (61ms) +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer (59ms) +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer (66ms) +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer (65ms) +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer (64ms) +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer (64ms) +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer (57ms) +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer (69ms) +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer (63ms) +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer (63ms) +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer (60ms) +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer (63ms) +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer (58ms) +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer (57ms) +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer (57ms) +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer (59ms) +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer (66ms) +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer (65ms) +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer (63ms) +@firebase/firestore: (Persistence=memory_lru_gc) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() +@firebase/firestore: βœ” append to array via update() +@firebase/firestore: βœ” append to array via set(..., {merge: true}) +@firebase/firestore: βœ” append object to array via update() +@firebase/firestore: βœ” remove from array via update() +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) +@firebase/firestore: βœ” remove object from array via update() +@firebase/firestore: βœ” arrayUnion() supports DocumentReference +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc +@firebase/firestore: βœ” update() with no cached base doc +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() +@firebase/firestore: (Persistence=indexeddb) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() (64ms) +@firebase/firestore: βœ” append to array via update() (87ms) +@firebase/firestore: βœ” append to array via set(..., {merge: true}) (84ms) +@firebase/firestore: βœ” append object to array via update() (80ms) +@firebase/firestore: βœ” remove from array via update() (83ms) +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) (132ms) +@firebase/firestore: βœ” remove object from array via update() (86ms) +@firebase/firestore: βœ” arrayUnion() supports DocumentReference (69ms) +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc (39ms) +@firebase/firestore: βœ” update() with no cached base doc (74ms) +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc (77ms) +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() (46ms) +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() (50ms) +@firebase/firestore: (Persistence=memory_lru_gc) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents +@firebase/firestore: βœ” can set documents with merge +@firebase/firestore: βœ” can update documents +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can delete documents +@firebase/firestore: βœ” commit atomically, raising correct events +@firebase/firestore: βœ” fail atomically, raising correct events +@firebase/firestore: βœ” write the same server timestamp across writes +@firebase/firestore: βœ” can write the same document multiple times +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() (50ms) +@firebase/firestore: (Persistence=indexeddb) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents (53ms) +@firebase/firestore: βœ” can set documents with merge (61ms) +@firebase/firestore: βœ” can update documents (61ms) +@firebase/firestore: βœ” can update nested fields (63ms) +@firebase/firestore: βœ” can delete documents (134ms) +@firebase/firestore: βœ” commit atomically, raising correct events (63ms) +@firebase/firestore: βœ” fail atomically, raising correct events (57ms) +@firebase/firestore: βœ” write the same server timestamp across writes (63ms) +@firebase/firestore: βœ” can write the same document multiple times (63ms) +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() (54ms) +@firebase/firestore: (Persistence=memory_lru_gc) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface +@firebase/firestore: βœ” load with documents and queries with promise interface +@firebase/firestore: βœ” load for a second time skips +@firebase/firestore: βœ” load with documents already pulled from backend +@firebase/firestore: βœ” loaded documents should not be GC-ed right away +@firebase/firestore: βœ” load with documents from other projects fails +@firebase/firestore: (Persistence=indexeddb) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface (50ms) +@firebase/firestore: βœ” load with documents and queries with promise interface (41ms) +@firebase/firestore: βœ” load for a second time skips (43ms) +@firebase/firestore: βœ” load with documents already pulled from backend (109ms) +@firebase/firestore: βœ” loaded documents should not be GC-ed right away (53ms) +@firebase/firestore: βœ” load with documents from other projects fails (46ms) +@firebase/firestore: (Persistence=memory_lru_gc) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries (39ms) +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters (45ms) +@firebase/firestore: βœ” can use on special values +@firebase/firestore: βœ” can use with array membership +@firebase/firestore: βœ” can use with nested field +@firebase/firestore: βœ” can use with nested composite filters +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically +@firebase/firestore: βœ” can use multiple explicit order by field +@firebase/firestore: βœ” can use in aggregate query +@firebase/firestore: βœ” can use document ID im multiple inequality query (46ms) +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can get same result from server and cache (46ms) +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=indexeddb) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads (90ms) +@firebase/firestore: βœ” can use or queries (171ms) +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate (44ms) +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer (71ms) +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer (65ms) +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer (66ms) +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters (211ms) +@firebase/firestore: βœ” can use on special values (109ms) +@firebase/firestore: βœ” can use with array membership (111ms) +@firebase/firestore: βœ” can use with nested field (104ms) +@firebase/firestore: βœ” can use with nested composite filters (135ms) +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically (109ms) +@firebase/firestore: βœ” can use multiple explicit order by field (142ms) +@firebase/firestore: βœ” can use in aggregate query (71ms) +@firebase/firestore: βœ” can use document ID im multiple inequality query (119ms) +@firebase/firestore: βœ” can get documents while offline (92ms) +@firebase/firestore: βœ” can get same result from server and cache (188ms) +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=memory_lru_gc) Cursors +@firebase/firestore: βœ” can page through items +@firebase/firestore: βœ” can be created from documents +@firebase/firestore: βœ” can be created from values +@firebase/firestore: βœ” can be created using document id +@firebase/firestore: βœ” can be used with reference values +@firebase/firestore: βœ” can be used in descending queries (39ms) +@firebase/firestore: βœ” can accept Timestamps as bounds +@firebase/firestore: βœ” can accept Timestamps in where clause +@firebase/firestore: βœ” truncate Timestamps +@firebase/firestore: (Persistence=indexeddb) Cursors +@firebase/firestore: βœ” can page through items (130ms) +@firebase/firestore: βœ” can be created from documents (113ms) +@firebase/firestore: βœ” can be created from values (106ms) +@firebase/firestore: βœ” can be created using document id (112ms) +@firebase/firestore: βœ” can be used with reference values (86ms) +@firebase/firestore: βœ” can be used in descending queries (111ms) +@firebase/firestore: βœ” can accept Timestamps as bounds (85ms) +@firebase/firestore: βœ” can accept Timestamps in where clause (80ms) +@firebase/firestore: βœ” truncate Timestamps (100ms) +@firebase/firestore: (Persistence=memory_lru_gc) Database +@firebase/firestore: βœ” can set a document +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document +@firebase/firestore: βœ” can update existing document +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document +@firebase/firestore: βœ” can merge data with an existing document using set +@firebase/firestore: βœ” can merge server timestamps +@firebase/firestore: βœ” can merge empty object +@firebase/firestore: βœ” update with empty object replaces all fields +@firebase/firestore: βœ” merge with empty object replaces all fields +@firebase/firestore: βœ” can delete field using merge +@firebase/firestore: βœ” can delete field using mergeFields +@firebase/firestore: βœ” can set server timestamps using mergeFields +@firebase/firestore: βœ” can replace an array by merging using set +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask +@firebase/firestore: βœ” doesn't apply field delete outside of mask +@firebase/firestore: βœ” doesn't apply field transform outside of mask +@firebase/firestore: βœ” can set an empty field mask +@firebase/firestore: βœ” can specify fields multiple times in a field mask +@firebase/firestore: βœ” cannot update nonexistent document +@firebase/firestore: βœ” can delete a field with an update +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can specify updated field multiple times +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: βœ” DocumentSnapshot events for add data to document +@firebase/firestore: βœ” DocumentSnapshot events for change data in document +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document +@firebase/firestore: βœ” Listen can be called multiple times +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline +@firebase/firestore: - offline writes are sent after restart +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: - maintains persistence after restarting app +@firebase/firestore: - can clear persistence if the client has been terminated +@firebase/firestore: - can clear persistence if the client has not been initialized +@firebase/firestore: - cannot clear persistence if the client has been initialized +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: - can set and get data with auto detect long polling enabled +@firebase/firestore: βœ” can keep docs separate with multi-db when online +@firebase/firestore: βœ” can keep docs separate with multi-db when offline +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. +@firebase/firestore: βœ” Lru GC is enabled by default. +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings +@firebase/firestore: βœ” can listen to documents with vectors +@firebase/firestore: βœ” SDK orders vector field same way as backend +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline (41ms) +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 15:02:35 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() (53ms) +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() (52ms) +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() (62ms) +@firebase/firestore: βœ” for Query.withConverter(null) (58ms) +@firebase/firestore: βœ” requires the correct converter for Partial usage (38ms) +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge (64ms) +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields (61ms) +@firebase/firestore: βœ” Transaction.set() supports partials with merge (55ms) +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields (54ms) +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge (62ms) +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields (63ms) +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions (52ms) +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference (53ms) +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference (52ms) +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query (52ms) +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType (50ms) +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType (71ms) +@firebase/firestore: βœ” Query.withConverter() default DbModelType (70ms) +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server (38ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server (41ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server (40ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server with persistence +@firebase/firestore: (Persistence=indexeddb) Database +@firebase/firestore: βœ” can set a document (38ms) +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document (75ms) +@firebase/firestore: βœ” can update existing document (62ms) +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document (100ms) +@firebase/firestore: βœ” can merge data with an existing document using set (63ms) +@firebase/firestore: βœ” can merge server timestamps (63ms) +@firebase/firestore: βœ” can merge empty object (106ms) +@firebase/firestore: βœ” update with empty object replaces all fields (61ms) +@firebase/firestore: βœ” merge with empty object replaces all fields (67ms) +@firebase/firestore: βœ” can delete field using merge (65ms) +@firebase/firestore: βœ” can delete field using mergeFields (64ms) +@firebase/firestore: βœ” can set server timestamps using mergeFields (71ms) +@firebase/firestore: βœ” can replace an array by merging using set (64ms) +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask (66ms) +@firebase/firestore: βœ” doesn't apply field delete outside of mask (65ms) +@firebase/firestore: βœ” doesn't apply field transform outside of mask (67ms) +@firebase/firestore: βœ” can set an empty field mask (63ms) +@firebase/firestore: βœ” can specify fields multiple times in a field mask (61ms) +@firebase/firestore: βœ” cannot update nonexistent document (51ms) +@firebase/firestore: βœ” can delete a field with an update (63ms) +@firebase/firestore: βœ” can update nested fields (66ms) +@firebase/firestore: βœ” can specify updated field multiple times (66ms) +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. (53ms) +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync (91ms) +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: βœ” DocumentSnapshot events for add data to document (61ms) +@firebase/firestore: βœ” DocumentSnapshot events for change data in document (90ms) +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document (90ms) +@firebase/firestore: βœ” Listen can be called multiple times (42ms) +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided (64ms) +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline (51ms) +@firebase/firestore: βœ” offline writes are sent after restart (79ms) +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: βœ” maintains persistence after restarting app (47ms) +@firebase/firestore: βœ” can clear persistence if the client has been terminated (61ms) +@firebase/firestore: βœ” can clear persistence if the client has not been initialized (62ms) +@firebase/firestore: βœ” cannot clear persistence if the client has been initialized +@firebase/firestore: βœ” can get documents while offline (71ms) +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart (70ms) +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes (39ms) +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: - can set and get data with auto detect long polling enabled +@firebase/firestore: βœ” can keep docs separate with multi-db when online (88ms) +@firebase/firestore: βœ” can keep docs separate with multi-db when offline (47ms) +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. (38ms) +@firebase/firestore: βœ” Lru GC is enabled by default. (39ms) +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings (78ms) +@firebase/firestore: βœ” can listen to documents with vectors (124ms) +@firebase/firestore: βœ” SDK orders vector field same way as backend (147ms) +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline (170ms) +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 15:02:35 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row (40ms) +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row (84ms) +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() (52ms) +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() (53ms) +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() (63ms) +@firebase/firestore: βœ” for Query.withConverter(null) (54ms) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge (63ms) +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields (64ms) +@firebase/firestore: βœ” Transaction.set() supports partials with merge (53ms) +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields (81ms) +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge (61ms) +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields (63ms) +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions (55ms) +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference (53ms) +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference (54ms) +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query (56ms) +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType (52ms) +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType (76ms) +@firebase/firestore: βœ” Query.withConverter() default DbModelType (99ms) +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query (123ms) +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query (112ms) +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline (146ms) +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server (136ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server (144ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server (141ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server (136ms) +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server (153ms) +@firebase/firestore: - snapshot listener sorts unicode strings in document key the same as server with persistence +@firebase/firestore: (Persistence=memory_lru_gc) Nested Fields +@firebase/firestore: βœ” can be written with set() (41ms) +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: (Persistence=indexeddb) Nested Fields +@firebase/firestore: βœ” can be written with set() (92ms) +@firebase/firestore: βœ” can be read directly with .get() (69ms) +@firebase/firestore: βœ” can be read directly with .get() (54ms) +@firebase/firestore: βœ” can be updated with update() (62ms) +@firebase/firestore: βœ” can be updated with update() (68ms) +@firebase/firestore: βœ” can be used with query.where(). (80ms) +@firebase/firestore: βœ” can be used with query.where(). (143ms) +@firebase/firestore: βœ” can be used with query.orderBy(). (78ms) +@firebase/firestore: βœ” can be used with query.orderBy(). (76ms) +@firebase/firestore: (Persistence=memory_lru_gc) Fields with special characters +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .data() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used in query filters. +@firebase/firestore: βœ” can be used in a query orderBy. +@firebase/firestore: (Persistence=indexeddb) Fields with special characters +@firebase/firestore: βœ” can be written with set() (52ms) +@firebase/firestore: βœ” can be read directly with .data() (52ms) +@firebase/firestore: βœ” can be updated with update() (62ms) +@firebase/firestore: βœ” can be used in query filters. (92ms) +@firebase/firestore: βœ” can be used in a query orderBy. (94ms) +@firebase/firestore: (Persistence=memory_lru_gc) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps +@firebase/firestore: (Persistence=indexeddb) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps (54ms) +@firebase/firestore: (Persistence=memory_lru_gc) `undefined` properties +@firebase/firestore: βœ” are ignored in set() +@firebase/firestore: βœ” are ignored in set({ merge: true }) +@firebase/firestore: βœ” are ignored in update() +@firebase/firestore: βœ” are ignored in Query.where() +@firebase/firestore: βœ” are ignored in Query.startAt() +@firebase/firestore: (Persistence=indexeddb) `undefined` properties +@firebase/firestore: βœ” are ignored in set() (53ms) +@firebase/firestore: βœ” are ignored in set({ merge: true }) (64ms) +@firebase/firestore: βœ” are ignored in update() (73ms) +@firebase/firestore: βœ” are ignored in Query.where() (71ms) +@firebase/firestore: βœ” are ignored in Query.startAt() (74ms) +@firebase/firestore: (Persistence=memory_lru_gc) GetOptions +@firebase/firestore: βœ” get document while online with default get options +@firebase/firestore: βœ” get collection while online with default get options +@firebase/firestore: βœ” get document while offline with default get options +@firebase/firestore: βœ” get collection while offline with default get options +@firebase/firestore: βœ” get document while online with source=cache +@firebase/firestore: βœ” get collection while online with source=cache +@firebase/firestore: βœ” get document while offline with source=cache +@firebase/firestore: βœ” get collection while offline with source=cache +@firebase/firestore: βœ” get document while online with source=server +@firebase/firestore: βœ” get collection while online with source=server +@firebase/firestore: βœ” get document while offline with source=server +@firebase/firestore: βœ” get collection while offline with source=server +@firebase/firestore: βœ” get document while offline with different get options +@firebase/firestore: βœ” get collection while offline with different get options +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: - get deleted doc while offline with default get options +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache +@firebase/firestore: βœ” get nonexistent doc while online with source=server +@firebase/firestore: βœ” get nonexistent collection while online with source=server +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server +@firebase/firestore: (Persistence=indexeddb) GetOptions +@firebase/firestore: βœ” get document while online with default get options (68ms) +@firebase/firestore: βœ” get collection while online with default get options (94ms) +@firebase/firestore: βœ” get document while offline with default get options (121ms) +@firebase/firestore: βœ” get collection while offline with default get options (100ms) +@firebase/firestore: βœ” get document while online with source=cache (51ms) +@firebase/firestore: βœ” get collection while online with source=cache (93ms) +@firebase/firestore: βœ” get document while offline with source=cache (98ms) +@firebase/firestore: βœ” get collection while offline with source=cache (106ms) +@firebase/firestore: βœ” get document while online with source=server (53ms) +@firebase/firestore: βœ” get collection while online with source=server (87ms) +@firebase/firestore: βœ” get document while offline with source=server (68ms) +@firebase/firestore: βœ” get collection while offline with source=server (149ms) +@firebase/firestore: βœ” get document while offline with different get options (56ms) +@firebase/firestore: βœ” get collection while offline with different get options (97ms) +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: - get deleted doc while offline with default get options +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache (40ms) +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache (39ms) +@firebase/firestore: βœ” get nonexistent doc while online with source=server (68ms) +@firebase/firestore: βœ” get nonexistent collection while online with source=server (38ms) +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server (42ms) +@firebase/firestore: (Persistence=memory_lru_gc) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: βœ” supports schema +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=indexeddb) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: βœ” supports schema +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=memory_lru_gc) Numeric Transforms: +@firebase/firestore: βœ” create document with increment +@firebase/firestore: βœ” merge on non-existing document with increment +@firebase/firestore: - increment existing integer with integer +@firebase/firestore: βœ” increment existing double with double +@firebase/firestore: βœ” increment existing double with integer +@firebase/firestore: βœ” increment existing integer with double +@firebase/firestore: βœ” increment existing string with integer +@firebase/firestore: βœ” increment existing string with double +@firebase/firestore: βœ” increments with set() and merge:true +@firebase/firestore: - multiple double increments +@firebase/firestore: βœ” increment twice in a batch +@firebase/firestore: βœ” increment, delete and increment in a batch +@firebase/firestore: βœ” increment on top of ServerTimestamp +@firebase/firestore: (Persistence=indexeddb) Numeric Transforms: +@firebase/firestore: βœ” create document with increment (63ms) +@firebase/firestore: βœ” merge on non-existing document with increment (63ms) +@firebase/firestore: - increment existing integer with integer +@firebase/firestore: βœ” increment existing double with double (83ms) +@firebase/firestore: βœ” increment existing double with integer (83ms) +@firebase/firestore: βœ” increment existing integer with double (95ms) +@firebase/firestore: βœ” increment existing string with integer (87ms) +@firebase/firestore: βœ” increment existing string with double (90ms) +@firebase/firestore: βœ” increments with set() and merge:true (78ms) +@firebase/firestore: - multiple double increments +@firebase/firestore: βœ” increment twice in a batch (85ms) +@firebase/firestore: βœ” increment, delete and increment in a batch (84ms) +@firebase/firestore: βœ” increment on top of ServerTimestamp (86ms) +@firebase/firestore: (Persistence=memory_lru_gc) PersistentCacheIndexManager +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: (Persistence=indexeddb) PersistentCacheIndexManager +@firebase/firestore: βœ” getPersistentCacheIndexManager() should return distinct instances for distinct Firestore objects +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: enable/disable persistent index auto creation +@firebase/firestore: βœ” enable on new instance should succeed +@firebase/firestore: βœ” disable on new instance should succeed +@firebase/firestore: βœ” enable when already enabled should succeed +@firebase/firestore: βœ” disable when already disabled should succeed +@firebase/firestore: βœ” enabling after terminate() should throw +@firebase/firestore: βœ” disabling after terminate() should throw +@firebase/firestore: βœ” query returns correct results when index is auto-created (541ms) +@firebase/firestore: delete all persistent cache indexes +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() on new instance should succeed +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is enabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is disabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() after terminate() should throw +@firebase/firestore: βœ” query returns correct results when auto-created index has been deleted (577ms) +@firebase/firestore: Firestore Provider +@firebase/firestore: βœ” can provide setting +@firebase/firestore: βœ” returns same default instance from named app +@firebase/firestore: βœ” returns different instance from named app +@firebase/firestore: βœ” returns same default instance from default app +@firebase/firestore: βœ” returns different instance from different named app +@firebase/firestore: βœ” can call initializeFirestore() twice if settings are same +@firebase/firestore: βœ” can still use enableIndexedDbPersistence() +@firebase/firestore: βœ” cannot mix enableIndexedDbPersistence() and settings.cache +@firebase/firestore: βœ” cannot use once terminated +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: (Persistence=memory_lru_gc) Queries +@firebase/firestore: βœ” can issue limit queries +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order +@firebase/firestore: βœ” can listen to limitToLast queries +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries +@firebase/firestore: βœ” can issue limitToLast queries with cursors +@firebase/firestore: βœ” key order is descending for descending inequality +@firebase/firestore: βœ” can use unary filters +@firebase/firestore: βœ” can filter on infinity +@firebase/firestore: βœ” will not get metadata only updates +@firebase/firestore: βœ” maintains correct DocumentChange indexes +@firebase/firestore: - can listen for the same query with different options +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds +@firebase/firestore: βœ” can listen for QueryMetadata changes +@firebase/firestore: βœ” can listen for metadata changes +@firebase/firestore: - can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID +@firebase/firestore: βœ” can query by document ID +@firebase/firestore: βœ” can query by document ID using refs +@firebase/firestore: βœ” can query while reconnecting to network +@firebase/firestore: βœ” trigger with isFromCache=true when offline +@firebase/firestore: βœ” can use != filters +@firebase/firestore: βœ” can use != filters by document ID +@firebase/firestore: βœ” can use array-contains filters +@firebase/firestore: βœ” can use IN filters +@firebase/firestore: βœ” can use IN filters by document ID +@firebase/firestore: βœ” can use NOT_IN filters +@firebase/firestore: βœ” can use NOT_IN filters by document ID +@firebase/firestore: βœ” can use array-contains-any filters +@firebase/firestore: βœ” can query collection groups +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId +@firebase/firestore: βœ” can query custom types +@firebase/firestore: βœ” can use filter with nested field +@firebase/firestore: - resuming a query should use bloom filter to avoid full requery +@firebase/firestore: - bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: - bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads (38ms) +@firebase/firestore: βœ” can use or queries +@firebase/firestore: βœ” can use or queries with in +@firebase/firestore: βœ” can use or queries with array membership +@firebase/firestore: βœ” supports using in with array contains any +@firebase/firestore: βœ” supports using in with array contains +@firebase/firestore: βœ” supports order by equality +@firebase/firestore: βœ” supports multiple in ops (43ms) +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty +@firebase/firestore: (Persistence=indexeddb) Queries +@firebase/firestore: βœ” can issue limit queries (85ms) +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order (81ms) +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order (80ms) +@firebase/firestore: βœ” can listen to limitToLast queries (104ms) +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries (143ms) +@firebase/firestore: βœ” can issue limitToLast queries with cursors (153ms) +@firebase/firestore: βœ” key order is descending for descending inequality (87ms) +@firebase/firestore: βœ” can use unary filters (79ms) +@firebase/firestore: βœ” can filter on infinity (85ms) +@firebase/firestore: βœ” will not get metadata only updates (142ms) +@firebase/firestore: βœ” maintains correct DocumentChange indexes (125ms) +@firebase/firestore: - can listen for the same query with different options +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds (93ms) +@firebase/firestore: βœ” can listen for QueryMetadata changes (96ms) +@firebase/firestore: βœ” can listen for metadata changes (100ms) +@firebase/firestore: - can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID (78ms) +@firebase/firestore: βœ” can query by document ID (110ms) +@firebase/firestore: βœ” can query by document ID using refs (97ms) +@firebase/firestore: βœ” can query while reconnecting to network (59ms) +@firebase/firestore: βœ” trigger with isFromCache=true when offline (86ms) +@firebase/firestore: βœ” can use != filters (159ms) +@firebase/firestore: βœ” can use != filters by document ID (78ms) +@firebase/firestore: βœ” can use array-contains filters (113ms) +@firebase/firestore: βœ” can use IN filters (164ms) +@firebase/firestore: βœ” can use IN filters by document ID (84ms) +@firebase/firestore: βœ” can use NOT_IN filters (167ms) +@firebase/firestore: βœ” can use NOT_IN filters by document ID (81ms) +@firebase/firestore: βœ” can use array-contains-any filters (166ms) +@firebase/firestore: βœ” can query collection groups (76ms) +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId (155ms) +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId (84ms) +@firebase/firestore: βœ” can query custom types (61ms) +@firebase/firestore: βœ” can use filter with nested field (106ms) +@firebase/firestore: - resuming a query should use bloom filter to avoid full requery +@firebase/firestore: - bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: - bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings (75ms) +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads (192ms) +@firebase/firestore: βœ” can use or queries (160ms) +@firebase/firestore: βœ” can use or queries with in (89ms) +@firebase/firestore: βœ” can use or queries with array membership (108ms) +@firebase/firestore: βœ” supports using in with array contains any (143ms) +@firebase/firestore: βœ” supports using in with array contains (146ms) +@firebase/firestore: βœ” supports order by equality (108ms) +@firebase/firestore: βœ” supports multiple in ops (214ms) +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty (48ms) +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty (90ms) +@firebase/firestore: (Persistence=memory_lru_gc) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 (61ms) +@firebase/firestore: βœ” iteration 1 (60ms) +@firebase/firestore: βœ” iteration 2 (56ms) +@firebase/firestore: βœ” iteration 3 (59ms) +@firebase/firestore: βœ” iteration 4 (148ms) +@firebase/firestore: βœ” iteration 5 (154ms) +@firebase/firestore: βœ” iteration 6 (82ms) +@firebase/firestore: βœ” iteration 7 (75ms) +@firebase/firestore: βœ” iteration 8 (70ms) +@firebase/firestore: βœ” iteration 9 (63ms) +@firebase/firestore: βœ” iteration 10 (71ms) +@firebase/firestore: βœ” iteration 11 (67ms) +@firebase/firestore: βœ” iteration 12 (66ms) +@firebase/firestore: βœ” iteration 13 (101ms) +@firebase/firestore: βœ” iteration 14 (68ms) +@firebase/firestore: βœ” iteration 15 (63ms) +@firebase/firestore: βœ” iteration 16 (57ms) +@firebase/firestore: βœ” iteration 17 (58ms) +@firebase/firestore: βœ” iteration 18 (56ms) +@firebase/firestore: βœ” iteration 19 (56ms) +@firebase/firestore: (Persistence=indexeddb) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 (194ms) +@firebase/firestore: βœ” iteration 1 (196ms) +@firebase/firestore: βœ” iteration 2 (197ms) +@firebase/firestore: βœ” iteration 3 (196ms) +@firebase/firestore: βœ” iteration 4 (199ms) +@firebase/firestore: βœ” iteration 5 (201ms) +@firebase/firestore: βœ” iteration 6 (193ms) +@firebase/firestore: βœ” iteration 7 (199ms) +@firebase/firestore: βœ” iteration 8 (195ms) +@firebase/firestore: βœ” iteration 9 (198ms) +@firebase/firestore: βœ” iteration 10 (195ms) +@firebase/firestore: βœ” iteration 11 (199ms) +@firebase/firestore: βœ” iteration 12 (200ms) +@firebase/firestore: βœ” iteration 13 (188ms) +@firebase/firestore: βœ” iteration 14 (192ms) +@firebase/firestore: βœ” iteration 15 (192ms) +@firebase/firestore: βœ” iteration 16 (192ms) +@firebase/firestore: βœ” iteration 17 (193ms) +@firebase/firestore: βœ” iteration 18 (193ms) +@firebase/firestore: βœ” iteration 19 (189ms) +@firebase/firestore: (Persistence=memory_lru_gc) Server Timestamps +@firebase/firestore: βœ” work via set() +@firebase/firestore: βœ” work via update() +@firebase/firestore: βœ” work via transaction set() +@firebase/firestore: βœ” work via transaction update() +@firebase/firestore: βœ” can return estimated value +@firebase/firestore: βœ” can return previous value of different type +@firebase/firestore: βœ” can return previous value through consecutive updates +@firebase/firestore: βœ” uses previous value from local mutation +@firebase/firestore: βœ” fail via update() on nonexistent document. +@firebase/firestore: βœ” fail via transaction update() on nonexistent document. +@firebase/firestore: (Persistence=indexeddb) Server Timestamps +@firebase/firestore: βœ” work via set() (65ms) +@firebase/firestore: βœ” work via update() (83ms) +@firebase/firestore: βœ” work via transaction set() (50ms) +@firebase/firestore: βœ” work via transaction update() (72ms) +@firebase/firestore: βœ” can return estimated value (83ms) +@firebase/firestore: βœ” can return previous value of different type (80ms) +@firebase/firestore: βœ” can return previous value through consecutive updates (115ms) +@firebase/firestore: βœ” uses previous value from local mutation (205ms) +@firebase/firestore: βœ” fail via update() on nonexistent document. (52ms) +@firebase/firestore: βœ” fail via transaction update() on nonexistent document. (46ms) +@firebase/firestore: (Persistence=memory_lru_gc) Smoke Test +@firebase/firestore: βœ” can write a single document +@firebase/firestore: βœ” can read a written document +@firebase/firestore: βœ” can read a written document with DocumentKey +@firebase/firestore: βœ” will fire local and remote events +@firebase/firestore: βœ” will fire value events for empty collections +@firebase/firestore: βœ” can get collection query +@firebase/firestore: - can query by field and use order by +@firebase/firestore: (Persistence=indexeddb) Smoke Test +@firebase/firestore: βœ” can write a single document +@firebase/firestore: βœ” can read a written document (56ms) +@firebase/firestore: βœ” can read a written document with DocumentKey (63ms) +@firebase/firestore: βœ” will fire local and remote events (72ms) +@firebase/firestore: βœ” will fire value events for empty collections +@firebase/firestore: βœ” can get collection query (83ms) +@firebase/firestore: - can query by field and use order by +@firebase/firestore: (Persistence=memory_lru_gc) Snapshot Listener source options +@firebase/firestore: listen to persistence cache +@firebase/firestore: βœ” can raise snapshot from cache for Query +@firebase/firestore: βœ” can raise snapshot from cache for DocumentReference +@firebase/firestore: βœ” listen to cache would not be affected by online status change +@firebase/firestore: βœ” multiple listeners sourced from cache can work independently (62ms) +@firebase/firestore: βœ” can listen/un-listen/re-listen to mirror queries from cache (49ms) +@firebase/firestore: βœ” can listen to default source first and then cache +@firebase/firestore: βœ” can listen to cache source first and then default +@firebase/firestore: βœ” will not get metadata only updates if listening to cache only +@firebase/firestore: βœ” will have synced metadata updates when listening to both cache and default source +@firebase/firestore: βœ” can un-listen to default source while still listening to cache +@firebase/firestore: βœ” can un-listen to cache while still listening to server +@firebase/firestore: βœ” can listen/un-listen/re-listen to same query with different source options +@firebase/firestore: βœ” can listen to composite index queries from cache +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: βœ” will not be triggered by transactions while listening to cache +@firebase/firestore: βœ” share server side updates when listening to both cache and default +@firebase/firestore: (Persistence=indexeddb) Snapshot Listener source options +@firebase/firestore: listen to persistence cache +@firebase/firestore: βœ” can raise snapshot from cache for Query (88ms) +@firebase/firestore: βœ” can raise snapshot from cache for DocumentReference (57ms) +@firebase/firestore: βœ” listen to cache would not be affected by online status change (81ms) +@firebase/firestore: βœ” multiple listeners sourced from cache can work independently (113ms) +@firebase/firestore: βœ” can listen/un-listen/re-listen to mirror queries from cache (130ms) +@firebase/firestore: βœ” can listen to default source first and then cache (79ms) +@firebase/firestore: βœ” can listen to cache source first and then default (77ms) +@firebase/firestore: βœ” will not get metadata only updates if listening to cache only (137ms) +@firebase/firestore: βœ” will have synced metadata updates when listening to both cache and default source (140ms) +@firebase/firestore: βœ” can un-listen to default source while still listening to cache (127ms) +@firebase/firestore: βœ” can un-listen to cache while still listening to server (123ms) +@firebase/firestore: βœ” can listen/un-listen/re-listen to same query with different source options (134ms) +@firebase/firestore: βœ” can listen to composite index queries from cache (85ms) +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty (38ms) +@firebase/firestore: βœ” will not be triggered by transactions while listening to cache +@firebase/firestore: βœ” share server side updates when listening to both cache and default (86ms) +@firebase/firestore: (Persistence=memory_lru_gc) Database transactions +@firebase/firestore: βœ” runs transactions after getting existing document (63ms) +@firebase/firestore: βœ” runs transactions after getting nonexistent document (44ms) +@firebase/firestore: βœ” runs transactions after getting a deleted document (53ms) +@firebase/firestore: βœ” runs transactions on existing document (54ms) +@firebase/firestore: βœ” runs transactions on nonexistent document (42ms) +@firebase/firestore: βœ” set document with merge +@firebase/firestore: βœ” can update nested fields transactionally +@firebase/firestore: βœ” retry when a document that was read without being written changes (1493ms) +@firebase/firestore: βœ” cannot read after writing and does not commit +@firebase/firestore: βœ” cannot read after writing and does not commit, even if the user transaction does not bubble up the error +@firebase/firestore: βœ” cannot read nonexistent document then update, even if document is written after the read +@firebase/firestore: βœ” can have gets without mutations +@firebase/firestore: βœ” does not retry on permanent errors +@firebase/firestore: βœ” retries when document already exists (754ms) +@firebase/firestore: βœ” are successful with no transaction operations +@firebase/firestore: βœ” are cancelled on rejected promise +@firebase/firestore: βœ” are cancelled on throw +@firebase/firestore: must return a promise: +@firebase/firestore: βœ” undefined is rejected +@firebase/firestore: βœ” null is rejected +@firebase/firestore: βœ” 5 is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() (71ms) +@firebase/firestore: (Persistence=indexeddb) Database transactions +@firebase/firestore: βœ” runs transactions after getting existing document (290ms) +@firebase/firestore: βœ” runs transactions after getting nonexistent document (119ms) +@firebase/firestore: βœ” runs transactions after getting a deleted document (328ms) +@firebase/firestore: βœ” runs transactions on existing document (268ms) +@firebase/firestore: βœ” runs transactions on nonexistent document (119ms) +@firebase/firestore: βœ” set document with merge (41ms) +@firebase/firestore: βœ” can update nested fields transactionally (45ms) +@firebase/firestore: βœ” retry when a document that was read without being written changes (1180ms) +@firebase/firestore: βœ” cannot read after writing and does not commit (63ms) +@firebase/firestore: βœ” cannot read after writing and does not commit, even if the user transaction does not bubble up the error (59ms) +@firebase/firestore: βœ” cannot read nonexistent document then update, even if document is written after the read (42ms) +@firebase/firestore: βœ” can have gets without mutations (44ms) +@firebase/firestore: βœ” does not retry on permanent errors +@firebase/firestore: βœ” retries when document already exists (1467ms) +@firebase/firestore: βœ” are successful with no transaction operations +@firebase/firestore: βœ” are cancelled on rejected promise (40ms) +@firebase/firestore: βœ” are cancelled on throw (42ms) +@firebase/firestore: must return a promise: +@firebase/firestore: βœ” undefined is rejected +@firebase/firestore: βœ” null is rejected +@firebase/firestore: βœ” 5 is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: βœ” [object Object] is rejected +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for Transaction.set() and Transaction.get() (57ms) +@firebase/firestore: (Persistence=memory_lru_gc) Firestore +@firebase/firestore: βœ” can read and write null fields +@firebase/firestore: βœ” can read and write number fields +@firebase/firestore: βœ” can read and write array fields +@firebase/firestore: βœ” can read and write geo point fields +@firebase/firestore: βœ” can read and write bytes fields +@firebase/firestore: βœ” can read and write date fields +@firebase/firestore: βœ” can read and write timestamp fields +@firebase/firestore: βœ” can read and write document references +@firebase/firestore: βœ” can read and write document references in an array +@firebase/firestore: (Persistence=indexeddb) Firestore +@firebase/firestore: βœ” can read and write null fields (97ms) +@firebase/firestore: βœ” can read and write number fields (76ms) +@firebase/firestore: βœ” can read and write array fields (100ms) +@firebase/firestore: βœ” can read and write geo point fields (100ms) +@firebase/firestore: βœ” can read and write bytes fields (111ms) +@firebase/firestore: βœ” can read and write date fields (97ms) +@firebase/firestore: βœ” can read and write timestamp fields (102ms) +@firebase/firestore: βœ” can read and write document references (100ms) +@firebase/firestore: βœ” can read and write document references in an array (116ms) +@firebase/firestore: (Persistence=memory_lru_gc) Validation: +@firebase/firestore: βœ” Batch writes require correct Document References +@firebase/firestore: βœ” Transaction writes require correct Document References +@firebase/firestore: βœ” Field paths must not have empty segments +@firebase/firestore: βœ” Field paths must not have invalid segments +@firebase/firestore: FirestoreSettings +@firebase/firestore: βœ” disallows changing settings after use +@firebase/firestore: βœ” enforces minimum cache size +@firebase/firestore: βœ” garbage collection can be disabled +@firebase/firestore: βœ” connectFirestoreEmulator() can set host and port +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken object +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() for first time after use +@firebase/firestore: βœ” allows calling connectFirestoreEmulator() after use with same config +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() after use with different config +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken string +@firebase/firestore: βœ” throws if sub / user_id is missing in mockUserToken +@firebase/firestore: Firestore +@firebase/firestore: βœ” disallows calling enableIndexedDbPersistence() after use +@firebase/firestore: βœ” fails transaction if function doesn't return a Promise. +@firebase/firestore: Collection paths +@firebase/firestore: βœ” must be non-empty strings +@firebase/firestore: βœ” must be odd-length +@firebase/firestore: βœ” must not have empty segments +@firebase/firestore: Document paths +@firebase/firestore: βœ” must be strings +@firebase/firestore: βœ” must be even-length +@firebase/firestore: Writes +@firebase/firestore: βœ” must be objects. +@firebase/firestore: βœ” must not contain custom objects or functions. +@firebase/firestore: βœ” must not contain field value transforms in arrays +@firebase/firestore: βœ” must not contain directly nested arrays. +@firebase/firestore: βœ” may contain indirectly nested arrays. +@firebase/firestore: βœ” must not contain undefined. +@firebase/firestore: βœ” must not contain references to a different database +@firebase/firestore: βœ” must not contain reserved field names. +@firebase/firestore: βœ” must not contain empty field names. +@firebase/firestore: βœ” via set() must not contain deleteField() +@firebase/firestore: βœ” via update() must not contain nested deleteField() +@firebase/firestore: Array transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: βœ” reject invalid elements +@firebase/firestore: βœ” reject arrays +@firebase/firestore: Numeric transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: Queries +@firebase/firestore: βœ” with non-positive limit fail +@firebase/firestore: βœ” cannot be created from documents missing sort values +@firebase/firestore: βœ” cannot be sorted by an uncommitted server timestamp +@firebase/firestore: βœ” must not have more components than order by. +@firebase/firestore: βœ” order-by-key bounds must be strings without slashes. +@firebase/firestore: βœ” with more than one != query fail +@firebase/firestore: βœ” with != and not-in filters fail +@firebase/firestore: βœ” with multiple disjunctive filters fail +@firebase/firestore: βœ” can have an IN filter with an array-contains filter. +@firebase/firestore: βœ” enforce array requirements for disjunctive filters +@firebase/firestore: βœ” must not specify starting or ending point after orderBy +@firebase/firestore: βœ” must be non-empty strings or references when filtering by document ID +@firebase/firestore: βœ” using IN and document id must have proper document references in array +@firebase/firestore: βœ” cannot pass undefined as a field value +@firebase/firestore: βœ” invalid query filters fail +@firebase/firestore: βœ” passing non-filters to composite operators fails +@firebase/firestore: βœ” conflicting operators inside a nested composite filter +@firebase/firestore: (Persistence=indexeddb) Validation: +@firebase/firestore: βœ” Batch writes require correct Document References +@firebase/firestore: βœ” Transaction writes require correct Document References +@firebase/firestore: βœ” Field paths must not have empty segments (55ms) +@firebase/firestore: βœ” Field paths must not have invalid segments (58ms) +@firebase/firestore: FirestoreSettings +@firebase/firestore: βœ” disallows changing settings after use (38ms) +@firebase/firestore: βœ” enforces minimum cache size +@firebase/firestore: βœ” garbage collection can be disabled +@firebase/firestore: βœ” connectFirestoreEmulator() can set host and port +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken object +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() for first time after use (38ms) +@firebase/firestore: βœ” allows calling connectFirestoreEmulator() after use with same config +@firebase/firestore: βœ” disallows calling connectFirestoreEmulator() after use with different config (40ms) +@firebase/firestore: βœ” connectFirestoreEmulator() can set mockUserToken string +@firebase/firestore: βœ” throws if sub / user_id is missing in mockUserToken +@firebase/firestore: Firestore +@firebase/firestore: βœ” disallows calling enableIndexedDbPersistence() after use (42ms) +@firebase/firestore: βœ” fails transaction if function doesn't return a Promise. +@firebase/firestore: Collection paths +@firebase/firestore: βœ” must be non-empty strings +@firebase/firestore: βœ” must be odd-length +@firebase/firestore: βœ” must not have empty segments +@firebase/firestore: Document paths +@firebase/firestore: βœ” must be strings +@firebase/firestore: βœ” must be even-length +@firebase/firestore: Writes +@firebase/firestore: βœ” must be objects. +@firebase/firestore: βœ” must not contain custom objects or functions. +@firebase/firestore: βœ” must not contain field value transforms in arrays +@firebase/firestore: βœ” must not contain directly nested arrays. +@firebase/firestore: βœ” may contain indirectly nested arrays. (76ms) +@firebase/firestore: βœ” must not contain undefined. +@firebase/firestore: βœ” must not contain references to a different database +@firebase/firestore: βœ” must not contain reserved field names. +@firebase/firestore: βœ” must not contain empty field names. +@firebase/firestore: βœ” via set() must not contain deleteField() +@firebase/firestore: βœ” via update() must not contain nested deleteField() +@firebase/firestore: Array transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: βœ” reject invalid elements +@firebase/firestore: βœ” reject arrays +@firebase/firestore: Numeric transforms +@firebase/firestore: βœ” fail in queries +@firebase/firestore: Queries +@firebase/firestore: βœ” with non-positive limit fail +@firebase/firestore: βœ” cannot be created from documents missing sort values (73ms) +@firebase/firestore: βœ” cannot be sorted by an uncommitted server timestamp (85ms) +@firebase/firestore: βœ” must not have more components than order by. +@firebase/firestore: βœ” order-by-key bounds must be strings without slashes. +@firebase/firestore: βœ” with more than one != query fail +@firebase/firestore: βœ” with != and not-in filters fail +@firebase/firestore: βœ” with multiple disjunctive filters fail +@firebase/firestore: βœ” can have an IN filter with an array-contains filter. +@firebase/firestore: βœ” enforce array requirements for disjunctive filters +@firebase/firestore: βœ” must not specify starting or ending point after orderBy +@firebase/firestore: βœ” must be non-empty strings or references when filtering by document ID +@firebase/firestore: βœ” using IN and document id must have proper document references in array +@firebase/firestore: βœ” cannot pass undefined as a field value +@firebase/firestore: βœ” invalid query filters fail +@firebase/firestore: βœ” passing non-filters to composite operators fails +@firebase/firestore: βœ” conflicting operators inside a nested composite filter +@firebase/firestore: WebChannel +@firebase/firestore: - receives error messages +@firebase/firestore: Remote Storage +@firebase/firestore: βœ” can write +@firebase/firestore: βœ” can read +@firebase/firestore: βœ” can read deleted documents +@firebase/firestore: Watch Stream +@firebase/firestore: βœ” can be stopped before handshake +@firebase/firestore: βœ” gets connected event before first message +@firebase/firestore: Write Stream +@firebase/firestore: βœ” can be stopped before handshake +@firebase/firestore: βœ” can be stopped after handshake +@firebase/firestore: βœ” closes when idle +@firebase/firestore: βœ” cancels idle on write +@firebase/firestore: βœ” force refreshes auth token on receiving unauthenticated error (768ms) +@firebase/firestore: aggregateFieldEqual +@firebase/firestore: βœ” equates two equal aggregate fields +@firebase/firestore: βœ” differentiates two different aggregate fields +@firebase/firestore: Bytes +@firebase/firestore: βœ” constructs values from Base64 +@firebase/firestore: βœ” constructs values from Uint8Array +@firebase/firestore: βœ” works with instanceof checks +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: CollectionReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentSnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: Query +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: QuerySnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: SnapshotMetadata +@firebase/firestore: βœ” from DocumentSnapshot support equality checking with isEqual() +@firebase/firestore: βœ” from QuerySnapshot support equality checking with isEqual() +@firebase/firestore: Settings +@firebase/firestore: βœ” cannot use mutually exclusive settings together +@firebase/firestore: βœ” long polling should be in auto-detect mode by default +@firebase/firestore: βœ” long polling should be in force mode if force=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if force=false +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true and force=false +@firebase/firestore: βœ” long polling should be in force mode if autoDetect=false and force=true +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false and force=false +@firebase/firestore: βœ” timeoutSeconds is undefined by default +@firebase/firestore: βœ” timeoutSeconds minimum value is allowed +@firebase/firestore: βœ” timeoutSeconds maximum value is allowed +@firebase/firestore: βœ” timeoutSeconds typical value is allowed +@firebase/firestore: βœ” timeoutSeconds floating point value is allowed +@firebase/firestore: βœ” timeoutSeconds value one less than minimum throws +@firebase/firestore: βœ” timeoutSeconds value one more than maximum throws +@firebase/firestore: βœ” timeoutSeconds value of 0 throws +@firebase/firestore: βœ” timeoutSeconds value of -0 throws +@firebase/firestore: βœ” timeoutSeconds value of -1 throws +@firebase/firestore: βœ” timeoutSeconds value of -infinity throws +@firebase/firestore: βœ” timeoutSeconds value of +infinity throws +@firebase/firestore: βœ” timeoutSeconds value of NaN throws +@firebase/firestore: βœ” long polling autoDetect=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling autoDetect=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling autoDetect=null should be coerced to false +@firebase/firestore: βœ” long polling force=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling force=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling force=null should be coerced to false +@firebase/firestore: βœ” gets settings from useEmulator +@firebase/firestore: βœ” gets privateSettings from useEmulator +@firebase/firestore: βœ” prefers host from useEmulator to host from settings +@firebase/firestore: βœ” sets credentials based on mockUserToken object +@firebase/firestore: βœ” sets credentials based on mockUserToken string +@firebase/firestore: DocumentChange: +@firebase/firestore: βœ” positions are correct for additions +@firebase/firestore: βœ” positions are correct for deletions +@firebase/firestore: βœ” positions are correct for modifications +@firebase/firestore: βœ” positions are correct for sort order changes +@firebase/firestore: βœ” positions are correct for randomly chosen examples (146ms) +@firebase/firestore: FieldPath +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: FieldValue +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” support instanceof checks +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: GeoPoint +@firebase/firestore: βœ” constructs values +@firebase/firestore: βœ” GeoPoints throw on invalid values +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: long_polling_options +@firebase/firestore: βœ” longPollingOptionsEqual() should return true for empty objects +@firebase/firestore: βœ” longPollingOptionsEqual() should return true if both objects have the same timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should return false if the objects have different timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should ignore properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: βœ” cloneLongPollingOptions() with an empty object should return an empty object +@firebase/firestore: βœ” cloneLongPollingOptions() should copy timeoutSeconds +@firebase/firestore: βœ” cloneLongPollingOptions() should not copy properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: Timestamp +@firebase/firestore: βœ” constructor should validate the "seconds" argument and store it +@firebase/firestore: βœ” constructor should validate the "nanoseconds" argument and store it +@firebase/firestore: βœ” fromDate +@firebase/firestore: βœ” valueOf +@firebase/firestore: βœ” arithmetic comparison of a Timestamp object to itself +@firebase/firestore: βœ” arithmetic comparison of equivalent, but distinct, Timestamp objects +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose nanoseconds differ +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose seconds differ +@firebase/firestore: βœ” arithmetic comparison of the smallest and largest Timestamp objects +@firebase/firestore: βœ” handles decimal inputs in fromMillis() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: EventManager +@firebase/firestore: βœ” handles many listenables per query +@firebase/firestore: βœ” handles unlisten on unknown listenable gracefully +@firebase/firestore: βœ” notifies listenables in the right order +@firebase/firestore: βœ” will forward onOnlineStateChange calls +@firebase/firestore: QueryListener +@firebase/firestore: βœ” raises collection events +@firebase/firestore: βœ” raises error event +@firebase/firestore: βœ” raises event for empty collection after sync +@firebase/firestore: βœ” raises 'hasPendingWrites' for pending mutation in initial snapshot +@firebase/firestore: βœ” doesn't raise 'hasPendingWrites' for committed mutation in initial snapshot +@firebase/firestore: βœ” does not raise events for metadata changes unless specified +@firebase/firestore: βœ” raises metadata events only when specified +@firebase/firestore: βœ” Metadata-only document changes are filtered out when includeMetadataChanges is false +@firebase/firestore: βœ” Suppresses write acknowledgment if Watch hasn't caught up +@firebase/firestore: βœ” Will wait for sync if online +@firebase/firestore: βœ” Will raise initial event when going offline +@firebase/firestore: βœ” Will raise initial event when going offline and there are no docs +@firebase/firestore: βœ” Will raise initial event when offline and there are no docs +@firebase/firestore: FieldFilter +@firebase/firestore: βœ” exposes field filter members +@firebase/firestore: CompositeFilter +@firebase/firestore: βœ” exposes composite filter members for AND filter +@firebase/firestore: βœ” exposes composite filter members for OR filter +@firebase/firestore: βœ” has working composite filter nested checks +@firebase/firestore: βœ” computes canonical id of flat conjunctions +@firebase/firestore: ListenSequence +@firebase/firestore: βœ” writes the new sequence number to the syncer +@firebase/firestore: βœ” bumps the next value based on notifications from the syncer +@firebase/firestore: Bound +@firebase/firestore: βœ” implements isEqual +@firebase/firestore: Query +@firebase/firestore: βœ” can get collection group +@firebase/firestore: βœ” matches based on document key +@firebase/firestore: βœ” matches correctly for shallow ancestor query +@firebase/firestore: βœ” matches primitive values for filters +@firebase/firestore: βœ” matches array-contains filters +@firebase/firestore: βœ” matches array-contains filters with object values +@firebase/firestore: βœ” matches IN filters +@firebase/firestore: βœ” matches IN filters with object values +@firebase/firestore: βœ” matches not-in filters +@firebase/firestore: βœ” matches not-in filters with object values +@firebase/firestore: βœ” matches array-contains-any filters +@firebase/firestore: βœ” matches array-contains-any filters with object values +@firebase/firestore: βœ” matches NaN for filters +@firebase/firestore: βœ” matches null for filters +@firebase/firestore: βœ” matches complex objects for filters +@firebase/firestore: βœ” doesn't crash querying unset fields +@firebase/firestore: βœ” doesn't remove complex objects with orderBy +@firebase/firestore: βœ” filters based on array value +@firebase/firestore: βœ” filters based on object value +@firebase/firestore: βœ” sorts documents in the correct order +@firebase/firestore: βœ” sorts documents using multiple fields +@firebase/firestore: βœ” sorts documents with descending too +@firebase/firestore: βœ” generates canonical ids +@firebase/firestore: βœ” canonical ids are stable +@firebase/firestore: βœ” generates the correct implicit order by's +@firebase/firestore: βœ” generates the correct implicit order by's for multiple inequality +@firebase/firestore: βœ” matchesAllDocuments() considers filters, orders and bounds +@firebase/firestore: βœ” matches composite queries +@firebase/firestore: βœ” matches composite queries with multiple inequality +@firebase/firestore: βœ” generates appropriate order-bys for aggregate and non-aggregate targets +@firebase/firestore: βœ” generated order-bys are not affected by previously memoized targets +@firebase/firestore: View +@firebase/firestore: βœ” adds documents based on query +@firebase/firestore: βœ” removes documents +@firebase/firestore: βœ” returns null if there are no changes +@firebase/firestore: βœ” does not return null for the first changes +@firebase/firestore: βœ” filters documents based on query with filter +@firebase/firestore: βœ” updates documents based on query with filter +@firebase/firestore: βœ” removes documents for query with limit +@firebase/firestore: βœ” doesn't report changes for documents beyond limit of query +@firebase/firestore: βœ” keeps track of limbo documents +@firebase/firestore: βœ” is marked from cache with limbo documents +@firebase/firestore: βœ” resumes queries without creating limbo documents +@firebase/firestore: βœ” returns needsRefill on delete limit query +@firebase/firestore: βœ” returns needsRefill on reorder in limit query +@firebase/firestore: βœ” doesn't need refill on reorder within limit +@firebase/firestore: βœ” doesn't need refill on reorder after limit query +@firebase/firestore: βœ” doesn't need refill for additions after the limit +@firebase/firestore: βœ” doesn't need refill for deletions when not near the limit +@firebase/firestore: βœ” handles applying irrelevant docs +@firebase/firestore: βœ” computes mutatedDocKeys +@firebase/firestore: βœ” computes removes keys from mutatedDocKeys when new doc does not have local changes +@firebase/firestore: βœ” remembers local mutations from previous snapshot +@firebase/firestore: βœ” remembers local mutations from previous call to computeDocChanges +@firebase/firestore: Md5 +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” update() should accept a string +@firebase/firestore: βœ” update() should accept a string of non-standard characters +@firebase/firestore: βœ” update() should accept a string of UTF-8 encoded non-standard characters +@firebase/firestore: βœ” update() should accept an array of number +@firebase/firestore: βœ” update() should accept a Uint8Array +@firebase/firestore: βœ” update() should honor opt_length on a string +@firebase/firestore: βœ” update() should honor opt_length on an array of number +@firebase/firestore: βœ” update() should honor opt_length on a Uint8Array +@firebase/firestore: βœ” reset() should reset +@firebase/firestore: Integer +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” constructor should construct 1 and -1, 2 and -2 +@firebase/firestore: βœ” constructor should construct big positive values +@firebase/firestore: βœ” constructor should construct big negative values +@firebase/firestore: βœ” add() should produce the sum of the two numbers +@firebase/firestore: βœ” multiply() should produce the product of the two numbers +@firebase/firestore: βœ” modulo() should produce the division remainder of the two numbers +@firebase/firestore: βœ” compare() should correctly compare two numbers for order +@firebase/firestore: βœ” toNumber() should return the correct number +@firebase/firestore: βœ” toString() should return the correct number +@firebase/firestore: βœ” fromNumber() create a new Integer with the given value +@firebase/firestore: βœ” fromString() create a new Integer with the given value +@firebase/firestore: βœ” getBits() create a new Integer with the given value +@firebase/firestore: Ordered Code Writer +@firebase/firestore: βœ” computes number of leading zeros +@firebase/firestore: βœ” converts numbers to bits +@firebase/firestore: βœ” orders numbers correctly +@firebase/firestore: βœ” converts strings to bits +@firebase/firestore: βœ” orders strings correctly +@firebase/firestore: βœ” converts bytes to bits +@firebase/firestore: βœ” orders bytes correctly +@firebase/firestore: βœ” encodes infinity +@firebase/firestore: βœ” seeds bytes +@firebase/firestore: Firestore Index Value Writer +@firebase/firestore: can gracefully handle different format of timestamp +@firebase/firestore: βœ” can handle different format of timestamp +@firebase/firestore: βœ” can handle timestamps with 0 nanoseconds +@firebase/firestore: βœ” can compare timestamps with different formats +@firebase/firestore: βœ” sorts vector as a different type from array and map, with unique rules +@firebase/firestore: UpdateData - v9 +@firebase/firestore: βœ” Supports properties with primitive types +@firebase/firestore: βœ” Supports properties with custom types +@firebase/firestore: given properties with dots +@firebase/firestore: βœ” preserves the value type +@firebase/firestore: βœ” does not allow matching a sub-string|path +@firebase/firestore: given nested objects without index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: UpdateData - v10 +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” allows dot notation for nested index types +@firebase/firestore: βœ” allows dot notation for nested index types that are 2 layers deep +@firebase/firestore: FirestoreTypeConverter +@firebase/firestore: βœ” converter has the minimal typing information +@firebase/firestore: βœ” converter has the minimal typing information plus return types +@firebase/firestore: βœ” has the additional 'merge' version of toFirestore() +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument is missing properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains undeclared properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” updateDoc() successfully compiles even if DbModelType argument is missing properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains undeclared properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” getDoc() returns AppModelType +@firebase/firestore: MemoryBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: IndexedDbBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: MemoryDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: IndexedDbDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: EncodedResourcePath +@firebase/firestore: βœ” encodes resource paths +@firebase/firestore: βœ” orders resource paths +@firebase/firestore: MemoryGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDbGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDb IndexBackfiller +@firebase/firestore: βœ” Writes latest read time to FieldIndex on completion +@firebase/firestore: βœ” Fetches documents after earliest read time +@firebase/firestore: βœ” Writes Index Entries +@firebase/firestore: βœ” Writes oldest document first +@firebase/firestore: βœ” Uses DocumentKey Offset for large Snapshots +@firebase/firestore: βœ” Updates collection groups +@firebase/firestore: βœ” Prioritizes new collection groups +@firebase/firestore: βœ” Writes until cap +@firebase/firestore: βœ” Uses latest read time for empty collections +@firebase/firestore: βœ” Handles local mutations after remote docs +@firebase/firestore: βœ” Mutations up to document limit and updates batchId on index +@firebase/firestore: βœ” Mutation finishes mutation batch even if it exceeds limit +@firebase/firestore: βœ” Mutations from high water mark +@firebase/firestore: βœ” Updates existing doc to new value +@firebase/firestore: βœ” Updates docs that no longer match +@firebase/firestore: βœ” Does not process same document twice +@firebase/firestore: βœ” Applies set to remote doc +@firebase/firestore: βœ” Applies patch to remote doc +@firebase/firestore: βœ” Applies delete to remote doc +@firebase/firestore: βœ” Reindexes documents when new index is added +@firebase/firestore: index_manager.ts top-level functions +@firebase/firestore: displayNameForIndexType() +@firebase/firestore: βœ” IndexType.NONE +@firebase/firestore: βœ” IndexType.FULL +@firebase/firestore: βœ” IndexType.PARTIAL +@firebase/firestore: βœ” invalid IndexType +@firebase/firestore: MemoryIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: IndexedDbIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: βœ” can add indexes +@firebase/firestore: βœ” uses auto-incrementing index id +@firebase/firestore: βœ” can get indexes +@firebase/firestore: βœ” can update collection group +@firebase/firestore: βœ” can get next collection group to update +@firebase/firestore: βœ” deleting field index removes entry from collection group +@firebase/firestore: βœ” deleting field index removes entry from getNextCollectionGroupToUpdate() +@firebase/firestore: βœ” persist index offset +@firebase/firestore: βœ” changes user +@firebase/firestore: βœ” adds documents +@firebase/firestore: βœ” applies orderBy +@firebase/firestore: βœ” applies orderBy with not equals filter +@firebase/firestore: βœ” applies equality filter +@firebase/firestore: βœ” applies nested field equality filter +@firebase/firestore: βœ” applies not equals filter +@firebase/firestore: βœ” applies equals with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter on same field +@firebase/firestore: βœ” applies equals with not equals filter on same field (42ms) +@firebase/firestore: βœ” applies less than or equals filter +@firebase/firestore: βœ” applies greater than or equals filter +@firebase/firestore: βœ” applies greater than filter +@firebase/firestore: βœ” applies range filter +@firebase/firestore: βœ” applies startAt filter +@firebase/firestore: βœ” applies startAt filter with notIn +@firebase/firestore: βœ” applies startAfter filter +@firebase/firestore: βœ” applies endAt filter +@firebase/firestore: βœ” applies endBefore filter +@firebase/firestore: βœ” applies range with bound filter +@firebase/firestore: βœ” applies in filter +@firebase/firestore: βœ” applies not in filter +@firebase/firestore: βœ” applies not in filter with greater than filter +@firebase/firestore: βœ” applies not in filter with out of bounds greater than filter +@firebase/firestore: βœ” applies array contains filter +@firebase/firestore: βœ” applies array contains any filter +@firebase/firestore: βœ” validates that array contains filter only matches array +@firebase/firestore: βœ” returns empty result when no index exists +@firebase/firestore: βœ” handles when no matching filter exists +@firebase/firestore: βœ” returns empty results when no matching documents exists +@firebase/firestore: βœ” filters by field type +@firebase/firestore: βœ” supports collection group indexes +@firebase/firestore: βœ” applies limit filter +@firebase/firestore: βœ” uses ordering for limit filter +@firebase/firestore: βœ” updates index entries +@firebase/firestore: βœ” removes index entries +@firebase/firestore: βœ” supports order by key +@firebase/firestore: βœ” supports order by filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with less than filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with greater than filter +@firebase/firestore: βœ” cannot expand result set from a cursor +@firebase/firestore: βœ” can have filters on the same field +@firebase/firestore: βœ” can index timestamp fields of different format +@firebase/firestore: βœ” can index VectorValue fields +@firebase/firestore: βœ” support advances queries (401ms) +@firebase/firestore: βœ” serves partial and full index (48ms) +@firebase/firestore: βœ” createTargetIndexes() creates full indexes for each sub-target +@firebase/firestore: βœ” createTargetIndexes() upgrades a partial index to a full index +@firebase/firestore: βœ” createTargetIndexes() does nothing if a full index already exists +@firebase/firestore: βœ” deleteAllFieldIndexes() deletes all indexes +@firebase/firestore: IndexedDbSchema: createOrUpgradeDb +@firebase/firestore: βœ” can install schema version 1 +@firebase/firestore: βœ” drops the query cache from 2 to 3 +@firebase/firestore: βœ” can upgrade from schema version 3 to 4 +@firebase/firestore: βœ” can upgrade from schema version 4 to 5 +@firebase/firestore: βœ” can upgrade from version 5 to 6 +@firebase/firestore: βœ” can upgrade from version 6 to 7 +@firebase/firestore: βœ” can upgrade from version 7 to 8 +@firebase/firestore: βœ” rewrites canonical IDs during upgrade from version 9 to 10 +@firebase/firestore: βœ” can use read-time index after schema migration +@firebase/firestore: βœ” can get recent document changes in a collection +@firebase/firestore: βœ” can upgrade from version 11 to 12 +@firebase/firestore: βœ” can upgrade from version 12 to 13 +@firebase/firestore: βœ” can upgrade from schema version 13 to 14 (overlay migration) +@firebase/firestore: βœ” can upgrade from version 13 to 14 +@firebase/firestore: βœ” can upgrade from version 14 to 15 +@firebase/firestore: βœ” can upgrade from version 15 to 16 +@firebase/firestore: βœ” can upgrade from version 16 to 17 +@firebase/firestore: βœ” downgrading throws a custom error +@firebase/firestore: IndexedDb: canActAsPrimary +@firebase/firestore: βœ” is eligible when client is offline and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and visible +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is online and hidden and other client is online and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and visible +@firebase/firestore: βœ” is eligible when only client +@firebase/firestore: βœ” regains lease if available +@firebase/firestore: βœ” obtains lease if forceOwningTab is set +@firebase/firestore: IndexedDb: allowTabSynchronization +@firebase/firestore: βœ” blocks start() on IndexedDbTransactionError when synchronization is disabled +@firebase/firestore: βœ” allows start() with IndexedDbTransactionError when synchronization is enabled +@firebase/firestore: βœ” blocks start() when getHighestListenSequenceNumber() fails +@firebase/firestore: βœ” ignores intermittent IndexedDbTransactionError during lease refresh +@firebase/firestore: βœ” rejects access when synchronization is disabled +@firebase/firestore: βœ” grants access when synchronization is enabled +@firebase/firestore: IndexedDb +@firebase/firestore: βœ” can re-open after close +@firebase/firestore: Local Serializer +@firebase/firestore: βœ” SetMutation + TransformMutation (legacy) are squashed +@firebase/firestore: βœ” PatchMutation + TransformMutation (legacy) are squashed +@firebase/firestore: βœ” TransformMutation (legacy) + TransformMutation (legacy) throw assertion +@firebase/firestore: βœ” DeleteMutation + TransformMutation (legacy) on its own throws assertion +@firebase/firestore: βœ” multiple mutations are squashed +@firebase/firestore: βœ” serializes overlay +@firebase/firestore: βœ” serializes FieldIndex +@firebase/firestore: βœ” serializes IndexState +@firebase/firestore: LocalStore w/ IndexedDB Persistence (Non generic) +@firebase/firestore: βœ” Adds Indexes +@firebase/firestore: βœ” Removes Indexes +@firebase/firestore: βœ” Does Not Reset Index When Same Index Is Added +@firebase/firestore: βœ” Deleted Document Removes Index +@firebase/firestore: βœ” Uses Indexes +@firebase/firestore: βœ” Uses Partially Indexed Remote Documents When Available +@firebase/firestore: βœ” Uses Partially Indexed Overlays When Available +@firebase/firestore: βœ” Does Not Use Limit When Index Is Outdated +@firebase/firestore: βœ” Uses Index For Limit Query When Index Is Updated +@firebase/firestore: βœ” Indexes Server Timestamps +@firebase/firestore: βœ” can auto-create indexes (38ms) +@firebase/firestore: βœ” can auto-create indexes works with or query (44ms) +@firebase/firestore: βœ” does not auto-create indexes for small collections +@firebase/firestore: βœ” does not auto create indexes when index lookup is expensive +@firebase/firestore: βœ” index auto creation works when backfiller runs halfway +@firebase/firestore: βœ” index created by index auto creation exists after turn off auto creation (38ms) +@firebase/firestore: βœ” disable index auto creation works (68ms) +@firebase/firestore: βœ” index auto creation works with mutation (41ms) +@firebase/firestore: βœ” delete all indexes works with index auto creation (52ms) +@firebase/firestore: βœ” delete all indexes works with manual added indexes +@firebase/firestore: βœ” index auto creation does not work with multiple inequality +@firebase/firestore: LocalStore w/ Memory Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: βœ” handles SetMutation -> Ack -> PatchMutation -> Reject +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: βœ” collects garbage after ChangeBatch with no target ids +@firebase/firestore: βœ” collects garbage after ChangeBatch +@firebase/firestore: βœ” collects garbage after acknowledged mutation +@firebase/firestore: βœ” collects garbage after rejected mutation +@firebase/firestore: βœ” pins documents in the local view +@firebase/firestore: βœ” throws away documents with unknown target-ids immediately +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: - persists resume tokens +@firebase/firestore: - does not replace resume token with empty resume token +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: - handles SetMutation -> Ack -> Transform -> Ack -> Transform +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow (87ms) +@firebase/firestore: βœ” uses target mapping to execute queries +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: - ignores target mapping after existence filter mismatch +@firebase/firestore: - queries include locally modified documents +@firebase/firestore: - queries include documents from other queries +@firebase/firestore: - queries filter documents that no longer match +@firebase/firestore: LocalStore w/ IndexedDB Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: - handles SetMutation -> Ack -> PatchMutation -> Reject +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: - collects garbage after ChangeBatch with no target ids +@firebase/firestore: - collects garbage after ChangeBatch +@firebase/firestore: - collects garbage after acknowledged mutation +@firebase/firestore: - collects garbage after rejected mutation +@firebase/firestore: - pins documents in the local view +@firebase/firestore: - throws away documents with unknown target-ids immediately +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: βœ” persists resume tokens +@firebase/firestore: βœ” does not replace resume token with empty resume token +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: βœ” handles SetMutation -> Ack -> Transform -> Ack -> Transform +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform (43ms) +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow (395ms) +@firebase/firestore: βœ” uses target mapping to execute queries (38ms) +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: βœ” ignores target mapping after existence filter mismatch +@firebase/firestore: βœ” queries include locally modified documents +@firebase/firestore: βœ” queries include documents from other queries +@firebase/firestore: βœ” queries filter documents that no longer match +@firebase/firestore: IndexedDbLruDelegate +@firebase/firestore: βœ” picks sequence number percentile (319ms) +@firebase/firestore: βœ” removes targets up through sequence number (285ms) +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs (57ms) +@firebase/firestore: βœ” gets cache size (47ms) +@firebase/firestore: βœ” can be disabled (54ms) +@firebase/firestore: βœ” skips a cache that is too small (45ms) +@firebase/firestore: βœ” runs when the cache is large enough (175ms) +@firebase/firestore: βœ” caps sequence numbers to collect (221ms) +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets (113ms) +@firebase/firestore: βœ” with multiple targets in a transaction (97ms) +@firebase/firestore: βœ” with all collected targets in a single transaction (87ms) +@firebase/firestore: βœ” with mutation and sequential targets (113ms) +@firebase/firestore: βœ” with mutations in targets (114ms) +@firebase/firestore: MemoryLruDelegate +@firebase/firestore: βœ” picks sequence number percentile +@firebase/firestore: βœ” removes targets up through sequence number +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs +@firebase/firestore: βœ” gets cache size +@firebase/firestore: βœ” can be disabled +@firebase/firestore: βœ” skips a cache that is too small +@firebase/firestore: βœ” runs when the cache is large enough +@firebase/firestore: βœ” caps sequence numbers to collect +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets +@firebase/firestore: βœ” with multiple targets in a transaction +@firebase/firestore: βœ” with all collected targets in a single transaction +@firebase/firestore: βœ” with mutation and sequential targets +@firebase/firestore: βœ” with mutations in targets +@firebase/firestore: MemoryMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() +@firebase/firestore: IndexedDbMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch (47ms) +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() (47ms) +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() (68ms) +@firebase/firestore: PersistencePromise +@firebase/firestore: βœ” Can chain synchronous functions +@firebase/firestore: βœ” Can chain asynchronous functions +@firebase/firestore: βœ” Can catch synchronous functions +@firebase/firestore: βœ” Can catch asynchronous functions +@firebase/firestore: βœ” ignores catches without errors +@firebase/firestore: βœ” ignores catches without errors async +@firebase/firestore: βœ” can catch errors twice sync +@firebase/firestore: βœ” can catch errors twice async +@firebase/firestore: βœ” can return undefined sync +@firebase/firestore: βœ” can return undefined async +@firebase/firestore: βœ” can waitFor sync +@firebase/firestore: βœ” can waitFor async +@firebase/firestore: βœ” can waitFor async error +@firebase/firestore: βœ” propagates error for waitFor() +@firebase/firestore: βœ” propagates error for forEach() +@firebase/firestore: MemoryTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: IndexedDbTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: βœ” only invokes onCommittedListener once with retries +@firebase/firestore: QueryEngine +@firebase/firestore: MemoryEagerPersistence +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbPersistence configureCsi=false +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbQueryEngine configureCsi=true +@firebase/firestore: βœ” combines indexed with non-indexed results +@firebase/firestore: βœ” uses partial index for limit queries +@firebase/firestore: βœ” re-fills indexed limit queries +@firebase/firestore: βœ” creates indexes when indexAutoCreationEnabled=true +@firebase/firestore: βœ” does not create indexes when indexAutoCreationEnabled=false +@firebase/firestore: βœ” creates indexes when min collection size is met exactly and relative cost is ever-so-slightly better +@firebase/firestore: βœ” does not create indexes when min collection size is not met by only 1 document +@firebase/firestore: βœ” does not create indexes when relative cost is equal +@firebase/firestore: βœ” query with multiple ins on the same field (72ms) +@firebase/firestore: βœ” query with ins and not-ins on the same field (69ms) +@firebase/firestore: βœ” query with multiple ins on different fields (60ms) +@firebase/firestore: βœ” query in with array-contains-any (49ms) +@firebase/firestore: βœ” query in with array-contains (48ms) +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in (39ms) +@firebase/firestore: βœ” query with array membership +@firebase/firestore: ReferenceSet +@firebase/firestore: βœ” can add/remove references +@firebase/firestore: βœ” can remove all references for a target ID +@firebase/firestore: MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” doesn't keep track of size +@firebase/firestore: LRU MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: IndexedDbRemoteDocumentCache +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: RemoteDocumentChangeBuffer +@firebase/firestore: βœ” can read unchanged entry +@firebase/firestore: βœ” can add entry and read it back +@firebase/firestore: βœ” can remove entry +@firebase/firestore: βœ” can apply changes +@firebase/firestore: βœ” can apply changes with removal +@firebase/firestore: βœ” methods fail after apply. +@firebase/firestore: SimpleDb +@firebase/firestore: βœ” regex test +@firebase/firestore: βœ” can get +@firebase/firestore: βœ” can put +@firebase/firestore: βœ” lets you explicitly abort transactions +@firebase/firestore: βœ” aborts transactions when an error happens +@firebase/firestore: βœ” aborts transactions when persistence promise is rejected +@firebase/firestore: βœ” exposes error from inside a transaction +@firebase/firestore: βœ” can delete +@firebase/firestore: βœ” loadAll +@firebase/firestore: βœ” loadFirst +@firebase/firestore: βœ” deleteAll +@firebase/firestore: βœ” deleteAll in key range +@firebase/firestore: βœ” deleteAll in index range +@firebase/firestore: βœ” can iterate +@firebase/firestore: βœ” can iterate and skip keys +@firebase/firestore: βœ” stops iteration after rejected promise +@firebase/firestore: βœ” can iterate in reverse +@firebase/firestore: - can iterate and skip keys in reverse +@firebase/firestore: βœ” can iterate and skip over the index +@firebase/firestore: βœ” can iterate using index and range and stop before end +@firebase/firestore: βœ” can iterate over index as keys-only +@firebase/firestore: βœ” can iterate over index using a partial bound +@firebase/firestore: βœ” can use arrays as keys and do partial bounds ranges +@firebase/firestore: - correctly sorts keys with nested arrays +@firebase/firestore: βœ” retries transactions +@firebase/firestore: βœ” retries transactions only three times +@firebase/firestore: βœ” does not retry explicitly aborted transactions +@firebase/firestore: - Perf +@firebase/firestore: MemoryTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: IndexedDbTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: βœ” persists metadata across restarts +@firebase/firestore: WebStorageSharedClientState +@firebase/firestore: persists mutation batches +@firebase/firestore: βœ” with a pending batch +@firebase/firestore: βœ” with an acknowledged batch +@firebase/firestore: βœ” with a rejected batch +@firebase/firestore: persists query targets +@firebase/firestore: βœ” when empty +@firebase/firestore: βœ” with multiple targets +@firebase/firestore: βœ” with a not-current target +@firebase/firestore: βœ” with a current target +@firebase/firestore: βœ” with an errored target +@firebase/firestore: βœ” garbage collects entry +@firebase/firestore: combines client state +@firebase/firestore: βœ” with targets from existing client +@firebase/firestore: βœ” with targets from new client +@firebase/firestore: βœ” with online state from new client +@firebase/firestore: βœ” ignores online state from inactive client +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes mutation updates +@firebase/firestore: βœ” for pending mutation +@firebase/firestore: βœ” for acknowledged mutation +@firebase/firestore: βœ” for rejected mutation +@firebase/firestore: βœ” handles unauthenticated user +@firebase/firestore: βœ” ignores different user +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes target updates +@firebase/firestore: βœ” for added target +@firebase/firestore: βœ” for removed target +@firebase/firestore: βœ” for not-current target +@firebase/firestore: βœ” for current target +@firebase/firestore: βœ” for errored target +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: syncs sequence numbers +@firebase/firestore: βœ” writes out new sequence numbers +@firebase/firestore: βœ” notifies on new sequence numbers +@firebase/firestore: processes bundles +@firebase/firestore: βœ” writes out collection groups +@firebase/firestore: βœ” supports empty collection groups +@firebase/firestore: DocumentSet +@firebase/firestore: βœ” keeps documents in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates documents +@firebase/firestore: βœ” adds docs equal to comparator with different keys +@firebase/firestore: βœ” equals to other document set with the same elements and order +@firebase/firestore: Document +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” returns fields correctly +@firebase/firestore: βœ” equals to other same documents +@firebase/firestore: field index +@firebase/firestore: βœ” comparator includes collection group +@firebase/firestore: βœ” comparator ignores index id +@firebase/firestore: βœ” comparator ignores index offset +@firebase/firestore: βœ” comparator includes field name +@firebase/firestore: βœ” comparator includes segment kind +@firebase/firestore: βœ” comparator includes segment length +@firebase/firestore: index offset +@firebase/firestore: βœ” supports comparison +@firebase/firestore: βœ” advances seconds +@firebase/firestore: Mutation +@firebase/firestore: βœ” can apply sets to documents +@firebase/firestore: βœ” can apply patches to documents +@firebase/firestore: βœ” can apply patches with merges to missing documents +@firebase/firestore: βœ” can apply patches with merges to null documents +@firebase/firestore: βœ” will delete values from the field-mask +@firebase/firestore: βœ” will patch a primitive value +@firebase/firestore: βœ” patching a NoDocument yields a NoDocument +@firebase/firestore: βœ” can apply local serverTimestamp transforms to documents +@firebase/firestore: βœ” can create arrayUnion() transform. +@firebase/firestore: βœ” can create arrayRemove() transform. +@firebase/firestore: βœ” can apply local arrayUnion transform to missing field +@firebase/firestore: βœ” can apply local arrayUnion transform to non-array field +@firebase/firestore: βœ” can apply local arrayUnion transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate union elements +@firebase/firestore: βœ” can apply local arrayUnion transform with non-primitive elements +@firebase/firestore: βœ” can apply local arrayUnion transform with partially-overlapping elements +@firebase/firestore: βœ” can apply local arrayRemove transform to missing field +@firebase/firestore: βœ” can apply local arrayRemove transform to non-array field +@firebase/firestore: βœ” can apply local arrayRemove transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with non-primitive elements +@firebase/firestore: βœ” can apply server-acked serverTimestamp transform to documents +@firebase/firestore: βœ” can apply server-acked array transforms to document +@firebase/firestore: βœ” can apply numeric add transform to document +@firebase/firestore: βœ” can apply numeric add transform to unexpected type +@firebase/firestore: βœ” can apply numeric add transform to missing field +@firebase/firestore: βœ” can apply numeric add transforms consecutively +@firebase/firestore: βœ” can apply server-acked numeric add transform to document +@firebase/firestore: βœ” can apply deletes to documents +@firebase/firestore: βœ” can apply sets with mutation results +@firebase/firestore: βœ” will apply patches with mutation results +@firebase/firestore: βœ” transitions versions correctly +@firebase/firestore: βœ” extracts null base value for non-transform mutation +@firebase/firestore: βœ” extracts null base value for ServerTimestamp +@firebase/firestore: βœ” extracts base value for increment +@firebase/firestore: βœ” increment twice +@firebase/firestore: βœ” overlay with no mutation +@firebase/firestore: βœ” overlay with mutations fail by preconditions +@firebase/firestore: βœ” overlay with patch on invalid document +@firebase/firestore: βœ” overlay with one set mutation +@firebase/firestore: βœ” overlay with one patch mutation +@firebase/firestore: βœ” overlay with patch then merge +@firebase/firestore: βœ” overlay with delete then patch +@firebase/firestore: βœ” overlay with delete then merge +@firebase/firestore: βœ” overlay with patch then patch to delete field +@firebase/firestore: βœ” overlay with patch then merge with array union +@firebase/firestore: βœ” overlay with array union then remove +@firebase/firestore: βœ” overlay with set then increment +@firebase/firestore: βœ” overlay with set then patch on deleted doc +@firebase/firestore: βœ” overlay with field deletion of nested field +@firebase/firestore: βœ” overlay created from empty set with merge +@firebase/firestore: βœ” overlay with mutation with multiple deletes +@firebase/firestore: βœ” overlay by combinations and permutations (1071ms) +@firebase/firestore: βœ” overlay by combinations and permutations for array transforms (141ms) +@firebase/firestore: βœ” overlay by combinations and permutations for increments (120ms) +@firebase/firestore: MutableObjectValue +@firebase/firestore: βœ” supports empty objectValues +@firebase/firestore: βœ” sets single field +@firebase/firestore: βœ” sets empty object +@firebase/firestore: βœ” sets multiple fields +@firebase/firestore: βœ” sets nested fields +@firebase/firestore: βœ” sets two fields in nested object +@firebase/firestore: βœ” sets field in nested object +@firebase/firestore: βœ” sets deeply nested field in nested object +@firebase/firestore: βœ” sets nested field multiple times +@firebase/firestore: βœ” sets and deletes field +@firebase/firestore: βœ” sets and deletes nested field +@firebase/firestore: βœ” sets single field in existing object +@firebase/firestore: βœ” overwrites field +@firebase/firestore: βœ” overwrites nested field +@firebase/firestore: βœ” overwrites deeply nested field +@firebase/firestore: βœ” merges existing object +@firebase/firestore: βœ” overwrites nested object +@firebase/firestore: βœ” replaces nested object +@firebase/firestore: βœ” deletes single field +@firebase/firestore: βœ” deletes nested object +@firebase/firestore: βœ” deletes non-existing field +@firebase/firestore: βœ” deletes non-existing nested field +@firebase/firestore: ObjectValue +@firebase/firestore: βœ” can extract fields +@firebase/firestore: βœ” can overwrite existing fields +@firebase/firestore: βœ” can add new fields +@firebase/firestore: βœ” can add multiple new fields +@firebase/firestore: βœ” can implicitly create objects +@firebase/firestore: βœ” can overwrite primitive values to create objects +@firebase/firestore: βœ” can add to nested objects +@firebase/firestore: βœ” can delete keys +@firebase/firestore: βœ” can delete nested keys +@firebase/firestore: βœ” can delete added keys +@firebase/firestore: βœ” can delete, resulting in empty object +@firebase/firestore: βœ” will not delete nested keys on primitive values +@firebase/firestore: βœ” can delete multiple fields +@firebase/firestore: βœ” provides field mask +@firebase/firestore: Path +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” can index into itself +@firebase/firestore: βœ” can be constructed with offsets +@firebase/firestore: βœ” can pop front repeatedly +@firebase/firestore: βœ” can yield the last segment +@firebase/firestore: βœ” can create child path +@firebase/firestore: βœ” can pop last repeatedly +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” determines prefix correctly +@firebase/firestore: βœ” escapes FieldPath with segments +@firebase/firestore: βœ” can be constructed from field path. +@firebase/firestore: fails to construct from invalid field path +@firebase/firestore: βœ” "" +@firebase/firestore: βœ” "foo\" +@firebase/firestore: βœ” "foo\x" +@firebase/firestore: βœ” "foo." +@firebase/firestore: βœ” ".foo" +@firebase/firestore: βœ” "foo..bar" +@firebase/firestore: Target Bounds +@firebase/firestore: βœ” can use merge join +@firebase/firestore: βœ” can use partial index +@firebase/firestore: βœ” cannot use overspecified index +@firebase/firestore: βœ” equalities with default order +@firebase/firestore: βœ” equalities with ascending order +@firebase/firestore: βœ” equalities with descending order +@firebase/firestore: βœ” inequalities with default order +@firebase/firestore: βœ” inequalities with ascending order +@firebase/firestore: βœ” inequalities with descending order +@firebase/firestore: βœ” inequality uses single field index +@firebase/firestore: βœ” is query uses merge join +@firebase/firestore: βœ” validates collection +@firebase/firestore: βœ” with array-contains +@firebase/firestore: βœ” array-contains is independent +@firebase/firestore: βœ” with array-contains and order by +@firebase/firestore: βœ” with equality and descending order +@firebase/firestore: βœ” with multiple equalities +@firebase/firestore: βœ” with multiple equalities and inequality +@firebase/firestore: βœ” with orderBy +@firebase/firestore: βœ” with not equals +@firebase/firestore: βœ” with multiple filters +@firebase/firestore: βœ” multiple filters require matching prefix +@firebase/firestore: βœ” with multiple filters and orderBy +@firebase/firestore: βœ” with multiple inequalities +@firebase/firestore: βœ” with multiple notIns +@firebase/firestore: βœ” with multiple orderBys +@firebase/firestore: βœ” with in and notIn +@firebase/firestore: βœ” with equality and different order by +@firebase/firestore: βœ” with equals and not in +@firebase/firestore: βœ” with in and orderBy +@firebase/firestore: βœ” with in and orderBy on same field +@firebase/firestore: βœ” with equality and inequality on the same field +@firebase/firestore: buildTargetIndex() +@firebase/firestore: βœ” queries with equalities +@firebase/firestore: βœ” queries with inequalities +@firebase/firestore: βœ” queries with array contains +@firebase/firestore: βœ” queries with order bys +@firebase/firestore: βœ” queries with inequalities uses single field index +@firebase/firestore: βœ” query of a collection +@firebase/firestore: βœ” query with array contains and order by +@firebase/firestore: βœ” query with equality and descending order +@firebase/firestore: βœ” query with multiple equalities +@firebase/firestore: βœ” query with in and not in filters +@firebase/firestore: βœ” query with equals and not-in filters +@firebase/firestore: query with multiple equalities and inequality +@firebase/firestore: βœ” inequality last +@firebase/firestore: βœ” inequality in middle +@firebase/firestore: query with multiple filters +@firebase/firestore: βœ” == and > on different fields +@firebase/firestore: βœ” >=, ==, and <= filters on the same field +@firebase/firestore: βœ” not-in and >= on the same field +@firebase/firestore: query with multiple order-bys +@firebase/firestore: βœ” order by fff, bar desc, __name__ +@firebase/firestore: βœ” order by foo, bar, __name__ desc +@firebase/firestore: query with equality and different order-by +@firebase/firestore: βœ” filter on foo and bar, order by qux +@firebase/firestore: βœ” filter on aaa, qqq, ccc, order by fff, bbb +@firebase/firestore: query with in and order-by +@firebase/firestore: βœ” on different fields +@firebase/firestore: βœ” on the same field +@firebase/firestore: query with multiple inequality +@firebase/firestore: βœ” returns null +@firebase/firestore: Target Bounds +@firebase/firestore: βœ” empty query +@firebase/firestore: βœ” equals query with ascending index +@firebase/firestore: βœ” equals query with descending index +@firebase/firestore: βœ” less than query with ascending index +@firebase/firestore: βœ” less than query with descending index +@firebase/firestore: βœ” less than or equals query with ascending index +@firebase/firestore: βœ” less than or equals query with descending index +@firebase/firestore: βœ” greater than query with ascending index +@firebase/firestore: βœ” greater than query with descending index +@firebase/firestore: βœ” greater than or equals query with ascending index +@firebase/firestore: βœ” greater than or equals query with descending index +@firebase/firestore: βœ” arrayContains query +@firebase/firestore: βœ” arrayContainsAny query +@firebase/firestore: βœ” orderBy query +@firebase/firestore: βœ” orderBy query with filter +@firebase/firestore: βœ” startAt query +@firebase/firestore: βœ” startAt query with filter +@firebase/firestore: βœ” startAfter query with filter +@firebase/firestore: βœ” startAfter does not change bound if not applicable +@firebase/firestore: βœ” endAt query +@firebase/firestore: βœ” endAt query with filter +@firebase/firestore: βœ” endBefore query with filter +@firebase/firestore: βœ” endBefore does not change bound if not applicable +@firebase/firestore: βœ” partial index match with bound +@firebase/firestore: Values +@firebase/firestore: βœ” compares values for equality +@firebase/firestore: βœ” normalizes values for equality +@firebase/firestore: βœ” orders types correctly (40ms) +@firebase/firestore: βœ” normalizes values for comparison +@firebase/firestore: βœ” estimates size correctly for fixed sized values +@firebase/firestore: βœ” estimates size correctly for relatively sized values +@firebase/firestore: βœ” computes lower bound +@firebase/firestore: βœ” computes upper bound +@firebase/firestore: βœ” canonicalizes values +@firebase/firestore: βœ” canonical IDs ignore sort order +@firebase/firestore: βœ” clones properties without normalization +@firebase/firestore: BloomFilter +@firebase/firestore: βœ” can instantiate an empty bloom filter +@firebase/firestore: βœ” should throw error if empty bloom filter inputs are invalid +@firebase/firestore: βœ” can instantiate a non empty bloom filter +@firebase/firestore: βœ” should throw error if padding is invalid +@firebase/firestore: βœ” should throw error if hash count is negative +@firebase/firestore: βœ” should throw error if hash count is 0 for non empty bloom filter +@firebase/firestore: βœ” should be able to process non standard characters +@firebase/firestore: βœ” mightContain in empty bloom filter should always return false +@firebase/firestore: βœ” mightContain on empty string might return false positive result +@firebase/firestore: BloomFilter golden tests +@firebase/firestore: βœ” mightContain result for 1 document with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 500 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.01 false positive rate (120ms) +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.0001 false positive rate (160ms) +@firebase/firestore: - mightContain result for 50000 documents with 1 false positive rate +@firebase/firestore: - mightContain result for 50000 documents with 0.01 false positive rate +@firebase/firestore: - mightContain result for 50000 documents with 0.0001 false positive rate +@firebase/firestore: Datastore +@firebase/firestore: βœ” newDatastore() returns an an instance of Datastore +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() fails if terminated +@firebase/firestore: βœ” Connection.terminate() invoked if Datastore terminated +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() invalidates the token if unauthenticated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() fails if terminated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() invalidates the token if unauthenticated +@firebase/firestore: RemoteEvent +@firebase/firestore: βœ” will accumulate document added and removed events +@firebase/firestore: βœ” will ignore events for pending targets +@firebase/firestore: βœ” will ignore events for removed targets +@firebase/firestore: βœ” will keep reset mapping even with updates +@firebase/firestore: βœ” will handle single reset +@firebase/firestore: βœ” will handle target add and removal in same batch +@firebase/firestore: βœ” target current change will mark the target current +@firebase/firestore: βœ” target added change will reset previous state +@firebase/firestore: βœ” no change will still mark the affected targets +@firebase/firestore: βœ” existence filters clears target mapping +@firebase/firestore: βœ” existence filters removes current changes +@firebase/firestore: βœ” handles document update +@firebase/firestore: βœ” only raises events for updated targets +@firebase/firestore: βœ” synthesizes deletes +@firebase/firestore: βœ” doesn't synthesize deletes in the wrong state +@firebase/firestore: βœ” separates document updates +@firebase/firestore: βœ” tracks limbo documents +@firebase/firestore: RestConnection +@firebase/firestore: βœ” url uses from path +@firebase/firestore: βœ” merges headers +@firebase/firestore: βœ” empty app check token is not added to headers +@firebase/firestore: βœ” returns success +@firebase/firestore: βœ” returns error +@firebase/firestore: Serializer +@firebase/firestore: βœ” toDocument() / fromDocument +@firebase/firestore: βœ” encodes listen request labels +@firebase/firestore: converts value +@firebase/firestore: βœ” converts NullValue +@firebase/firestore: βœ” converts BooleanValue +@firebase/firestore: βœ” converts IntegerValue +@firebase/firestore: βœ” converts DoubleValue +@firebase/firestore: βœ” converts NaN +@firebase/firestore: βœ” converts Infinity +@firebase/firestore: βœ” converts StringValue +@firebase/firestore: βœ” converts TimestampValue from proto +@firebase/firestore: βœ” converts TimestampValue from string +@firebase/firestore: βœ” converts TimestampValue to string (useProto3Json=true) +@firebase/firestore: βœ” converts GeoPointValue +@firebase/firestore: βœ” converts BlobValue +@firebase/firestore: βœ” converts ArrayValue +@firebase/firestore: βœ” converts empty ArrayValue +@firebase/firestore: βœ” converts empty ObjectValue +@firebase/firestore: βœ” converts nested ObjectValues +@firebase/firestore: βœ” converts RefValue +@firebase/firestore: βœ” converts VectorValue +@firebase/firestore: toKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts a long key +@firebase/firestore: fromKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts default-value containing key +@firebase/firestore: toDocumentMask +@firebase/firestore: - converts a weird path +@firebase/firestore: fromDocumentMask +@firebase/firestore: - converts a weird path +@firebase/firestore: toMutation +@firebase/firestore: βœ” converts DeleteMutation +@firebase/firestore: toMutation / fromMutation +@firebase/firestore: βœ” SetMutation +@firebase/firestore: βœ” PatchMutation +@firebase/firestore: βœ” PatchMutation without precondition +@firebase/firestore: βœ” DeleteMutation +@firebase/firestore: βœ” ServerTimestamp transform +@firebase/firestore: βœ” Numeric Add transform +@firebase/firestore: βœ” Array transforms +@firebase/firestore: βœ” SetMutation with precondition +@firebase/firestore: βœ” VerifyMutation +@firebase/firestore: to/from UnaryOrFieldFilter +@firebase/firestore: βœ” makes dotted-property names +@firebase/firestore: βœ” converts NotEqual +@firebase/firestore: βœ” converts LessThan +@firebase/firestore: βœ” converts LessThanOrEqual +@firebase/firestore: βœ” converts GreaterThan +@firebase/firestore: βœ” converts GreaterThanOrEqual +@firebase/firestore: βœ” converts key field +@firebase/firestore: βœ” converts array-contains +@firebase/firestore: βœ” converts IN +@firebase/firestore: βœ” converts not-in +@firebase/firestore: βœ” converts not-in with null +@firebase/firestore: βœ” converts array-contains-any +@firebase/firestore: to/from UnaryFilter +@firebase/firestore: βœ” converts null +@firebase/firestore: βœ” converts Nan +@firebase/firestore: βœ” converts not null +@firebase/firestore: βœ” converts not NaN +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: toTarget +@firebase/firestore: βœ” converts first-level key queries +@firebase/firestore: βœ” converts first-level ancestor queries +@firebase/firestore: βœ” converts nested ancestor queries +@firebase/firestore: βœ” converts single filters at first-level collections +@firebase/firestore: βœ” converts multiple filters at first-level collections +@firebase/firestore: βœ” converts single filters on deeper collections +@firebase/firestore: βœ” converts multi-layer composite filters with OR at the first layer +@firebase/firestore: βœ” converts multi-layer composite filters with AND at the first layer +@firebase/firestore: βœ” converts order bys +@firebase/firestore: βœ” converts limits +@firebase/firestore: βœ” converts startAt/endAt +@firebase/firestore: βœ” converts resume tokens +@firebase/firestore: to/from OperatorName +@firebase/firestore: βœ” contains all Operators +@firebase/firestore: to/from Direction +@firebase/firestore: βœ” contains all Directions +@firebase/firestore: to/from PropertyOrder +@firebase/firestore: βœ” renders ascending +@firebase/firestore: βœ” renders descending +@firebase/firestore: fromWatchChange +@firebase/firestore: βœ” converts target change with added +@firebase/firestore: βœ” converts target change with removed +@firebase/firestore: βœ” converts target change with no_change +@firebase/firestore: βœ” converts target change with no_change (omitted in JSON) +@firebase/firestore: βœ” converts target change with snapshot version +@firebase/firestore: βœ” converts document change with target ids +@firebase/firestore: βœ” converts document change with removed target ids +@firebase/firestore: βœ” converts document change with deletions +@firebase/firestore: βœ” converts document removes +@firebase/firestore: Serializer +@firebase/firestore: βœ” toDocument() / fromDocument +@firebase/firestore: βœ” encodes listen request labels +@firebase/firestore: converts value +@firebase/firestore: βœ” converts NullValue +@firebase/firestore: βœ” converts BooleanValue +@firebase/firestore: βœ” converts IntegerValue +@firebase/firestore: βœ” converts DoubleValue +@firebase/firestore: βœ” converts NaN +@firebase/firestore: βœ” converts Infinity +@firebase/firestore: βœ” converts StringValue +@firebase/firestore: βœ” converts TimestampValue from proto +@firebase/firestore: βœ” converts TimestampValue from string +@firebase/firestore: βœ” converts TimestampValue to string (useProto3Json=true) +@firebase/firestore: βœ” converts GeoPointValue +@firebase/firestore: βœ” converts BlobValue +@firebase/firestore: βœ” converts ArrayValue +@firebase/firestore: βœ” converts empty ArrayValue +@firebase/firestore: βœ” converts empty ObjectValue +@firebase/firestore: βœ” converts nested ObjectValues +@firebase/firestore: βœ” converts RefValue +@firebase/firestore: βœ” converts VectorValue +@firebase/firestore: toKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts a long key +@firebase/firestore: fromKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts default-value containing key +@firebase/firestore: toDocumentMask +@firebase/firestore: - converts a weird path +@firebase/firestore: fromDocumentMask +@firebase/firestore: - converts a weird path +@firebase/firestore: toMutation +@firebase/firestore: βœ” converts DeleteMutation +@firebase/firestore: toMutation / fromMutation +@firebase/firestore: βœ” SetMutation +@firebase/firestore: βœ” PatchMutation +@firebase/firestore: βœ” PatchMutation without precondition +@firebase/firestore: βœ” DeleteMutation +@firebase/firestore: βœ” ServerTimestamp transform +@firebase/firestore: βœ” Numeric Add transform +@firebase/firestore: βœ” Array transforms +@firebase/firestore: βœ” SetMutation with precondition +@firebase/firestore: βœ” VerifyMutation +@firebase/firestore: to/from UnaryOrFieldFilter +@firebase/firestore: βœ” makes dotted-property names +@firebase/firestore: βœ” converts NotEqual +@firebase/firestore: βœ” converts LessThan +@firebase/firestore: βœ” converts LessThanOrEqual +@firebase/firestore: βœ” converts GreaterThan +@firebase/firestore: βœ” converts GreaterThanOrEqual +@firebase/firestore: βœ” converts key field +@firebase/firestore: βœ” converts array-contains +@firebase/firestore: βœ” converts IN +@firebase/firestore: βœ” converts not-in +@firebase/firestore: βœ” converts not-in with null +@firebase/firestore: βœ” converts array-contains-any +@firebase/firestore: to/from UnaryFilter +@firebase/firestore: βœ” converts null +@firebase/firestore: βœ” converts Nan +@firebase/firestore: βœ” converts not null +@firebase/firestore: βœ” converts not NaN +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: toTarget +@firebase/firestore: βœ” converts first-level key queries +@firebase/firestore: βœ” converts first-level ancestor queries +@firebase/firestore: βœ” converts nested ancestor queries +@firebase/firestore: βœ” converts single filters at first-level collections +@firebase/firestore: βœ” converts multiple filters at first-level collections +@firebase/firestore: βœ” converts single filters on deeper collections +@firebase/firestore: βœ” converts multi-layer composite filters with OR at the first layer +@firebase/firestore: βœ” converts multi-layer composite filters with AND at the first layer +@firebase/firestore: βœ” converts order bys +@firebase/firestore: βœ” converts limits +@firebase/firestore: βœ” converts startAt/endAt +@firebase/firestore: βœ” converts resume tokens +@firebase/firestore: to/from OperatorName +@firebase/firestore: βœ” contains all Operators +@firebase/firestore: to/from Direction +@firebase/firestore: βœ” contains all Directions +@firebase/firestore: to/from PropertyOrder +@firebase/firestore: βœ” renders ascending +@firebase/firestore: βœ” renders descending +@firebase/firestore: fromWatchChange +@firebase/firestore: βœ” converts target change with added +@firebase/firestore: βœ” converts target change with removed +@firebase/firestore: βœ” converts target change with no_change +@firebase/firestore: βœ” converts target change with no_change (omitted in JSON) +@firebase/firestore: βœ” converts target change with snapshot version +@firebase/firestore: βœ” converts document change with target ids +@firebase/firestore: βœ” converts document change with removed target ids +@firebase/firestore: βœ” converts document change with deletions +@firebase/firestore: βœ” converts document removes +@firebase/firestore: Bundles: +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache (44ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs (40ms) +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing (38ms) +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes (64ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes (47ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles might lead to limbo doc (48ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles might lead to limbo doc +@firebase/firestore: βœ” (Persistence) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Memory) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Persistence) Bundles query can be loaded and resumed from different tabs (67ms) +@firebase/firestore: - (Memory) Bundles query can be loaded and resumed from different tabs +@firebase/firestore: βœ” (Persistence) Load from secondary clients and observe from primary (50ms) +@firebase/firestore: - (Memory) Load from secondary clients and observe from primary +@firebase/firestore: βœ” (Persistence) Load and observe from same secondary client (60ms) +@firebase/firestore: - (Memory) Load and observe from same secondary client +@firebase/firestore: βœ” (Persistence) Load from primary client and observe from secondary (55ms) +@firebase/firestore: - (Memory) Load from primary client and observe from secondary +@firebase/firestore: Collections: +@firebase/firestore: βœ” (Persistence) Events are raised after watch ack +@firebase/firestore: βœ” (Memory) Events are raised after watch ack +@firebase/firestore: βœ” (Persistence) Events are raised for local sets before watch ack +@firebase/firestore: βœ” (Memory) Events are raised for local sets before watch ack +@firebase/firestore: Existence Filters: +@firebase/firestore: βœ” (Persistence) Existence filter match +@firebase/firestore: βœ” (Memory) Existence filter match +@firebase/firestore: βœ” (Persistence) Existence filter match after pending update +@firebase/firestore: βœ” (Memory) Existence filter match after pending update +@firebase/firestore: βœ” (Persistence) Existence filter with empty target +@firebase/firestore: βœ” (Memory) Existence filter with empty target +@firebase/firestore: βœ” (Persistence) Existence filter ignored with pending target (43ms) +@firebase/firestore: βœ” (Memory) Existence filter ignored with pending target +@firebase/firestore: βœ” (Persistence) Existence filter mismatch triggers re-run of query (49ms) +@firebase/firestore: βœ” (Memory) Existence filter mismatch triggers re-run of query +@firebase/firestore: βœ” (Persistence) Existence filter mismatch will drop resume token (51ms) +@firebase/firestore: βœ” (Memory) Existence filter mismatch will drop resume token +@firebase/firestore: βœ” (Persistence) Existence filter handled at global snapshot (45ms) +@firebase/firestore: βœ” (Memory) Existence filter handled at global snapshot +@firebase/firestore: βœ” (Persistence) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Memory) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Persistence) Existence filter limbo resolution is denied (49ms) +@firebase/firestore: βœ” (Memory) Existence filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Existence filter clears resume token (47ms) +@firebase/firestore: - (Memory) Existence filter clears resume token +@firebase/firestore: βœ” (Persistence) Full re-query is skipped when bloom filter can identify documents deleted (47ms) +@firebase/firestore: βœ” (Memory) Full re-query is skipped when bloom filter can identify documents deleted +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter cannot identify documents deleted (38ms) +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter cannot identify documents deleted +@firebase/firestore: βœ” (Persistence) Bloom filter can process special characters in document name +@firebase/firestore: βœ” (Memory) Bloom filter can process special characters in document name +@firebase/firestore: βœ” (Persistence) Bloom filter fills in default values for undefined padding and hashCount (40ms) +@firebase/firestore: βœ” (Memory) Bloom filter fills in default values for undefined padding and hashCount +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter bitmap is invalid (38ms) +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter bitmap is invalid +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter hashCount is invalid (41ms) +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter hashCount is invalid +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter is empty (41ms) +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter is empty +@firebase/firestore: βœ” (Persistence) Same documents can have different bloom filters (60ms) +@firebase/firestore: βœ” (Memory) Same documents can have different bloom filters +@firebase/firestore: βœ” (Persistence) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Memory) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Persistence) Bloom filter limbo resolution is denied (44ms) +@firebase/firestore: βœ” (Memory) Bloom filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Bloom filter with large size works as expected (175ms) +@firebase/firestore: βœ” (Memory) Bloom filter with large size works as expected (55ms) +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when there is no document changes (41ms) +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when there is no document changes +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when new documents are added (42ms) +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when new documents are added +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when existing docs are updated (41ms) +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when existing docs are updated +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are updated to no longer match the query (42ms) +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are updated to no longer match the query +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are added, removed and deleted (46ms) +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are added, removed and deleted +@firebase/firestore: Garbage Collection: +@firebase/firestore: - (Persistence) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Persistence) Contents of query are removed after listen is removed, and GC threshold is reached (42ms) +@firebase/firestore: βœ” (Memory) Contents of query are removed after listen is removed, and GC threshold is reached +@firebase/firestore: βœ” (Persistence) Contents of active query are kept while inactive results are removed after GC (90ms) +@firebase/firestore: βœ” (Memory) Contents of active query are kept while inactive results are removed after GC +@firebase/firestore: Client Side Index +@firebase/firestore: βœ” (Persistence) Index Creation visible on all clients +@firebase/firestore: - (Memory) Index Creation visible on all clients +@firebase/firestore: βœ” (Persistence) Index Creation succeeds even if not primary +@firebase/firestore: - (Memory) Index Creation succeeds even if not primary +@firebase/firestore: Limbo Documents: +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted without an existence filter (44ms) +@firebase/firestore: βœ” (Memory) Limbo documents are deleted without an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted with an existence filter (40ms) +@firebase/firestore: βœ” (Memory) Limbo documents are deleted with an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates (42ms) +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates in different snapshot than "current" (55ms) +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates in different snapshot than "current" +@firebase/firestore: βœ” (Persistence) Document remove message will cause docs to go in limbo (41ms) +@firebase/firestore: βœ” (Memory) Document remove message will cause docs to go in limbo +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT (72ms) +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT [no document update] (78ms) +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT [no document update] +@firebase/firestore: βœ” (Persistence) Failed limbo resolution removes document from view (64ms) +@firebase/firestore: βœ” (Memory) Failed limbo resolution removes document from view +@firebase/firestore: βœ” (Persistence) Limbo docs are resolved by primary client (61ms) +@firebase/firestore: - (Memory) Limbo docs are resolved by primary client +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved after primary tab failover (75ms) +@firebase/firestore: - (Memory) Limbo documents are resolved after primary tab failover +@firebase/firestore: βœ” (Persistence) Limbo documents survive primary state transitions (116ms) +@firebase/firestore: - (Memory) Limbo documents survive primary state transitions +@firebase/firestore: βœ” (Persistence) Limbo documents stay consistent between views (64ms) +@firebase/firestore: βœ” (Memory) Limbo documents stay consistent between views +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in no expected limbo doc (60ms) +@firebase/firestore: - (Memory) LimitToLast query from secondary results in no expected limbo doc +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in expected limbo doc (60ms) +@firebase/firestore: - (Memory) LimitToLast query from secondary results in expected limbo doc +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with all results at once from watch (66ms) +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with all results at once from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with results one at a time from watch (75ms) +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with results one at a time from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling when a limbo listen is rejected. (46ms) +@firebase/firestore: βœ” (Memory) Limbo resolution throttling when a limbo listen is rejected. +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with existence filter mismatch (70ms) +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution should wait for full re-query result if there is an existence filter mismatch (59ms) +@firebase/firestore: βœ” (Memory) Limbo resolution should wait for full re-query result if there is an existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with bloom filter application (52ms) +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with bloom filter application +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be started if one is already active (54ms) +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be started if one is already active +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be enqueued if one is already enqueued (85ms) +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be enqueued if one is already enqueued +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should be removed from the queue when the last query listen stops (85ms) +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should be removed from the queue when the last query listen stops +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window (59ms) +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query (59ms) +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query +@firebase/firestore: βœ” (Persistence) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot (59ms) +@firebase/firestore: βœ” (Memory) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot +@firebase/firestore: Limits: +@firebase/firestore: βœ” (Persistence) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Memory) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Persistence) Documents outside of limit don't raise hasPendingWrites (45ms) +@firebase/firestore: βœ” (Memory) Documents outside of limit don't raise hasPendingWrites +@firebase/firestore: βœ” (Persistence) Deleted Document in limbo in full limit query (48ms) +@firebase/firestore: βœ” (Memory) Deleted Document in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Memory) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Persistence) Documents in limit are can handle removed messages for only one of many query (48ms) +@firebase/firestore: βœ” (Memory) Documents in limit are can handle removed messages for only one of many query +@firebase/firestore: βœ” (Persistence) Limits are re-filled from cache (48ms) +@firebase/firestore: βœ” (Memory) Limits are re-filled from cache +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with removal) (58ms) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with removal) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) (62ms) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with update from backend) (64ms) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with update from backend) +@firebase/firestore: βœ” (Persistence) Resumed limit queries exclude deleted documents (92ms) +@firebase/firestore: - (Memory) Resumed limit queries exclude deleted documents +@firebase/firestore: βœ” (Persistence) Resumed limit queries use updated documents (49ms) +@firebase/firestore: βœ” (Memory) Resumed limit queries use updated documents +@firebase/firestore: βœ” (Persistence) Multiple docs in limbo in full limit query (94ms) +@firebase/firestore: βœ” (Memory) Multiple docs in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Limit query is refilled by primary client (56ms) +@firebase/firestore: - (Memory) Limit query is refilled by primary client +@firebase/firestore: βœ” (Persistence) Limit query includes write from secondary client (82ms) +@firebase/firestore: - (Memory) Limit query includes write from secondary client +@firebase/firestore: Listens source options: +@firebase/firestore: - (Persistence) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: - (Persistence) Documents are cleared when listen is removed. +@firebase/firestore: βœ” (Memory) Documents are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes (51ms) +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners (57ms) +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache (42ms) +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache (48ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs (47ms) +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing (46ms) +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes (51ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes (73ms) +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Primary client should not invoke watch request while all clients are listening to cache +@firebase/firestore: - (Memory) Primary client should not invoke watch request while all clients are listening to cache +@firebase/firestore: βœ” (Persistence) Local mutations notifies listeners sourced from cache in all tabs (50ms) +@firebase/firestore: - (Memory) Local mutations notifies listeners sourced from cache in all tabs +@firebase/firestore: βœ” (Persistence) Listeners with different source shares watch changes between primary and secondary clients (70ms) +@firebase/firestore: - (Memory) Listeners with different source shares watch changes between primary and secondary clients +@firebase/firestore: βœ” (Persistence) Clients can have multiple listeners with different sources (60ms) +@firebase/firestore: - (Memory) Clients can have multiple listeners with different sources +@firebase/firestore: βœ” (Persistence) Query is executed by primary client even if primary client only has listeners sourced from cache (59ms) +@firebase/firestore: - (Memory) Query is executed by primary client even if primary client only has listeners sourced from cache +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients (70ms) +@firebase/firestore: - (Memory) Query only raises events in participating clients +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in different clients sourced from cache (68ms) +@firebase/firestore: - (Memory) Mirror queries being listened in different clients sourced from cache +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in the same secondary client sourced from cache (62ms) +@firebase/firestore: - (Memory) Mirror queries being listened in the same secondary client sourced from cache +@firebase/firestore: βœ” (Persistence) Mirror queries being listened from different sources while listening to server in primary tab (54ms) +@firebase/firestore: - (Memory) Mirror queries being listened from different sources while listening to server in primary tab +@firebase/firestore: βœ” (Persistence) Mirror queries from different sources while listening to server in secondary tab (64ms) +@firebase/firestore: - (Memory) Mirror queries from different sources while listening to server in secondary tab +@firebase/firestore: βœ” (Persistence) Un-listen to listeners from different source (55ms) +@firebase/firestore: - (Memory) Un-listen to listeners from different source +@firebase/firestore: Listens: +@firebase/firestore: - (Persistence) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: - (Persistence) Documents outside of view are cleared when listen is removed. +@firebase/firestore: βœ” (Memory) Documents outside of view are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query update when new data is received. +@firebase/firestore: βœ” (Memory) Contents of query update when new data is received. +@firebase/firestore: βœ” (Persistence) Doesn't raise events for empty target (39ms) +@firebase/firestore: βœ” (Memory) Doesn't raise events for empty target +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result (43ms) +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes (51ms) +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) Ensure correct query results with latency-compensated deletes (43ms) +@firebase/firestore: βœ” (Memory) Ensure correct query results with latency-compensated deletes +@firebase/firestore: βœ” (Persistence) Does not raise event for initial document delete +@firebase/firestore: βœ” (Memory) Does not raise event for initial document delete +@firebase/firestore: βœ” (Persistence) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Memory) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Persistence) Will re-issue listen for errored target +@firebase/firestore: βœ” (Memory) Will re-issue listen for errored target +@firebase/firestore: βœ” (Persistence) Will gracefully process failed targets (39ms) +@firebase/firestore: βœ” (Memory) Will gracefully process failed targets +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots (49ms) +@firebase/firestore: βœ” (Memory) Will gracefully handle watch stream reverting snapshots +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots (with restart) (52ms) +@firebase/firestore: - (Memory) Will gracefully handle watch stream reverting snapshots (with restart) +@firebase/firestore: βœ” (Persistence) Individual documents cannot revert (73ms) +@firebase/firestore: βœ” (Memory) Individual documents cannot revert +@firebase/firestore: βœ” (Persistence) Individual (deleted) documents cannot revert (73ms) +@firebase/firestore: βœ” (Memory) Individual (deleted) documents cannot revert +@firebase/firestore: βœ” (Persistence) Waits until Watch catches up to local deletes (81ms) +@firebase/firestore: βœ” (Memory) Waits until Watch catches up to local deletes +@firebase/firestore: βœ” (Persistence) Listens are reestablished after network disconnect (45ms) +@firebase/firestore: βœ” (Memory) Listens are reestablished after network disconnect +@firebase/firestore: βœ” (Persistence) Synthesizes deletes for missing document (55ms) +@firebase/firestore: βœ” (Memory) Synthesizes deletes for missing document +@firebase/firestore: βœ” (Persistence) Re-opens target without existence filter (45ms) +@firebase/firestore: βœ” (Memory) Re-opens target without existence filter +@firebase/firestore: βœ” (Persistence) Ignores update from inactive target (40ms) +@firebase/firestore: βœ” (Memory) Ignores update from inactive target +@firebase/firestore: βœ” (Persistence) Does not synthesize deletes for previously acked documents (40ms) +@firebase/firestore: βœ” (Memory) Does not synthesize deletes for previously acked documents +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to +@firebase/firestore: βœ” (Memory) Query is rejected and re-listened to +@firebase/firestore: βœ” (Persistence) Persists resume token sent with target (50ms) +@firebase/firestore: βœ” (Memory) Persists resume token sent with target +@firebase/firestore: βœ” (Persistence) Array-contains queries support resuming (52ms) +@firebase/firestore: βœ” (Memory) Array-contains queries support resuming +@firebase/firestore: βœ” (Persistence) Persists global resume tokens on unlisten (48ms) +@firebase/firestore: βœ” (Memory) Persists global resume tokens on unlisten +@firebase/firestore: βœ” (Persistence) Omits global resume tokens for a short while (56ms) +@firebase/firestore: - (Memory) Omits global resume tokens for a short while +@firebase/firestore: βœ” (Persistence) Persists global resume tokens if the snapshot is old enough (55ms) +@firebase/firestore: - (Memory) Persists global resume tokens if the snapshot is old enough +@firebase/firestore: βœ” (Persistence) Query is executed by primary client (55ms) +@firebase/firestore: - (Memory) Query is executed by primary client +@firebase/firestore: βœ” (Persistence) Query is shared between primary and secondary client (68ms) +@firebase/firestore: - (Memory) Query is shared between primary and secondary client +@firebase/firestore: βœ” (Persistence) Query is joined by primary client (66ms) +@firebase/firestore: - (Memory) Query is joined by primary client +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients (63ms) +@firebase/firestore: - (Memory) Query only raises events in participating clients +@firebase/firestore: βœ” (Persistence) Query is unlistened to by primary client (58ms) +@firebase/firestore: - (Memory) Query is unlistened to by primary client +@firebase/firestore: βœ” (Persistence) Query is resumed by secondary client (63ms) +@firebase/firestore: - (Memory) Query is resumed by secondary client +@firebase/firestore: βœ” (Persistence) Query is rejected by primary client +@firebase/firestore: - (Memory) Query is rejected by primary client +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to by secondary client (51ms) +@firebase/firestore: - (Memory) Query is rejected and re-listened to by secondary client +@firebase/firestore: βœ” (Persistence) Secondary client raises latency compensated snapshot from primary mutation (67ms) +@firebase/firestore: - (Memory) Secondary client raises latency compensated snapshot from primary mutation +@firebase/firestore: - (Persistence) Secondary client advances query state with global snapshot from primary +@firebase/firestore: - (Memory) Secondary client advances query state with global snapshot from primary +@firebase/firestore: βœ” (Persistence) Mirror queries from same secondary client (62ms) +@firebase/firestore: - (Memory) Mirror queries from same secondary client +@firebase/firestore: βœ” (Persistence) Mirror queries from different secondary client (66ms) +@firebase/firestore: - (Memory) Mirror queries from different secondary client +@firebase/firestore: βœ” (Persistence) Mirror queries from primary and secondary client (68ms) +@firebase/firestore: - (Memory) Mirror queries from primary and secondary client +@firebase/firestore: βœ” (Persistence) Can listen/unlisten to mirror queries. (50ms) +@firebase/firestore: βœ” (Memory) Can listen/unlisten to mirror queries. +@firebase/firestore: βœ” (Persistence) Secondary client uses primary client's online state (62ms) +@firebase/firestore: - (Memory) Secondary client uses primary client's online state +@firebase/firestore: βœ” (Persistence) New client uses existing online state (60ms) +@firebase/firestore: - (Memory) New client uses existing online state +@firebase/firestore: βœ” (Persistence) New client becomes primary if no client has its network enabled (69ms) +@firebase/firestore: - (Memory) New client becomes primary if no client has its network enabled +@firebase/firestore: βœ” (Persistence) Secondary client's online state is ignored (70ms) +@firebase/firestore: - (Memory) Secondary client's online state is ignored +@firebase/firestore: βœ” (Persistence) Offline state doesn't persist if primary is shut down (39ms) +@firebase/firestore: - (Memory) Offline state doesn't persist if primary is shut down +@firebase/firestore: βœ” (Persistence) Listen is re-listened to after primary tab failover (77ms) +@firebase/firestore: - (Memory) Listen is re-listened to after primary tab failover +@firebase/firestore: βœ” (Persistence) Listen is established in new primary tab (75ms) +@firebase/firestore: - (Memory) Listen is established in new primary tab +@firebase/firestore: βœ” (Persistence) Query recovers after primary takeover (79ms) +@firebase/firestore: - (Memory) Query recovers after primary takeover +@firebase/firestore: βœ” (Persistence) Query bounces between primaries (109ms) +@firebase/firestore: - (Memory) Query bounces between primaries +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores watch update (66ms) +@firebase/firestore: - (Memory) Unresponsive primary ignores watch update +@firebase/firestore: βœ” (Persistence) Listen is established in newly started primary (73ms) +@firebase/firestore: - (Memory) Listen is established in newly started primary +@firebase/firestore: βœ” (Persistence) Previous primary immediately regains primary lease (71ms) +@firebase/firestore: - (Memory) Previous primary immediately regains primary lease +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires when called even if there are no local listeners (43ms) +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires when called even if there are no local listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for metadata changes (53ms) +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for metadata changes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires once for multiple event snapshots (66ms) +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires once for multiple event snapshots +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners (55ms) +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache (38ms) +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache (39ms) +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache in multiple tabs (53ms) +@firebase/firestore: - (Memory) Empty initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs (69ms) +@firebase/firestore: - (Memory) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount when adding the target (51ms) +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount when adding the target +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount that does not include pending mutations (43ms) +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount that does not include pending mutations +@firebase/firestore: βœ” (Persistence) ExpectedCount in listen request should work after coming back online (39ms) +@firebase/firestore: βœ” (Memory) ExpectedCount in listen request should work after coming back online +@firebase/firestore: βœ” (Persistence) Global snapshots would not alter query state if there is no changes (63ms) +@firebase/firestore: - (Memory) Global snapshots would not alter query state if there is no changes +@firebase/firestore: Offline: +@firebase/firestore: βœ” (Persistence) Empty queries are resolved if client goes offline +@firebase/firestore: βœ” (Memory) Empty queries are resolved if client goes offline +@firebase/firestore: βœ” (Persistence) A successful message delays offline status +@firebase/firestore: βœ” (Memory) A successful message delays offline status +@firebase/firestore: - (Persistence) Removing all listeners delays "Offline" status on next listen +@firebase/firestore: βœ” (Memory) Removing all listeners delays "Offline" status on next listen +@firebase/firestore: βœ” (Persistence) Queries revert to fromCache=true when offline. (40ms) +@firebase/firestore: βœ” (Memory) Queries revert to fromCache=true when offline. +@firebase/firestore: βœ” (Persistence) Queries with limbo documents handle going offline. (51ms) +@firebase/firestore: βœ” (Memory) Queries with limbo documents handle going offline. +@firebase/firestore: βœ” (Persistence) OnlineState timeout triggers offline behavior (40ms) +@firebase/firestore: βœ” (Memory) OnlineState timeout triggers offline behavior +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: - (Persistence) Queries return from cache when network disabled +@firebase/firestore: βœ” (Memory) Queries return from cache when network disabled +@firebase/firestore: βœ” (Persistence) Client stays offline during credential change +@firebase/firestore: βœ” (Memory) Client stays offline during credential change +@firebase/firestore: OrderBy: +@firebase/firestore: βœ” (Persistence) orderBy applies filtering based on local state (49ms) +@firebase/firestore: βœ” (Memory) orderBy applies filtering based on local state +@firebase/firestore: βœ” (Persistence) orderBy applies to existing documents (46ms) +@firebase/firestore: βœ” (Memory) orderBy applies to existing documents +@firebase/firestore: Performance Tests [10 iterations]: +@firebase/firestore: - (Persistence) Insert a new document +@firebase/firestore: - (Memory) Insert a new document +@firebase/firestore: - (Persistence) Start a listen, write a document, ack the write, handle watch snapshot, unlisten +@firebase/firestore: - (Memory) Start a listen, write a document, ack the write, handle watch snapshot, unlisten +@firebase/firestore: - (Persistence) Write 100 documents and raise a snapshot +@firebase/firestore: - (Memory) Write 100 documents and raise a snapshot +@firebase/firestore: - (Persistence) Update a single document +@firebase/firestore: - (Memory) Update a single document +@firebase/firestore: - (Persistence) Update a document and wait for snapshot with existing listen +@firebase/firestore: - (Memory) Update a document and wait for snapshot with existing listen +@firebase/firestore: - (Persistence) Process 100 documents from Watch and wait for snapshot +@firebase/firestore: - (Memory) Process 100 documents from Watch and wait for snapshot +@firebase/firestore: - (Persistence) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot +@firebase/firestore: - (Memory) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot +@firebase/firestore: - (Persistence) Process 25 target updates and wait for snapshot +@firebase/firestore: - (Memory) Process 25 target updates and wait for snapshot +@firebase/firestore: - (Persistence) Add 500 documents, issue 10 queries that return 10 documents each, unlisten +@firebase/firestore: - (Memory) Add 500 documents, issue 10 queries that return 10 documents each, unlisten +@firebase/firestore: Persistence: +@firebase/firestore: βœ” (Persistence) Local mutations are persisted and re-sent (55ms) +@firebase/firestore: - (Memory) Local mutations are persisted and re-sent +@firebase/firestore: βœ” (Persistence) Persisted local mutations are visible to listeners (46ms) +@firebase/firestore: - (Memory) Persisted local mutations are visible to listeners +@firebase/firestore: βœ” (Persistence) Remote documents are persisted (43ms) +@firebase/firestore: - (Memory) Remote documents are persisted +@firebase/firestore: βœ” (Persistence) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Persistence) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches (69ms) +@firebase/firestore: βœ” (Memory) Mutation Queue is persisted across uid switches +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches (with restarts) (94ms) +@firebase/firestore: - (Memory) Mutation Queue is persisted across uid switches (with restarts) +@firebase/firestore: βœ” (Persistence) Visible mutations reflect uid switches (65ms) +@firebase/firestore: βœ” (Memory) Visible mutations reflect uid switches +@firebase/firestore: βœ” (Persistence) Detects all active clients +@firebase/firestore: - (Memory) Detects all active clients +@firebase/firestore: βœ” (Persistence) Single tab acquires primary lease (38ms) +@firebase/firestore: - (Memory) Single tab acquires primary lease +@firebase/firestore: βœ” (Persistence) Foreground tab acquires primary lease (47ms) +@firebase/firestore: - (Memory) Foreground tab acquires primary lease +@firebase/firestore: βœ” (Persistence) Primary lease bound to network state (54ms) +@firebase/firestore: - (Memory) Primary lease bound to network state +@firebase/firestore: βœ” (Persistence) clearPersistence() shuts down other clients (40ms) +@firebase/firestore: - (Memory) clearPersistence() shuts down other clients +@firebase/firestore: Queries: +@firebase/firestore: βœ” (Persistence) Collection Group query (101ms) +@firebase/firestore: βœ” (Memory) Collection Group query +@firebase/firestore: βœ” (Persistence) Collection Group query with mutations (77ms) +@firebase/firestore: βœ” (Memory) Collection Group query with mutations +@firebase/firestore: βœ” (Persistence) Latency-compensated updates are included in query results (46ms) +@firebase/firestore: βœ” (Memory) Latency-compensated updates are included in query results +@firebase/firestore: βœ” (Persistence) Queries in different tabs will not interfere (63ms) +@firebase/firestore: - (Memory) Queries in different tabs will not interfere +@firebase/firestore: Persistence Recovery +@firebase/firestore: βœ” (Persistence) Write is acknowledged by primary client (with recovery) (45ms) +@firebase/firestore: - (Memory) Write is acknowledged by primary client (with recovery) +@firebase/firestore: βœ” (Persistence) Clients fail to lookup mutations (with recovery) (43ms) +@firebase/firestore: - (Memory) Clients fail to lookup mutations (with recovery) +@firebase/firestore: βœ” (Persistence) Query raises events in secondary client (with recovery) (44ms) +@firebase/firestore: - (Memory) Query raises events in secondary client (with recovery) +@firebase/firestore: βœ” (Persistence) Query is listened to by primary (with recovery) (40ms) +@firebase/firestore: - (Memory) Query is listened to by primary (with recovery) +@firebase/firestore: βœ” (Persistence) Query with active view recovers after primary tab failover (with recovery) (60ms) +@firebase/firestore: - (Memory) Query with active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ” (Persistence) Query without active view recovers after primary tab failover (with recovery) (77ms) +@firebase/firestore: - (Memory) Query without active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ” (Persistence) Ignores intermittent lease refresh failures (with recovery) (38ms) +@firebase/firestore: - (Memory) Ignores intermittent lease refresh failures (with recovery) +@firebase/firestore: βœ” (Persistence) Recovers when write cannot be persisted (56ms) +@firebase/firestore: βœ” (Memory) Recovers when write cannot be persisted +@firebase/firestore: βœ” (Persistence) Does not surface non-persisted writes (64ms) +@firebase/firestore: βœ” (Memory) Does not surface non-persisted writes +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted (57ms) +@firebase/firestore: βœ” (Memory) Recovers when write acknowledgment cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write rejection cannot be persisted (54ms) +@firebase/firestore: βœ” (Memory) Recovers when write rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted (with restart) (66ms) +@firebase/firestore: - (Memory) Recovers when write acknowledgment cannot be persisted (with restart) +@firebase/firestore: βœ” (Persistence) Writes are pending until acknowledgement is persisted (69ms) +@firebase/firestore: βœ” (Memory) Writes are pending until acknowledgement is persisted +@firebase/firestore: βœ” (Persistence) Surfaces local documents if notifyLocalViewChanges fails (45ms) +@firebase/firestore: βœ” (Memory) Surfaces local documents if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Persistence) Excludes documents from future queries even if notifyLocalViewChanges fails (44ms) +@firebase/firestore: βœ” (Memory) Excludes documents from future queries even if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Persistence) Fails targets that cannot be allocated (41ms) +@firebase/firestore: βœ” (Memory) Fails targets that cannot be allocated +@firebase/firestore: βœ” (Persistence) Can re-add failed target +@firebase/firestore: βœ” (Memory) Can re-add failed target +@firebase/firestore: βœ” (Persistence) Recovers when watch update cannot be persisted (42ms) +@firebase/firestore: βœ” (Memory) Recovers when watch update cannot be persisted +@firebase/firestore: βœ” (Persistence) Handles rejections that cannot be persisted (53ms) +@firebase/firestore: βœ” (Memory) Handles rejections that cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo acknowledgement cannot be persisted (60ms) +@firebase/firestore: βœ” (Memory) Recovers when Limbo acknowledgement cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo rejection cannot be persisted (59ms) +@firebase/firestore: βœ” (Memory) Recovers when Limbo rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) User change handles transaction failures (with recovery) (42ms) +@firebase/firestore: - (Memory) User change handles transaction failures (with recovery) +@firebase/firestore: βœ” (Persistence) Multiple user changes during transaction failure (with recovery) (43ms) +@firebase/firestore: - (Memory) Multiple user changes during transaction failure (with recovery) +@firebase/firestore: βœ” (Persistence) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Memory) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Persistence) Can re-listen to query when unlisten fails (42ms) +@firebase/firestore: βœ” (Memory) Can re-listen to query when unlisten fails +@firebase/firestore: Remote store: +@firebase/firestore: βœ” (Persistence) Waits for watch to remove targets (40ms) +@firebase/firestore: βœ” (Memory) Waits for watch to remove targets +@firebase/firestore: βœ” (Persistence) Waits for watch to ack last target add (70ms) +@firebase/firestore: βœ” (Memory) Waits for watch to ack last target add +@firebase/firestore: βœ” (Persistence) Cleans up watch state correctly +@firebase/firestore: βœ” (Memory) Cleans up watch state correctly +@firebase/firestore: βœ” (Persistence) Handles user changes while offline (b/74749605). +@firebase/firestore: βœ” (Memory) Handles user changes while offline (b/74749605). +@firebase/firestore: Resume tokens: +@firebase/firestore: βœ” (Persistence) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Memory) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Persistence) Resume tokens are used across new listens (40ms) +@firebase/firestore: βœ” (Memory) Resume tokens are used across new listens +@firebase/firestore: Writes: +@firebase/firestore: βœ” (Persistence) Two sequential writes to different documents smoke test. (69ms) +@firebase/firestore: βœ” (Memory) Two sequential writes to different documents smoke test. +@firebase/firestore: βœ” (Persistence) Event is raised for a local set before and after the write ack (52ms) +@firebase/firestore: βœ” (Memory) Event is raised for a local set before and after the write ack +@firebase/firestore: βœ” (Persistence) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Memory) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Persistence) Doesn't raise event for document with pending patch (54ms) +@firebase/firestore: βœ” (Memory) Doesn't raise event for document with pending patch +@firebase/firestore: βœ” (Persistence) Cache will not keep data for an outdated write ack (49ms) +@firebase/firestore: βœ” (Memory) Cache will not keep data for an outdated write ack +@firebase/firestore: βœ” (Persistence) Cache raises correct event if write is acked before watch delivers it (49ms) +@firebase/firestore: βœ” (Memory) Cache raises correct event if write is acked before watch delivers it +@firebase/firestore: βœ” (Persistence) Cache will hold local write until watch catches up (67ms) +@firebase/firestore: βœ” (Memory) Cache will hold local write until watch catches up +@firebase/firestore: βœ” (Persistence) Local patch is applied to query until watch catches up (91ms) +@firebase/firestore: βœ” (Memory) Local patch is applied to query until watch catches up +@firebase/firestore: βœ” (Persistence) Writes are pipelined (372ms) +@firebase/firestore: βœ” (Memory) Writes are pipelined +@firebase/firestore: βœ” (Persistence) Pipelined writes can fail (250ms) +@firebase/firestore: βœ” (Memory) Pipelined writes can fail +@firebase/firestore: βœ” (Persistence) Failed writes are released immediately. (67ms) +@firebase/firestore: βœ” (Memory) Failed writes are released immediately. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent. (68ms) +@firebase/firestore: βœ” (Memory) Writes are not re-sent. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent after disable/enable network. (59ms) +@firebase/firestore: βœ” (Memory) Writes are not re-sent after disable/enable network. +@firebase/firestore: - (Persistence) Writes are released when there are no queries left +@firebase/firestore: βœ” (Memory) Writes are released when there are no queries left +@firebase/firestore: βœ” (Persistence) Writes that fail with code invalid-argument are rejected (39ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code invalid-argument are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code already-exists are rejected (39ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code already-exists are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code permission-denied are rejected (39ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code permission-denied are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code out-of-range are rejected (38ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code out-of-range are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code data-loss are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code data-loss are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code aborted are retried (46ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code aborted are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code cancelled are retried (47ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code cancelled are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unknown are retried (45ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code unknown are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code deadline-exceeded are retried (45ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code deadline-exceeded are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code internal are retried (44ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code internal are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unavailable are retried (48ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code unavailable are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unauthenticated are retried (46ms) +@firebase/firestore: βœ” (Memory) Writes that fail with code unauthenticated are retried +@firebase/firestore: βœ” (Persistence) Ensure correct events after patching a doc (including a delete) and getting watcher events. (53ms) +@firebase/firestore: βœ” (Memory) Ensure correct events after patching a doc (including a delete) and getting watcher events. +@firebase/firestore: βœ” (Persistence) Writes are resent after network disconnect (38ms) +@firebase/firestore: βœ” (Memory) Writes are resent after network disconnect +@firebase/firestore: βœ” (Persistence) New writes are sent after write failure (43ms) +@firebase/firestore: βœ” (Memory) New writes are sent after write failure +@firebase/firestore: βœ” (Persistence) Primary client acknowledges write (40ms) +@firebase/firestore: - (Memory) Primary client acknowledges write +@firebase/firestore: βœ” (Persistence) Primary client rejects write (45ms) +@firebase/firestore: - (Memory) Primary client rejects write +@firebase/firestore: βœ” (Persistence) Pending writes are shared between clients (68ms) +@firebase/firestore: - (Memory) Pending writes are shared between clients +@firebase/firestore: βœ” (Persistence) Pending write is acknowledged by primary client (70ms) +@firebase/firestore: - (Memory) Pending write is acknowledged by primary client +@firebase/firestore: βœ” (Persistence) Pending write is rejected by primary client (63ms) +@firebase/firestore: - (Memory) Pending write is rejected by primary client +@firebase/firestore: βœ” (Persistence) Writes are released by primary client (64ms) +@firebase/firestore: - (Memory) Writes are released by primary client +@firebase/firestore: βœ” (Persistence) Writes are held during primary failover (89ms) +@firebase/firestore: - (Memory) Writes are held during primary failover +@firebase/firestore: βœ” (Persistence) Write are sequenced by multiple clients (204ms) +@firebase/firestore: - (Memory) Write are sequenced by multiple clients +@firebase/firestore: βœ” (Persistence) Write is executed after primary tab failover (63ms) +@firebase/firestore: - (Memory) Write is executed after primary tab failover +@firebase/firestore: βœ” (Persistence) Secondary tabs handle user change (94ms) +@firebase/firestore: - (Memory) Secondary tabs handle user change +@firebase/firestore: βœ” (Persistence) Mutations are scoped by user (49ms) +@firebase/firestore: - (Memory) Mutations are scoped by user +@firebase/firestore: βœ” (Persistence) Mutation recovers after primary takeover (75ms) +@firebase/firestore: - (Memory) Mutation recovers after primary takeover +@firebase/firestore: βœ” (Persistence) Write is sent by newly started primary (46ms) +@firebase/firestore: - (Memory) Write is sent by newly started primary +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores acknowledged write (75ms) +@firebase/firestore: - (Memory) Unresponsive primary ignores acknowledged write +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores rejected write (81ms) +@firebase/firestore: - (Memory) Unresponsive primary ignores rejected write +@firebase/firestore: βœ” (Persistence) Mutation are not sent twice after primary failover (84ms) +@firebase/firestore: - (Memory) Mutation are not sent twice after primary failover +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves after write acknowledgment (47ms) +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves after write acknowledgment +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves if another write is issued (41ms) +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves if another write is issued +@firebase/firestore: βœ” (Persistence) Wait for pending writes waits after restart (44ms) +@firebase/firestore: - (Memory) Wait for pending writes waits after restart +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves for write in secondary tab (41ms) +@firebase/firestore: - (Memory) Wait for pending writes resolves for write in secondary tab +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves independently for different tabs (72ms) +@firebase/firestore: - (Memory) Wait for pending writes resolves independently for different tabs +@firebase/firestore: diffArrays +@firebase/firestore: βœ” Missing Element +@firebase/firestore: βœ” AddedElement +@firebase/firestore: βœ” Without Ordering +@firebase/firestore: βœ” Empty Lists +@firebase/firestore: AsyncQueue +@firebase/firestore: βœ” schedules ops in right order +@firebase/firestore: βœ” handles failures +@firebase/firestore: βœ” can schedule ops in the future +@firebase/firestore: βœ” Can cancel delayed operations +@firebase/firestore: βœ” Can run all delayed operations early +@firebase/firestore: βœ” Can run some delayed operations early +@firebase/firestore: βœ” Retries retryable operations +@firebase/firestore: βœ” Doesn't retry internal exceptions +@firebase/firestore: βœ” Schedules first retryable attempt with no delay +@firebase/firestore: βœ” Retries retryable operations with backoff +@firebase/firestore: βœ” Retries retryable operations in order +@firebase/firestore: βœ” Does not delay retryable operations that succeed +@firebase/firestore: βœ” Catches up when retryable operation fails +@firebase/firestore: βœ” Can drain (non-delayed) operations +@firebase/firestore: βœ” Schedules operations with respect to shut down +@firebase/firestore: βœ” Does not run existing operations if opted out +@firebase/firestore: atob +@firebase/firestore: βœ” decodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” decodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: btoa +@firebase/firestore: βœ” encodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” encodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: byteStreamReaderFromString() +@firebase/firestore: βœ” returns a reader stepping readable stream +@firebase/firestore: Bundle +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 4 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 4 +@firebase/firestore: βœ” reads without named query with bytesPerRead 4 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 4 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 4 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 4 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 64 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 64 +@firebase/firestore: βœ” reads without named query with bytesPerRead 64 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 64 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 64 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 64 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1024 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1024 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1024 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1024 +@firebase/firestore: LogicUtils +@firebase/firestore: βœ” implements field filter associativity +@firebase/firestore: βœ” implements composite filter associativity +@firebase/firestore: βœ” implements field filter distribution over field filter +@firebase/firestore: βœ” implements field filter distribution over and filter +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements in expansion for field filters +@firebase/firestore: βœ” implements in expansion for composite filters +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements and filter distribution with and filter +@firebase/firestore: βœ” implements and filter distribution with or filter +@firebase/firestore: βœ” implements or filter distribution with and filter +@firebase/firestore: βœ” implements or filter distribution with or filter +@firebase/firestore: βœ” implements field filter compute DNF +@firebase/firestore: βœ” implements compute dnf flat AND filter +@firebase/firestore: βœ” implements compute dnf flat OR filter +@firebase/firestore: βœ” compute DNF1 +@firebase/firestore: βœ” compute DNF2 +@firebase/firestore: βœ” compute DNF3 +@firebase/firestore: βœ” compute DNF4 +@firebase/firestore: βœ” compute DNF5 +@firebase/firestore: βœ” compute DNF6 +@firebase/firestore: βœ” compute DNF7 +@firebase/firestore: βœ” compute DNF8 +@firebase/firestore: immediateSuccessor +@firebase/firestore: βœ” generates the correct immediate successors +@firebase/firestore: typeCast +@firebase/firestore: βœ” can cast types +@firebase/firestore: βœ” validates types +@firebase/firestore: FieldMask +@firebase/firestore: βœ” cannot contain duplicate fields +@firebase/firestore: CompareUtf8Strings +@firebase/firestore: βœ” compareUtf8Strings should return correct results (5880ms) +@firebase/firestore: nodePromise +@firebase/firestore: βœ” resolves on success value +@firebase/firestore: βœ” rejects on error +@firebase/firestore: ObjectMap +@firebase/firestore: βœ” can get/put/delete values +@firebase/firestore: βœ” can handle collisions +@firebase/firestore: SortedMap Tests +@firebase/firestore: βœ” Create node +@firebase/firestore: βœ” You can search a map for a specific key +@firebase/firestore: βœ” You can insert a new key/value pair into the tree +@firebase/firestore: βœ” You can remove a key/value pair from the map +@firebase/firestore: βœ” More removals +@firebase/firestore: βœ” Removal bug +@firebase/firestore: βœ” Test increasing +@firebase/firestore: βœ” The structure should be valid after insertion (1) +@firebase/firestore: βœ” The structure should be valid after insertion (2) +@firebase/firestore: βœ” Rotate left leaves the tree in a valid state +@firebase/firestore: βœ” Rotate right leaves the tree in a valid state +@firebase/firestore: βœ” The structure should be valid after insertion (3) +@firebase/firestore: βœ” you can overwrite a value +@firebase/firestore: βœ” removing the last element returns an empty map +@firebase/firestore: βœ” empty .get() +@firebase/firestore: βœ” empty .size +@firebase/firestore: βœ” empty .remove() +@firebase/firestore: βœ” .reverseTraversal() works. +@firebase/firestore: βœ” insertion and removal of 100 items in random order. +@firebase/firestore: - Perf +@firebase/firestore: - Perf: Insertion and removal with various # of items. +@firebase/firestore: - Perf: Comparison with {}: Insertion and removal with various # of items. +@firebase/firestore: βœ” SortedMapIterator empty test. +@firebase/firestore: βœ” forward iterator without start key +@firebase/firestore: βœ” forward iterator with start key. +@firebase/firestore: βœ” forward iterator with start key larger than max key +@firebase/firestore: βœ” forward iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator without start key +@firebase/firestore: βœ” reverse iterator with start key. +@firebase/firestore: βœ” reverse iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator with start key larger than max key +@firebase/firestore: βœ” SortedMap.indexOf returns index. +@firebase/firestore: SortedSet +@firebase/firestore: βœ” keeps elements in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates elements +@firebase/firestore: βœ” can iterate over all elements within a range +@firebase/firestore: βœ” can iterate over all elements while condition +@firebase/firestore: βœ” can find element equal or greater to provided. +@firebase/firestore: βœ” can unionWith another set. +@firebase/firestore: βœ” returns indexes of elements +@firebase/firestore: βœ” diff sorted sets with missing element +@firebase/firestore: βœ” diff sorted sets with added element +@firebase/firestore: βœ” diff sorted sets with empty sets +@firebase/firestore: 2984 passing (2m) +@firebase/firestore: 186 pending +@firebase/firestore: Shutting down emulator, pid: [87211] ... +@firebase/firestore: Deleting the emulator jar at /var/folders/4p/60jxf65d6tsb3k2s8r8jzwk000j4dz/T/tmp-87145-SGUzNPTt5flO/cloud-firestore-emulator-v1.18.1.jar +@firebase/firestore: > @firebase/firestore@4.7.9 test:lite:browser +@firebase/firestore: > karma start --lite +@firebase/firestore: The 'BROWSER' environment variable is undefined. Defaulting to 'ChromeHeadless'. +@firebase/firestore: START: +@firebase/firestore: Webpack bundling... +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/src/ 842 KiB 259 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/ 171 KiB +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/unit/ 109 KiB 102 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/integration/ 37.5 KiB 37 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/util/*.ts 19.7 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/util/helpers.d.ts 11.6 KiB [compared for emit] +@firebase/firestore: + 6 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/*.ts 3.43 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/helpers.d.ts 2.23 KiB [compared for emit] +@firebase/firestore: + 2 assets +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/register.d.ts 616 bytes [compared for emit] +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/*.ts 3.38 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/index.d.ts 2.57 KiB [compared for emit] +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/register.d.ts 829 bytes [compared for emit] +@firebase/firestore: asset bootstrap.2509163044.js 6.83 MiB [emitted] (name: bootstrap.2509163044) 1 related asset +@firebase/firestore: webpack 5.97.1 compiled successfully in 7538 ms +@firebase/firestore: 04 03 2025 15:04:19.170:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/lite/bootstrap.ts +@firebase/firestore: 04 03 2025 15:04:19.178:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/lite/bootstrap.ts +@firebase/firestore: 04 03 2025 15:04:19.185:INFO [karma-server]: Karma v6.4.4 server started at http://localhost:8089/ +@firebase/firestore: 04 03 2025 15:04:19.185:INFO [launcher]: Launching browsers ChromeHeadless with concurrency 1 +@firebase/firestore: 04 03 2025 15:04:19.189:INFO [launcher]: Starting browser ChromeHeadless +@firebase/firestore: 04 03 2025 15:04:19.892:INFO [Chrome Headless 133.0.0.0 (Mac OS 10.15.7)]: Connected on socket c6y4_Za70dQ8Ycz-AAAB with id 40881038 +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "(default)"' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "(default)"' +@firebase/firestore: Firestore +@firebase/firestore: βœ” can provide setting +@firebase/firestore: βœ” returns same default instance from named app +@firebase/firestore: βœ” returns different instance from named app +@firebase/firestore: βœ” returns same default instance from default app +@firebase/firestore: βœ” returns different instance from different named app +@firebase/firestore: βœ” cannot call initializeFirestore() twice +@firebase/firestore: βœ” cannot use once terminated +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: doc +@firebase/firestore: βœ” can be used relative to Firestore root +@firebase/firestore: βœ” can be used relative to collection +@firebase/firestore: βœ” can be used with multiple arguments +@firebase/firestore: βœ” strips leading and trailing slashes +@firebase/firestore: βœ” can be relative to doc +@firebase/firestore: βœ” validates path +@firebase/firestore: βœ” supports AutoId +@firebase/firestore: collection +@firebase/firestore: βœ” can be used relative to Firestore root +@firebase/firestore: βœ” can be used relative to Firestore root with multiple arguments +@firebase/firestore: βœ” can be used relative to collection +@firebase/firestore: βœ” can be used relative to doc +@firebase/firestore: βœ” can be used relative to collection with multiple arguments +@firebase/firestore: βœ” validates path +@firebase/firestore: parent +@firebase/firestore: βœ” returns CollectionReferences for DocumentReferences +@firebase/firestore: βœ” returns DocumentReferences for CollectionReferences +@firebase/firestore: βœ” returns null for root collection +@firebase/firestore: getDoc() +@firebase/firestore: βœ” can get a non-existing document +@firebase/firestore: βœ” can get an existing document +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: WARN: '[2025-03-04T23:04:25.941Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a089 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/zYsM3rlE4ZEMc0FFjCUI","fields":{"foo":{"integerValue":"2"},"baz":{"integerValue":"2"}}},"updateMask":{"fieldPaths":["baz","foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:04:25.941Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a089 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/zYsM3rlE4ZEMc0FFjCUI","fields":{"foo":{"integerValue":"2"},"baz":{"integerValue":"2"}}},"updateMask":{"fieldPaths":["baz","foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” enforces that document exists +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: WriteBatch +@firebase/firestore: βœ” can add multiple operations +@firebase/firestore: βœ” cannot add write after commit +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: WARN: '[2025-03-04T23:04:30.159Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a0a6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/JwpDpkyMWP7c11LU6C18","fields":{"foo":{"integerValue":"2"},"baz":{"integerValue":"2"}}},"updateMask":{"fieldPaths":["baz","foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:04:30.159Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a0a6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/JwpDpkyMWP7c11LU6C18","fields":{"foo":{"integerValue":"2"},"baz":{"integerValue":"2"}}},"updateMask":{"fieldPaths":["baz","foo"]},"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” enforces that document exists +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: Transaction +@firebase/firestore: βœ” can read and then write +@firebase/firestore: βœ” can read non-existing doc then write +@firebase/firestore: βœ” can read deleted doc then write +@firebase/firestore: WARN: '[2025-03-04T23:04:32.209Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a0b5 failed with error: ', '{"code":"aborted","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/2ywtPcBJXPOba7ScIPB2","fields":{"counter":{"integerValue":"1"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:04:32.209Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x2c48a0b5 failed with error: ', '{"code":"aborted","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/(default)/documents/test-collection/2ywtPcBJXPOba7ScIPB2","fields":{"counter":{"integerValue":"1"}}},"currentDocument":{"exists":false}}]}' +@firebase/firestore: βœ” retries when document is modified +@firebase/firestore: delete +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: βœ” can delete an existing document +@firebase/firestore: set +@firebase/firestore: βœ” can set a new document +@firebase/firestore: βœ” can merge a document +@firebase/firestore: βœ” can merge a document with mergeFields +@firebase/firestore: βœ” supports partials with merge +@firebase/firestore: βœ” supports partials with mergeFields +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: βœ” can ignore 'undefined' +@firebase/firestore: update +@firebase/firestore: βœ” can update a document +@firebase/firestore: βœ” can update a document (using varargs) +@firebase/firestore: βœ– enforces that document exists (skipped) +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: addDoc() +@firebase/firestore: βœ” can add a document +@firebase/firestore: βœ” throws when user input fails validation +@firebase/firestore: DocumentSnapshot +@firebase/firestore: βœ” can represent missing data +@firebase/firestore: βœ” can return data +@firebase/firestore: βœ” can return single field +@firebase/firestore: βœ” can return nested field +@firebase/firestore: βœ” is properly typed +@firebase/firestore: βœ” returns Bytes +@firebase/firestore: deleteDoc() +@firebase/firestore: βœ” can delete a non-existing document +@firebase/firestore: FieldValue +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” support instanceof checks +@firebase/firestore: βœ” can apply arrayUnion +@firebase/firestore: βœ” can apply arrayRemove +@firebase/firestore: βœ” can apply serverTimestamp +@firebase/firestore: βœ” can delete field +@firebase/firestore: Query +@firebase/firestore: βœ” supports default query +@firebase/firestore: βœ” supports empty results +@firebase/firestore: βœ” supports filtered query +@firebase/firestore: βœ” supports filtered query (with FieldPath) +@firebase/firestore: βœ” supports ordered query (with default order) +@firebase/firestore: βœ” supports ordered query (with asc) +@firebase/firestore: βœ” supports ordered query (with desc) +@firebase/firestore: βœ” supports limit query +@firebase/firestore: βœ” supports limitToLast query +@firebase/firestore: βœ” supports startAt +@firebase/firestore: βœ” supports startAfter +@firebase/firestore: βœ” supports endAt +@firebase/firestore: βœ” supports endBefore +@firebase/firestore: βœ” supports pagination +@firebase/firestore: βœ” supports collection groups +@firebase/firestore: βœ” validates collection groups +@firebase/firestore: βœ” supports query over collection path with special characters +@firebase/firestore: equality +@firebase/firestore: βœ” for collection references +@firebase/firestore: βœ” for document references +@firebase/firestore: βœ” for queries +@firebase/firestore: βœ” for query snapshots +@firebase/firestore: βœ” for document snapshots +@firebase/firestore: withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) applies default converter +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) applies default converter +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) applies default converter +@firebase/firestore: βœ” keeps the converter when calling parent() with a DocumentReference +@firebase/firestore: βœ” drops the converter when calling parent() with a CollectionReference +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” supports primitive types with valid converter +@firebase/firestore: types test +@firebase/firestore: nested partial support +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” validates types in outer and inner fields +@firebase/firestore: βœ” checks for nonexistent properties +@firebase/firestore: βœ” allows omitting fields +@firebase/firestore: WithFieldValue +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” requires all outer fields to be present +@firebase/firestore: βœ” requires all nested fields to be present +@firebase/firestore: βœ” validates inner and outer fields +@firebase/firestore: βœ” checks for nonexistent properties +@firebase/firestore: βœ” allows certain types but not others +@firebase/firestore: used as a type +@firebase/firestore: βœ” supports passing in the object as `T` +@firebase/firestore: βœ” does not allow primitive types to use FieldValue +@firebase/firestore: UpdateData +@firebase/firestore: βœ” supports FieldValues +@firebase/firestore: βœ” validates inner and outer fields +@firebase/firestore: βœ” supports string-separated fields +@firebase/firestore: βœ” supports optional fields +@firebase/firestore: βœ” supports null fields +@firebase/firestore: βœ” supports union fields +@firebase/firestore: βœ” checks for nonexistent fields +@firebase/firestore: methods +@firebase/firestore: βœ” addDoc() +@firebase/firestore: βœ” WriteBatch.set() +@firebase/firestore: βœ” WriteBatch.update() +@firebase/firestore: βœ” Transaction.set() +@firebase/firestore: βœ” Transaction.update() +@firebase/firestore: Count queries +@firebase/firestore: βœ” AggregateQuerySnapshot inherits the original query +@firebase/firestore: βœ” can run count query getCount with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCount with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” run count query on empty collection +@firebase/firestore: βœ” run count query on collection with 3 docs +@firebase/firestore: WARN: '[2025-03-04T23:04:56.010Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a171 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"__badpath__"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T23:04:56.010Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a171 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"__badpath__"}]}}}' +@firebase/firestore: βœ” run count query fails on invalid collection reference +@firebase/firestore: βœ” count query supports filter +@firebase/firestore: βœ” count query supports filter and a small limit size +@firebase/firestore: βœ” count query supports filter and a large limit size +@firebase/firestore: βœ” count query supports order by +@firebase/firestore: βœ” count query supports order by and startAt +@firebase/firestore: βœ” count query supports order by and startAfter +@firebase/firestore: βœ” count query supports order by and endAt +@firebase/firestore: βœ” count query supports order by and endBefore +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries be truthy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries with different documents size be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different queries be falsy +@firebase/firestore: βœ” count query fails on a terminated Firestore +@firebase/firestore: βœ” terminate Firestore not effect count query in flight +@firebase/firestore: WARN: '[2025-03-04T23:05:03.423Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a1b4 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"EbklJXkUERtw2hupuaj9"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:03.423Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a1b4 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"EbklJXkUERtw2hupuaj9"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getCount error message contains console link if missing index +@firebase/firestore: Aggregate queries +@firebase/firestore: βœ” AggregateQuerySnapshot inherits the original query +@firebase/firestore: βœ” run aggregate query on empty collection +@firebase/firestore: βœ” run aggregate query on collection with 3 docs +@firebase/firestore: βœ” run aggregate query with duplicate aggregates +@firebase/firestore: WARN: '[2025-03-04T23:05:04.585Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a1bf failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"__badpath__"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:04.585Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a1bf failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"__badpath__"}]}}}' +@firebase/firestore: βœ” run aggregate query fails on invalid collection reference +@firebase/firestore: βœ” aggregate query supports filter +@firebase/firestore: βœ” aggregate query supports filter and a small limit size +@firebase/firestore: βœ” aggregate query supports filter and a large limit size +@firebase/firestore: βœ” aggregate query supports order by +@firebase/firestore: βœ” aggregate query supports order by and startAt +@firebase/firestore: βœ” aggregate query supports order by and startAfter +@firebase/firestore: βœ” aggregate query supports order by and endAt +@firebase/firestore: βœ” aggregate query supports order by and endBefore +@firebase/firestore: βœ” aggregate query doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries be truthy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same queries with different documents size be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different queries be falsy +@firebase/firestore: βœ” aggregate query fails on a terminated Firestore +@firebase/firestore: βœ” terminate Firestore not effect aggregate query in flight +@firebase/firestore: WARN: '[2025-03-04T23:05:11.970Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a202 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"Logx2Vp8weliI2lovaqo"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:11.970Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a202 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"Logx2Vp8weliI2lovaqo"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getAggregate error message contains console link if missing index +@firebase/firestore: Aggregate queries - sum / average +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on different aggregations to be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same aggregations with different aliases to be falsy +@firebase/firestore: βœ” aggregateQuerySnapshotEqual on same aggregations with same aliases to be truthy +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: WARN: '[2025-03-04T23:05:15.196Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a220 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"CUvKLtiwbPDggol4l2D2"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:15.196Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x2c48a220 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/(default)/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"CUvKLtiwbPDggol4l2D2"}]}}}' +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: (Persistence=memory_lru_gc) queries requiring indexes +@firebase/firestore: βœ– performs aggregations on documents with all aggregated fields using getAggregationFromServer (skipped) +@firebase/firestore: (Persistence=indexeddb) queries requiring indexes +@firebase/firestore: βœ– performs aggregations on documents with all aggregated fields using getAggregationFromServer (skipped) +@firebase/firestore: Vectors +@firebase/firestore: βœ” can be read and written using the lite SDK +@firebase/firestore: Finished in 55.626 secs / 55.414 secs @ 15:05:15 GMT-0800 (Pacific Standard Time) +@firebase/firestore: SUMMARY: +@firebase/firestore: βœ” 193 tests completed +@firebase/firestore: β„Ή 3 tests skipped +@firebase/firestore: TOTAL: 193 SUCCESS +@firebase/firestore: > @firebase/firestore@4.7.9 test:browser:prod:nameddb +@firebase/firestore: > karma start --targetBackend=prod --databaseId=test-db +@firebase/firestore: The 'BROWSER' environment variable is undefined. Defaulting to 'ChromeHeadless'. +@firebase/firestore: START: +@firebase/firestore: Webpack bundling... +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/src/ 842 KiB 259 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/ 171 KiB +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/unit/ 109 KiB 102 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/integration/ 37.5 KiB 37 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/util/*.ts 19.7 KiB 7 assets +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/*.ts 3.43 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/lite/helpers.d.ts 2.23 KiB [compared for emit] +@firebase/firestore: + 2 assets +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/test/register.d.ts 616 bytes [compared for emit] +@firebase/firestore: assets by status 17.9 MiB [emitted] +@firebase/firestore: asset bootstrap.430169083.js 10.1 MiB [emitted] (name: bootstrap.430169083) 1 related asset +@firebase/firestore: asset bootstrap.2569352933.js 7.78 MiB [emitted] (name: bootstrap.2569352933) 1 related asset +@firebase/firestore: assets by path ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/*.ts 3.38 KiB +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/index.d.ts 2.57 KiB [compared for emit] +@firebase/firestore: asset ../../../../../../Users/chholland/repos/fb-FRESH/packages/firestore/dist/firestore/lite/register.d.ts 829 bytes [compared for emit] +@firebase/firestore: webpack 5.97.1 compiled successfully in 8646 ms +@firebase/firestore: 04 03 2025 15:05:25.531:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/integration/bootstrap.ts +@firebase/firestore: 04 03 2025 15:05:25.538:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/unit/bootstrap.ts +@firebase/firestore: 04 03 2025 15:05:25.553:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/unit/bootstrap.ts +@firebase/firestore: 04 03 2025 15:05:25.560:WARN [preprocessor.sourcemap]: missing external source map for /Users/chholland/repos/fb-FRESH/packages/firestore/test/integration/bootstrap.ts +@firebase/firestore: 04 03 2025 15:05:25.568:INFO [karma-server]: Karma v6.4.4 server started at http://localhost:8089/ +@firebase/firestore: 04 03 2025 15:05:25.568:INFO [launcher]: Launching browsers ChromeHeadless with concurrency 1 +@firebase/firestore: 04 03 2025 15:05:25.570:INFO [launcher]: Starting browser ChromeHeadless +@firebase/firestore: 04 03 2025 15:05:26.214:INFO [Chrome Headless 133.0.0.0 (Mac OS 10.15.7)]: Connected on socket MhA-J7CD56_zwAw-AAAB with id 60461609 +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default Settings: {"host":"firestore.googleapis.com","ssl":true}' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "test-db"' +@firebase/firestore: Chrome Headless 133.0.0.0 (Mac OS 10.15.7) LOG: 'Default DatabaseId: "test-db"' +@firebase/firestore: βœ” token is not invalidated once the stream is healthy +@firebase/firestore: aggregateFieldEqual +@firebase/firestore: βœ” equates two equal aggregate fields +@firebase/firestore: βœ” differentiates two different aggregate fields +@firebase/firestore: Bytes +@firebase/firestore: βœ” constructs values from Base64 +@firebase/firestore: βœ” constructs values from Uint8Array +@firebase/firestore: βœ” works with instanceof checks +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: CollectionReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentReference +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: DocumentSnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: Query +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: QuerySnapshot +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: SnapshotMetadata +@firebase/firestore: βœ” from DocumentSnapshot support equality checking with isEqual() +@firebase/firestore: βœ” from QuerySnapshot support equality checking with isEqual() +@firebase/firestore: Settings +@firebase/firestore: βœ” cannot use mutually exclusive settings together +@firebase/firestore: βœ” long polling should be in auto-detect mode by default +@firebase/firestore: βœ” long polling should be in force mode if force=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true +@firebase/firestore: βœ” long polling should be in auto-detect mode if force=false +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false +@firebase/firestore: βœ” long polling should be in auto-detect mode if autoDetect=true and force=false +@firebase/firestore: βœ” long polling should be in force mode if autoDetect=false and force=true +@firebase/firestore: βœ” long polling should be disabled if autoDetect=false and force=false +@firebase/firestore: βœ” timeoutSeconds is undefined by default +@firebase/firestore: βœ” timeoutSeconds minimum value is allowed +@firebase/firestore: βœ” timeoutSeconds maximum value is allowed +@firebase/firestore: βœ” timeoutSeconds typical value is allowed +@firebase/firestore: βœ” timeoutSeconds floating point value is allowed +@firebase/firestore: βœ” timeoutSeconds value one less than minimum throws +@firebase/firestore: βœ” timeoutSeconds value one more than maximum throws +@firebase/firestore: βœ” timeoutSeconds value of 0 throws +@firebase/firestore: βœ” timeoutSeconds value of -0 throws +@firebase/firestore: βœ” timeoutSeconds value of -1 throws +@firebase/firestore: βœ” timeoutSeconds value of -infinity throws +@firebase/firestore: βœ” timeoutSeconds value of +infinity throws +@firebase/firestore: βœ” timeoutSeconds value of NaN throws +@firebase/firestore: βœ” long polling autoDetect=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling autoDetect=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling autoDetect=null should be coerced to false +@firebase/firestore: βœ” long polling force=[something truthy] should be coerced to true +@firebase/firestore: βœ” long polling force=[something falsy] should be coerced to false +@firebase/firestore: βœ” long polling force=null should be coerced to false +@firebase/firestore: βœ” gets settings from useEmulator +@firebase/firestore: βœ” gets privateSettings from useEmulator +@firebase/firestore: WARN: '[2025-03-04T23:05:27.194Z] @firebase/firestore:', 'Firestore (11.3.0): Host has been set in both settings() and connectFirestoreEmulator(), emulator host will be used.' +@firebase/firestore: WARN: '[2025-03-04T23:05:27.194Z] @firebase/firestore:', 'Firestore (11.3.0): Host has been set in both settings() and connectFirestoreEmulator(), emulator host will be used.' +@firebase/firestore: βœ” prefers host from useEmulator to host from settings +@firebase/firestore: βœ” sets credentials based on mockUserToken object +@firebase/firestore: βœ” sets credentials based on mockUserToken string +@firebase/firestore: DocumentChange: +@firebase/firestore: βœ” positions are correct for additions +@firebase/firestore: βœ” positions are correct for deletions +@firebase/firestore: βœ” positions are correct for modifications +@firebase/firestore: βœ” positions are correct for sort order changes +@firebase/firestore: βœ” positions are correct for randomly chosen examples +@firebase/firestore: FieldPath +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: FieldValue +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” support instanceof checks +@firebase/firestore: βœ” JSON.stringify() does not throw +@firebase/firestore: GeoPoint +@firebase/firestore: βœ” constructs values +@firebase/firestore: βœ” GeoPoints throw on invalid values +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” support equality checking with isEqual() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: long_polling_options +@firebase/firestore: βœ” longPollingOptionsEqual() should return true for empty objects +@firebase/firestore: βœ” longPollingOptionsEqual() should return true if both objects have the same timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should return false if the objects have different timeoutSeconds +@firebase/firestore: βœ” longPollingOptionsEqual() should ignore properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: βœ” cloneLongPollingOptions() with an empty object should return an empty object +@firebase/firestore: βœ” cloneLongPollingOptions() should copy timeoutSeconds +@firebase/firestore: βœ” cloneLongPollingOptions() should not copy properties not defined in ExperimentalLongPollingOptions +@firebase/firestore: Timestamp +@firebase/firestore: βœ” constructor should validate the "seconds" argument and store it +@firebase/firestore: βœ” constructor should validate the "nanoseconds" argument and store it +@firebase/firestore: βœ” fromDate +@firebase/firestore: βœ” valueOf +@firebase/firestore: βœ” arithmetic comparison of a Timestamp object to itself +@firebase/firestore: βœ” arithmetic comparison of equivalent, but distinct, Timestamp objects +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose nanoseconds differ +@firebase/firestore: βœ” arithmetic comparison of Timestamp objects whose seconds differ +@firebase/firestore: βœ” arithmetic comparison of the smallest and largest Timestamp objects +@firebase/firestore: βœ” handles decimal inputs in fromMillis() +@firebase/firestore: βœ” serializes to JSON +@firebase/firestore: EventManager +@firebase/firestore: βœ” handles many listenables per query +@firebase/firestore: βœ” handles unlisten on unknown listenable gracefully +@firebase/firestore: βœ” notifies listenables in the right order +@firebase/firestore: βœ” will forward onOnlineStateChange calls +@firebase/firestore: QueryListener +@firebase/firestore: βœ” raises collection events +@firebase/firestore: βœ” raises error event +@firebase/firestore: βœ” raises event for empty collection after sync +@firebase/firestore: βœ” raises 'hasPendingWrites' for pending mutation in initial snapshot +@firebase/firestore: βœ” doesn't raise 'hasPendingWrites' for committed mutation in initial snapshot +@firebase/firestore: βœ” does not raise events for metadata changes unless specified +@firebase/firestore: βœ” raises metadata events only when specified +@firebase/firestore: βœ” Metadata-only document changes are filtered out when includeMetadataChanges is false +@firebase/firestore: βœ” Suppresses write acknowledgment if Watch hasn't caught up +@firebase/firestore: βœ” Will wait for sync if online +@firebase/firestore: βœ” Will raise initial event when going offline +@firebase/firestore: βœ” Will raise initial event when going offline and there are no docs +@firebase/firestore: βœ” Will raise initial event when offline and there are no docs +@firebase/firestore: FieldFilter +@firebase/firestore: βœ” exposes field filter members +@firebase/firestore: CompositeFilter +@firebase/firestore: βœ” exposes composite filter members for AND filter +@firebase/firestore: βœ” exposes composite filter members for OR filter +@firebase/firestore: βœ” has working composite filter nested checks +@firebase/firestore: βœ” computes canonical id of flat conjunctions +@firebase/firestore: ListenSequence +@firebase/firestore: βœ” writes the new sequence number to the syncer +@firebase/firestore: βœ” bumps the next value based on notifications from the syncer +@firebase/firestore: Bound +@firebase/firestore: βœ” implements isEqual +@firebase/firestore: βœ” can get collection group +@firebase/firestore: βœ” matches based on document key +@firebase/firestore: βœ” matches correctly for shallow ancestor query +@firebase/firestore: βœ” matches primitive values for filters +@firebase/firestore: βœ” matches array-contains filters +@firebase/firestore: βœ” matches array-contains filters with object values +@firebase/firestore: βœ” matches IN filters +@firebase/firestore: βœ” matches IN filters with object values +@firebase/firestore: βœ” matches not-in filters +@firebase/firestore: βœ” matches not-in filters with object values +@firebase/firestore: βœ” matches array-contains-any filters +@firebase/firestore: βœ” matches array-contains-any filters with object values +@firebase/firestore: βœ” matches NaN for filters +@firebase/firestore: βœ” matches null for filters +@firebase/firestore: βœ” matches complex objects for filters +@firebase/firestore: βœ” doesn't crash querying unset fields +@firebase/firestore: βœ” doesn't remove complex objects with orderBy +@firebase/firestore: βœ” filters based on array value +@firebase/firestore: βœ” filters based on object value +@firebase/firestore: βœ” sorts documents in the correct order +@firebase/firestore: βœ” sorts documents using multiple fields +@firebase/firestore: βœ” sorts documents with descending too +@firebase/firestore: βœ” generates canonical ids +@firebase/firestore: βœ” canonical ids are stable +@firebase/firestore: βœ” generates the correct implicit order by's +@firebase/firestore: βœ” generates the correct implicit order by's for multiple inequality +@firebase/firestore: βœ” matchesAllDocuments() considers filters, orders and bounds +@firebase/firestore: βœ” matches composite queries +@firebase/firestore: βœ” matches composite queries with multiple inequality +@firebase/firestore: βœ” generates appropriate order-bys for aggregate and non-aggregate targets +@firebase/firestore: βœ” generated order-bys are not affected by previously memoized targets +@firebase/firestore: View +@firebase/firestore: βœ” adds documents based on query +@firebase/firestore: βœ” removes documents +@firebase/firestore: βœ” returns null if there are no changes +@firebase/firestore: βœ” does not return null for the first changes +@firebase/firestore: βœ” filters documents based on query with filter +@firebase/firestore: βœ” updates documents based on query with filter +@firebase/firestore: βœ” removes documents for query with limit +@firebase/firestore: βœ” doesn't report changes for documents beyond limit of query +@firebase/firestore: βœ” keeps track of limbo documents +@firebase/firestore: βœ” is marked from cache with limbo documents +@firebase/firestore: βœ” resumes queries without creating limbo documents +@firebase/firestore: βœ” returns needsRefill on delete limit query +@firebase/firestore: βœ” returns needsRefill on reorder in limit query +@firebase/firestore: βœ” doesn't need refill on reorder within limit +@firebase/firestore: βœ” doesn't need refill on reorder after limit query +@firebase/firestore: βœ” doesn't need refill for additions after the limit +@firebase/firestore: βœ” doesn't need refill for deletions when not near the limit +@firebase/firestore: βœ” handles applying irrelevant docs +@firebase/firestore: βœ” computes mutatedDocKeys +@firebase/firestore: βœ” computes removes keys from mutatedDocKeys when new doc does not have local changes +@firebase/firestore: βœ” remembers local mutations from previous snapshot +@firebase/firestore: βœ” remembers local mutations from previous call to computeDocChanges +@firebase/firestore: Md5 +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” update() should accept a string +@firebase/firestore: βœ” update() should accept a string of non-standard characters +@firebase/firestore: βœ” update() should accept a string of UTF-8 encoded non-standard characters +@firebase/firestore: βœ” update() should accept an array of number +@firebase/firestore: βœ” update() should accept a Uint8Array +@firebase/firestore: βœ” update() should honor opt_length on a string +@firebase/firestore: βœ” update() should honor opt_length on an array of number +@firebase/firestore: βœ” update() should honor opt_length on a Uint8Array +@firebase/firestore: βœ” reset() should reset +@firebase/firestore: Integer +@firebase/firestore: βœ” constructor should create distinct instances +@firebase/firestore: βœ” constructor should construct 1 and -1, 2 and -2 +@firebase/firestore: βœ” constructor should construct big positive values +@firebase/firestore: βœ” constructor should construct big negative values +@firebase/firestore: βœ” add() should produce the sum of the two numbers +@firebase/firestore: βœ” multiply() should produce the product of the two numbers +@firebase/firestore: βœ” modulo() should produce the division remainder of the two numbers +@firebase/firestore: βœ” compare() should correctly compare two numbers for order +@firebase/firestore: βœ” toNumber() should return the correct number +@firebase/firestore: βœ” toString() should return the correct number +@firebase/firestore: βœ” fromNumber() create a new Integer with the given value +@firebase/firestore: βœ” fromString() create a new Integer with the given value +@firebase/firestore: βœ” getBits() create a new Integer with the given value +@firebase/firestore: Ordered Code Writer +@firebase/firestore: βœ” computes number of leading zeros +@firebase/firestore: βœ” converts numbers to bits +@firebase/firestore: βœ” orders numbers correctly +@firebase/firestore: βœ” converts strings to bits +@firebase/firestore: βœ” orders strings correctly +@firebase/firestore: βœ” converts bytes to bits +@firebase/firestore: βœ” orders bytes correctly +@firebase/firestore: βœ” encodes infinity +@firebase/firestore: βœ” seeds bytes +@firebase/firestore: Firestore Index Value Writer +@firebase/firestore: can gracefully handle different format of timestamp +@firebase/firestore: βœ” can handle different format of timestamp +@firebase/firestore: βœ” can handle timestamps with 0 nanoseconds +@firebase/firestore: βœ” can compare timestamps with different formats +@firebase/firestore: βœ” sorts vector as a different type from array and map, with unique rules +@firebase/firestore: UpdateData - v9 +@firebase/firestore: βœ” Supports properties with primitive types +@firebase/firestore: βœ” Supports properties with custom types +@firebase/firestore: given properties with dots +@firebase/firestore: βœ” preserves the value type +@firebase/firestore: βœ” does not allow matching a sub-string|path +@firebase/firestore: given nested objects without index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” errors for unexpected value types at each layer +@firebase/firestore: βœ” does not allow properties that were not on the original type +@firebase/firestore: βœ” preserves value types for dot notation +@firebase/firestore: UpdateData - v10 +@firebase/firestore: given nested objects with index properties +@firebase/firestore: βœ” supports object replacement at each layer (with partial) +@firebase/firestore: βœ” allows dot notation for nested index types +@firebase/firestore: βœ” allows dot notation for nested index types that are 2 layers deep +@firebase/firestore: FirestoreTypeConverter +@firebase/firestore: βœ” converter has the minimal typing information +@firebase/firestore: βœ” converter has the minimal typing information plus return types +@firebase/firestore: βœ” has the additional 'merge' version of toFirestore() +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” converter is explicitly typed as FirestoreDataConverter +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument is missing properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains undeclared properties +@firebase/firestore: βœ” setDoc() fails to compile if AppModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” updateDoc() successfully compiles even if DbModelType argument is missing properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains undeclared properties +@firebase/firestore: βœ” updateDoc() fails to compile if DbModelType argument contains a property with an incorrect type +@firebase/firestore: βœ” getDoc() returns AppModelType +@firebase/firestore: MemoryBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: IndexedDbBundleCache +@firebase/firestore: βœ” returns undefined when bundle id is not found +@firebase/firestore: βœ” returns saved bundle +@firebase/firestore: βœ” returns undefined when query name is not found +@firebase/firestore: βœ” returns saved collection queries +@firebase/firestore: βœ” returns saved collection group queries +@firebase/firestore: βœ” returns expected limit queries +@firebase/firestore: βœ” returns expected limit to last queries +@firebase/firestore: MemoryDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: IndexedDbDocumentOverlayCache +@firebase/firestore: βœ” returns null when overlay is not found +@firebase/firestore: βœ” can read saved overlay +@firebase/firestore: βœ” can read saved overlays +@firebase/firestore: βœ” can overwrite overlays +@firebase/firestore: βœ” can delete overlays repeatedly +@firebase/firestore: βœ” can delete overlays +@firebase/firestore: βœ” can get all overlays for collection +@firebase/firestore: βœ” can get all overlays since batch ID +@firebase/firestore: βœ” can get all overlays for collection group +@firebase/firestore: βœ” getting overlays from collection group enforces batch ID +@firebase/firestore: βœ” getting overlays from collection group enforces count limit +@firebase/firestore: βœ” getting overlays from collection group does not return partial batches +@firebase/firestore: βœ” updating an overlay removes the old entry for that overlay +@firebase/firestore: βœ” skips non-existing overlay in batch lookup +@firebase/firestore: βœ” supports empty batch in batch lookup +@firebase/firestore: βœ” can read saved overlays in batches +@firebase/firestore: EncodedResourcePath +@firebase/firestore: βœ” encodes resource paths +@firebase/firestore: βœ” orders resource paths +@firebase/firestore: MemoryGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDbGlobals +@firebase/firestore: βœ” returns session token that was previously saved +@firebase/firestore: βœ” returns empty session token that was previously saved +@firebase/firestore: IndexedDb IndexBackfiller +@firebase/firestore: βœ” Writes latest read time to FieldIndex on completion +@firebase/firestore: βœ” Fetches documents after earliest read time +@firebase/firestore: βœ” Writes Index Entries +@firebase/firestore: βœ” Writes oldest document first +@firebase/firestore: βœ” Uses DocumentKey Offset for large Snapshots +@firebase/firestore: βœ” Updates collection groups +@firebase/firestore: βœ” Prioritizes new collection groups +@firebase/firestore: βœ” Writes until cap +@firebase/firestore: βœ” Uses latest read time for empty collections +@firebase/firestore: βœ” Handles local mutations after remote docs +@firebase/firestore: βœ” Mutations up to document limit and updates batchId on index +@firebase/firestore: βœ” Mutation finishes mutation batch even if it exceeds limit +@firebase/firestore: βœ” Mutations from high water mark +@firebase/firestore: βœ” Updates existing doc to new value +@firebase/firestore: βœ” Updates docs that no longer match +@firebase/firestore: βœ” Does not process same document twice +@firebase/firestore: βœ” Applies set to remote doc +@firebase/firestore: βœ” Applies patch to remote doc +@firebase/firestore: βœ” Applies delete to remote doc +@firebase/firestore: βœ” Reindexes documents when new index is added +@firebase/firestore: index_manager.ts top-level functions +@firebase/firestore: displayNameForIndexType() +@firebase/firestore: βœ” IndexType.NONE +@firebase/firestore: βœ” IndexType.FULL +@firebase/firestore: βœ” IndexType.PARTIAL +@firebase/firestore: βœ” invalid IndexType +@firebase/firestore: MemoryIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: IndexedDbIndexManager +@firebase/firestore: βœ” can add and read collection=>parent index entries +@firebase/firestore: βœ” can add indexes +@firebase/firestore: βœ” uses auto-incrementing index id +@firebase/firestore: βœ” can get indexes +@firebase/firestore: βœ” can update collection group +@firebase/firestore: βœ” can get next collection group to update +@firebase/firestore: βœ” deleting field index removes entry from collection group +@firebase/firestore: βœ” deleting field index removes entry from getNextCollectionGroupToUpdate() +@firebase/firestore: βœ” persist index offset +@firebase/firestore: βœ” changes user +@firebase/firestore: βœ” adds documents +@firebase/firestore: βœ” applies orderBy +@firebase/firestore: βœ” applies orderBy with not equals filter +@firebase/firestore: βœ” applies equality filter +@firebase/firestore: βœ” applies nested field equality filter +@firebase/firestore: βœ” applies not equals filter +@firebase/firestore: βœ” applies equals with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter +@firebase/firestore: βœ” applies array contains with not equals filter on same field +@firebase/firestore: βœ” applies equals with not equals filter on same field +@firebase/firestore: βœ” applies less than or equals filter +@firebase/firestore: βœ” applies greater than or equals filter +@firebase/firestore: βœ” applies greater than filter +@firebase/firestore: βœ” applies range filter +@firebase/firestore: βœ” applies startAt filter +@firebase/firestore: βœ” applies startAt filter with notIn +@firebase/firestore: βœ” applies startAfter filter +@firebase/firestore: βœ” applies endAt filter +@firebase/firestore: βœ” applies endBefore filter +@firebase/firestore: βœ” applies range with bound filter +@firebase/firestore: βœ” applies in filter +@firebase/firestore: βœ” applies not in filter +@firebase/firestore: βœ” applies not in filter with greater than filter +@firebase/firestore: βœ” applies not in filter with out of bounds greater than filter +@firebase/firestore: βœ” applies array contains filter +@firebase/firestore: βœ” applies array contains any filter +@firebase/firestore: βœ” validates that array contains filter only matches array +@firebase/firestore: βœ” returns empty result when no index exists +@firebase/firestore: βœ” handles when no matching filter exists +@firebase/firestore: βœ” returns empty results when no matching documents exists +@firebase/firestore: βœ” filters by field type +@firebase/firestore: βœ” supports collection group indexes +@firebase/firestore: βœ” applies limit filter +@firebase/firestore: βœ” uses ordering for limit filter +@firebase/firestore: βœ” updates index entries +@firebase/firestore: βœ” removes index entries +@firebase/firestore: βœ” supports order by key +@firebase/firestore: βœ” supports order by filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with less than filter +@firebase/firestore: βœ” supports ascending order with greater than filter +@firebase/firestore: βœ” supports descending order with greater than filter +@firebase/firestore: βœ” cannot expand result set from a cursor +@firebase/firestore: βœ” can have filters on the same field +@firebase/firestore: βœ” can index timestamp fields of different format +@firebase/firestore: βœ” can index VectorValue fields +@firebase/firestore: βœ” support advances queries +@firebase/firestore: βœ” serves partial and full index +@firebase/firestore: βœ” createTargetIndexes() creates full indexes for each sub-target +@firebase/firestore: βœ” createTargetIndexes() upgrades a partial index to a full index +@firebase/firestore: βœ” createTargetIndexes() does nothing if a full index already exists +@firebase/firestore: βœ” deleteAllFieldIndexes() deletes all indexes +@firebase/firestore: IndexedDbSchema: createOrUpgradeDb +@firebase/firestore: βœ” can install schema version 1 +@firebase/firestore: βœ” drops the query cache from 2 to 3 +@firebase/firestore: βœ” can upgrade from schema version 3 to 4 +@firebase/firestore: βœ” can upgrade from schema version 4 to 5 +@firebase/firestore: βœ” can upgrade from version 5 to 6 +@firebase/firestore: βœ” can upgrade from version 6 to 7 +@firebase/firestore: βœ” can upgrade from version 7 to 8 +@firebase/firestore: βœ” rewrites canonical IDs during upgrade from version 9 to 10 +@firebase/firestore: βœ” can use read-time index after schema migration +@firebase/firestore: βœ” can get recent document changes in a collection +@firebase/firestore: βœ” can upgrade from version 11 to 12 +@firebase/firestore: βœ” can upgrade from version 12 to 13 +@firebase/firestore: βœ” can upgrade from schema version 13 to 14 (overlay migration) +@firebase/firestore: βœ” can upgrade from version 13 to 14 +@firebase/firestore: βœ” can upgrade from version 14 to 15 +@firebase/firestore: βœ” can upgrade from version 15 to 16 +@firebase/firestore: βœ” can upgrade from version 16 to 17 +@firebase/firestore: βœ” downgrading throws a custom error +@firebase/firestore: IndexedDb: canActAsPrimary +@firebase/firestore: βœ” is eligible when client is offline and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is offline and visible and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is offline and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is offline and visible +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and hidden and other client is online and hidden +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and hidden +@firebase/firestore: βœ” is not eligible when client is offline and hidden and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is offline and visible and other client is online and visible +@firebase/firestore: βœ” is not eligible when client is online and hidden and other client is online and visible +@firebase/firestore: βœ” is eligible when client is online and visible and other client is online and visible +@firebase/firestore: βœ” is eligible when only client +@firebase/firestore: βœ” regains lease if available +@firebase/firestore: βœ” obtains lease if forceOwningTab is set +@firebase/firestore: IndexedDb: allowTabSynchronization +@firebase/firestore: βœ” blocks start() on IndexedDbTransactionError when synchronization is disabled +@firebase/firestore: βœ” allows start() with IndexedDbTransactionError when synchronization is enabled +@firebase/firestore: βœ” blocks start() when getHighestListenSequenceNumber() fails +@firebase/firestore: βœ” ignores intermittent IndexedDbTransactionError during lease refresh +@firebase/firestore: βœ” rejects access when synchronization is disabled +@firebase/firestore: βœ” grants access when synchronization is enabled +@firebase/firestore: IndexedDb +@firebase/firestore: βœ” can re-open after close +@firebase/firestore: Local Serializer +@firebase/firestore: βœ” SetMutation + TransformMutation (legacy) are squashed +@firebase/firestore: βœ” PatchMutation + TransformMutation (legacy) are squashed +@firebase/firestore: ERROR: '[2025-03-04T23:05:28.262Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: ERROR: '[2025-03-04T23:05:28.262Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: βœ” TransformMutation (legacy) + TransformMutation (legacy) throw assertion +@firebase/firestore: ERROR: '[2025-03-04T23:05:28.262Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: ERROR: '[2025-03-04T23:05:28.262Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: TransformMutation should be preceded by a patch or set mutation' +@firebase/firestore: βœ” DeleteMutation + TransformMutation (legacy) on its own throws assertion +@firebase/firestore: βœ” multiple mutations are squashed +@firebase/firestore: βœ” serializes overlay +@firebase/firestore: βœ” serializes FieldIndex +@firebase/firestore: βœ” serializes IndexState +@firebase/firestore: LocalStore w/ Memory Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: βœ” handles SetMutation -> Ack -> PatchMutation -> Reject +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: βœ” collects garbage after ChangeBatch with no target ids +@firebase/firestore: βœ” collects garbage after ChangeBatch +@firebase/firestore: βœ” collects garbage after acknowledged mutation +@firebase/firestore: βœ” collects garbage after rejected mutation +@firebase/firestore: βœ” pins documents in the local view +@firebase/firestore: βœ” throws away documents with unknown target-ids immediately +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: βœ– persists resume tokens (skipped) +@firebase/firestore: βœ– does not replace resume token with empty resume token (skipped) +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: βœ– handles SetMutation -> Ack -> Transform -> Ack -> Transform (skipped) +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow +@firebase/firestore: βœ” uses target mapping to execute queries +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: βœ– ignores target mapping after existence filter mismatch (skipped) +@firebase/firestore: βœ– queries include locally modified documents (skipped) +@firebase/firestore: βœ– queries include documents from other queries (skipped) +@firebase/firestore: βœ– queries filter documents that no longer match (skipped) +@firebase/firestore: LocalStore w/ IndexedDB Persistence +@firebase/firestore: βœ” localStoreSetIndexAutoCreationEnabled() +@firebase/firestore: βœ” handles SetMutation +@firebase/firestore: βœ” handles SetMutation -> Document +@firebase/firestore: βœ” handles SetMutation -> Ack (Held) -> SetMutation -> Reject -> RemoteEvent (Release Ack) +@firebase/firestore: βœ” handles NoDocument -> SetMutation -> Ack +@firebase/firestore: βœ” handles SetMutation -> NoDocument +@firebase/firestore: βœ” handles Document -> SetMutation -> Ack -> Document +@firebase/firestore: βœ” handles PatchMutation without prior document +@firebase/firestore: βœ” handles PatchMutation -> Document -> Ack +@firebase/firestore: βœ” handles PatchMutation -> Ack -> Document +@firebase/firestore: βœ” handles DeleteMutation -> Ack +@firebase/firestore: βœ” handles Document -> DeleteMutation -> Ack +@firebase/firestore: βœ” handles DeleteMutation -> Document -> Ack +@firebase/firestore: βœ” handles Document -> NoDocument -> Document +@firebase/firestore: βœ” handles SetMutation -> PatchMutation -> Document -> Ack -> Ack +@firebase/firestore: βœ” handles SetMutation + PatchMutation +@firebase/firestore: βœ– handles SetMutation -> Ack -> PatchMutation -> Reject (skipped) +@firebase/firestore: βœ” handles SetMutation(A) + SetMutation(B) + PatchMutation(A) +@firebase/firestore: βœ” handles DeleteMutation -> PatchMutation -> Ack -> Ack +@firebase/firestore: βœ– collects garbage after ChangeBatch with no target ids (skipped) +@firebase/firestore: βœ– collects garbage after ChangeBatch (skipped) +@firebase/firestore: βœ– collects garbage after acknowledged mutation (skipped) +@firebase/firestore: βœ– collects garbage after rejected mutation (skipped) +@firebase/firestore: βœ– pins documents in the local view (skipped) +@firebase/firestore: βœ– throws away documents with unknown target-ids immediately (skipped) +@firebase/firestore: βœ” can execute document queries +@firebase/firestore: βœ” can execute collection queries +@firebase/firestore: βœ” can execute mixed collection queries +@firebase/firestore: βœ” reads all documents for initial collection queries +@firebase/firestore: βœ” persists resume tokens +@firebase/firestore: βœ” does not replace resume token with empty resume token +@firebase/firestore: βœ” handles SetMutation -> Transform -> Transform +@firebase/firestore: βœ” handles SetMutation -> Ack -> Transform -> Ack -> Transform +@firebase/firestore: βœ” handles SetMutation -> Transform-> RemoteEvent -> Transform +@firebase/firestore: βœ” holds back transforms +@firebase/firestore: βœ” handles MergeMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles PatchMutation with Transform -> RemoteEvent +@firebase/firestore: βœ” handles saving bundled documents +@firebase/firestore: βœ” handles saving bundled documents with newer existing version +@firebase/firestore: βœ” handles saving bundled documents with older existing version +@firebase/firestore: βœ” handles saving bundled documents with same existing version should not overwrite +@firebase/firestore: βœ” handles MergeMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles PatchMutation with Transform -> BundledDocuments +@firebase/firestore: βœ” handles saving and checking bundle metadata +@firebase/firestore: βœ” add then update while offline +@firebase/firestore: βœ” handles saving and loading named queries +@firebase/firestore: βœ” loading named queries allocates targets and updates target document mapping +@firebase/firestore: βœ” handles saving and loading limit to last queries +@firebase/firestore: βœ” computes highest unacknowledged batch id correctly +@firebase/firestore: βœ” only persists updates for documents when version changes +@firebase/firestore: βœ” can handle batch Ack when pending batches have other docs +@firebase/firestore: βœ” can handle multiple field patches on remote docs +@firebase/firestore: βœ” can handle multiple field patches in one batch on remote docs +@firebase/firestore: βœ” can handle multiple field patches on local docs +@firebase/firestore: βœ” update on remote doc leads to update overlay +@firebase/firestore: βœ” handles document creation time +@firebase/firestore: βœ” saves updateTime as createTime when receives ack for creating a new doc +@firebase/firestore: βœ” handles createTime for Set -> Ack -> RemoteEvent +@firebase/firestore: βœ” handles createTime for Set -> RemoteEvent -> Ack +@firebase/firestore: βœ” saves updateTime as createTime when recreating a deleted doc +@firebase/firestore: βœ” document createTime is preserved through Set -> Ack -> Patch -> Ack +@firebase/firestore: βœ” document createTime is preserved through Doc Added -> Patch -> Ack +@firebase/firestore: βœ” deeply nested server timestamps do not cause stack overflow +@firebase/firestore: βœ” uses target mapping to execute queries +@firebase/firestore: βœ” last limbo free snapshot is advanced during view processing +@firebase/firestore: βœ” ignores target mapping after existence filter mismatch +@firebase/firestore: βœ” queries include locally modified documents +@firebase/firestore: βœ” queries include documents from other queries +@firebase/firestore: βœ” queries filter documents that no longer match +@firebase/firestore: LocalStore w/ IndexedDB Persistence (Non generic) +@firebase/firestore: βœ” Adds Indexes +@firebase/firestore: βœ” Removes Indexes +@firebase/firestore: βœ” Does Not Reset Index When Same Index Is Added +@firebase/firestore: βœ” Deleted Document Removes Index +@firebase/firestore: βœ” Uses Indexes +@firebase/firestore: βœ” Uses Partially Indexed Remote Documents When Available +@firebase/firestore: βœ” Uses Partially Indexed Overlays When Available +@firebase/firestore: βœ” Does Not Use Limit When Index Is Outdated +@firebase/firestore: βœ” Uses Index For Limit Query When Index Is Updated +@firebase/firestore: βœ” Indexes Server Timestamps +@firebase/firestore: βœ” can auto-create indexes +@firebase/firestore: βœ” can auto-create indexes works with or query +@firebase/firestore: βœ” does not auto-create indexes for small collections +@firebase/firestore: βœ” does not auto create indexes when index lookup is expensive +@firebase/firestore: βœ” index auto creation works when backfiller runs halfway +@firebase/firestore: βœ” index created by index auto creation exists after turn off auto creation +@firebase/firestore: βœ” disable index auto creation works +@firebase/firestore: βœ” index auto creation works with mutation +@firebase/firestore: βœ” delete all indexes works with index auto creation +@firebase/firestore: βœ” delete all indexes works with manual added indexes +@firebase/firestore: βœ” index auto creation does not work with multiple inequality +@firebase/firestore: IndexedDbLruDelegate +@firebase/firestore: βœ” picks sequence number percentile +@firebase/firestore: βœ” removes targets up through sequence number +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs +@firebase/firestore: βœ” gets cache size +@firebase/firestore: βœ” can be disabled +@firebase/firestore: βœ” skips a cache that is too small +@firebase/firestore: βœ” runs when the cache is large enough +@firebase/firestore: βœ” caps sequence numbers to collect +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets +@firebase/firestore: βœ” with multiple targets in a transaction +@firebase/firestore: βœ” with all collected targets in a single transaction +@firebase/firestore: βœ” with mutation and sequential targets +@firebase/firestore: βœ” with mutations in targets +@firebase/firestore: MemoryLruDelegate +@firebase/firestore: βœ” picks sequence number percentile +@firebase/firestore: βœ” removes targets up through sequence number +@firebase/firestore: βœ” removes orphaned documents +@firebase/firestore: βœ” removes targets then GCs +@firebase/firestore: βœ” gets cache size +@firebase/firestore: βœ” can be disabled +@firebase/firestore: βœ” skips a cache that is too small +@firebase/firestore: βœ” runs when the cache is large enough +@firebase/firestore: βœ” caps sequence numbers to collect +@firebase/firestore: nthSequenceNumber() +@firebase/firestore: βœ” sequence number for no targets +@firebase/firestore: βœ” with 50 targets +@firebase/firestore: βœ” with multiple targets in a transaction +@firebase/firestore: βœ” with all collected targets in a single transaction +@firebase/firestore: βœ” with mutation and sequential targets +@firebase/firestore: βœ” with mutations in targets +@firebase/firestore: MemoryMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() +@firebase/firestore: IndexedDbMutationQueue +@firebase/firestore: βœ” can count batches +@firebase/firestore: βœ” can lookup mutation batch +@firebase/firestore: βœ” can getNextMutationBatchAfterBatchId() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKey() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingDocumentKeys() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() +@firebase/firestore: βœ” can getAllMutationBatchesAffectingQuery() with compound batches +@firebase/firestore: βœ” can removeMutationBatch() +@firebase/firestore: PersistencePromise +@firebase/firestore: βœ” Can chain synchronous functions +@firebase/firestore: βœ” Can chain asynchronous functions +@firebase/firestore: βœ” Can catch synchronous functions +@firebase/firestore: βœ” Can catch asynchronous functions +@firebase/firestore: βœ” ignores catches without errors +@firebase/firestore: βœ” ignores catches without errors async +@firebase/firestore: βœ” can catch errors twice sync +@firebase/firestore: βœ” can catch errors twice async +@firebase/firestore: βœ” can return undefined sync +@firebase/firestore: βœ” can return undefined async +@firebase/firestore: βœ” can waitFor sync +@firebase/firestore: βœ” can waitFor async +@firebase/firestore: βœ” can waitFor async error +@firebase/firestore: βœ” propagates error for waitFor() +@firebase/firestore: βœ” propagates error for forEach() +@firebase/firestore: MemoryTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: IndexedDbTransaction +@firebase/firestore: βœ” invokes onCommittedListener when transaction succeeds +@firebase/firestore: βœ” does not invoke onCommittedListener when transaction fails +@firebase/firestore: βœ” only invokes onCommittedListener once with retries +@firebase/firestore: QueryEngine +@firebase/firestore: MemoryEagerPersistence +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbPersistence configureCsi=false +@firebase/firestore: βœ” uses target mapping for initial view +@firebase/firestore: βœ” filters non-matching changes since initial results +@firebase/firestore: βœ” includes changes since initial results +@firebase/firestore: βœ” does not use initial results without limbo free snapshot version +@firebase/firestore: βœ” does not use initial results for unfiltered collection query +@firebase/firestore: βœ” does not use initial results for limit query with document removal +@firebase/firestore: βœ” does not use initial results for limitToLast query with document removal +@firebase/firestore: βœ” does not use initial results for limit query when last document has pending write +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document has pending write +@firebase/firestore: βœ” does not use initial results for limit query when last document has been updated out of band +@firebase/firestore: βœ” does not use initial results for limitToLast query when first document in limit has been updated out of band +@firebase/firestore: βœ” uses initial results if last document in limit is unchanged +@firebase/firestore: βœ” does not include documents deleted by mutation +@firebase/firestore: βœ” can perform OR queries using full collection scan +@firebase/firestore: βœ” query does not include documents with missing fields +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: IndexedDbQueryEngine configureCsi=true +@firebase/firestore: βœ” combines indexed with non-indexed results +@firebase/firestore: βœ” uses partial index for limit queries +@firebase/firestore: βœ” re-fills indexed limit queries +@firebase/firestore: βœ” creates indexes when indexAutoCreationEnabled=true +@firebase/firestore: βœ” does not create indexes when indexAutoCreationEnabled=false +@firebase/firestore: βœ” creates indexes when min collection size is met exactly and relative cost is ever-so-slightly better +@firebase/firestore: βœ” does not create indexes when min collection size is not met by only 1 document +@firebase/firestore: βœ” does not create indexes when relative cost is equal +@firebase/firestore: βœ” query with multiple ins on the same field +@firebase/firestore: βœ” query with ins and not-ins on the same field +@firebase/firestore: βœ” query with multiple ins on different fields +@firebase/firestore: βœ” query in with array-contains-any +@firebase/firestore: βœ” query in with array-contains +@firebase/firestore: βœ” order by equality +@firebase/firestore: βœ” or query with in and not-in +@firebase/firestore: βœ” query with array membership +@firebase/firestore: ReferenceSet +@firebase/firestore: βœ” can add/remove references +@firebase/firestore: βœ” can remove all references for a target ID +@firebase/firestore: MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” doesn't keep track of size +@firebase/firestore: LRU MemoryRemoteDocumentCache +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: IndexedDbRemoteDocumentCache +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” can get next documents from collection group +@firebase/firestore: βœ” can get next documents from collection group with limit +@firebase/firestore: βœ” can get next documents from collection group with read time offset +@firebase/firestore: βœ” can get next documents from collection group with document key offset +@firebase/firestore: βœ” can get next documents from non-existing collection group +@firebase/firestore: βœ” returns an invalid document for documents not in cache +@firebase/firestore: βœ” can set and read a document +@firebase/firestore: βœ” can set and read a document at a long path +@firebase/firestore: βœ” can set and read a NoDocument +@firebase/firestore: βœ” can set document to new value +@firebase/firestore: βœ” can set and read several documents +@firebase/firestore: βœ” can set and read several documents with overlapping keys +@firebase/firestore: βœ” can set and read several documents with deeply nested keys +@firebase/firestore: βœ” can set and read several documents including missing document +@firebase/firestore: βœ” can remove document +@firebase/firestore: βœ” can remove nonexistent document +@firebase/firestore: βœ” can get all documents from collection +@firebase/firestore: βœ” getAll() excludes subcollection +@firebase/firestore: βœ” can get all documents since read time +@firebase/firestore: βœ” getDocumentsMatchingQuery() applies query check +@firebase/firestore: βœ” getDocumentsMatchingQuery() respects mutated documents +@firebase/firestore: βœ” getAll() uses read time rather than update time +@firebase/firestore: βœ” does not apply document modifications to cache +@firebase/firestore: βœ” keeps track of size +@firebase/firestore: RemoteDocumentChangeBuffer +@firebase/firestore: βœ” can read unchanged entry +@firebase/firestore: βœ” can add entry and read it back +@firebase/firestore: βœ” can remove entry +@firebase/firestore: βœ” can apply changes +@firebase/firestore: βœ” can apply changes with removal +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.998Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:29.999Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Changes have already been applied.' +@firebase/firestore: βœ” methods fail after apply. +@firebase/firestore: SimpleDb +@firebase/firestore: βœ” regex test +@firebase/firestore: βœ” can get +@firebase/firestore: βœ” can put +@firebase/firestore: βœ” lets you explicitly abort transactions +@firebase/firestore: βœ” aborts transactions when an error happens +@firebase/firestore: βœ” aborts transactions when persistence promise is rejected +@firebase/firestore: βœ” exposes error from inside a transaction +@firebase/firestore: βœ” can delete +@firebase/firestore: βœ” loadAll +@firebase/firestore: βœ” loadFirst +@firebase/firestore: βœ” deleteAll +@firebase/firestore: βœ” deleteAll in key range +@firebase/firestore: βœ” deleteAll in index range +@firebase/firestore: βœ” can iterate +@firebase/firestore: βœ” can iterate and skip keys +@firebase/firestore: βœ” stops iteration after rejected promise +@firebase/firestore: βœ” can iterate in reverse +@firebase/firestore: βœ” can iterate and skip keys in reverse +@firebase/firestore: βœ” can iterate and skip over the index +@firebase/firestore: βœ” can iterate using index and range and stop before end +@firebase/firestore: βœ” can iterate over index as keys-only +@firebase/firestore: βœ” can iterate over index using a partial bound +@firebase/firestore: βœ” can use arrays as keys and do partial bounds ranges +@firebase/firestore: βœ” correctly sorts keys with nested arrays +@firebase/firestore: βœ” retries transactions +@firebase/firestore: βœ” retries transactions only three times +@firebase/firestore: βœ” does not retry explicitly aborted transactions +@firebase/firestore: βœ– Perf (skipped) +@firebase/firestore: MemoryTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: IndexedDbTargetCache +@firebase/firestore: βœ” returns null for target not in cache +@firebase/firestore: βœ” can set and read a target +@firebase/firestore: βœ” handles canonical ID collisions +@firebase/firestore: βœ” can set target to new value +@firebase/firestore: βœ” can remove a target +@firebase/firestore: βœ” can remove matching keys when a target is removed +@firebase/firestore: βœ” adds or removes matching keys +@firebase/firestore: βœ” can remove matching keys for a targetId +@firebase/firestore: βœ” can get matching keys for targetId +@firebase/firestore: βœ” can allocate target ID +@firebase/firestore: βœ” can get / set targets metadata +@firebase/firestore: βœ” sets the highest sequence number +@firebase/firestore: βœ” persists metadata across restarts +@firebase/firestore: WebStorageSharedClientState +@firebase/firestore: persists mutation batches +@firebase/firestore: βœ” with a pending batch +@firebase/firestore: βœ” with an acknowledged batch +@firebase/firestore: βœ” with a rejected batch +@firebase/firestore: persists query targets +@firebase/firestore: βœ” when empty +@firebase/firestore: βœ” with multiple targets +@firebase/firestore: βœ” with a not-current target +@firebase/firestore: βœ” with a current target +@firebase/firestore: βœ” with an errored target +@firebase/firestore: βœ” garbage collects entry +@firebase/firestore: combines client state +@firebase/firestore: βœ” with targets from existing client +@firebase/firestore: βœ” with targets from new client +@firebase/firestore: βœ” with online state from new client +@firebase/firestore: βœ” ignores online state from inactive client +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.150Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse client data for instance 'TmWJchJ7vw3JNwMypS4e': {"activeTargetIds":[5,"invalid"]}' +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.150Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse client data for instance 'TmWJchJ7vw3JNwMypS4e': {"activeTargetIds":[5,"invalid"]}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes mutation updates +@firebase/firestore: βœ” for pending mutation +@firebase/firestore: βœ” for acknowledged mutation +@firebase/firestore: βœ” for rejected mutation +@firebase/firestore: βœ” handles unauthenticated user +@firebase/firestore: βœ” ignores different user +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.178Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse mutation state for ID '1': {"state":"invalid","updateTimeMs":1741129530178}' +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.178Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse mutation state for ID '1': {"state":"invalid","updateTimeMs":1741129530178}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: processes target updates +@firebase/firestore: βœ” for added target +@firebase/firestore: βœ” for removed target +@firebase/firestore: βœ” for not-current target +@firebase/firestore: βœ” for current target +@firebase/firestore: βœ” for errored target +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.207Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse target state for ID '1': {"state":"invalid","updateTimeMs":1741129530207}' +@firebase/firestore: ERROR: '[2025-03-04T23:05:30.207Z] @firebase/firestore:', 'Firestore (11.3.0): SharedClientState', 'Failed to parse target state for ID '1': {"state":"invalid","updateTimeMs":1741129530207}' +@firebase/firestore: βœ” ignores invalid data +@firebase/firestore: syncs sequence numbers +@firebase/firestore: βœ” writes out new sequence numbers +@firebase/firestore: βœ” notifies on new sequence numbers +@firebase/firestore: processes bundles +@firebase/firestore: βœ” writes out collection groups +@firebase/firestore: βœ” supports empty collection groups +@firebase/firestore: Document +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” returns fields correctly +@firebase/firestore: βœ” equals to other same documents +@firebase/firestore: DocumentSet +@firebase/firestore: βœ” keeps documents in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates documents +@firebase/firestore: βœ” adds docs equal to comparator with different keys +@firebase/firestore: βœ” equals to other document set with the same elements and order +@firebase/firestore: field index +@firebase/firestore: βœ” comparator includes collection group +@firebase/firestore: βœ” comparator ignores index id +@firebase/firestore: βœ” comparator ignores index offset +@firebase/firestore: βœ” comparator includes field name +@firebase/firestore: βœ” comparator includes segment kind +@firebase/firestore: βœ” comparator includes segment length +@firebase/firestore: index offset +@firebase/firestore: βœ” supports comparison +@firebase/firestore: βœ” advances seconds +@firebase/firestore: Mutation +@firebase/firestore: βœ” can apply sets to documents +@firebase/firestore: βœ” can apply patches to documents +@firebase/firestore: βœ” can apply patches with merges to missing documents +@firebase/firestore: βœ” can apply patches with merges to null documents +@firebase/firestore: βœ” will delete values from the field-mask +@firebase/firestore: βœ” will patch a primitive value +@firebase/firestore: βœ” patching a NoDocument yields a NoDocument +@firebase/firestore: βœ” can apply local serverTimestamp transforms to documents +@firebase/firestore: βœ” can create arrayUnion() transform. +@firebase/firestore: βœ” can create arrayRemove() transform. +@firebase/firestore: βœ” can apply local arrayUnion transform to missing field +@firebase/firestore: βœ” can apply local arrayUnion transform to non-array field +@firebase/firestore: βœ” can apply local arrayUnion transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate existing elements +@firebase/firestore: βœ” can apply local arrayUnion transform with duplicate union elements +@firebase/firestore: βœ” can apply local arrayUnion transform with non-primitive elements +@firebase/firestore: βœ” can apply local arrayUnion transform with partially-overlapping elements +@firebase/firestore: βœ” can apply local arrayRemove transform to missing field +@firebase/firestore: βœ” can apply local arrayRemove transform to non-array field +@firebase/firestore: βœ” can apply local arrayRemove transform with non-existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with existing elements +@firebase/firestore: βœ” can apply local arrayRemove transform with non-primitive elements +@firebase/firestore: βœ” can apply server-acked serverTimestamp transform to documents +@firebase/firestore: βœ” can apply server-acked array transforms to document +@firebase/firestore: βœ” can apply numeric add transform to document +@firebase/firestore: βœ” can apply numeric add transform to unexpected type +@firebase/firestore: βœ” can apply numeric add transform to missing field +@firebase/firestore: βœ” can apply numeric add transforms consecutively +@firebase/firestore: βœ” can apply server-acked numeric add transform to document +@firebase/firestore: βœ” can apply deletes to documents +@firebase/firestore: βœ” can apply sets with mutation results +@firebase/firestore: βœ” will apply patches with mutation results +@firebase/firestore: βœ” transitions versions correctly +@firebase/firestore: βœ” extracts null base value for non-transform mutation +@firebase/firestore: βœ” extracts null base value for ServerTimestamp +@firebase/firestore: βœ” extracts base value for increment +@firebase/firestore: βœ” increment twice +@firebase/firestore: βœ” overlay with no mutation +@firebase/firestore: βœ” overlay with mutations fail by preconditions +@firebase/firestore: βœ” overlay with patch on invalid document +@firebase/firestore: βœ” overlay with one set mutation +@firebase/firestore: βœ” overlay with one patch mutation +@firebase/firestore: βœ” overlay with patch then merge +@firebase/firestore: βœ” overlay with delete then patch +@firebase/firestore: βœ” overlay with delete then merge +@firebase/firestore: βœ” overlay with patch then patch to delete field +@firebase/firestore: βœ” overlay with patch then merge with array union +@firebase/firestore: βœ” overlay with array union then remove +@firebase/firestore: βœ” overlay with set then increment +@firebase/firestore: βœ” overlay with set then patch on deleted doc +@firebase/firestore: βœ” overlay with field deletion of nested field +@firebase/firestore: βœ” overlay created from empty set with merge +@firebase/firestore: βœ” overlay with mutation with multiple deletes +@firebase/firestore: βœ” overlay by combinations and permutations +@firebase/firestore: βœ” overlay by combinations and permutations for array transforms +@firebase/firestore: βœ” overlay by combinations and permutations for increments +@firebase/firestore: ObjectValue +@firebase/firestore: βœ” can extract fields +@firebase/firestore: βœ” can overwrite existing fields +@firebase/firestore: βœ” can add new fields +@firebase/firestore: βœ” can add multiple new fields +@firebase/firestore: βœ” can implicitly create objects +@firebase/firestore: βœ” can overwrite primitive values to create objects +@firebase/firestore: βœ” can add to nested objects +@firebase/firestore: βœ” can delete keys +@firebase/firestore: βœ” can delete nested keys +@firebase/firestore: βœ” can delete added keys +@firebase/firestore: βœ” can delete, resulting in empty object +@firebase/firestore: βœ” will not delete nested keys on primitive values +@firebase/firestore: βœ” can delete multiple fields +@firebase/firestore: βœ” provides field mask +@firebase/firestore: MutableObjectValue +@firebase/firestore: βœ” supports empty objectValues +@firebase/firestore: βœ” sets single field +@firebase/firestore: βœ” sets empty object +@firebase/firestore: βœ” sets multiple fields +@firebase/firestore: βœ” sets nested fields +@firebase/firestore: βœ” sets two fields in nested object +@firebase/firestore: βœ” sets field in nested object +@firebase/firestore: βœ” sets deeply nested field in nested object +@firebase/firestore: βœ” sets nested field multiple times +@firebase/firestore: βœ” sets and deletes field +@firebase/firestore: βœ” sets and deletes nested field +@firebase/firestore: βœ” sets single field in existing object +@firebase/firestore: βœ” overwrites field +@firebase/firestore: βœ” overwrites nested field +@firebase/firestore: βœ” overwrites deeply nested field +@firebase/firestore: βœ” merges existing object +@firebase/firestore: βœ” overwrites nested object +@firebase/firestore: βœ” replaces nested object +@firebase/firestore: βœ” deletes single field +@firebase/firestore: βœ” deletes nested object +@firebase/firestore: βœ” deletes non-existing field +@firebase/firestore: βœ” deletes non-existing nested field +@firebase/firestore: Path +@firebase/firestore: βœ” can be constructed +@firebase/firestore: βœ” can index into itself +@firebase/firestore: βœ” can be constructed with offsets +@firebase/firestore: βœ” can pop front repeatedly +@firebase/firestore: βœ” can yield the last segment +@firebase/firestore: βœ” can create child path +@firebase/firestore: βœ” can pop last repeatedly +@firebase/firestore: βœ” compares correctly +@firebase/firestore: βœ” determines prefix correctly +@firebase/firestore: βœ” escapes FieldPath with segments +@firebase/firestore: βœ” can be constructed from field path. +@firebase/firestore: fails to construct from invalid field path +@firebase/firestore: βœ” "" +@firebase/firestore: βœ” "foo\" +@firebase/firestore: βœ” "foo\x" +@firebase/firestore: βœ” "foo." +@firebase/firestore: βœ” ".foo" +@firebase/firestore: βœ” "foo..bar" +@firebase/firestore: Target Bounds +@firebase/firestore: βœ” empty query +@firebase/firestore: βœ” equals query with ascending index +@firebase/firestore: βœ” equals query with descending index +@firebase/firestore: βœ” less than query with ascending index +@firebase/firestore: βœ” less than query with descending index +@firebase/firestore: βœ” less than or equals query with ascending index +@firebase/firestore: βœ” less than or equals query with descending index +@firebase/firestore: βœ” greater than query with ascending index +@firebase/firestore: βœ” greater than query with descending index +@firebase/firestore: βœ” greater than or equals query with ascending index +@firebase/firestore: βœ” greater than or equals query with descending index +@firebase/firestore: βœ” arrayContains query +@firebase/firestore: βœ” arrayContainsAny query +@firebase/firestore: βœ” orderBy query +@firebase/firestore: βœ” orderBy query with filter +@firebase/firestore: βœ” startAt query +@firebase/firestore: βœ” startAt query with filter +@firebase/firestore: βœ” startAfter query with filter +@firebase/firestore: βœ” startAfter does not change bound if not applicable +@firebase/firestore: βœ” endAt query +@firebase/firestore: βœ” endAt query with filter +@firebase/firestore: βœ” endBefore query with filter +@firebase/firestore: βœ” endBefore does not change bound if not applicable +@firebase/firestore: βœ” partial index match with bound +@firebase/firestore: βœ” can use merge join +@firebase/firestore: βœ” can use partial index +@firebase/firestore: βœ” cannot use overspecified index +@firebase/firestore: βœ” equalities with default order +@firebase/firestore: βœ” equalities with ascending order +@firebase/firestore: βœ” equalities with descending order +@firebase/firestore: βœ” inequalities with default order +@firebase/firestore: βœ” inequalities with ascending order +@firebase/firestore: βœ” inequalities with descending order +@firebase/firestore: βœ” inequality uses single field index +@firebase/firestore: βœ” is query uses merge join +@firebase/firestore: ERROR: '[2025-03-04T23:05:31.046Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Collection IDs do not match' +@firebase/firestore: ERROR: '[2025-03-04T23:05:31.046Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Collection IDs do not match' +@firebase/firestore: βœ” validates collection +@firebase/firestore: βœ” with array-contains +@firebase/firestore: βœ” array-contains is independent +@firebase/firestore: βœ” with array-contains and order by +@firebase/firestore: βœ” with equality and descending order +@firebase/firestore: βœ” with multiple equalities +@firebase/firestore: βœ” with multiple equalities and inequality +@firebase/firestore: βœ” with orderBy +@firebase/firestore: βœ” with not equals +@firebase/firestore: βœ” with multiple filters +@firebase/firestore: βœ” multiple filters require matching prefix +@firebase/firestore: βœ” with multiple filters and orderBy +@firebase/firestore: βœ” with multiple inequalities +@firebase/firestore: βœ” with multiple notIns +@firebase/firestore: βœ” with multiple orderBys +@firebase/firestore: βœ” with in and notIn +@firebase/firestore: βœ” with equality and different order by +@firebase/firestore: βœ” with equals and not in +@firebase/firestore: βœ” with in and orderBy +@firebase/firestore: βœ” with in and orderBy on same field +@firebase/firestore: βœ” with equality and inequality on the same field +@firebase/firestore: buildTargetIndex() +@firebase/firestore: βœ” queries with equalities +@firebase/firestore: βœ” queries with inequalities +@firebase/firestore: βœ” queries with array contains +@firebase/firestore: βœ” queries with order bys +@firebase/firestore: βœ” queries with inequalities uses single field index +@firebase/firestore: βœ” query of a collection +@firebase/firestore: βœ” query with array contains and order by +@firebase/firestore: βœ” query with equality and descending order +@firebase/firestore: βœ” query with multiple equalities +@firebase/firestore: βœ” query with in and not in filters +@firebase/firestore: βœ” query with equals and not-in filters +@firebase/firestore: query with multiple equalities and inequality +@firebase/firestore: βœ” inequality last +@firebase/firestore: βœ” inequality in middle +@firebase/firestore: query with multiple filters +@firebase/firestore: βœ” == and > on different fields +@firebase/firestore: βœ” >=, ==, and <= filters on the same field +@firebase/firestore: βœ” not-in and >= on the same field +@firebase/firestore: query with multiple order-bys +@firebase/firestore: βœ” order by fff, bar desc, __name__ +@firebase/firestore: βœ” order by foo, bar, __name__ desc +@firebase/firestore: query with equality and different order-by +@firebase/firestore: βœ” filter on foo and bar, order by qux +@firebase/firestore: βœ” filter on aaa, qqq, ccc, order by fff, bbb +@firebase/firestore: query with in and order-by +@firebase/firestore: βœ” on different fields +@firebase/firestore: βœ” on the same field +@firebase/firestore: query with multiple inequality +@firebase/firestore: βœ” returns null +@firebase/firestore: Values +@firebase/firestore: βœ” compares values for equality +@firebase/firestore: βœ” normalizes values for equality +@firebase/firestore: βœ” orders types correctly +@firebase/firestore: βœ” normalizes values for comparison +@firebase/firestore: βœ” estimates size correctly for fixed sized values +@firebase/firestore: βœ” estimates size correctly for relatively sized values +@firebase/firestore: βœ” computes lower bound +@firebase/firestore: βœ” computes upper bound +@firebase/firestore: βœ” canonicalizes values +@firebase/firestore: βœ” canonical IDs ignore sort order +@firebase/firestore: βœ” clones properties without normalization +@firebase/firestore: BloomFilter +@firebase/firestore: βœ” can instantiate an empty bloom filter +@firebase/firestore: βœ” should throw error if empty bloom filter inputs are invalid +@firebase/firestore: βœ” can instantiate a non empty bloom filter +@firebase/firestore: βœ” should throw error if padding is invalid +@firebase/firestore: βœ” should throw error if hash count is negative +@firebase/firestore: βœ” should throw error if hash count is 0 for non empty bloom filter +@firebase/firestore: βœ” should be able to process non standard characters +@firebase/firestore: βœ” mightContain in empty bloom filter should always return false +@firebase/firestore: βœ” mightContain on empty string might return false positive result +@firebase/firestore: BloomFilter golden tests +@firebase/firestore: βœ” mightContain result for 1 document with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 1 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 500 documents with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 500 document with 0.0001 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 1 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.01 false positive rate +@firebase/firestore: βœ” mightContain result for 5000 documents with 0.0001 false positive rate +@firebase/firestore: βœ– mightContain result for 50000 documents with 1 false positive rate (skipped) +@firebase/firestore: βœ– mightContain result for 50000 documents with 0.01 false positive rate (skipped) +@firebase/firestore: βœ– mightContain result for 50000 documents with 0.0001 false positive rate (skipped) +@firebase/firestore: Datastore +@firebase/firestore: βœ” newDatastore() returns an an instance of Datastore +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() fails if terminated +@firebase/firestore: βœ” Connection.terminate() invoked if Datastore terminated +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeRPC() invalidates the token if unauthenticated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() fails if terminated +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() rethrows a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() wraps unknown exceptions in a FirestoreError +@firebase/firestore: βœ” DatastoreImpl.invokeStreamingRPC() invalidates the token if unauthenticated +@firebase/firestore: RemoteEvent +@firebase/firestore: βœ” will accumulate document added and removed events +@firebase/firestore: βœ” will ignore events for pending targets +@firebase/firestore: βœ” will ignore events for removed targets +@firebase/firestore: βœ” will keep reset mapping even with updates +@firebase/firestore: βœ” will handle single reset +@firebase/firestore: βœ” will handle target add and removal in same batch +@firebase/firestore: βœ” target current change will mark the target current +@firebase/firestore: βœ” target added change will reset previous state +@firebase/firestore: βœ” no change will still mark the affected targets +@firebase/firestore: βœ” existence filters clears target mapping +@firebase/firestore: βœ” existence filters removes current changes +@firebase/firestore: βœ” handles document update +@firebase/firestore: βœ” only raises events for updated targets +@firebase/firestore: βœ” synthesizes deletes +@firebase/firestore: βœ” doesn't synthesize deletes in the wrong state +@firebase/firestore: βœ” separates document updates +@firebase/firestore: βœ” tracks limbo documents +@firebase/firestore: RestConnection +@firebase/firestore: βœ” url uses from path +@firebase/firestore: βœ” merges headers +@firebase/firestore: βœ” empty app check token is not added to headers +@firebase/firestore: βœ” returns success +@firebase/firestore: WARN: '[2025-03-04T23:05:31.462Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunQuery' 0x1892623f failed with error: ', '{"code":"unknown","name":"FirebaseError"}', 'url: ', 'http://example.com/v1/projects/testproject/databases/(default)/documents/coll:runQuery', 'request:', '{}' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.462Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunQuery' 0x1892623f failed with error: ', '{"code":"unknown","name":"FirebaseError"}', 'url: ', 'http://example.com/v1/projects/testproject/databases/(default)/documents/coll:runQuery', 'request:', '{}' +@firebase/firestore: βœ” returns error +@firebase/firestore: Serializer +@firebase/firestore: βœ” toDocument() / fromDocument +@firebase/firestore: βœ” encodes listen request labels +@firebase/firestore: converts value +@firebase/firestore: βœ” converts NullValue +@firebase/firestore: βœ” converts BooleanValue +@firebase/firestore: βœ” converts IntegerValue +@firebase/firestore: βœ” converts DoubleValue +@firebase/firestore: βœ” converts NaN +@firebase/firestore: βœ” converts Infinity +@firebase/firestore: βœ” converts StringValue +@firebase/firestore: βœ” converts TimestampValue from proto +@firebase/firestore: βœ” converts TimestampValue from string +@firebase/firestore: βœ” converts TimestampValue to string (useProto3Json=true) +@firebase/firestore: βœ” converts GeoPointValue +@firebase/firestore: βœ” converts BlobValue +@firebase/firestore: βœ” converts ArrayValue +@firebase/firestore: βœ” converts empty ArrayValue +@firebase/firestore: βœ” converts empty ObjectValue +@firebase/firestore: βœ” converts nested ObjectValues +@firebase/firestore: βœ” converts RefValue +@firebase/firestore: βœ” converts VectorValue +@firebase/firestore: toKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts a long key +@firebase/firestore: fromKey +@firebase/firestore: βœ” converts an empty key +@firebase/firestore: βœ” converts a regular key +@firebase/firestore: βœ” converts default-value containing key +@firebase/firestore: toDocumentMask +@firebase/firestore: βœ– converts a weird path (skipped) +@firebase/firestore: fromDocumentMask +@firebase/firestore: βœ– converts a weird path (skipped) +@firebase/firestore: toMutation +@firebase/firestore: βœ” converts DeleteMutation +@firebase/firestore: toMutation / fromMutation +@firebase/firestore: βœ” SetMutation +@firebase/firestore: βœ” PatchMutation +@firebase/firestore: βœ” PatchMutation without precondition +@firebase/firestore: βœ” DeleteMutation +@firebase/firestore: βœ” ServerTimestamp transform +@firebase/firestore: βœ” Numeric Add transform +@firebase/firestore: βœ” Array transforms +@firebase/firestore: βœ” SetMutation with precondition +@firebase/firestore: βœ” VerifyMutation +@firebase/firestore: to/from UnaryOrFieldFilter +@firebase/firestore: βœ” makes dotted-property names +@firebase/firestore: βœ” converts NotEqual +@firebase/firestore: βœ” converts LessThan +@firebase/firestore: βœ” converts LessThanOrEqual +@firebase/firestore: βœ” converts GreaterThan +@firebase/firestore: βœ” converts GreaterThanOrEqual +@firebase/firestore: βœ” converts key field +@firebase/firestore: βœ” converts array-contains +@firebase/firestore: βœ” converts IN +@firebase/firestore: βœ” converts not-in +@firebase/firestore: βœ” converts not-in with null +@firebase/firestore: βœ” converts array-contains-any +@firebase/firestore: to/from UnaryFilter +@firebase/firestore: βœ” converts null +@firebase/firestore: βœ” converts Nan +@firebase/firestore: βœ” converts not null +@firebase/firestore: βœ” converts not NaN +@firebase/firestore: to/from CompositeFilter +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: βœ” converts deep collections +@firebase/firestore: toTarget +@firebase/firestore: βœ” converts first-level key queries +@firebase/firestore: βœ” converts first-level ancestor queries +@firebase/firestore: βœ” converts nested ancestor queries +@firebase/firestore: βœ” converts single filters at first-level collections +@firebase/firestore: βœ” converts multiple filters at first-level collections +@firebase/firestore: βœ” converts single filters on deeper collections +@firebase/firestore: βœ” converts multi-layer composite filters with OR at the first layer +@firebase/firestore: βœ” converts multi-layer composite filters with AND at the first layer +@firebase/firestore: βœ” converts order bys +@firebase/firestore: βœ” converts limits +@firebase/firestore: βœ” converts startAt/endAt +@firebase/firestore: βœ” converts resume tokens +@firebase/firestore: to/from OperatorName +@firebase/firestore: βœ” contains all Operators +@firebase/firestore: to/from Direction +@firebase/firestore: βœ” contains all Directions +@firebase/firestore: to/from PropertyOrder +@firebase/firestore: βœ” renders ascending +@firebase/firestore: βœ” renders descending +@firebase/firestore: fromWatchChange +@firebase/firestore: βœ” converts target change with added +@firebase/firestore: βœ” converts target change with removed +@firebase/firestore: βœ” converts target change with no_change +@firebase/firestore: βœ” converts target change with no_change (omitted in JSON) +@firebase/firestore: βœ” converts target change with snapshot version +@firebase/firestore: βœ” converts document change with target ids +@firebase/firestore: βœ” converts document change with removed target ids +@firebase/firestore: βœ” converts document change with deletions +@firebase/firestore: βœ” converts document removes +@firebase/firestore: Bundles: +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles might lead to limbo doc +@firebase/firestore: βœ” (Memory) Newer docs from bundles might lead to limbo doc +@firebase/firestore: βœ” (Persistence) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Memory) Bundles query can be resumed from same query. +@firebase/firestore: βœ” (Persistence) Bundles query can be loaded and resumed from different tabs +@firebase/firestore: βœ– (Memory) Bundles query can be loaded and resumed from different tabs (skipped) +@firebase/firestore: βœ” (Persistence) Load from secondary clients and observe from primary +@firebase/firestore: βœ– (Memory) Load from secondary clients and observe from primary (skipped) +@firebase/firestore: βœ” (Persistence) Load and observe from same secondary client +@firebase/firestore: βœ– (Memory) Load and observe from same secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Load from primary client and observe from secondary +@firebase/firestore: βœ– (Memory) Load from primary client and observe from secondary (skipped) +@firebase/firestore: Collections: +@firebase/firestore: βœ” (Persistence) Events are raised after watch ack +@firebase/firestore: βœ” (Memory) Events are raised after watch ack +@firebase/firestore: βœ” (Persistence) Events are raised for local sets before watch ack +@firebase/firestore: βœ” (Memory) Events are raised for local sets before watch ack +@firebase/firestore: Existence Filters: +@firebase/firestore: βœ” (Persistence) Existence filter match +@firebase/firestore: βœ” (Memory) Existence filter match +@firebase/firestore: βœ” (Persistence) Existence filter match after pending update +@firebase/firestore: βœ” (Memory) Existence filter match after pending update +@firebase/firestore: βœ” (Persistence) Existence filter with empty target +@firebase/firestore: βœ” (Memory) Existence filter with empty target +@firebase/firestore: βœ” (Persistence) Existence filter ignored with pending target +@firebase/firestore: βœ” (Memory) Existence filter ignored with pending target +@firebase/firestore: βœ” (Persistence) Existence filter mismatch triggers re-run of query +@firebase/firestore: βœ” (Memory) Existence filter mismatch triggers re-run of query +@firebase/firestore: βœ” (Persistence) Existence filter mismatch will drop resume token +@firebase/firestore: βœ” (Memory) Existence filter mismatch will drop resume token +@firebase/firestore: βœ” (Persistence) Existence filter handled at global snapshot +@firebase/firestore: βœ” (Memory) Existence filter handled at global snapshot +@firebase/firestore: βœ” (Persistence) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Memory) Existence filter synthesizes deletes +@firebase/firestore: βœ” (Persistence) Existence filter limbo resolution is denied +@firebase/firestore: βœ” (Memory) Existence filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Existence filter clears resume token +@firebase/firestore: βœ– (Memory) Existence filter clears resume token (skipped) +@firebase/firestore: βœ” (Persistence) Full re-query is skipped when bloom filter can identify documents deleted +@firebase/firestore: βœ” (Memory) Full re-query is skipped when bloom filter can identify documents deleted +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter cannot identify documents deleted +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter cannot identify documents deleted +@firebase/firestore: βœ” (Persistence) Bloom filter can process special characters in document name +@firebase/firestore: βœ” (Memory) Bloom filter can process special characters in document name +@firebase/firestore: WARN: '[2025-03-04T23:05:31.769Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.769Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Persistence) Bloom filter fills in default values for undefined padding and hashCount +@firebase/firestore: WARN: '[2025-03-04T23:05:31.772Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.772Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Memory) Bloom filter fills in default values for undefined padding and hashCount +@firebase/firestore: WARN: '[2025-03-04T23:05:31.780Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.780Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter bitmap is invalid +@firebase/firestore: WARN: '[2025-03-04T23:05:31.783Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.783Z] @firebase/firestore:', 'Firestore (11.3.0): Decoding the base64 bloom filter in existence filter failed (Invalid base64 string: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.); ignoring the bloom filter and falling back to full re-query.' +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter bitmap is invalid +@firebase/firestore: WARN: '[2025-03-04T23:05:31.788Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.788Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter hashCount is invalid +@firebase/firestore: WARN: '[2025-03-04T23:05:31.791Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: WARN: '[2025-03-04T23:05:31.791Z] @firebase/firestore:', 'Firestore (11.3.0): BloomFilter error: ', '{"name":"BloomFilterError"}' +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter hashCount is invalid +@firebase/firestore: βœ” (Persistence) Full re-query is triggered when bloom filter is empty +@firebase/firestore: βœ” (Memory) Full re-query is triggered when bloom filter is empty +@firebase/firestore: βœ” (Persistence) Same documents can have different bloom filters +@firebase/firestore: βœ” (Memory) Same documents can have different bloom filters +@firebase/firestore: βœ” (Persistence) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Memory) Bloom filter is handled at global snapshot +@firebase/firestore: βœ” (Persistence) Bloom filter limbo resolution is denied +@firebase/firestore: βœ” (Memory) Bloom filter limbo resolution is denied +@firebase/firestore: βœ” (Persistence) Bloom filter with large size works as expected +@firebase/firestore: βœ” (Memory) Bloom filter with large size works as expected +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when there is no document changes +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when there is no document changes +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when new documents are added +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when new documents are added +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when existing docs are updated +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when existing docs are updated +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are updated to no longer match the query +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are updated to no longer match the query +@firebase/firestore: βœ” (Persistence) Resume a query with bloom filter when documents are added, removed and deleted +@firebase/firestore: βœ” (Memory) Resume a query with bloom filter when documents are added, removed and deleted +@firebase/firestore: Garbage Collection: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Memory) Contents of query are kept after listen is removed, and GC threshold is not reached +@firebase/firestore: βœ” (Persistence) Contents of query are removed after listen is removed, and GC threshold is reached +@firebase/firestore: βœ” (Memory) Contents of query are removed after listen is removed, and GC threshold is reached +@firebase/firestore: βœ” (Persistence) Contents of active query are kept while inactive results are removed after GC +@firebase/firestore: βœ” (Memory) Contents of active query are kept while inactive results are removed after GC +@firebase/firestore: Client Side Index +@firebase/firestore: βœ” (Persistence) Index Creation visible on all clients +@firebase/firestore: βœ– (Memory) Index Creation visible on all clients (skipped) +@firebase/firestore: βœ” (Persistence) Index Creation succeeds even if not primary +@firebase/firestore: βœ– (Memory) Index Creation succeeds even if not primary (skipped) +@firebase/firestore: Limbo Documents: +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted without an existence filter +@firebase/firestore: βœ” (Memory) Limbo documents are deleted without an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are deleted with an existence filter +@firebase/firestore: βœ” (Memory) Limbo documents are deleted with an existence filter +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved with updates in different snapshot than "current" +@firebase/firestore: βœ” (Memory) Limbo documents are resolved with updates in different snapshot than "current" +@firebase/firestore: βœ” (Persistence) Document remove message will cause docs to go in limbo +@firebase/firestore: βœ” (Memory) Document remove message will cause docs to go in limbo +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT +@firebase/firestore: βœ” (Persistence) Limbo resolution handles snapshot before CURRENT [no document update] +@firebase/firestore: βœ” (Memory) Limbo resolution handles snapshot before CURRENT [no document update] +@firebase/firestore: βœ” (Persistence) Failed limbo resolution removes document from view +@firebase/firestore: βœ” (Memory) Failed limbo resolution removes document from view +@firebase/firestore: βœ” (Persistence) Limbo docs are resolved by primary client +@firebase/firestore: βœ– (Memory) Limbo docs are resolved by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents are resolved after primary tab failover +@firebase/firestore: βœ– (Memory) Limbo documents are resolved after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents survive primary state transitions +@firebase/firestore: βœ– (Memory) Limbo documents survive primary state transitions (skipped) +@firebase/firestore: βœ” (Persistence) Limbo documents stay consistent between views +@firebase/firestore: βœ” (Memory) Limbo documents stay consistent between views +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in no expected limbo doc +@firebase/firestore: βœ– (Memory) LimitToLast query from secondary results in no expected limbo doc (skipped) +@firebase/firestore: βœ” (Persistence) LimitToLast query from secondary results in expected limbo doc +@firebase/firestore: βœ– (Memory) LimitToLast query from secondary results in expected limbo doc (skipped) +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with all results at once from watch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with all results at once from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with results one at a time from watch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with results one at a time from watch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling when a limbo listen is rejected. +@firebase/firestore: βœ” (Memory) Limbo resolution throttling when a limbo listen is rejected. +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with existence filter mismatch +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution should wait for full re-query result if there is an existence filter mismatch +@firebase/firestore: βœ” (Memory) Limbo resolution should wait for full re-query result if there is an existence filter mismatch +@firebase/firestore: βœ” (Persistence) Limbo resolution throttling with bloom filter application +@firebase/firestore: βœ” (Memory) Limbo resolution throttling with bloom filter application +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be started if one is already active +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be started if one is already active +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should not be enqueued if one is already enqueued +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should not be enqueued if one is already enqueued +@firebase/firestore: βœ” (Persistence) A limbo resolution for a document should be removed from the queue when the last query listen stops +@firebase/firestore: βœ” (Memory) A limbo resolution for a document should be removed from the queue when the last query listen stops +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred before documentDelete in the global snapshot window +@firebase/firestore: βœ” (Persistence) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query +@firebase/firestore: βœ” (Memory) Fix #8474 - Limbo resolution for document is removed even if document updates for the document occurred in the global snapshot window and no document delete was received for the limbo resolution query +@firebase/firestore: βœ” (Persistence) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot +@firebase/firestore: βœ” (Memory) Fix #8474 - Handles code path of no ack for limbo resolution query before global snapshot +@firebase/firestore: Limits: +@firebase/firestore: βœ” (Persistence) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Memory) Documents in limit are replaced by remote event +@firebase/firestore: βœ” (Persistence) Documents outside of limit don't raise hasPendingWrites +@firebase/firestore: βœ” (Memory) Documents outside of limit don't raise hasPendingWrites +@firebase/firestore: βœ” (Persistence) Deleted Document in limbo in full limit query +@firebase/firestore: βœ” (Memory) Deleted Document in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Memory) Documents in limit can handle removed messages +@firebase/firestore: βœ” (Persistence) Documents in limit are can handle removed messages for only one of many query +@firebase/firestore: βœ” (Memory) Documents in limit are can handle removed messages for only one of many query +@firebase/firestore: βœ” (Persistence) Limits are re-filled from cache +@firebase/firestore: βœ” (Memory) Limits are re-filled from cache +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with removal) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with removal) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with latency-compensated edit) +@firebase/firestore: βœ” (Persistence) Initial snapshots for limit queries are re-filled from cache (with update from backend) +@firebase/firestore: βœ” (Memory) Initial snapshots for limit queries are re-filled from cache (with update from backend) +@firebase/firestore: βœ” (Persistence) Resumed limit queries exclude deleted documents +@firebase/firestore: βœ– (Memory) Resumed limit queries exclude deleted documents (skipped) +@firebase/firestore: βœ” (Persistence) Resumed limit queries use updated documents +@firebase/firestore: βœ” (Memory) Resumed limit queries use updated documents +@firebase/firestore: βœ” (Persistence) Multiple docs in limbo in full limit query +@firebase/firestore: βœ” (Memory) Multiple docs in limbo in full limit query +@firebase/firestore: βœ” (Persistence) Limit query is refilled by primary client +@firebase/firestore: βœ– (Memory) Limit query is refilled by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Limit query includes write from secondary client +@firebase/firestore: βœ– (Memory) Limit query includes write from secondary client (skipped) +@firebase/firestore: Listens source options: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ– (Persistence) Documents are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Documents are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Memory) Newer docs from bundles should overwrite cache +@firebase/firestore: βœ” (Persistence) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Memory) Newer deleted docs from bundles should delete cached docs +@firebase/firestore: βœ” (Persistence) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Memory) Older deleted docs from bundles should do nothing +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should keep not raise snapshot if there are unacknowledged writes +@firebase/firestore: βœ” (Persistence) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Memory) Newer docs from bundles should raise snapshot only when Watch catches up with acknowledged writes +@firebase/firestore: βœ” (Persistence) Primary client should not invoke watch request while all clients are listening to cache +@firebase/firestore: βœ– (Memory) Primary client should not invoke watch request while all clients are listening to cache (skipped) +@firebase/firestore: βœ” (Persistence) Local mutations notifies listeners sourced from cache in all tabs +@firebase/firestore: βœ– (Memory) Local mutations notifies listeners sourced from cache in all tabs (skipped) +@firebase/firestore: βœ” (Persistence) Listeners with different source shares watch changes between primary and secondary clients +@firebase/firestore: βœ– (Memory) Listeners with different source shares watch changes between primary and secondary clients (skipped) +@firebase/firestore: βœ” (Persistence) Clients can have multiple listeners with different sources +@firebase/firestore: βœ– (Memory) Clients can have multiple listeners with different sources (skipped) +@firebase/firestore: βœ” (Persistence) Query is executed by primary client even if primary client only has listeners sourced from cache +@firebase/firestore: βœ– (Memory) Query is executed by primary client even if primary client only has listeners sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients +@firebase/firestore: βœ– (Memory) Query only raises events in participating clients (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in different clients sourced from cache +@firebase/firestore: βœ– (Memory) Mirror queries being listened in different clients sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened in the same secondary client sourced from cache +@firebase/firestore: βœ– (Memory) Mirror queries being listened in the same secondary client sourced from cache (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries being listened from different sources while listening to server in primary tab +@firebase/firestore: βœ– (Memory) Mirror queries being listened from different sources while listening to server in primary tab (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from different sources while listening to server in secondary tab +@firebase/firestore: βœ– (Memory) Mirror queries from different sources while listening to server in secondary tab (skipped) +@firebase/firestore: βœ” (Persistence) Un-listen to listeners from different source +@firebase/firestore: βœ– (Memory) Un-listen to listeners from different source (skipped) +@firebase/firestore: Listens: +@firebase/firestore: βœ– (Persistence) Contents of query are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Contents of query are cleared when listen is removed. +@firebase/firestore: βœ– (Persistence) Documents outside of view are cleared when listen is removed. (skipped) +@firebase/firestore: βœ” (Memory) Documents outside of view are cleared when listen is removed. +@firebase/firestore: βœ” (Persistence) Contents of query update when new data is received. +@firebase/firestore: βœ” (Memory) Contents of query update when new data is received. +@firebase/firestore: βœ” (Persistence) Doesn't raise events for empty target +@firebase/firestore: βœ” (Memory) Doesn't raise events for empty target +@firebase/firestore: βœ” (Persistence) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Memory) Doesn't include unknown documents in cached result +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for deletes +@firebase/firestore: βœ” (Persistence) Ensure correct query results with latency-compensated deletes +@firebase/firestore: βœ” (Memory) Ensure correct query results with latency-compensated deletes +@firebase/firestore: βœ” (Persistence) Does not raise event for initial document delete +@firebase/firestore: βœ” (Memory) Does not raise event for initial document delete +@firebase/firestore: βœ” (Persistence) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Memory) Will process removals without waiting for a consistent snapshot +@firebase/firestore: βœ” (Persistence) Will re-issue listen for errored target +@firebase/firestore: βœ” (Memory) Will re-issue listen for errored target +@firebase/firestore: βœ” (Persistence) Will gracefully process failed targets +@firebase/firestore: βœ” (Memory) Will gracefully process failed targets +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots +@firebase/firestore: βœ” (Memory) Will gracefully handle watch stream reverting snapshots +@firebase/firestore: βœ” (Persistence) Will gracefully handle watch stream reverting snapshots (with restart) +@firebase/firestore: βœ– (Memory) Will gracefully handle watch stream reverting snapshots (with restart) (skipped) +@firebase/firestore: βœ” (Persistence) Individual documents cannot revert +@firebase/firestore: βœ” (Memory) Individual documents cannot revert +@firebase/firestore: βœ” (Persistence) Individual (deleted) documents cannot revert +@firebase/firestore: βœ” (Memory) Individual (deleted) documents cannot revert +@firebase/firestore: βœ” (Persistence) Waits until Watch catches up to local deletes +@firebase/firestore: βœ” (Memory) Waits until Watch catches up to local deletes +@firebase/firestore: βœ” (Persistence) Listens are reestablished after network disconnect +@firebase/firestore: βœ” (Memory) Listens are reestablished after network disconnect +@firebase/firestore: βœ” (Persistence) Synthesizes deletes for missing document +@firebase/firestore: βœ” (Memory) Synthesizes deletes for missing document +@firebase/firestore: βœ” (Persistence) Re-opens target without existence filter +@firebase/firestore: βœ” (Memory) Re-opens target without existence filter +@firebase/firestore: βœ” (Persistence) Ignores update from inactive target +@firebase/firestore: βœ” (Memory) Ignores update from inactive target +@firebase/firestore: βœ” (Persistence) Does not synthesize deletes for previously acked documents +@firebase/firestore: βœ” (Memory) Does not synthesize deletes for previously acked documents +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to +@firebase/firestore: βœ” (Memory) Query is rejected and re-listened to +@firebase/firestore: βœ” (Persistence) Persists resume token sent with target +@firebase/firestore: βœ” (Memory) Persists resume token sent with target +@firebase/firestore: βœ” (Persistence) Array-contains queries support resuming +@firebase/firestore: βœ” (Memory) Array-contains queries support resuming +@firebase/firestore: βœ” (Persistence) Persists global resume tokens on unlisten +@firebase/firestore: βœ” (Memory) Persists global resume tokens on unlisten +@firebase/firestore: βœ” (Persistence) Omits global resume tokens for a short while +@firebase/firestore: βœ– (Memory) Omits global resume tokens for a short while (skipped) +@firebase/firestore: βœ” (Persistence) Persists global resume tokens if the snapshot is old enough +@firebase/firestore: βœ– (Memory) Persists global resume tokens if the snapshot is old enough (skipped) +@firebase/firestore: βœ” (Persistence) Query is executed by primary client +@firebase/firestore: βœ– (Memory) Query is executed by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is shared between primary and secondary client +@firebase/firestore: βœ– (Memory) Query is shared between primary and secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is joined by primary client +@firebase/firestore: βœ– (Memory) Query is joined by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query only raises events in participating clients +@firebase/firestore: βœ– (Memory) Query only raises events in participating clients (skipped) +@firebase/firestore: βœ” (Persistence) Query is unlistened to by primary client +@firebase/firestore: βœ– (Memory) Query is unlistened to by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is resumed by secondary client +@firebase/firestore: βœ– (Memory) Query is resumed by secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is rejected by primary client +@firebase/firestore: βœ– (Memory) Query is rejected by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Query is rejected and re-listened to by secondary client +@firebase/firestore: βœ– (Memory) Query is rejected and re-listened to by secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Secondary client raises latency compensated snapshot from primary mutation +@firebase/firestore: βœ– (Memory) Secondary client raises latency compensated snapshot from primary mutation (skipped) +@firebase/firestore: βœ– (Persistence) Secondary client advances query state with global snapshot from primary (skipped) +@firebase/firestore: βœ– (Memory) Secondary client advances query state with global snapshot from primary (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from same secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from same secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from different secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from different secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Mirror queries from primary and secondary client +@firebase/firestore: βœ– (Memory) Mirror queries from primary and secondary client (skipped) +@firebase/firestore: βœ” (Persistence) Can listen/unlisten to mirror queries. +@firebase/firestore: βœ” (Memory) Can listen/unlisten to mirror queries. +@firebase/firestore: βœ” (Persistence) Secondary client uses primary client's online state +@firebase/firestore: βœ– (Memory) Secondary client uses primary client's online state (skipped) +@firebase/firestore: βœ” (Persistence) New client uses existing online state +@firebase/firestore: βœ– (Memory) New client uses existing online state (skipped) +@firebase/firestore: βœ” (Persistence) New client becomes primary if no client has its network enabled +@firebase/firestore: βœ– (Memory) New client becomes primary if no client has its network enabled (skipped) +@firebase/firestore: βœ” (Persistence) Secondary client's online state is ignored +@firebase/firestore: βœ– (Memory) Secondary client's online state is ignored (skipped) +@firebase/firestore: βœ” (Persistence) Offline state doesn't persist if primary is shut down +@firebase/firestore: βœ– (Memory) Offline state doesn't persist if primary is shut down (skipped) +@firebase/firestore: βœ” (Persistence) Listen is re-listened to after primary tab failover +@firebase/firestore: βœ– (Memory) Listen is re-listened to after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Listen is established in new primary tab +@firebase/firestore: βœ– (Memory) Listen is established in new primary tab (skipped) +@firebase/firestore: βœ” (Persistence) Query recovers after primary takeover +@firebase/firestore: βœ– (Memory) Query recovers after primary takeover (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.279Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Release target'.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.279Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Release target'.' +@firebase/firestore: βœ” (Persistence) Query bounces between primaries +@firebase/firestore: βœ– (Memory) Query bounces between primaries (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.287Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Apply remote event'.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.287Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Apply remote event'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores watch update +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores watch update (skipped) +@firebase/firestore: βœ” (Persistence) Listen is established in newly started primary +@firebase/firestore: βœ– (Memory) Listen is established in newly started primary (skipped) +@firebase/firestore: βœ” (Persistence) Previous primary immediately regains primary lease +@firebase/firestore: βœ– (Memory) Previous primary immediately regains primary lease (skipped) +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync should not fire for doc changes if there are no listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires when called even if there are no local listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires when called even if there are no local listeners +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for metadata changes +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for metadata changes +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires once for multiple event snapshots +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires once for multiple event snapshots +@firebase/firestore: βœ” (Persistence) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Memory) onSnapshotsInSync fires for multiple listeners +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Memory) Empty-due-to-delete initial snapshot is raised from cache +@firebase/firestore: βœ” (Persistence) Empty initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ– (Memory) Empty initial snapshot is raised from cache in multiple tabs (skipped) +@firebase/firestore: βœ” (Persistence) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs +@firebase/firestore: βœ– (Memory) Empty-due-to-delete initial snapshot is raised from cache in multiple tabs (skipped) +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount when adding the target +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount when adding the target +@firebase/firestore: βœ” (Persistence) Resuming a query should specify expectedCount that does not include pending mutations +@firebase/firestore: βœ” (Memory) Resuming a query should specify expectedCount that does not include pending mutations +@firebase/firestore: βœ” (Persistence) ExpectedCount in listen request should work after coming back online +@firebase/firestore: βœ” (Memory) ExpectedCount in listen request should work after coming back online +@firebase/firestore: βœ” (Persistence) Global snapshots would not alter query state if there is no changes +@firebase/firestore: βœ– (Memory) Global snapshots would not alter query state if there is no changes (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.494Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.494Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: Offline: +@firebase/firestore: βœ” (Persistence) Empty queries are resolved if client goes offline +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.497Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.497Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Empty queries are resolved if client goes offline +@firebase/firestore: βœ” (Persistence) A successful message delays offline status +@firebase/firestore: βœ” (Memory) A successful message delays offline status +@firebase/firestore: βœ– (Persistence) Removing all listeners delays "Offline" status on next listen (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.506Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.506Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Removing all listeners delays "Offline" status on next listen +@firebase/firestore: βœ” (Persistence) Queries revert to fromCache=true when offline. +@firebase/firestore: βœ” (Memory) Queries revert to fromCache=true when offline. +@firebase/firestore: βœ” (Persistence) Queries with limbo documents handle going offline. +@firebase/firestore: βœ” (Memory) Queries with limbo documents handle going offline. +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.536Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.536Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) OnlineState timeout triggers offline behavior +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.540Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.540Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) OnlineState timeout triggers offline behavior +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.546Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.546Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.549Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.549Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to stream failures. +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.555Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.555Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.557Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.557Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) New queries return immediately with fromCache=true when offline due to OnlineState timeout. +@firebase/firestore: βœ– (Persistence) Queries return from cache when network disabled (skipped) +@firebase/firestore: βœ” (Memory) Queries return from cache when network disabled +@firebase/firestore: βœ” (Persistence) Client stays offline during credential change +@firebase/firestore: βœ” (Memory) Client stays offline during credential change +@firebase/firestore: OrderBy: +@firebase/firestore: βœ” (Persistence) orderBy applies filtering based on local state +@firebase/firestore: βœ” (Memory) orderBy applies filtering based on local state +@firebase/firestore: βœ” (Persistence) orderBy applies to existing documents +@firebase/firestore: βœ” (Memory) orderBy applies to existing documents +@firebase/firestore: Performance Tests [10 iterations]: +@firebase/firestore: βœ– (Persistence) Insert a new document (skipped) +@firebase/firestore: βœ– (Memory) Insert a new document (skipped) +@firebase/firestore: βœ– (Persistence) Start a listen, write a document, ack the write, handle watch snapshot, unlisten (skipped) +@firebase/firestore: βœ– (Memory) Start a listen, write a document, ack the write, handle watch snapshot, unlisten (skipped) +@firebase/firestore: βœ– (Persistence) Write 100 documents and raise a snapshot (skipped) +@firebase/firestore: βœ– (Memory) Write 100 documents and raise a snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Update a single document (skipped) +@firebase/firestore: βœ– (Memory) Update a single document (skipped) +@firebase/firestore: βœ– (Persistence) Update a document and wait for snapshot with existing listen (skipped) +@firebase/firestore: βœ– (Memory) Update a document and wait for snapshot with existing listen (skipped) +@firebase/firestore: βœ– (Persistence) Process 100 documents from Watch and wait for snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 100 documents from Watch and wait for snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 100 documents from Watch and wait for snapshot, then unlisten and wait for a cached snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Process 25 target updates and wait for snapshot (skipped) +@firebase/firestore: βœ– (Memory) Process 25 target updates and wait for snapshot (skipped) +@firebase/firestore: βœ– (Persistence) Add 500 documents, issue 10 queries that return 10 documents each, unlisten (skipped) +@firebase/firestore: βœ– (Memory) Add 500 documents, issue 10 queries that return 10 documents each, unlisten (skipped) +@firebase/firestore: Persistence: +@firebase/firestore: βœ” (Persistence) Local mutations are persisted and re-sent +@firebase/firestore: βœ– (Memory) Local mutations are persisted and re-sent (skipped) +@firebase/firestore: βœ” (Persistence) Persisted local mutations are visible to listeners +@firebase/firestore: βœ– (Memory) Persisted local mutations are visible to listeners (skipped) +@firebase/firestore: βœ” (Persistence) Remote documents are persisted +@firebase/firestore: βœ– (Memory) Remote documents are persisted (skipped) +@firebase/firestore: βœ” (Persistence) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from watch are not GC'd +@firebase/firestore: βœ” (Persistence) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Memory) Remote documents from user sets are not GC'd +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches +@firebase/firestore: βœ” (Memory) Mutation Queue is persisted across uid switches +@firebase/firestore: βœ” (Persistence) Mutation Queue is persisted across uid switches (with restarts) +@firebase/firestore: βœ– (Memory) Mutation Queue is persisted across uid switches (with restarts) (skipped) +@firebase/firestore: βœ” (Persistence) Visible mutations reflect uid switches +@firebase/firestore: βœ” (Memory) Visible mutations reflect uid switches +@firebase/firestore: βœ” (Persistence) Detects all active clients +@firebase/firestore: βœ– (Memory) Detects all active clients (skipped) +@firebase/firestore: βœ” (Persistence) Single tab acquires primary lease +@firebase/firestore: βœ– (Memory) Single tab acquires primary lease (skipped) +@firebase/firestore: βœ” (Persistence) Foreground tab acquires primary lease +@firebase/firestore: βœ– (Memory) Foreground tab acquires primary lease (skipped) +@firebase/firestore: βœ” (Persistence) Primary lease bound to network state +@firebase/firestore: βœ– (Memory) Primary lease bound to network state (skipped) +@firebase/firestore: βœ” (Persistence) clearPersistence() shuts down other clients +@firebase/firestore: βœ– (Memory) clearPersistence() shuts down other clients (skipped) +@firebase/firestore: Queries: +@firebase/firestore: βœ” (Persistence) Collection Group query +@firebase/firestore: βœ” (Memory) Collection Group query +@firebase/firestore: βœ” (Persistence) Collection Group query with mutations +@firebase/firestore: βœ” (Memory) Collection Group query with mutations +@firebase/firestore: βœ” (Persistence) Latency-compensated updates are included in query results +@firebase/firestore: βœ” (Memory) Latency-compensated updates are included in query results +@firebase/firestore: βœ” (Persistence) Queries in different tabs will not interfere +@firebase/firestore: βœ– (Memory) Queries in different tabs will not interfere (skipped) +@firebase/firestore: Persistence Recovery +@firebase/firestore: βœ” (Persistence) Write is acknowledged by primary client (with recovery) +@firebase/firestore: βœ– (Memory) Write is acknowledged by primary client (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Clients fail to lookup mutations (with recovery) +@firebase/firestore: βœ– (Memory) Clients fail to lookup mutations (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query raises events in secondary client (with recovery) +@firebase/firestore: βœ– (Memory) Query raises events in secondary client (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query is listened to by primary (with recovery) +@firebase/firestore: βœ– (Memory) Query is listened to by primary (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query with active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ– (Memory) Query with active view recovers after primary tab failover (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Query without active view recovers after primary tab failover (with recovery) +@firebase/firestore: βœ– (Memory) Query without active view recovers after primary tab failover (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Ignores intermittent lease refresh failures (with recovery) +@firebase/firestore: βœ– (Memory) Ignores intermittent lease refresh failures (with recovery) (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.871Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.871Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Persistence) Recovers when write cannot be persisted +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.877Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.877Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Memory) Recovers when write cannot be persisted +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.884Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.884Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Persistence) Does not surface non-persisted writes +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.892Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.892Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Failed to persist write: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Locally write mutations' +@firebase/firestore: βœ” (Memory) Does not surface non-persisted writes +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when write acknowledgment cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write rejection cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when write rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when write acknowledgment cannot be persisted (with restart) +@firebase/firestore: βœ– (Memory) Recovers when write acknowledgment cannot be persisted (with restart) (skipped) +@firebase/firestore: βœ” (Persistence) Writes are pending until acknowledgement is persisted +@firebase/firestore: βœ” (Memory) Writes are pending until acknowledgement is persisted +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.971Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.971Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Surfaces local documents if notifyLocalViewChanges fails +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.978Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:33.978Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Surfaces local documents if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Persistence) Excludes documents from future queries even if notifyLocalViewChanges fails +@firebase/firestore: βœ” (Memory) Excludes documents from future queries even if notifyLocalViewChanges fails +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.006Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.006Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Persistence) Fails targets that cannot be allocated +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.012Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.012Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Memory) Fails targets that cannot be allocated +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.020Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.020Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Persistence) Can re-add failed target +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.025Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.025Z] @firebase/firestore:', 'Firestore (11.3.0): AsyncQueue', 'Initialization of query 'Query(target=Target(collection2, orderBy: [__name__ (asc)]); limitType=F)' failed: IndexedDbTransactionError: [code=unavailable]: IndexedDB transaction 'Simulated error' failed: Error: Simulated retryable error: Allocate target' +@firebase/firestore: βœ” (Memory) Can re-add failed target +@firebase/firestore: βœ” (Persistence) Recovers when watch update cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when watch update cannot be persisted +@firebase/firestore: βœ” (Persistence) Handles rejections that cannot be persisted +@firebase/firestore: βœ” (Memory) Handles rejections that cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo acknowledgement cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when Limbo acknowledgement cannot be persisted +@firebase/firestore: βœ” (Persistence) Recovers when Limbo rejection cannot be persisted +@firebase/firestore: βœ” (Memory) Recovers when Limbo rejection cannot be persisted +@firebase/firestore: βœ” (Persistence) User change handles transaction failures (with recovery) +@firebase/firestore: βœ– (Memory) User change handles transaction failures (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Multiple user changes during transaction failure (with recovery) +@firebase/firestore: βœ– (Memory) Multiple user changes during transaction failure (with recovery) (skipped) +@firebase/firestore: βœ” (Persistence) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Memory) Unlisten succeeds when target release fails +@firebase/firestore: βœ” (Persistence) Can re-listen to query when unlisten fails +@firebase/firestore: βœ” (Memory) Can re-listen to query when unlisten fails +@firebase/firestore: Remote store: +@firebase/firestore: βœ” (Persistence) Waits for watch to remove targets +@firebase/firestore: βœ” (Memory) Waits for watch to remove targets +@firebase/firestore: βœ” (Persistence) Waits for watch to ack last target add +@firebase/firestore: βœ” (Memory) Waits for watch to ack last target add +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.158Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.158Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Cleans up watch state correctly +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.161Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.161Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Cleans up watch state correctly +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.166Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.166Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Persistence) Handles user changes while offline (b/74749605). +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.169Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.169Z] @firebase/firestore:', 'Firestore (11.3.0): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: Simulated Backend Error +@firebase/firestore: This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.' +@firebase/firestore: βœ” (Memory) Handles user changes while offline (b/74749605). +@firebase/firestore: Resume tokens: +@firebase/firestore: βœ” (Persistence) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Memory) Resume tokens are sent after watch stream restarts +@firebase/firestore: βœ” (Persistence) Resume tokens are used across new listens +@firebase/firestore: βœ” (Memory) Resume tokens are used across new listens +@firebase/firestore: Writes: +@firebase/firestore: βœ” (Persistence) Two sequential writes to different documents smoke test. +@firebase/firestore: βœ” (Memory) Two sequential writes to different documents smoke test. +@firebase/firestore: βœ” (Persistence) Event is raised for a local set before and after the write ack +@firebase/firestore: βœ” (Memory) Event is raised for a local set before and after the write ack +@firebase/firestore: βœ” (Persistence) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Memory) Raises snapshot with 'hasPendingWrites' for unacknowledged write +@firebase/firestore: βœ” (Persistence) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Memory) Doesn't raise 'hasPendingWrites' for committed write and new listen +@firebase/firestore: βœ” (Persistence) Doesn't raise event for document with pending patch +@firebase/firestore: βœ” (Memory) Doesn't raise event for document with pending patch +@firebase/firestore: βœ” (Persistence) Cache will not keep data for an outdated write ack +@firebase/firestore: βœ” (Memory) Cache will not keep data for an outdated write ack +@firebase/firestore: βœ” (Persistence) Cache raises correct event if write is acked before watch delivers it +@firebase/firestore: βœ” (Memory) Cache raises correct event if write is acked before watch delivers it +@firebase/firestore: βœ” (Persistence) Cache will hold local write until watch catches up +@firebase/firestore: βœ” (Memory) Cache will hold local write until watch catches up +@firebase/firestore: βœ” (Persistence) Local patch is applied to query until watch catches up +@firebase/firestore: βœ” (Memory) Local patch is applied to query until watch catches up +@firebase/firestore: βœ” (Persistence) Writes are pipelined +@firebase/firestore: βœ” (Memory) Writes are pipelined +@firebase/firestore: βœ” (Persistence) Pipelined writes can fail +@firebase/firestore: βœ” (Memory) Pipelined writes can fail +@firebase/firestore: βœ” (Persistence) Failed writes are released immediately. +@firebase/firestore: βœ” (Memory) Failed writes are released immediately. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent. +@firebase/firestore: βœ” (Memory) Writes are not re-sent. +@firebase/firestore: βœ” (Persistence) Writes are not re-sent after disable/enable network. +@firebase/firestore: βœ” (Memory) Writes are not re-sent after disable/enable network. +@firebase/firestore: βœ– (Persistence) Writes are released when there are no queries left (skipped) +@firebase/firestore: βœ” (Memory) Writes are released when there are no queries left +@firebase/firestore: βœ” (Persistence) Writes that fail with code invalid-argument are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code invalid-argument are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code not-found are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code already-exists are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code already-exists are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code permission-denied are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code permission-denied are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code failed-precondition are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code out-of-range are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code out-of-range are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code unimplemented are rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code data-loss are rejected +@firebase/firestore: βœ” (Memory) Writes that fail with code data-loss are rejected +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.529Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.529Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.529Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.529Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: βœ” (Persistence) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.533Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.533Z] @firebase/firestore:', 'Firestore (11.3.0): FirebaseError: [code=resource-exhausted]: transient error' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.533Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.533Z] @firebase/firestore:', 'Firestore (11.3.0): Using maximum backoff delay to prevent overloading the backend.' +@firebase/firestore: βœ” (Memory) Writes that fail with code resource_exhausted are not rejected +@firebase/firestore: βœ” (Persistence) Writes that fail with code aborted are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code aborted are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code cancelled are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code cancelled are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unknown are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unknown are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code deadline-exceeded are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code deadline-exceeded are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code internal are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code internal are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unavailable are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unavailable are retried +@firebase/firestore: βœ” (Persistence) Writes that fail with code unauthenticated are retried +@firebase/firestore: βœ” (Memory) Writes that fail with code unauthenticated are retried +@firebase/firestore: βœ” (Persistence) Ensure correct events after patching a doc (including a delete) and getting watcher events. +@firebase/firestore: βœ” (Memory) Ensure correct events after patching a doc (including a delete) and getting watcher events. +@firebase/firestore: βœ” (Persistence) Writes are resent after network disconnect +@firebase/firestore: βœ” (Memory) Writes are resent after network disconnect +@firebase/firestore: βœ” (Persistence) New writes are sent after write failure +@firebase/firestore: βœ” (Memory) New writes are sent after write failure +@firebase/firestore: βœ” (Persistence) Primary client acknowledges write +@firebase/firestore: βœ– (Memory) Primary client acknowledges write (skipped) +@firebase/firestore: βœ” (Persistence) Primary client rejects write +@firebase/firestore: βœ– (Memory) Primary client rejects write (skipped) +@firebase/firestore: βœ” (Persistence) Pending writes are shared between clients +@firebase/firestore: βœ– (Memory) Pending writes are shared between clients (skipped) +@firebase/firestore: βœ” (Persistence) Pending write is acknowledged by primary client +@firebase/firestore: βœ– (Memory) Pending write is acknowledged by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Pending write is rejected by primary client +@firebase/firestore: βœ– (Memory) Pending write is rejected by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Writes are released by primary client +@firebase/firestore: βœ– (Memory) Writes are released by primary client (skipped) +@firebase/firestore: βœ” (Persistence) Writes are held during primary failover +@firebase/firestore: βœ– (Memory) Writes are held during primary failover (skipped) +@firebase/firestore: βœ” (Persistence) Write are sequenced by multiple clients +@firebase/firestore: βœ– (Memory) Write are sequenced by multiple clients (skipped) +@firebase/firestore: βœ” (Persistence) Write is executed after primary tab failover +@firebase/firestore: βœ– (Memory) Write is executed after primary tab failover (skipped) +@firebase/firestore: βœ” (Persistence) Secondary tabs handle user change +@firebase/firestore: βœ– (Memory) Secondary tabs handle user change (skipped) +@firebase/firestore: βœ” (Persistence) Mutations are scoped by user +@firebase/firestore: βœ– (Memory) Mutations are scoped by user (skipped) +@firebase/firestore: βœ” (Persistence) Mutation recovers after primary takeover +@firebase/firestore: βœ– (Memory) Mutation recovers after primary takeover (skipped) +@firebase/firestore: βœ” (Persistence) Write is sent by newly started primary +@firebase/firestore: βœ– (Memory) Write is sent by newly started primary (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.820Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Acknowledge batch'.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.820Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Acknowledge batch'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores acknowledged write +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores acknowledged write (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.834Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Reject batch'.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:34.834Z] @firebase/firestore:', 'Firestore (11.3.0): Failed to obtain primary lease for action 'Reject batch'.' +@firebase/firestore: βœ” (Persistence) Unresponsive primary ignores rejected write +@firebase/firestore: βœ– (Memory) Unresponsive primary ignores rejected write (skipped) +@firebase/firestore: βœ” (Persistence) Mutation are not sent twice after primary failover +@firebase/firestore: βœ– (Memory) Mutation are not sent twice after primary failover (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves after write acknowledgment +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves after write acknowledgment +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves with no writes +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves multiple times +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves if another write is issued +@firebase/firestore: βœ” (Memory) Wait for pending writes resolves if another write is issued +@firebase/firestore: βœ” (Persistence) Wait for pending writes waits after restart +@firebase/firestore: βœ– (Memory) Wait for pending writes waits after restart (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves for write in secondary tab +@firebase/firestore: βœ– (Memory) Wait for pending writes resolves for write in secondary tab (skipped) +@firebase/firestore: βœ” (Persistence) Wait for pending writes resolves independently for different tabs +@firebase/firestore: βœ– (Memory) Wait for pending writes resolves independently for different tabs (skipped) +@firebase/firestore: diffArrays +@firebase/firestore: βœ” Missing Element +@firebase/firestore: βœ” AddedElement +@firebase/firestore: βœ” Without Ordering +@firebase/firestore: βœ” Empty Lists +@firebase/firestore: AsyncQueue +@firebase/firestore: βœ” schedules ops in right order +@firebase/firestore: βœ” handles failures +@firebase/firestore: βœ” can schedule ops in the future +@firebase/firestore: βœ” Can cancel delayed operations +@firebase/firestore: βœ” Can run all delayed operations early +@firebase/firestore: βœ” Can run some delayed operations early +@firebase/firestore: βœ” Retries retryable operations +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.008Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure' +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.008Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure' +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.008Z] @firebase/firestore:', 'Firestore (11.3.0): INTERNAL UNHANDLED ERROR: ', 'Error: FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure +@firebase/firestore: at fail (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4413:7408) +@firebase/firestore: at Array. (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:81503:37) +@firebase/firestore: at AsyncQueueImpl.retryNextOp (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40360) +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40078 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:39715 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:41177' +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.008Z] @firebase/firestore:', 'Firestore (11.3.0): INTERNAL UNHANDLED ERROR: ', 'Error: FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Simulated test failure +@firebase/firestore: at fail (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4413:7408) +@firebase/firestore: at Array. (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:81503:37) +@firebase/firestore: at AsyncQueueImpl.retryNextOp (http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40360) +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:40078 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:39715 +@firebase/firestore: at http://localhost:8089/absolutebootstrap.430169083.js?86d93d5a78723d17f3300e6e99995f0f06fe99b5:4491:41177' +@firebase/firestore: βœ” Doesn't retry internal exceptions +@firebase/firestore: βœ” Schedules first retryable attempt with no delay +@firebase/firestore: βœ” Retries retryable operations with backoff +@firebase/firestore: βœ” Retries retryable operations in order +@firebase/firestore: βœ” Does not delay retryable operations that succeed +@firebase/firestore: βœ” Catches up when retryable operation fails +@firebase/firestore: βœ” Can drain (non-delayed) operations +@firebase/firestore: βœ” Schedules operations with respect to shut down +@firebase/firestore: βœ” Does not run existing operations if opted out +@firebase/firestore: atob +@firebase/firestore: βœ” decodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” decodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: btoa +@firebase/firestore: βœ” encodes with native support +@firebase/firestore: βœ” roundtrips with native support +@firebase/firestore: βœ” encodes with polyfill +@firebase/firestore: βœ” roundtrips with polyfill +@firebase/firestore: byteStreamReaderFromString() +@firebase/firestore: βœ” returns a reader stepping readable stream +@firebase/firestore: Bundle +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 4 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 4 +@firebase/firestore: βœ” reads without named query with bytesPerRead 4 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 4 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 4 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 4 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 64 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 64 +@firebase/firestore: βœ” reads without named query with bytesPerRead 64 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 64 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 64 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 64 +@firebase/firestore: βœ” reads with query and doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads with unexpected orders with bytesPerRead 1024 +@firebase/firestore: βœ” reads without named query with bytesPerRead 1024 +@firebase/firestore: βœ” reads with deleted doc with bytesPerRead 1024 +@firebase/firestore: βœ” reads without documents or query with bytesPerRead 1024 +@firebase/firestore: βœ” throws with ill-formatted bundle with bytesPerRead 1024 +@firebase/firestore: LogicUtils +@firebase/firestore: βœ” implements field filter associativity +@firebase/firestore: βœ” implements composite filter associativity +@firebase/firestore: βœ” implements field filter distribution over field filter +@firebase/firestore: βœ” implements field filter distribution over and filter +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements in expansion for field filters +@firebase/firestore: βœ” implements in expansion for composite filters +@firebase/firestore: βœ” implements field filter distribution over or filter +@firebase/firestore: βœ” implements and filter distribution with and filter +@firebase/firestore: βœ” implements and filter distribution with or filter +@firebase/firestore: βœ” implements or filter distribution with and filter +@firebase/firestore: βœ” implements or filter distribution with or filter +@firebase/firestore: βœ” implements field filter compute DNF +@firebase/firestore: βœ” implements compute dnf flat AND filter +@firebase/firestore: βœ” implements compute dnf flat OR filter +@firebase/firestore: βœ” compute DNF1 +@firebase/firestore: βœ” compute DNF2 +@firebase/firestore: βœ” compute DNF3 +@firebase/firestore: βœ” compute DNF4 +@firebase/firestore: βœ” compute DNF5 +@firebase/firestore: βœ” compute DNF6 +@firebase/firestore: βœ” compute DNF7 +@firebase/firestore: βœ” compute DNF8 +@firebase/firestore: immediateSuccessor +@firebase/firestore: βœ” generates the correct immediate successors +@firebase/firestore: typeCast +@firebase/firestore: βœ” can cast types +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.208Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Expected type 'Bar', but was 'Foo'' +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.208Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: Expected type 'Bar', but was 'Foo'' +@firebase/firestore: βœ” validates types +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.208Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: FieldMask contains field that is not unique: a' +@firebase/firestore: ERROR: '[2025-03-04T23:05:35.208Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: FieldMask contains field that is not unique: a' +@firebase/firestore: FieldMask +@firebase/firestore: βœ” cannot contain duplicate fields +@firebase/firestore: CompareUtf8Strings +@firebase/firestore: βœ” compareUtf8Strings should return correct results +@firebase/firestore: ObjectMap +@firebase/firestore: βœ” can get/put/delete values +@firebase/firestore: βœ” can handle collisions +@firebase/firestore: SortedMap Tests +@firebase/firestore: βœ” Create node +@firebase/firestore: βœ” You can search a map for a specific key +@firebase/firestore: βœ” You can insert a new key/value pair into the tree +@firebase/firestore: βœ” You can remove a key/value pair from the map +@firebase/firestore: βœ” More removals +@firebase/firestore: βœ” Removal bug +@firebase/firestore: βœ” Test increasing +@firebase/firestore: βœ” The structure should be valid after insertion (1) +@firebase/firestore: βœ” The structure should be valid after insertion (2) +@firebase/firestore: βœ” Rotate left leaves the tree in a valid state +@firebase/firestore: βœ” Rotate right leaves the tree in a valid state +@firebase/firestore: βœ” The structure should be valid after insertion (3) +@firebase/firestore: βœ” you can overwrite a value +@firebase/firestore: βœ” removing the last element returns an empty map +@firebase/firestore: βœ” empty .get() +@firebase/firestore: βœ” empty .size +@firebase/firestore: βœ” empty .remove() +@firebase/firestore: βœ” .reverseTraversal() works. +@firebase/firestore: βœ” insertion and removal of 100 items in random order. +@firebase/firestore: βœ– Perf (skipped) +@firebase/firestore: βœ– Perf: Insertion and removal with various # of items. (skipped) +@firebase/firestore: βœ– Perf: Comparison with {}: Insertion and removal with various # of items. (skipped) +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” SortedMapIterator empty test. +@firebase/firestore: βœ” forward iterator without start key +@firebase/firestore: βœ” forward iterator with start key. +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” forward iterator with start key larger than max key +@firebase/firestore: βœ” forward iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator without start key +@firebase/firestore: βœ” reverse iterator with start key. +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: ERROR: '[2025-03-04T23:05:43.476Z] @firebase/firestore:', 'Firestore (11.3.0): FIRESTORE (11.3.0) INTERNAL ASSERTION FAILED: getNext() called on iterator when hasNext() is false.' +@firebase/firestore: βœ” reverse iterator with start key smaller than min key +@firebase/firestore: βœ” reverse iterator with start key larger than max key +@firebase/firestore: βœ” SortedMap.indexOf returns index. +@firebase/firestore: SortedSet +@firebase/firestore: βœ” keeps elements in the right order +@firebase/firestore: βœ” adds and deletes elements +@firebase/firestore: βœ” updates elements +@firebase/firestore: βœ” can iterate over all elements within a range +@firebase/firestore: βœ” can iterate over all elements while condition +@firebase/firestore: βœ” can find element equal or greater to provided. +@firebase/firestore: βœ” can unionWith another set. +@firebase/firestore: βœ” returns indexes of elements +@firebase/firestore: βœ” diff sorted sets with missing element +@firebase/firestore: βœ” diff sorted sets with added element +@firebase/firestore: βœ” diff sorted sets with empty sets +@firebase/firestore: (Persistence=memory_lru_gc) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: βœ– getCountFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T23:05:46.061Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b61 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"oPGkXV8HbIp0TgfRymc0"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:46.061Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b61 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"oPGkXV8HbIp0TgfRymc0"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=indexeddb) Count queries +@firebase/firestore: βœ” can run count query getCountFromServer +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: so!@#$%^&*()_+special/sub +@firebase/firestore: βœ” can run count query getCountFromServer with special chars in the document path: b1/so!@#$%^&*()_+special +@firebase/firestore: βœ” count query doesn't use converter +@firebase/firestore: βœ” count query supports collection groups +@firebase/firestore: βœ” getCountFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is count query in flight +@firebase/firestore: βœ– getCountFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T23:05:48.631Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b74 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"S9JRkneZCt3ZagoG3dZm"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:48.631Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b74 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"S9JRkneZCt3ZagoG3dZm"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getCountFromServer error message contains console link if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: βœ– getAggregateFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T23:05:52.459Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b93 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"wcoaFeIy3lt9897e55xG"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:52.459Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578b93 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"wcoaFeIy3lt9897e55xG"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=indexeddb) Aggregation queries +@firebase/firestore: βœ” can run count query getAggregationFromServer +@firebase/firestore: βœ” can alias aggregations using getAggregationFromServer +@firebase/firestore: βœ” allows special chars in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backticks in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows backslash in aliases when using getAggregationFromServer +@firebase/firestore: βœ” allows aliases with length greater than 1500 bytes +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” getAggregationFromServer doesn't use converter +@firebase/firestore: βœ” aggregate query supports collection groups +@firebase/firestore: βœ” getAggregateFromServer fails if firestore is terminated +@firebase/firestore: βœ” terminate doesn't crash when there is aggregate query in flight +@firebase/firestore: βœ– getAggregateFromServer fails if user is offline (skipped) +@firebase/firestore: WARN: '[2025-03-04T23:05:56.463Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578bb2 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"1DSHkGMWKXKqmMdlcf1k"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:56.463Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578bb2 failed with error: ', '{"code":"failed-precondition","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","count":{}}],"structuredQuery":{"from":[{"collectionId":"1DSHkGMWKXKqmMdlcf1k"}],"where":{"compositeFilter":{"op":"AND","filters":[{"fieldFilter":{"field":{"fieldPath":"key1"},"op":"EQUAL","value":{"integerValue":"42"}}},{"fieldFilter":{"field":{"fieldPath":"key2"},"op":"LESS_THAN","value":{"integerValue":"42"}}}]}}}}}' +@firebase/firestore: βœ” getAggregateFromServer error message contains console link good if missing index +@firebase/firestore: (Persistence=memory_lru_gc) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer +@firebase/firestore: WARN: '[2025-03-04T23:05:58.808Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578bc4 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"KHOPZjCXbR7g4rSIk4v7"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T23:05:58.808Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578bc4 failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"KHOPZjCXbR7g4rSIk4v7"}]}}}' +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer +@firebase/firestore: (Persistence=indexeddb) Aggregation queries - sum / average +@firebase/firestore: βœ” can run sum query getAggregationFromServer +@firebase/firestore: βœ” can run average query getAggregationFromServer +@firebase/firestore: βœ” can get multiple aggregations using getAggregationFromServer +@firebase/firestore: βœ” can get duplicate aggregations using getAggregationFromServer +@firebase/firestore: βœ” can perform max (5) aggregations using getAggregationFromServer +@firebase/firestore: WARN: '[2025-03-04T23:06:12.426Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578c2a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"pnDguEBEsdCLLALyfU8p"}]}}}' +@firebase/firestore: WARN: '[2025-03-04T23:06:12.426Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'RunAggregationQuery' 0x64578c2a failed with error: ', '{"code":"invalid-argument","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:runAggregationQuery', 'request:', '{"structuredAggregationQuery":{"aggregations":[{"alias":"aggregate_0","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_1","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_2","count":{}},{"alias":"aggregate_3","sum":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_4","avg":{"field":{"fieldPath":"pages"}}},{"alias":"aggregate_5","count":{}}],"structuredQuery":{"from":[{"collectionId":"pnDguEBEsdCLLALyfU8p"}]}}}' +@firebase/firestore: βœ” fails when exceeding the max (5) aggregations using getAggregationFromServer +@firebase/firestore: βœ” returns undefined when getting the result of an unrequested aggregation +@firebase/firestore: βœ” performs aggregates when using `in` operator getAggregationFromServer +@firebase/firestore: βœ” performs aggregations on nested map values using getAggregationFromServer +@firebase/firestore: βœ” performs sum that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs sum of ints and floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that overflows max int using getAggregationFromServer +@firebase/firestore: βœ” performs sum that can overflow integer values during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is negative using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is positive infinity using getAggregationFromServer v2 +@firebase/firestore: βœ” performs sum that is negative infinity using getAggregationFromServer +@firebase/firestore: βœ” performs sum that is valid but could overflow during aggregation using getAggregationFromServer +@firebase/firestore: βœ” performs sum that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs sum over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs sum only on numeric fields using getAggregationFromServer +@firebase/firestore: βœ” performs sum of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in an int using getAggregationFromServer +@firebase/firestore: βœ” performs average of float that results in float using getAggregationFromServer +@firebase/firestore: βœ” performs average of floats and ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average of ints that results in a float using getAggregationFromServer +@firebase/firestore: βœ” performs average causing underflow using getAggregationFromServer +@firebase/firestore: βœ” performs average of min IEEE754 using getAggregationFromServer +@firebase/firestore: βœ” performs average that overflows IEEE754 during accumulation using getAggregationFromServer +@firebase/firestore: βœ” performs average that includes NaN using getAggregationFromServer +@firebase/firestore: βœ” performs average over a result set of zero documents using getAggregationFromServer +@firebase/firestore: βœ” performs average only on numeric fields using getAggregationFromServer +@firebase/firestore: (Persistence=memory_lru_gc) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() +@firebase/firestore: βœ” append to array via update() +@firebase/firestore: βœ” append to array via set(..., {merge: true}) +@firebase/firestore: βœ” append object to array via update() +@firebase/firestore: βœ” remove from array via update() +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) +@firebase/firestore: βœ” remove object from array via update() +@firebase/firestore: βœ” arrayUnion() supports DocumentReference +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc +@firebase/firestore: βœ” update() with no cached base doc +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() +@firebase/firestore: (Persistence=indexeddb) Array Transforms: +@firebase/firestore: βœ” create document with arrayUnion() +@firebase/firestore: βœ” append to array via update() +@firebase/firestore: βœ” append to array via set(..., {merge: true}) +@firebase/firestore: βœ” append object to array via update() +@firebase/firestore: βœ” remove from array via update() +@firebase/firestore: βœ” remove from array via set(..., {merge: true}) +@firebase/firestore: βœ” remove object from array via update() +@firebase/firestore: βœ” arrayUnion() supports DocumentReference +@firebase/firestore: Server Application: +@firebase/firestore: βœ” set() with no cached base doc +@firebase/firestore: βœ” update() with no cached base doc +@firebase/firestore: βœ” set(..., {merge}) with no cached based doc +@firebase/firestore: βœ” update() with cached base doc using arrayUnion() +@firebase/firestore: βœ” update() with cached base doc using arrayRemove() +@firebase/firestore: (Persistence=memory_lru_gc) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents +@firebase/firestore: βœ” can set documents with merge +@firebase/firestore: βœ” can update documents +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can delete documents +@firebase/firestore: βœ” commit atomically, raising correct events +@firebase/firestore: βœ” fail atomically, raising correct events +@firebase/firestore: βœ” write the same server timestamp across writes +@firebase/firestore: βœ” can write the same document multiple times +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) Database batch writes +@firebase/firestore: βœ” supports empty batches +@firebase/firestore: βœ” can set documents +@firebase/firestore: βœ” can set documents with merge +@firebase/firestore: βœ” can update documents +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can delete documents +@firebase/firestore: βœ” commit atomically, raising correct events +@firebase/firestore: βœ” fail atomically, raising correct events +@firebase/firestore: βœ” write the same server timestamp across writes +@firebase/firestore: βœ” can write the same document multiple times +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for WriteBatch.set() +@firebase/firestore: (Persistence=memory_lru_gc) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface +@firebase/firestore: βœ” load with documents and queries with promise interface +@firebase/firestore: βœ” load for a second time skips +@firebase/firestore: ERROR: '[2025-03-04T23:06:47.612Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:06:47.612Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” load with documents already pulled from backend +@firebase/firestore: βœ” loaded documents should not be GC-ed right away +@firebase/firestore: WARN: '[2025-03-04T23:06:47.632Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: WARN: '[2025-03-04T23:06:47.632Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: βœ” load with documents from other projects fails +@firebase/firestore: (Persistence=indexeddb) Bundles +@firebase/firestore: βœ” load with documents only with on progress and promise interface +@firebase/firestore: βœ” load with documents and queries with promise interface +@firebase/firestore: βœ” load for a second time skips +@firebase/firestore: ERROR: '[2025-03-04T23:06:48.449Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:06:48.449Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” load with documents already pulled from backend +@firebase/firestore: βœ” loaded documents should not be GC-ed right away +@firebase/firestore: WARN: '[2025-03-04T23:06:48.474Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: WARN: '[2025-03-04T23:06:48.474Z] @firebase/firestore:', 'Firestore (11.3.0): SyncEngine', 'Loading bundle failed with FirebaseError: [code=invalid-argument]: Tried to deserialize key from different project: jscore-sandbox-141b5 vs test-db2' +@firebase/firestore: βœ” load with documents from other projects fails +@firebase/firestore: (Persistence=memory_lru_gc) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters +@firebase/firestore: βœ” can use on special values +@firebase/firestore: βœ” can use with array membership +@firebase/firestore: βœ” can use with nested field +@firebase/firestore: βœ” can use with nested composite filters +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically +@firebase/firestore: βœ” can use multiple explicit order by field +@firebase/firestore: βœ” can use in aggregate query +@firebase/firestore: βœ” can use document ID im multiple inequality query +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can get same result from server and cache +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=indexeddb) Composite Index Queries +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: Aggregation queries - sum / average +@firebase/firestore: βœ” aggregate query supports collection groups - multi-aggregate +@firebase/firestore: βœ” performs aggregations on documents with all aggregated fields using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates on multiple fields where one aggregate could cause short-circuit due to NaN using getAggregationFromServer +@firebase/firestore: βœ” performs aggregates when using `array-contains-any` operator getAggregationFromServer +@firebase/firestore: Multiple Inequality +@firebase/firestore: βœ” can use multiple inequality filters +@firebase/firestore: βœ” can use on special values +@firebase/firestore: βœ” can use with array membership +@firebase/firestore: βœ” can use with nested field +@firebase/firestore: βœ” can use with nested composite filters +@firebase/firestore: βœ” inequality fields will be implicitly ordered lexicographically +@firebase/firestore: βœ” can use multiple explicit order by field +@firebase/firestore: βœ” can use in aggregate query +@firebase/firestore: βœ” can use document ID im multiple inequality query +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can get same result from server and cache +@firebase/firestore: βœ” inequality query will reject if document key is not the last orderBy field +@firebase/firestore: βœ” inequality query will reject if document key appears only in equality filter +@firebase/firestore: (Persistence=memory_lru_gc) Cursors +@firebase/firestore: βœ” can page through items +@firebase/firestore: βœ” can be created from documents +@firebase/firestore: βœ” can be created from values +@firebase/firestore: βœ” can be created using document id +@firebase/firestore: βœ” can be used with reference values +@firebase/firestore: βœ” can be used in descending queries +@firebase/firestore: βœ” can accept Timestamps as bounds +@firebase/firestore: βœ” can accept Timestamps in where clause +@firebase/firestore: βœ” truncate Timestamps +@firebase/firestore: (Persistence=indexeddb) Cursors +@firebase/firestore: βœ” can page through items +@firebase/firestore: βœ” can be created from documents +@firebase/firestore: βœ” can be created from values +@firebase/firestore: βœ” can be created using document id +@firebase/firestore: βœ” can be used with reference values +@firebase/firestore: βœ” can be used in descending queries +@firebase/firestore: βœ” can accept Timestamps as bounds +@firebase/firestore: βœ” can accept Timestamps in where clause +@firebase/firestore: βœ” truncate Timestamps +@firebase/firestore: (Persistence=memory_lru_gc) Database +@firebase/firestore: βœ” can set a document +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document +@firebase/firestore: βœ” can update existing document +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document +@firebase/firestore: βœ” can merge data with an existing document using set +@firebase/firestore: βœ” can merge server timestamps +@firebase/firestore: βœ” can merge empty object +@firebase/firestore: βœ” update with empty object replaces all fields +@firebase/firestore: βœ” merge with empty object replaces all fields +@firebase/firestore: βœ” can delete field using merge +@firebase/firestore: βœ” can delete field using mergeFields +@firebase/firestore: βœ” can set server timestamps using mergeFields +@firebase/firestore: βœ” can replace an array by merging using set +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask +@firebase/firestore: βœ” doesn't apply field delete outside of mask +@firebase/firestore: βœ” doesn't apply field transform outside of mask +@firebase/firestore: βœ” can set an empty field mask +@firebase/firestore: βœ” can specify fields multiple times in a field mask +@firebase/firestore: βœ” cannot update nonexistent document +@firebase/firestore: βœ” can delete a field with an update +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can specify updated field multiple times +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.162Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.162Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.299Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.299Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.700Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:38.700Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for add data to document +@firebase/firestore: ERROR: '[2025-03-04T23:07:39.370Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:39.370Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for change data in document +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.038Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.038Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.295Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.295Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.296Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:40.296Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” Listen can be called multiple times +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline +@firebase/firestore: βœ– offline writes are sent after restart (skipped) +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: βœ– maintains persistence after restarting app (skipped) +@firebase/firestore: βœ– can clear persistence if the client has been terminated (skipped) +@firebase/firestore: βœ– can clear persistence if the client has not been initialized (skipped) +@firebase/firestore: βœ– cannot clear persistence if the client has been initialized (skipped) +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: ERROR: '[2025-03-04T23:07:41.955Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:07:41.955Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: βœ– can set and get data with auto detect long polling enabled (skipped) +@firebase/firestore: βœ” can keep docs separate with multi-db when online +@firebase/firestore: βœ” can keep docs separate with multi-db when offline +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. +@firebase/firestore: βœ” Lru GC is enabled by default. +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings +@firebase/firestore: βœ” can listen to documents with vectors +@firebase/firestore: βœ” SDK orders vector field same way as backend +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 15:05:26 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server with persistence +@firebase/firestore: (Persistence=indexeddb) Database +@firebase/firestore: βœ” can set a document +@firebase/firestore: βœ” doc() will auto generate an ID +@firebase/firestore: βœ” can delete a document +@firebase/firestore: βœ” can update existing document +@firebase/firestore: βœ” can retrieve document that does not exist +@firebase/firestore: βœ” can update an unknown document +@firebase/firestore: βœ” can merge data with an existing document using set +@firebase/firestore: βœ” can merge server timestamps +@firebase/firestore: βœ” can merge empty object +@firebase/firestore: βœ” update with empty object replaces all fields +@firebase/firestore: βœ” merge with empty object replaces all fields +@firebase/firestore: βœ” can delete field using merge +@firebase/firestore: βœ” can delete field using mergeFields +@firebase/firestore: βœ” can set server timestamps using mergeFields +@firebase/firestore: βœ” can replace an array by merging using set +@firebase/firestore: βœ” can't specify a field mask for a missing field using set +@firebase/firestore: βœ” can set a subset of fields using a field mask +@firebase/firestore: βœ” doesn't apply field delete outside of mask +@firebase/firestore: βœ” doesn't apply field transform outside of mask +@firebase/firestore: βœ” can set an empty field mask +@firebase/firestore: βœ” can specify fields multiple times in a field mask +@firebase/firestore: βœ” cannot update nonexistent document +@firebase/firestore: βœ” can delete a field with an update +@firebase/firestore: βœ” can update nested fields +@firebase/firestore: βœ” can specify updated field multiple times +@firebase/firestore: βœ” CollectionRef.add() resolves with resulting DocumentRef. +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.070Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.070Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” onSnapshotsInSync fires after listeners are in sync +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.238Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.238Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for nonexistent document +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.649Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:22.649Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for add data to document +@firebase/firestore: ERROR: '[2025-03-04T23:08:23.341Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:23.341Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for change data in document +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.043Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.043Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” DocumentSnapshot events for delete data in document +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.313Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.313Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.313Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:24.313Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” Listen can be called multiple times +@firebase/firestore: βœ” Metadata only changes are not fired when no options provided +@firebase/firestore: βœ” exposes "firestore" on document references. +@firebase/firestore: βœ” exposes "firestore" on query references. +@firebase/firestore: βœ” can compare DocumentReference instances with isEqual(). +@firebase/firestore: βœ” can compare Query instances with isEqual(). +@firebase/firestore: βœ” can compare multiple inequality Query instances with isEqual(). +@firebase/firestore: βœ” can traverse collections and documents. +@firebase/firestore: βœ” can traverse collection and document parents. +@firebase/firestore: βœ” can queue writes while offline +@firebase/firestore: WARN: '[2025-03-04T23:08:25.047Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:08:25.047Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” offline writes are sent after restart +@firebase/firestore: βœ” rejects subsequent method calls after terminate() is called +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: WARN: '[2025-03-04T23:08:25.739Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:08:25.739Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” maintains persistence after restarting app +@firebase/firestore: WARN: '[2025-03-04T23:08:26.010Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:08:26.010Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can clear persistence if the client has been terminated +@firebase/firestore: WARN: '[2025-03-04T23:08:26.297Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:08:26.297Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can clear persistence if the client has not been initialized +@firebase/firestore: βœ” cannot clear persistence if the client has been initialized +@firebase/firestore: βœ” can get documents while offline +@firebase/firestore: βœ” can enable and disable networking +@firebase/firestore: βœ” can start a new instance after shut down +@firebase/firestore: βœ” new operation after termination should throw +@firebase/firestore: βœ” calling terminate multiple times should proceed +@firebase/firestore: ERROR: '[2025-03-04T23:08:27.616Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:08:27.616Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can unlisten queries after termination +@firebase/firestore: βœ” can query after firestore restart +@firebase/firestore: βœ” query listener throws error on termination +@firebase/firestore: βœ” can wait for pending writes +@firebase/firestore: βœ” waiting for pending writes resolves immediately when offline and no pending writes +@firebase/firestore: βœ– can set and get data with auto detect long polling enabled (skipped) +@firebase/firestore: βœ” can keep docs separate with multi-db when online +@firebase/firestore: βœ” can keep docs separate with multi-db when offline +@firebase/firestore: βœ” Cannot get document from cache with eager GC enabled. +@firebase/firestore: βœ” Can get document from cache with Lru GC enabled. +@firebase/firestore: βœ” Lru GC is enabled by default. +@firebase/firestore: vector embeddings +@firebase/firestore: βœ” can write and read vector embeddings +@firebase/firestore: βœ” can listen to documents with vectors +@firebase/firestore: βœ” SDK orders vector field same way as backend +@firebase/firestore: From Cache +@firebase/firestore: βœ” SDK orders vector field the same way online and offline +@firebase/firestore: documents: +@firebase/firestore: βœ” set/update should reject: undefined +@firebase/firestore: βœ” set/update should reject: null +@firebase/firestore: βœ” set/update should reject: 0 +@firebase/firestore: βœ” set/update should reject: foo +@firebase/firestore: βœ” set/update should reject: a +@firebase/firestore: βœ” set/update should reject: Tue Mar 04 2025 15:05:26 GMT-0800 (Pacific Standard Time) +@firebase/firestore: (Persistence=memory_lru_gc) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: (Persistence=indexeddb) Queries are validated client-side +@firebase/firestore: βœ” same inequality fields works +@firebase/firestore: βœ” inequality and equality on different fields works +@firebase/firestore: βœ” inequality on multiple fields works +@firebase/firestore: βœ” inequality with key fields works +@firebase/firestore: βœ” inequality and array-contains on different fields works +@firebase/firestore: βœ” inequality and array-contains-any on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains on different fields works +@firebase/firestore: βœ” multiple inequality and array-contains-any on different fields works +@firebase/firestore: βœ” inequality and IN on different fields works +@firebase/firestore: βœ” multiple inequality and IN on different fields works +@firebase/firestore: βœ” inequality and NOT IN on different fields works +@firebase/firestore: βœ” multiple inequality and NOT IN on different fields works +@firebase/firestore: βœ” inequality same as orderBy works. +@firebase/firestore: βœ” != same as orderBy works. +@firebase/firestore: βœ” equality different than orderBy works +@firebase/firestore: βœ” inequality different than orderBy works. +@firebase/firestore: βœ” multiple inequality different from orderBy works. +@firebase/firestore: βœ” array-contains different than orderBy works +@firebase/firestore: βœ” IN different than orderBy works +@firebase/firestore: βœ” array-contains-any different than orderBy works +@firebase/firestore: Listens are rejected remotely: +@firebase/firestore: βœ” will reject listens +@firebase/firestore: βœ” will reject same listens twice in a row +@firebase/firestore: βœ” will reject gets +@firebase/firestore: βœ” will reject gets twice in a row +@firebase/firestore: (Persistence=memory_lru_gc) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: (Persistence=indexeddb) withConverter() support +@firebase/firestore: βœ” for DocumentReference.withConverter() +@firebase/firestore: βœ” for DocumentReference.withConverter(null) +@firebase/firestore: βœ” for CollectionReference.withConverter() +@firebase/firestore: βœ” for CollectionReference.withConverter(null) +@firebase/firestore: βœ” for Query.withConverter() +@firebase/firestore: βœ” for Query.withConverter(null) +@firebase/firestore: βœ” requires the correct converter for Partial usage +@firebase/firestore: βœ” WriteBatch.set() supports partials with merge +@firebase/firestore: βœ” WriteBatch.set() supports partials with mergeFields +@firebase/firestore: βœ” Transaction.set() supports partials with merge +@firebase/firestore: βœ” Transaction.set() supports partials with mergeFields +@firebase/firestore: βœ” DocumentReference.set() supports partials with merge +@firebase/firestore: βœ” DocumentReference.set() supports partials with mergeFields +@firebase/firestore: βœ” calls DocumentSnapshot.data() with specified SnapshotOptions +@firebase/firestore: βœ” drops the converter when calling CollectionReference.parent() +@firebase/firestore: βœ” checks converter when comparing with isEqual() +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with DocumentReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with CollectionReference +@firebase/firestore: βœ” Correct snapshot specified to fromFirestore() when registered with Query +@firebase/firestore: βœ” DocumentReference.withConverter() default DbModelType +@firebase/firestore: βœ” CollectionReference.withConverter() default DbModelType +@firebase/firestore: βœ” Query.withConverter() default DbModelType +@firebase/firestore: sort documents by DocumentId +@firebase/firestore: βœ” snapshot listener sorts query by DocumentId same way as get query +@firebase/firestore: βœ” snapshot listener sorts filtered query by DocumentId same way as get query +@firebase/firestore: offline +@firebase/firestore: βœ” SDK orders query the same way online and offline +@firebase/firestore: Sort unicode strings +@firebase/firestore: βœ” snapshot listener sorts unicode strings the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in array the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in map key the same as server +@firebase/firestore: βœ” snapshot listener sorts unicode strings in document key the same as server +@firebase/firestore: βœ– snapshot listener sorts unicode strings in document key the same as server with persistence (skipped) +@firebase/firestore: (Persistence=memory_lru_gc) Nested Fields +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: (Persistence=indexeddb) Nested Fields +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be read directly with .get() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.where(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: βœ” can be used with query.orderBy(). +@firebase/firestore: (Persistence=memory_lru_gc) Fields with special characters +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .data() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used in query filters. +@firebase/firestore: βœ” can be used in a query orderBy. +@firebase/firestore: (Persistence=indexeddb) Fields with special characters +@firebase/firestore: βœ” can be written with set() +@firebase/firestore: βœ” can be read directly with .data() +@firebase/firestore: βœ” can be updated with update() +@firebase/firestore: βœ” can be used in query filters. +@firebase/firestore: βœ” can be used in a query orderBy. +@firebase/firestore: (Persistence=memory_lru_gc) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps +@firebase/firestore: (Persistence=indexeddb) Timestamp Fields in snapshots +@firebase/firestore: βœ” are returned as Timestamps +@firebase/firestore: (Persistence=memory_lru_gc) `undefined` properties +@firebase/firestore: βœ” are ignored in set() +@firebase/firestore: βœ” are ignored in set({ merge: true }) +@firebase/firestore: βœ” are ignored in update() +@firebase/firestore: βœ” are ignored in Query.where() +@firebase/firestore: βœ” are ignored in Query.startAt() +@firebase/firestore: (Persistence=indexeddb) `undefined` properties +@firebase/firestore: βœ” are ignored in set() +@firebase/firestore: βœ” are ignored in set({ merge: true }) +@firebase/firestore: βœ” are ignored in update() +@firebase/firestore: βœ” are ignored in Query.where() +@firebase/firestore: βœ” are ignored in Query.startAt() +@firebase/firestore: (Persistence=memory_lru_gc) GetOptions +@firebase/firestore: βœ” get document while online with default get options +@firebase/firestore: βœ” get collection while online with default get options +@firebase/firestore: βœ” get document while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:14.446Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:14.446Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:14.814Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:14.814Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:15.218Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:15.218Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:15.604Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:15.604Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:16.026Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:16.026Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with source=cache +@firebase/firestore: βœ” get document while online with source=server +@firebase/firestore: βœ” get collection while online with source=server +@firebase/firestore: βœ” get document while offline with source=server +@firebase/firestore: βœ” get collection while offline with source=server +@firebase/firestore: ERROR: '[2025-03-04T23:09:18.076Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:18.076Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with different get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:18.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:18.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with different get options +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: βœ– get deleted doc while offline with default get options (skipped) +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache +@firebase/firestore: βœ” get nonexistent doc while online with source=server +@firebase/firestore: βœ” get nonexistent collection while online with source=server +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server +@firebase/firestore: (Persistence=indexeddb) GetOptions +@firebase/firestore: βœ” get document while online with default get options +@firebase/firestore: βœ” get collection while online with default get options +@firebase/firestore: βœ” get document while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.103Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.103Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with default get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.520Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.520Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.931Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:21.931Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while online with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:22.346Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:22.346Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with source=cache +@firebase/firestore: ERROR: '[2025-03-04T23:09:22.773Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:22.773Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with source=cache +@firebase/firestore: βœ” get document while online with source=server +@firebase/firestore: βœ” get collection while online with source=server +@firebase/firestore: βœ” get document while offline with source=server +@firebase/firestore: βœ” get collection while offline with source=server +@firebase/firestore: ERROR: '[2025-03-04T23:09:24.913Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:24.913Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get document while offline with different get options +@firebase/firestore: ERROR: '[2025-03-04T23:09:25.334Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:25.334Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” get collection while offline with different get options +@firebase/firestore: βœ” get nonexistent doc while online with default get options +@firebase/firestore: βœ” get nonexistent collection while online with default get options +@firebase/firestore: βœ” get nonexistent doc while offline with default get options +@firebase/firestore: βœ– get deleted doc while offline with default get options (skipped) +@firebase/firestore: βœ” get nonexistent collection while offline with default get options +@firebase/firestore: βœ” get nonexistent doc while online with source=cache +@firebase/firestore: βœ” get nonexistent collection while online with source=cache +@firebase/firestore: βœ” get nonexistent doc while offline with source=cache +@firebase/firestore: βœ” get deleted doc while offline with source=cache +@firebase/firestore: βœ” get nonexistent collection while offline with source=cache +@firebase/firestore: βœ” get nonexistent doc while online with source=server +@firebase/firestore: βœ” get nonexistent collection while online with source=server +@firebase/firestore: βœ” get nonexistent doc while offline with source=server +@firebase/firestore: βœ” get nonexistent collection while offline with source=server +@firebase/firestore: WARN: '[2025-03-04T23:09:26.245Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T23:09:26.245Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: (Persistence=memory_lru_gc) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: WARN: '[2025-03-04T23:09:26.245Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T23:09:26.245Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” supports schema +@firebase/firestore: WARN: '[2025-03-04T23:09:26.250Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T23:09:26.250Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: WARN: '[2025-03-04T23:09:26.260Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: WARN: '[2025-03-04T23:09:26.260Z] @firebase/firestore:', 'Firestore (11.3.0): Cannot enable indexes when persistence is disabled' +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=indexeddb) Index Configuration: +@firebase/firestore: βœ” supports JSON +@firebase/firestore: βœ” supports schema +@firebase/firestore: βœ” bad JSON does not crash client +@firebase/firestore: βœ” bad index does not crash client +@firebase/firestore: (Persistence=memory_lru_gc) Numeric Transforms: +@firebase/firestore: βœ” create document with increment +@firebase/firestore: βœ” merge on non-existing document with increment +@firebase/firestore: βœ– increment existing integer with integer (skipped) +@firebase/firestore: βœ” increment existing double with double +@firebase/firestore: βœ” increment existing double with integer +@firebase/firestore: βœ” increment existing integer with double +@firebase/firestore: βœ” increment existing string with integer +@firebase/firestore: βœ” increment existing string with double +@firebase/firestore: βœ” increments with set() and merge:true +@firebase/firestore: βœ– multiple double increments (skipped) +@firebase/firestore: βœ” increment twice in a batch +@firebase/firestore: βœ” increment, delete and increment in a batch +@firebase/firestore: βœ” increment on top of ServerTimestamp +@firebase/firestore: (Persistence=indexeddb) Numeric Transforms: +@firebase/firestore: βœ” create document with increment +@firebase/firestore: βœ” merge on non-existing document with increment +@firebase/firestore: βœ– increment existing integer with integer (skipped) +@firebase/firestore: βœ” increment existing double with double +@firebase/firestore: βœ” increment existing double with integer +@firebase/firestore: βœ” increment existing integer with double +@firebase/firestore: βœ” increment existing string with integer +@firebase/firestore: βœ” increment existing string with double +@firebase/firestore: βœ” increments with set() and merge:true +@firebase/firestore: βœ– multiple double increments (skipped) +@firebase/firestore: βœ” increment twice in a batch +@firebase/firestore: βœ” increment, delete and increment in a batch +@firebase/firestore: βœ” increment on top of ServerTimestamp +@firebase/firestore: (Persistence=memory_lru_gc) PersistentCacheIndexManager +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: (Persistence=indexeddb) PersistentCacheIndexManager +@firebase/firestore: βœ” getPersistentCacheIndexManager() should return distinct instances for distinct Firestore objects +@firebase/firestore: getPersistentCacheIndexManager() +@firebase/firestore: βœ” should return non-null if, and only if, IndexedDB persistence is enabled +@firebase/firestore: βœ” should always return the same object +@firebase/firestore: βœ” should fail if invoked after terminate() +@firebase/firestore: enable/disable persistent index auto creation +@firebase/firestore: βœ” enable on new instance should succeed +@firebase/firestore: βœ” disable on new instance should succeed +@firebase/firestore: βœ” enable when already enabled should succeed +@firebase/firestore: βœ” disable when already disabled should succeed +@firebase/firestore: βœ” enabling after terminate() should throw +@firebase/firestore: βœ” disabling after terminate() should throw +@firebase/firestore: βœ” query returns correct results when index is auto-created +@firebase/firestore: delete all persistent cache indexes +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() on new instance should succeed +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is enabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() should be successful when auto-indexing is disabled +@firebase/firestore: βœ” deleteAllPersistentCacheIndexes() after terminate() should throw +@firebase/firestore: βœ” query returns correct results when auto-created index has been deleted +@firebase/firestore: Firestore Provider +@firebase/firestore: βœ” can provide setting +@firebase/firestore: βœ” returns same default instance from named app +@firebase/firestore: βœ” returns different instance from named app +@firebase/firestore: βœ” returns same default instance from default app +@firebase/firestore: βœ” returns different instance from different named app +@firebase/firestore: βœ” can call initializeFirestore() twice if settings are same +@firebase/firestore: WARN: '[2025-03-04T23:09:39.198Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:09:39.198Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” can still use enableIndexedDbPersistence() +@firebase/firestore: WARN: '[2025-03-04T23:09:39.207Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: WARN: '[2025-03-04T23:09:39.207Z] @firebase/firestore:', 'Firestore (11.3.0): enableIndexedDbPersistence() will be deprecated in the future, you can use `FirestoreSettings.cache` instead.' +@firebase/firestore: βœ” cannot mix enableIndexedDbPersistence() and settings.cache +@firebase/firestore: βœ” cannot use once terminated +@firebase/firestore: βœ” can call terminate() multiple times +@firebase/firestore: WARN: '[2025-03-04T23:09:39.289Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578f98 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:39.289Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578f98 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:39.374Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578f9a transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:39.374Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578f9a transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: (Persistence=memory_lru_gc) Queries +@firebase/firestore: βœ” can issue limit queries +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order +@firebase/firestore: WARN: '[2025-03-04T23:09:40.739Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fa1 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:40.739Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fa1 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.125Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.125Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen to limitToLast queries +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.912Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.912Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.912Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:09:41.912Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries +@firebase/firestore: WARN: '[2025-03-04T23:09:42.079Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fa8 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:42.079Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fa8 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can issue limitToLast queries with cursors +@firebase/firestore: βœ” key order is descending for descending inequality +@firebase/firestore: βœ” can use unary filters +@firebase/firestore: WARN: '[2025-03-04T23:09:44.096Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578faf transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:44.096Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578faf transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can filter on infinity +@firebase/firestore: βœ” will not get metadata only updates +@firebase/firestore: βœ” maintains correct DocumentChange indexes +@firebase/firestore: βœ– can listen for the same query with different options (skipped) +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds +@firebase/firestore: WARN: '[2025-03-04T23:09:46.671Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fbb transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:46.671Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fbb transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can listen for QueryMetadata changes +@firebase/firestore: βœ” can listen for metadata changes +@firebase/firestore: βœ” can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID +@firebase/firestore: βœ” can query by document ID +@firebase/firestore: βœ” can query by document ID using refs +@firebase/firestore: βœ” can query while reconnecting to network +@firebase/firestore: βœ” trigger with isFromCache=true when offline +@firebase/firestore: βœ” can use != filters +@firebase/firestore: βœ” can use != filters by document ID +@firebase/firestore: WARN: '[2025-03-04T23:09:51.800Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fd2 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:09:51.800Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fd2 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can use array-contains filters +@firebase/firestore: βœ” can use IN filters +@firebase/firestore: βœ” can use IN filters by document ID +@firebase/firestore: βœ” can use NOT_IN filters +@firebase/firestore: βœ” can use NOT_IN filters by document ID +@firebase/firestore: βœ” can use array-contains-any filters +@firebase/firestore: βœ” can query collection groups +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId +@firebase/firestore: βœ” can query custom types +@firebase/firestore: βœ” can use filter with nested field +@firebase/firestore: WARN: '[2025-03-04T23:10:00.320Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fea transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:10:00.320Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578fea transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:10:07.467Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578feb transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:10:07.467Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578feb transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” resuming a query should use bloom filter to avoid full requery +@firebase/firestore: βœ” bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: WARN: '[2025-03-04T23:10:31.676Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578ff2 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:10:31.676Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64578ff2 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: βœ” can use or queries with in +@firebase/firestore: βœ” can use or queries with array membership +@firebase/firestore: βœ” supports using in with array contains any +@firebase/firestore: βœ” supports using in with array contains +@firebase/firestore: βœ” supports order by equality +@firebase/firestore: βœ” supports multiple in ops +@firebase/firestore: ERROR: '[2025-03-04T23:10:41.080Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:41.080Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: ERROR: '[2025-03-04T23:10:41.500Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:41.500Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty +@firebase/firestore: (Persistence=indexeddb) Queries +@firebase/firestore: βœ” can issue limit queries +@firebase/firestore: βœ” cannot issue limitToLast queries without explicit order-by +@firebase/firestore: βœ” can issue limit queries using descending sort order +@firebase/firestore: βœ” can issue limitToLast queries using descending sort order +@firebase/firestore: ERROR: '[2025-03-04T23:10:43.609Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:43.609Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen to limitToLast queries +@firebase/firestore: ERROR: '[2025-03-04T23:10:44.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:44.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:44.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:10:44.502Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can listen/unlisten/relisten to mirror queries +@firebase/firestore: βœ” can issue limitToLast queries with cursors +@firebase/firestore: βœ” key order is descending for descending inequality +@firebase/firestore: βœ” can use unary filters +@firebase/firestore: βœ” can filter on infinity +@firebase/firestore: βœ” will not get metadata only updates +@firebase/firestore: βœ” maintains correct DocumentChange indexes +@firebase/firestore: βœ– can listen for the same query with different options (skipped) +@firebase/firestore: βœ” can issue queries with Dates differing in milliseconds +@firebase/firestore: βœ” can listen for QueryMetadata changes +@firebase/firestore: βœ” can listen for metadata changes +@firebase/firestore: βœ” can catch error message for missing index with error handler +@firebase/firestore: βœ” can explicitly sort by document ID +@firebase/firestore: βœ” can query by document ID +@firebase/firestore: βœ” can query by document ID using refs +@firebase/firestore: βœ” can query while reconnecting to network +@firebase/firestore: βœ” trigger with isFromCache=true when offline +@firebase/firestore: βœ” can use != filters +@firebase/firestore: βœ” can use != filters by document ID +@firebase/firestore: βœ” can use array-contains filters +@firebase/firestore: βœ” can use IN filters +@firebase/firestore: βœ” can use IN filters by document ID +@firebase/firestore: βœ” can use NOT_IN filters +@firebase/firestore: βœ” can use NOT_IN filters by document ID +@firebase/firestore: βœ” can use array-contains-any filters +@firebase/firestore: WARN: '[2025-03-04T23:11:00.279Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64579048 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:11:00.279Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64579048 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: βœ” can query collection groups +@firebase/firestore: βœ” can query collection groups with startAt / endAt by arbitrary documentId +@firebase/firestore: βœ” can query collection groups with where filters on arbitrary documentId +@firebase/firestore: βœ” can query custom types +@firebase/firestore: βœ” can use filter with nested field +@firebase/firestore: βœ” resuming a query should use bloom filter to avoid full requery +@firebase/firestore: βœ” bloom filter should avert a full re-query when documents were added, deleted, removed, updated, and unchanged since the resume token +@firebase/firestore: βœ” bloom filter should correctly encode complex Unicode characters +@firebase/firestore: βœ” can query large documents with multi-byte character strings +@firebase/firestore: OR Queries +@firebase/firestore: βœ” can use query overloads +@firebase/firestore: βœ” can use or queries +@firebase/firestore: βœ” can use or queries with in +@firebase/firestore: βœ” can use or queries with array membership +@firebase/firestore: βœ” supports using in with array contains any +@firebase/firestore: βœ” supports using in with array contains +@firebase/firestore: βœ” supports order by equality +@firebase/firestore: βœ” supports multiple in ops +@firebase/firestore: ERROR: '[2025-03-04T23:11:45.698Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:11:45.698Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: Caching empty results +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it is empty +@firebase/firestore: ERROR: '[2025-03-04T23:11:46.169Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: ERROR: '[2025-03-04T23:11:46.169Z] @firebase/firestore:', 'Firestore (11.3.0): Uncaught Error in snapshot listener:', 'FirebaseError: [code=aborted]: Firestore shutting down' +@firebase/firestore: βœ” can raise initial snapshot from cache, even if it has become empty +@firebase/firestore: WARN: '[2025-03-04T23:11:47.127Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64579072 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: WARN: '[2025-03-04T23:11:47.127Z] @firebase/firestore:', 'Firestore (11.3.0): WebChannelConnection', 'RPC 'Write' stream 0x64579072 transport errored:', jd{type: 'c', target: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, g: Y{s: false, C: undefined, i: Ka{src: ..., g: ..., h: ...}, M: Y{s: ..., C: ..., i: ..., M: ..., F: ..., g: ..., l: ..., h: ..., v: ..., u: ..., j: ...}, F: null, g: Yc{Aa: ..., i: ..., j: ..., o: ..., S: ..., m: ..., H: ..., D: ..., ya: ..., g: ..., W: ..., I: ..., qa: ..., ia: ..., U: ..., Ya: ..., Va: ..., l: ..., s: ..., u: ..., C: ..., F: ..., X: ..., T: ..., za: ..., B: ..., v: ..., Y: ..., Ta: ..., cb: ..., Wa: ..., wa: ..., pa: ..., Xa: ..., Ca: ..., L: ..., J: ..., K: ..., h: ..., Da: ..., P: ..., O: ..., Ua: ..., ba: ..., ja: ..., ca: ..., R: ..., M: ..., A: ..., ka: ..., G: ..., la: ...}, l: 'https://firestore.googleapis.com/google.firestore.v1.Firestore/Write/channel', h: Object{database: ...}, v: true, u: true, j: Z{g: ...}}, defaultPrevented: false, status: 1} +@firebase/firestore: (Persistence=memory_lru_gc) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 +@firebase/firestore: βœ” iteration 1 +@firebase/firestore: βœ” iteration 2 +@firebase/firestore: βœ” iteration 3 +@firebase/firestore: βœ” iteration 4 +@firebase/firestore: βœ” iteration 5 +@firebase/firestore: βœ” iteration 6 +@firebase/firestore: βœ” iteration 7 +@firebase/firestore: βœ” iteration 8 +@firebase/firestore: βœ” iteration 9 +@firebase/firestore: βœ” iteration 10 +@firebase/firestore: βœ” iteration 11 +@firebase/firestore: βœ” iteration 12 +@firebase/firestore: βœ” iteration 13 +@firebase/firestore: βœ” iteration 14 +@firebase/firestore: βœ” iteration 15 +@firebase/firestore: βœ” iteration 16 +@firebase/firestore: βœ” iteration 17 +@firebase/firestore: βœ” iteration 18 +@firebase/firestore: βœ” iteration 19 +@firebase/firestore: (Persistence=indexeddb) Hanging query issue - #7652 +@firebase/firestore: βœ” iteration 0 +@firebase/firestore: βœ” iteration 1 +@firebase/firestore: βœ” iteration 2 +@firebase/firestore: βœ” iteration 3 +@firebase/firestore: βœ” iteration 4 +@firebase/firestore: βœ” iteration 5 +@firebase/firestore: βœ” iteration 6 +@firebase/firestore: βœ” iteration 7 +@firebase/firestore: βœ” iteration 8 +@firebase/firestore: βœ” iteration 9 +@firebase/firestore: βœ” iteration 10 +@firebase/firestore: βœ” iteration 11 +@firebase/firestore: βœ” iteration 12 +@firebase/firestore: βœ” iteration 13 +@firebase/firestore: βœ” iteration 14 +@firebase/firestore: βœ” iteration 15 +@firebase/firestore: βœ” iteration 16 +@firebase/firestore: βœ” iteration 17 +@firebase/firestore: βœ” iteration 18 +@firebase/firestore: βœ” iteration 19 +@firebase/firestore: (Persistence=memory_lru_gc) Server Timestamps +@firebase/firestore: βœ” work via set() +@firebase/firestore: βœ” work via update() +@firebase/firestore: βœ” work via transaction set() +@firebase/firestore: βœ” work via transaction update() +@firebase/firestore: βœ” can return estimated value +@firebase/firestore: βœ” can return previous value of different type +@firebase/firestore: βœ” can return previous value through consecutive updates +@firebase/firestore: βœ” uses previous value from local mutation +@firebase/firestore: βœ” fail via update() on nonexistent document. +@firebase/firestore: WARN: '[2025-03-04T23:12:05.828Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x645790b6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/test-db/documents/test-collection/y7ZF87O9PFboJCkzSzjJ","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: WARN: '[2025-03-04T23:12:05.828Z] @firebase/firestore:', 'Firestore (11.3.0): RestConnection', 'RPC 'Commit' 0x645790b6 failed with error: ', '{"code":"not-found","name":"FirebaseError"}', 'url: ', 'https://firestore.googleapis.com/v1/projects/jscore-sandbox-141b5/databases/test-db/documents:commit', 'request:', '{"writes":[{"update":{"name":"projects/jscore-sandbox-141b5/databases/test-db/documents/test-collection/y7ZF87O9PFboJCkzSzjJ","fields":{"deep":{"mapValue":{"fields":{}}}}},"updateMask":{"fieldPaths":["deep"]},"updateTransforms":[{"fieldPath":"when","setToServerValue":"REQUEST_TIME"},{"fieldPath":"deep.when","setToServerValue":"REQUEST_TIME"}],"currentDocument":{"exists":true}}]}' +@firebase/firestore: βœ” fail via transaction update() on nonexistent document. +@firebase/firestore: (Persistence=indexeddb) Server Timestamps +@firebase/firestore: βœ” work via set() +@firebase/firestore: βœ” work via update() +@firebase/firestore: βœ” work via transaction set() +@firebase/firestore: βœ” work via transaction update() +@firebase/firestore: βœ” can return estimated value +@firebase/firestore: βœ” can return previous value of different type +@firebase/firestore: βœ” can return previous value through consecutive updates +@firebase/firestore: βœ” uses previous value from local mutation