diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx b/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx index d0c28d1bd4f0..da7b1bb3bcbf 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx @@ -1,8 +1,11 @@ # @generated # Input hashes for repository rule npm_translate_lock(name = "npm2", pnpm_lock = "@//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. -.npmrc=-203833057 -package.json=55884910 -pnpm-lock.yaml=-459300859 -pnpm-workspace.yaml=1711114604 -yarn.lock=-84247839 +.npmrc=-1406867100 +package.json=-1524251762 +packages/compiler-cli/package.json=571832290 +packages/compiler/package.json=-426903429 +pnpm-lock.yaml=953621251 +pnpm-workspace.yaml=353334404 +tools/bazel/rules_angular_store/package.json=-239561259 +yarn.lock=1749115294 diff --git a/.bazelignore b/.bazelignore index 15acb77b79de..7ac843e60051 100644 --- a/.bazelignore +++ b/.bazelignore @@ -36,3 +36,9 @@ integration/trusted-types/node_modules integration/typings_test_rxjs7/node_modules integration/typings_test_ts58/node_modules modules/ssr-benchmarks/node_modules + + +# For rules_js +packages/compiler/node_modules +packages/compiler-cli/node_modules +tools/bazel/rules_angular_store/node_modules diff --git a/.github/actions/saucelabs-legacy/action.yml b/.github/actions/saucelabs-legacy/action.yml index 634c8dab2b36..6cfb0ae82a57 100644 --- a/.github/actions/saucelabs-legacy/action.yml +++ b/.github/actions/saucelabs-legacy/action.yml @@ -5,9 +5,9 @@ runs: using: 'composite' steps: - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Saucelabs Variables - uses: angular/dev-infra/github-actions/saucelabs@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/saucelabs@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Starting Saucelabs tunnel service shell: bash run: ./tools/saucelabs/sauce-service.sh run & diff --git a/.github/workflows/adev-preview-build.yml b/.github/workflows/adev-preview-build.yml index 4fe4f275557c..feed053bacc1 100644 --- a/.github/workflows/adev-preview-build.yml +++ b/.github/workflows/adev-preview-build.yml @@ -21,16 +21,16 @@ jobs: (github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'adev: preview')) steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - name: Build adev to ensure it continues to work run: yarn bazel build //adev:build --full_build_adev --config=release - - uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@43b8195028f62c7a10f793a0f7c48893531a32dc with: workflow-artifact-name: 'adev-preview' pull-number: '${{github.event.pull_request.number}}' diff --git a/.github/workflows/adev-preview-deploy.yml b/.github/workflows/adev-preview-deploy.yml index ef90f969bdac..b6ee677786c2 100644 --- a/.github/workflows/adev-preview-deploy.yml +++ b/.github/workflows/adev-preview-deploy.yml @@ -40,7 +40,7 @@ jobs: npx -y firebase-tools@latest target:clear --config adev/firebase.json --project ${{env.PREVIEW_PROJECT}} hosting angular-docs npx -y firebase-tools@latest target:apply --config adev/firebase.json --project ${{env.PREVIEW_PROJECT}} hosting angular-docs ${{env.PREVIEW_SITE}} - - uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@43b8195028f62c7a10f793a0f7c48893531a32dc with: github-token: '${{secrets.GITHUB_TOKEN}}' workflow-artifact-name: 'adev-preview' diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 0753d9c05b1e..002152cbe6b1 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/branch-manager@43b8195028f62c7a10f793a0f7c48893531a32dc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/benchmark-compare.yml b/.github/workflows/benchmark-compare.yml index c8c066776d95..3c23daaa5fa4 100644 --- a/.github/workflows/benchmark-compare.yml +++ b/.github/workflows/benchmark-compare.yml @@ -38,7 +38,7 @@ jobs: - uses: ./.github/actions/yarn-install - - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: bazelrc: ./.bazelrc.user diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 29914278b725..7a50b9faa6fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Install node modules @@ -41,13 +41,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,13 +61,13 @@ jobs: runs-on: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -79,13 +79,13 @@ jobs: runs-on: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -98,11 +98,11 @@ jobs: labels: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -117,13 +117,13 @@ jobs: labels: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - run: echo "https://${{secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN}}:@github.com" > ${HOME}/.git_credentials @@ -135,7 +135,7 @@ jobs: labels: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true node-module-directories: | @@ -143,9 +143,9 @@ jobs: ./packages/zone.js/node_modules ./packages/zone.js/test/typings/node_modules - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -184,7 +184,7 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-framework-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Install node modules @@ -197,11 +197,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - name: Build adev to ensure it continues to work diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 4e7ca92ff208..ca9b6cd07e02 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@43b8195028f62c7a10f793a0f7c48893531a32dc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/post-approval-changes@43b8195028f62c7a10f793a0f7c48893531a32dc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/google-internal-tests.yml b/.github/workflows/google-internal-tests.yml index e0e3acdea6c3..5d156994858a 100644 --- a/.github/workflows/google-internal-tests.yml +++ b/.github/workflows/google-internal-tests.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: angular/dev-infra/github-actions/google-internal-tests@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/google-internal-tests@43b8195028f62c7a10f793a0f7c48893531a32dc with: run-tests-guide-url: http://go/angular-g3sync-start github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 1967cf6ce66d..91ec843009b5 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -13,17 +13,17 @@ jobs: JOBS: 2 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Install node modules run: yarn install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Saucelabs Variables - uses: angular/dev-infra/github-actions/saucelabs@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/saucelabs@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Set up Sauce Tunnel Daemon run: yarn bazel run //tools/saucelabs-daemon/background-service -- $JOBS & env: diff --git a/.github/workflows/merge-ready-status.yml b/.github/workflows/merge-ready-status.yml index b003a5853d96..eb855e8babcc 100644 --- a/.github/workflows/merge-ready-status.yml +++ b/.github/workflows/merge-ready-status.yml @@ -9,6 +9,6 @@ jobs: status: runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/unified-status-check@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + - uses: angular/dev-infra/github-actions/unified-status-check@43b8195028f62c7a10f793a0f7c48893531a32dc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index d8b28ca87622..22a41f660fe7 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -21,7 +21,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn -s install --frozen-lockfile - id: workflows @@ -36,9 +36,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn -s install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 1f554d2b460e..fb5bd00675db 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Install node modules @@ -39,7 +39,7 @@ jobs: - name: Check code format run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/linting/licenses@43b8195028f62c7a10f793a0f7c48893531a32dc with: allow-dependencies-licenses: 'pkg:npm/google-protobuf@' @@ -47,13 +47,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - name: Run unit tests @@ -65,13 +65,13 @@ jobs: runs-on: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - name: Run CI tests for framework @@ -87,13 +87,13 @@ jobs: runs-on: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - name: Run integration CI tests for framework @@ -105,16 +105,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel Remote Caching - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile --network-timeout 100000 - - name: Run CI tests for framework + - name: Build artifacts run: yarn tsx ./scripts/build/build-packages-dist.mts - name: Archive build artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 @@ -127,11 +127,11 @@ jobs: labels: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - name: Run tests @@ -144,7 +144,7 @@ jobs: labels: ubuntu-latest-4core steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true node-module-directories: | @@ -152,9 +152,9 @@ jobs: ./packages/zone.js/node_modules ./packages/zone.js/test/typings/node_modules - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/setup@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/bazel/configure-remote@43b8195028f62c7a10f793a0f7c48893531a32dc - name: Install node modules run: yarn install --frozen-lockfile - run: | @@ -191,7 +191,7 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-framework-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@43b8195028f62c7a10f793a0f7c48893531a32dc with: cache-node-modules: true - name: Install node modules diff --git a/.github/workflows/sync-angular-robot-forked-repo.yml b/.github/workflows/sync-angular-robot-forked-repo.yml new file mode 100644 index 000000000000..f117b5945688 --- /dev/null +++ b/.github/workflows/sync-angular-robot-forked-repo.yml @@ -0,0 +1,46 @@ +# This workflow addresses a limitation with Renovate's behavior in fork mode. +# Renovate does not automatically sync non-default branches in forked repositories. + +name: Sync angular-robot Forked Repository +on: + workflow_dispatch: + inputs: {} + push: + branches: + # We do no run this on the default branch (main), as this is done by Renovate. + - '[0-9]+.[0-9]+.x' + +permissions: + contents: read + +jobs: + sync_to_upstream: + runs-on: ubuntu-latest + # Prevents multiple concurrent runs of this workflow for the same branch + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + + steps: + - name: Checkout the repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ github.ref }} # Checks out the branch that triggered the push + fetch-depth: 100 + persist-credentials: false + + - name: Push to angular-robot upstream remote + run: | + CURRENT_BRANCH="${{ github.ref_name }}" + UPSTREAM_TOKEN="${{ secrets.ANGULAR_ROBOT_ACCESS_TOKEN }}" + UPSTREAM_OWNER="angular-robot" + UPSTREAM_REPO="angular" + UPSTREAM_URL="https://x-access-token:${UPSTREAM_TOKEN}@github.com/${UPSTREAM_OWNER}/${UPSTREAM_REPO}.git" + + # The UPSTREAM_TOKEN is automatically masked by GitHub Actions for security. + echo "Adding upstream remote: $UPSTREAM_URL" + git remote add upstream "$UPSTREAM_URL" + git remote -v + + echo "Pushing $CURRENT_BRANCH from origin to $UPSTREAM_OWNER upstream..." + git push upstream "$CURRENT_BRANCH" diff --git a/.github/workflows/update-cdk-apis.yml b/.github/workflows/update-cdk-apis.yml index 6403755a03e5..2e09a914ec52 100644 --- a/.github/workflows/update-cdk-apis.yml +++ b/.github/workflows/update-cdk-apis.yml @@ -13,7 +13,7 @@ permissions: contents: read jobs: - update_cli_help: + update_cdk_apis: name: Update Angular CDK apis (if necessary) if: github.repository == 'angular/angular' runs-on: ubuntu-latest @@ -32,13 +32,13 @@ jobs: env: ANGULAR_CDK_BUILDS_READONLY_GITHUB_TOKEN: ${{ secrets.ANGULAR_CDK_BUILDS_READONLY_GITHUB_TOKEN }} - name: Create a PR (if necessary) - uses: angular/dev-infra/github-actions/create-pr-for-changes@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/create-pr-for-changes@43b8195028f62c7a10f793a0f7c48893531a32dc with: branch-prefix: update-cdk-apis pr-title: 'docs: update Angular CDK apis [${{github.ref_name}}]' pr-description: | Updated Angular CDK api files. pr-labels: | - action: review + action: merge area: docs angular-robot-token: ${{ secrets.ANGULAR_ROBOT_ACCESS_TOKEN }} diff --git a/.github/workflows/update-cli-help.yml b/.github/workflows/update-cli-help.yml index 71290c68cc58..bf44daa95cb2 100644 --- a/.github/workflows/update-cli-help.yml +++ b/.github/workflows/update-cli-help.yml @@ -32,7 +32,7 @@ jobs: env: ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN: ${{ secrets.ANGULAR_CLI_BUILDS_READONLY_GITHUB_TOKEN }} - name: Create a PR (if necessary) - uses: angular/dev-infra/github-actions/create-pr-for-changes@a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + uses: angular/dev-infra/github-actions/create-pr-for-changes@43b8195028f62c7a10f793a0f7c48893531a32dc with: branch-prefix: update-cli-help pr-title: 'docs: update Angular CLI help [${{github.ref_name}}]' diff --git a/.ng-dev/format.mts b/.ng-dev/format.mts index 62d2028c1f3f..99a938486a07 100644 --- a/.ng-dev/format.mts +++ b/.ng-dev/format.mts @@ -7,8 +7,8 @@ export const format: FormatConfig = { 'prettier': { 'matchers': [ '**/*.{yaml,yml}', - '**/*.{js,ts}', - 'devtools/**/*.{js,ts,html,scss}', + '**/*.{js,ts,mjs,mts,cjs,cts}', + 'devtools/**/*.{js,ts,mjs,mts,cjs,cts,html,scss}', // Do not format d.ts files as they are generated '!**/*.d.ts', @@ -22,7 +22,7 @@ export const format: FormatConfig = { '!packages/common/locales/closure-locale.ts', '!packages/common/src/i18n/currencies.ts', // Test cases contain non valid code. - '!packages/compiler-cli/test/compliance/test_cases/**/*.{js,ts}', + '!packages/compiler-cli/test/compliance/test_cases/**/*.{js,ts,mjs,mts,cjs,cts}', // Ignore generated javascript file(s) '!.github/actions/deploy-docs-site/main.js', diff --git a/.npmrc b/.npmrc index 57879aee6f1d..7c7738880a15 100644 --- a/.npmrc +++ b/.npmrc @@ -4,4 +4,9 @@ engine-strict = false # Disabling pnpm [hoisting](https://pnpm.io/npmrc#hoist) by setting `hoist=false` is recommended on # projects using rules_js so that pnpm outside of Bazel lays out a node_modules tree similar to what # rules_js lays out under Bazel (without a hidden node_modules/.pnpm/node_modules) -hoist=false \ No newline at end of file +hoist=false + +# Avoid pnpm auto-installing peer dependencies. We want to be explicit about our versions used +# for peer dependencies, avoiding potential mismatches. In addition, it ensures we can continue +# to rely on peer dependency placeholders substituted via Bazel. +auto-install-peers=false diff --git a/.pullapprove.yml b/.pullapprove.yml index 6253c4e685dd..a87d5a339ee4 100644 --- a/.pullapprove.yml +++ b/.pullapprove.yml @@ -336,7 +336,6 @@ groups: 'scripts/**/{*,.*}', 'third_party/**/{*,.*}', 'tools/bazel-repo-patches/**/{*,.*}', - 'tools/circular_dependency_test/**/{*,.*}', 'tools/contributing-stats/**/{*,.*}', 'tools/esm-interop/**/{*,.*}', 'tools/gulp-tasks/**/{*,.*}', diff --git a/CHANGELOG.md b/CHANGELOG.md index 89d1ccf71e18..3bec5593241f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + +# 20.0.0-rc.1 (2025-05-15) +### compiler +| Commit | Type | Description | +| -- | -- | -- | +| [e0d378d20e7](https://github.com/angular/angular/commit/e0d378d20e768d353b01bc28e10ad53c5485b426) | fix | incorrectly handling let declarations inside i18n ([#60512](https://github.com/angular/angular/pull/60512)) | +| [768239a89cb](https://github.com/angular/angular/commit/768239a89cba7e7cf1f497e15589705b1446f8a6) | perf | reduce allocations for let declarations only used in the same view ([#60512](https://github.com/angular/angular/pull/60512)) | +### compiler-cli +| Commit | Type | Description | +| -- | -- | -- | +| [9ec9c7e1b84](https://github.com/angular/angular/commit/9ec9c7e1b8473c76661ad09a3961016ccc4ddfc7) | fix | avoid fatal diagnostics for invalid module schemas ([#61220](https://github.com/angular/angular/pull/61220)) | +### core +| Commit | Type | Description | +| -- | -- | -- | +| [4fe34f4cfea](https://github.com/angular/angular/commit/4fe34f4cfea2aa0e355afa04c7183545637283c3) | fix | enable stashing only when `withEventReplay()` is invoked ([#61077](https://github.com/angular/angular/pull/61077)) | + + + # 20.0.0-rc.0 (2025-05-07) ### common diff --git a/README.md b/README.md index 2ef3bf9db9f7..24ef3fefd385 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,6 @@

Angular on npm -   - - Discord conversation

diff --git a/WORKSPACE b/WORKSPACE index 21bcde8d3790..03fdbb531f68 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -85,7 +85,7 @@ yarn_install( "//:tools/npm-patches/@angular+ng-dev+0.0.0-a6dcd24107d12114198251ee5d20cda814a1986a.patch", "//:tools/npm-patches/@bazel+jasmine+5.8.1.patch", "//tools:postinstall-patches.js", - "//tools/esm-interop:patches/npm/@angular+build-tooling+0.0.0-d30a56c19bafaac67cf44e605ed8c2c0e45b0a51.patch", + "//tools/esm-interop:patches/npm/@angular+build-tooling+0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65.patch", "//tools/esm-interop:patches/npm/@bazel+concatjs+5.8.1.patch", "//tools/esm-interop:patches/npm/@bazel+esbuild+5.7.1.patch", "//tools/esm-interop:patches/npm/@bazel+protractor+5.7.1.patch", @@ -108,6 +108,9 @@ npm_translate_lock( data = [ "//:package.json", "//:pnpm-workspace.yaml", + "//packages/compiler:package.json", + "//packages/compiler-cli:package.json", + "//tools/bazel/rules_angular_store:package.json", ], npmrc = "//:.npmrc", pnpm_lock = "//:pnpm-lock.yaml", @@ -142,6 +145,17 @@ http_archive( url = "https://github.com/aspect-build/rules_rollup/releases/download/v2.0.0/rules_rollup-v2.0.0.tar.gz", ) +http_archive( + name = "aspect_rules_jasmine", + sha256 = "0d2f9c977842685895020cac721d8cc4f1b37aae15af46128cf619741dc61529", + strip_prefix = "rules_jasmine-2.0.0", + url = "https://github.com/aspect-build/rules_jasmine/releases/download/v2.0.0/rules_jasmine-v2.0.0.tar.gz", +) + +load("@aspect_rules_jasmine//jasmine:dependencies.bzl", "rules_jasmine_dependencies") + +rules_jasmine_dependencies() + load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies") aspect_bazel_lib_dependencies() @@ -244,7 +258,7 @@ yarn_install( git_repository( name = "devinfra", - commit = "c4f7d3cdec164044284139182b709dfd4be339ed", + commit = "43b8195028f62c7a10f793a0f7c48893531a32dc", remote = "https://github.com/angular/dev-infra.git", ) @@ -258,7 +272,7 @@ setup_dependencies_2() git_repository( name = "rules_angular", - commit = "f47fe935fecac02f02fe1337274207f00146a765", + commit = "ad3a2d652f41c953fad8f55c3959fde628fa8ebf", remote = "https://github.com/devversion/rules_angular.git", ) @@ -273,6 +287,6 @@ rules_angular_step2() load("@rules_angular//setup:step_3.bzl", "rules_angular_step3") rules_angular_step3( - angular_compiler_cli = "@angular//packages/compiler-cli", - typescript = "//:node_modules/typescript", + angular_compiler_cli = "@angular//tools/bazel/rules_angular_store:node_modules/@angular/compiler-cli", + typescript = "@angular//:node_modules/typescript", ) diff --git a/adev/BUILD.bazel b/adev/BUILD.bazel index f03321e6b364..845857885c37 100644 --- a/adev/BUILD.bazel +++ b/adev/BUILD.bazel @@ -37,6 +37,7 @@ TEST_FILES = APPLICATION_FILES + [ APPLICATION_ASSETS = [ "//adev/src/assets/images", + "//adev/src/assets/others", "//adev/src/assets/previews", "//adev/src/assets:tutorials", "//adev/src/assets/icons", diff --git a/adev/shared-docs/BUILD.bazel b/adev/shared-docs/BUILD.bazel index ba820b83e79c..c6f88d3bc7a1 100644 --- a/adev/shared-docs/BUILD.bazel +++ b/adev/shared-docs/BUILD.bazel @@ -1,7 +1,28 @@ +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") load("//tools:defaults.bzl", "ng_module", "ng_package") package(default_visibility = ["//visibility:private"]) +rules_js_tsconfig( + name = "tsconfig_build", + src = "tsconfig.json", + visibility = [ + "//adev/shared-docs:__subpackages__", + ], +) + +rules_js_tsconfig( + name = "tsconfig_test", + src = "tsconfig-test.json", + visibility = [ + "//adev/shared-docs:__subpackages__", + ], + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasmine", + ], +) + ng_module( name = "docs", srcs = [ diff --git a/adev/shared-docs/components/BUILD.bazel b/adev/shared-docs/components/BUILD.bazel index f8e0b95cd265..d0a64b960599 100644 --- a/adev/shared-docs/components/BUILD.bazel +++ b/adev/shared-docs/components/BUILD.bazel @@ -1,16 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "components", srcs = [ "index.ts", ], - visibility = [ - "//adev/shared-docs:__pkg__", - ], - deps = [ + interop_deps = [ "//adev/shared-docs/components/algolia-icon", "//adev/shared-docs/components/breadcrumb", "//adev/shared-docs/components/cookie-popup", @@ -25,4 +22,8 @@ ts_library( "//adev/shared-docs/components/top-level-banner", "//adev/shared-docs/components/viewers", ], + tsconfig = "//adev/shared-docs:tsconfig_build", + visibility = [ + "//adev/shared-docs:__pkg__", + ], ) diff --git a/adev/shared-docs/components/breadcrumb/BUILD.bazel b/adev/shared-docs/components/breadcrumb/BUILD.bazel index d236106f078b..06b02b93b348 100644 --- a/adev/shared-docs/components/breadcrumb/BUILD.bazel +++ b/adev/shared-docs/components/breadcrumb/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -30,13 +31,13 @@ sass_binary( src = "breadcrumb.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":breadcrumb", "//adev/shared-docs/interfaces", "//adev/shared-docs/services", @@ -46,6 +47,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/cookie-popup/BUILD.bazel b/adev/shared-docs/components/cookie-popup/BUILD.bazel index 1ae91a5bbb9d..1c0e72485309 100644 --- a/adev/shared-docs/components/cookie-popup/BUILD.bazel +++ b/adev/shared-docs/components/cookie-popup/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -28,19 +29,20 @@ sass_binary( src = "cookie-popup.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":cookie-popup", "//adev/shared-docs/providers", "//adev/shared-docs/testing", "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/copy-source-code-button/BUILD.bazel b/adev/shared-docs/components/copy-source-code-button/BUILD.bazel index 56d0e95b4930..e5c7bb1b393d 100644 --- a/adev/shared-docs/components/copy-source-code-button/BUILD.bazel +++ b/adev/shared-docs/components/copy-source-code-button/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -22,18 +23,21 @@ ng_module( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":copy-source-code-button", "//packages/core", "//packages/core/testing", "//packages/platform-browser", - "@npm//@angular/cdk", + ], + tsconfig = "//adev/shared-docs:tsconfig_test", + deps = [ + "//:node_modules/@angular/cdk", ], ) diff --git a/adev/shared-docs/components/navigation-list/BUILD.bazel b/adev/shared-docs/components/navigation-list/BUILD.bazel index 986d0f97bc6d..0aba956c1aca 100644 --- a/adev/shared-docs/components/navigation-list/BUILD.bazel +++ b/adev/shared-docs/components/navigation-list/BUILD.bazel @@ -1,5 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -35,13 +36,13 @@ sass_binary( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":navigation-list", "//adev/shared-docs/interfaces", "//adev/shared-docs/services", @@ -51,6 +52,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/navigation-list/navigation-list.component.spec.ts b/adev/shared-docs/components/navigation-list/navigation-list.component.spec.ts index c71e5fae0b2e..8c3dc8ee58bf 100644 --- a/adev/shared-docs/components/navigation-list/navigation-list.component.spec.ts +++ b/adev/shared-docs/components/navigation-list/navigation-list.component.spec.ts @@ -43,7 +43,7 @@ describe('NavigationList', () => { {provide: NavigationState, useClass: FakeNavigationListState}, provideZonelessChangeDetection(), ], - }).compileComponents(); + }); fixture = TestBed.createComponent(NavigationList); fixture.componentRef.setInput('navigationItems', []); diff --git a/adev/shared-docs/components/search-dialog/BUILD.bazel b/adev/shared-docs/components/search-dialog/BUILD.bazel index 8869aae4975e..3abd302b3060 100644 --- a/adev/shared-docs/components/search-dialog/BUILD.bazel +++ b/adev/shared-docs/components/search-dialog/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -34,13 +35,13 @@ sass_binary( src = "search-dialog.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":search-dialog", "//adev/shared-docs/components/algolia-icon", "//adev/shared-docs/interfaces", @@ -53,6 +54,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/search-dialog/search-dialog.component.html b/adev/shared-docs/components/search-dialog/search-dialog.component.html index 397e35fdb5c3..7f8cc4e45c71 100644 --- a/adev/shared-docs/components/search-dialog/search-dialog.component.html +++ b/adev/shared-docs/components/search-dialog/search-dialog.component.html @@ -3,7 +3,7 @@ >('searchDialog'); items = viewChildren(SearchItem); + textField = viewChild(TextField); private readonly search = inject(Search); private readonly relativeLink = new RelativeLink(); @@ -67,7 +68,18 @@ export class SearchDialog implements OnDestroy { searchQuery = this.search.searchQuery; searchResults = this.search.searchResults; + // We use a FormControl instead of relying on NgModel+signal to avoid + // the issue https://github.com/angular/angular/issues/13568 + // TODO: Use signal forms when available + searchControl = new FormControl(this.searchQuery(), {nonNullable: true}); + constructor() { + this.searchControl.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => { + this.searchQuery.set(value); + }); + + // Thinkig about refactoring this to a single afterRenderEffect ? + // Answer: It won't have the same behavior effect(() => { this.items(); afterNextRender( @@ -87,6 +99,9 @@ export class SearchDialog implements OnDestroy { if (!this.dialog().nativeElement.open) { this.dialog().nativeElement.showModal?.(); } + // We want to select the pre-existing text on opening + // In order to change the search input with minimal user interaction. + this.textField()?.input().nativeElement.select(); }, }); diff --git a/adev/shared-docs/components/select/BUILD.bazel b/adev/shared-docs/components/select/BUILD.bazel index eeeebfefeca0..b0bb4eb00bf1 100644 --- a/adev/shared-docs/components/select/BUILD.bazel +++ b/adev/shared-docs/components/select/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -27,17 +28,18 @@ sass_binary( src = "select.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":select", "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/slide-toggle/BUILD.bazel b/adev/shared-docs/components/slide-toggle/BUILD.bazel index 4b77114bee3c..eb0beb89228a 100644 --- a/adev/shared-docs/components/slide-toggle/BUILD.bazel +++ b/adev/shared-docs/components/slide-toggle/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -27,17 +28,18 @@ sass_binary( src = "slide-toggle.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":slide-toggle", "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/table-of-contents/BUILD.bazel b/adev/shared-docs/components/table-of-contents/BUILD.bazel index 5a78168cc860..d196733e63e1 100644 --- a/adev/shared-docs/components/table-of-contents/BUILD.bazel +++ b/adev/shared-docs/components/table-of-contents/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -31,13 +32,13 @@ sass_binary( src = "table-of-contents.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":table-of-contents", "//adev/shared-docs/interfaces", "//adev/shared-docs/providers", @@ -47,6 +48,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/table-of-contents/table-of-contents.component.scss b/adev/shared-docs/components/table-of-contents/table-of-contents.component.scss index 87a79502dfd3..76014d29cbe4 100644 --- a/adev/shared-docs/components/table-of-contents/table-of-contents.component.scss +++ b/adev/shared-docs/components/table-of-contents/table-of-contents.component.scss @@ -2,11 +2,11 @@ display: flex; flex-direction: column; position: fixed; - right: 16px; + right: 1rem; top: 0; height: fit-content; width: 14rem; - padding-inline: 1rem; + padding-right: 2rem; max-height: 100vh; overflow-y: scroll; box-sizing: border-box; diff --git a/adev/shared-docs/components/table-of-contents/table-of-contents.component.spec.ts b/adev/shared-docs/components/table-of-contents/table-of-contents.component.spec.ts index fe98e89329e9..d1f29517e328 100644 --- a/adev/shared-docs/components/table-of-contents/table-of-contents.component.spec.ts +++ b/adev/shared-docs/components/table-of-contents/table-of-contents.component.spec.ts @@ -49,7 +49,7 @@ describe('TableOfContents', () => { useValue: fakeWindow, }, ], - }).compileComponents(); + }); const tableOfContentsLoaderSpy = TestBed.inject(TableOfContentsLoader); spyOn(tableOfContentsLoaderSpy, 'buildTableOfContent').and.returnValue(); diff --git a/adev/shared-docs/components/text-field/BUILD.bazel b/adev/shared-docs/components/text-field/BUILD.bazel index 84ad42e6607e..f6c10d393d31 100644 --- a/adev/shared-docs/components/text-field/BUILD.bazel +++ b/adev/shared-docs/components/text-field/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -29,17 +30,18 @@ sass_binary( src = "text-field.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":text-field", "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/text-field/text-field.component.html b/adev/shared-docs/components/text-field/text-field.component.html index c436af5b8677..34941c460c09 100644 --- a/adev/shared-docs/components/text-field/text-field.component.html +++ b/adev/shared-docs/components/text-field/text-field.component.html @@ -6,8 +6,8 @@ type="text" [attr.placeholder]="placeholder()" [attr.name]="name()" - [ngModel]="value()" - (ngModelChange)="setValue($event)" + [value]="value()" + (input)="setValue(inputRef.value)" class="docs-text-field" /> diff --git a/adev/shared-docs/components/text-field/text-field.component.spec.ts b/adev/shared-docs/components/text-field/text-field.component.spec.ts index 5562d9c32caa..467cfe268713 100644 --- a/adev/shared-docs/components/text-field/text-field.component.spec.ts +++ b/adev/shared-docs/components/text-field/text-field.component.spec.ts @@ -28,4 +28,13 @@ describe('TextField', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('should update DOM when setting the value via the CVA', () => { + component.setValue('test'); + fixture.detectChanges(); + + expect(fixture.nativeElement.querySelector('input').value).toBe('test'); + // If we were using ngModel instead of the value binding, we would get an empty string + // because of https://github.com/angular/angular/issues/13568 + }); }); diff --git a/adev/shared-docs/components/top-level-banner/BUILD.bazel b/adev/shared-docs/components/top-level-banner/BUILD.bazel index f1bd2433456e..3b7795da5cb0 100644 --- a/adev/shared-docs/components/top-level-banner/BUILD.bazel +++ b/adev/shared-docs/components/top-level-banner/BUILD.bazel @@ -1,5 +1,6 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -29,18 +30,19 @@ sass_binary( src = "top-level-banner.component.scss", ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":top-level-banner", "//adev/shared-docs/providers", "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/components/viewers/BUILD.bazel b/adev/shared-docs/components/viewers/BUILD.bazel index 575d0e65975d..9126d682992f 100644 --- a/adev/shared-docs/components/viewers/BUILD.bazel +++ b/adev/shared-docs/components/viewers/BUILD.bazel @@ -1,5 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -44,13 +45,13 @@ sass_binary( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["**/*.spec.ts"], ), - deps = [ + interop_deps = [ ":viewers", "//adev/shared-docs/components/breadcrumb", "//adev/shared-docs/components/copy-source-code-button", @@ -65,8 +66,11 @@ ts_library( "//packages/platform-browser/animations", "//packages/router", "//packages/router/testing", - "@npm//@angular/cdk", - "@npm//@angular/material", + ], + tsconfig = "//adev/shared-docs:tsconfig_test", + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", ], ) diff --git a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.scss b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.scss index baa0fb27bec4..86ee4cd153b3 100644 --- a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.scss +++ b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.scss @@ -1,5 +1,6 @@ @use '../../../styles/links' as links; @use '../../../styles/anchor' as anchor; +@use '../../../styles/media-queries' as mq; :host { --translate-y: clamp(5px, 0.25em, 7px); @@ -8,23 +9,27 @@ .docs-viewer { display: flex; flex-direction: column; - padding: var(--layout-padding); - max-width: var(--page-width); - width: 100%; + padding: 0px; box-sizing: border-box; + padding-inline: var(--layout-padding); @media only screen and (max-width: 1430px) { container: docs-content / inline-size; } - // If rendered on the docs page, accommodate width for TOC - docs-docs & { - @media only screen and (min-width: 1430px) and (max-width: 1550px) { - width: calc(100% - 195px - var(--layout-padding)); - max-width: var(--page-width); - } + @include mq.for-big-desktop-up { + max-width: var(--page-width); } + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + margin-left: -16rem; + width: calc(100% - 16rem); + } + + pre { margin-block: 0; } @@ -79,6 +84,7 @@ } a:not(.docs-github-links):not(.docs-card):not(.docs-pill):not(.docs-example-github-link) { + &[href^='http:'], &[href^='https:'] { @include links.external-link-with-icon(); @@ -86,6 +92,7 @@ } &-scroll-margin-large { + h2, h3 { scroll-margin: 5em; @@ -95,7 +102,8 @@ .docs-header { margin-block-end: 1rem; - & > p:first-child { + + &>p:first-child { color: var(--quaternary-contrast); font-weight: 500; margin: 0; @@ -126,4 +134,4 @@ } } } -} +} \ No newline at end of file diff --git a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts index 00e362d35233..3c544bcd7de4 100644 --- a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts +++ b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.spec.ts @@ -86,7 +86,7 @@ describe('DocViewer', () => { {provide: EXAMPLE_VIEWER_CONTENT_LOADER, useValue: exampleContentSpy}, {provide: NavigationState, useValue: navigationStateSpy}, ], - }).compileComponents(); + }); fixture = TestBed.createComponent(DocViewer); fixture.detectChanges(); diff --git a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts index 05c6b031afdc..e68b23dd097b 100644 --- a/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts +++ b/adev/shared-docs/components/viewers/docs-viewer/docs-viewer.component.ts @@ -58,6 +58,7 @@ export const GITHUB_CONTENT_URL = 'https://github.com/angular/angular/blob/main/ encapsulation: ViewEncapsulation.None, host: { '[class.docs-animate-content]': 'animateContent', + '[class.docs-with-TOC]': 'hasToc', }, }) export class DocViewer implements OnChanges { diff --git a/adev/shared-docs/components/viewers/example-viewer/example-viewer.component.spec.ts b/adev/shared-docs/components/viewers/example-viewer/example-viewer.component.spec.ts index 0db6fca76922..3dc67474d005 100644 --- a/adev/shared-docs/components/viewers/example-viewer/example-viewer.component.spec.ts +++ b/adev/shared-docs/components/viewers/example-viewer/example-viewer.component.spec.ts @@ -40,7 +40,7 @@ describe('ExampleViewer', () => { {provide: EXAMPLE_VIEWER_CONTENT_LOADER, useValue: exampleContentSpy}, {provide: ActivatedRoute, useValue: {snapshot: {fragment: 'fragment'}}}, ], - }).compileComponents(); + }); fixture = TestBed.createComponent(ExampleViewer); component = fixture.componentInstance; componentRef = fixture.componentRef; diff --git a/adev/shared-docs/directives/BUILD.bazel b/adev/shared-docs/directives/BUILD.bazel index 759ea98aab8f..9c861488bd3e 100644 --- a/adev/shared-docs/directives/BUILD.bazel +++ b/adev/shared-docs/directives/BUILD.bazel @@ -1,18 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "directives", srcs = [ "index.ts", ], - visibility = [ - "//adev/shared-docs:__subpackages__", - ], - deps = [ + interop_deps = [ "//adev/shared-docs/directives/click-outside", "//adev/shared-docs/directives/external-link", "//adev/shared-docs/directives/search-item", ], + tsconfig = "//adev/shared-docs:tsconfig_test", + visibility = [ + "//adev/shared-docs:__subpackages__", + ], ) diff --git a/adev/shared-docs/directives/click-outside/BUILD.bazel b/adev/shared-docs/directives/click-outside/BUILD.bazel index 32bed5e4047e..4cbc63a9f7d6 100644 --- a/adev/shared-docs/directives/click-outside/BUILD.bazel +++ b/adev/shared-docs/directives/click-outside/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -16,13 +17,13 @@ ng_module( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":click-outside", "//packages/core", "//packages/core/testing", @@ -30,6 +31,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/directives/external-link/BUILD.bazel b/adev/shared-docs/directives/external-link/BUILD.bazel index f95035631f91..0d4d2644ea72 100644 --- a/adev/shared-docs/directives/external-link/BUILD.bazel +++ b/adev/shared-docs/directives/external-link/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) @@ -19,13 +20,13 @@ ng_module( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":external-link", "//adev/shared-docs/providers", "//packages/core", @@ -34,6 +35,7 @@ ts_library( "//packages/router", "//packages/router/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/directives/search-item/search-item.directive.ts b/adev/shared-docs/directives/search-item/search-item.directive.ts index 7e8f185baa45..c7e8c9e6a8e4 100644 --- a/adev/shared-docs/directives/search-item/search-item.directive.ts +++ b/adev/shared-docs/directives/search-item/search-item.directive.ts @@ -17,6 +17,8 @@ import {SearchResultItem} from '../../interfaces'; }, }) export class SearchItem implements Highlightable { + // Those inputs are required by the Highlightable interface + // We can't migrate them to signals yet @Input() item?: SearchResultItem; @Input() disabled = false; diff --git a/adev/shared-docs/interfaces/BUILD.bazel b/adev/shared-docs/interfaces/BUILD.bazel index a3e17437296c..e1a5c55e0966 100644 --- a/adev/shared-docs/interfaces/BUILD.bazel +++ b/adev/shared-docs/interfaces/BUILD.bazel @@ -1,19 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "interfaces", srcs = [ "index.ts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = ["//adev/shared-docs:__subpackages__"], deps = [ - ":lib", + ":lib_rjs", ], ) -ts_library( +ts_project( name = "lib", srcs = glob( [ @@ -24,10 +25,13 @@ ts_library( "**/*.spec.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", "//packages/router", - "@npm//@types/node", - "@npm//@webcontainer/api", + ], + tsconfig = "//adev/shared-docs:tsconfig_build", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/@webcontainer/api", ], ) diff --git a/adev/shared-docs/pipeline/BUILD.bazel b/adev/shared-docs/pipeline/BUILD.bazel index 3917ca7e35a4..b65c77a61182 100644 --- a/adev/shared-docs/pipeline/BUILD.bazel +++ b/adev/shared-docs/pipeline/BUILD.bazel @@ -12,7 +12,7 @@ esbuild_esm_bundle( define = { "HANDLE_MERMAID": "true", }, - entry_point = "//adev/shared-docs/pipeline/guides:index.ts", + entry_point = "//adev/shared-docs/pipeline/guides:index.mts", # JSDOM should not be bundled because it has workers and dynamic imports. # playwright-core cannot be bundled because of its cjs usage. external = [ @@ -33,7 +33,7 @@ esbuild_esm_bundle( define = { "HANDLE_MERMAID": "false", }, - entry_point = "//adev/shared-docs/pipeline/guides:index.ts", + entry_point = "//adev/shared-docs/pipeline/guides:index.mts", # JSDOM should not be bundled because it has workers and dynamic imports. external = [ "jsdom", @@ -49,7 +49,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "stackblitz-bundle", - entry_point = "//adev/shared-docs/pipeline/examples/stackblitz:index.ts", + entry_point = "//adev/shared-docs/pipeline/examples/stackblitz:index.mts", # JSDOM should not be bundled because it has workers and dynamic imports. external = ["jsdom"], output = "stackblitz.mjs", @@ -63,7 +63,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "previews-bundle", - entry_point = "//adev/shared-docs/pipeline/examples/previews:index.ts", + entry_point = "//adev/shared-docs/pipeline/examples/previews:index.mts", external = [ "typescript", ], @@ -79,7 +79,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "zip-bundle", - entry_point = "//adev/shared-docs/pipeline/examples/zip:index.ts", + entry_point = "//adev/shared-docs/pipeline/examples/zip:index.mts", output = "zip.mjs", platform = "node", target = "es2022", @@ -91,7 +91,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "playground-bundle", - entry_point = "//adev/shared-docs/pipeline/tutorials:playground.ts", + entry_point = "//adev/shared-docs/pipeline/tutorials:playground.mts", output = "playground.mjs", platform = "node", target = "es2022", @@ -103,7 +103,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "tutorial-bundle", - entry_point = "//adev/shared-docs/pipeline/tutorials:tutorial.ts", + entry_point = "//adev/shared-docs/pipeline/tutorials:tutorial.mts", output = "tutorial.mjs", platform = "node", target = "es2022", @@ -115,7 +115,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "navigation-bundle", - entry_point = "//adev/shared-docs/pipeline/navigation:index.ts", + entry_point = "//adev/shared-docs/pipeline/navigation:index.mts", output = "navigation.mjs", platform = "node", target = "es2022", diff --git a/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel index 1d5cd25ee3a4..fab88e937500 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel @@ -1,12 +1,12 @@ load("@angular//tools/esm-interop:index.bzl", "nodejs_binary") -load("@npm//@angular/build-tooling/bazel:defaults.bzl", "ts_library") load("@npm//@angular/build-tooling/bazel/esbuild:index.bzl", "esbuild_esm_bundle") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages__"]) esbuild_esm_bundle( name = "bin", - entry_point = ":index.ts", + entry_point = ":index.mts", external = [ "@angular/compiler-cli", "typescript", @@ -16,27 +16,26 @@ esbuild_esm_bundle( target = "es2022", deps = [ ":extract_api_to_json_lib", - "@angular//packages/compiler-cli", - "@npm//typescript", ], ) -ts_library( +ts_project( name = "extract_api_to_json_lib", srcs = glob( - ["**/*.ts"], + ["**/*.mts"], exclude = [ - "**/*.spec.ts", + "**/*.spec.mts", ], ), - devmode_module = "commonjs", - tsconfig = "//adev:tsconfig.json", - deps = [ + interop_deps = [ "@angular//packages/compiler", "@angular//packages/compiler-cli", - "@npm//@bazel/runfiles", - "@npm//@types/node", - "@npm//typescript", + ], + tsconfig = "//adev/shared-docs:tsconfig_build", + deps = [ + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) @@ -44,17 +43,11 @@ ts_library( nodejs_binary( name = "extract_api_to_json", data = [ - ":bin", "@angular//packages/compiler", - "@angular//packages/compiler-cli", + "@angular//packages/compiler-cli:npm_package", "@npm//typescript", ], entry_point = "bin.mjs", - # Note: Using the linker here as we need it for ESM. The linker is not - # super reliably when running concurrently on Windows- but we have existing - # actions using the linker. An alternative would be to: - # - bundle the Angular compiler into a CommonJS bundle - # - use the patched resolution- but also patch the ESM imports (similar to how FW does it). visibility = ["//visibility:public"], ) diff --git a/adev/shared-docs/pipeline/api-gen/extraction/index.ts b/adev/shared-docs/pipeline/api-gen/extraction/index.mts similarity index 99% rename from adev/shared-docs/pipeline/api-gen/extraction/index.ts rename to adev/shared-docs/pipeline/api-gen/extraction/index.mts index 3c255a79f3b9..92c24917953b 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/index.ts +++ b/adev/shared-docs/pipeline/api-gen/extraction/index.mts @@ -19,7 +19,7 @@ import { NgtscProgram, } from '@angular/compiler-cli'; import ts from 'typescript'; -import {EXAMPLES_PATH, interpolateCodeExamples} from './interpolate_code_examples'; +import {EXAMPLES_PATH, interpolateCodeExamples} from './interpolate_code_examples.mjs'; function main() { const [paramFilePath] = process.argv.slice(2); diff --git a/adev/shared-docs/pipeline/api-gen/extraction/interpolate_code_examples.ts b/adev/shared-docs/pipeline/api-gen/extraction/interpolate_code_examples.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/extraction/interpolate_code_examples.ts rename to adev/shared-docs/pipeline/api-gen/extraction/interpolate_code_examples.mts diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/extraction/test/BUILD.bazel index 1b73461e5623..fb1c11aae620 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/test/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/extraction/test/BUILD.bazel @@ -1,17 +1,18 @@ load("//adev/shared-docs/pipeline/api-gen/extraction:extract_api_to_json.bzl", "extract_api_to_json") -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages__"]) extract_api_to_json( name = "test", srcs = [ - "fake-source.ts", + "fake-source.mts", "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:dummy_package", ], - entry_point = "fake-source.ts", + entry_point = "fake-source.mts", import_map = { - "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.ts": "@angular/dummy-package", + "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.mts": "@angular/dummy-package", }, module_name = "@angular/core", output_name = "api.json", @@ -22,15 +23,15 @@ extract_api_to_json( extract_api_to_json( name = "test_with_extra_entries", srcs = [ - "fake-source.ts", + "fake-source.mts", "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:dummy_package", ], - entry_point = "fake-source.ts", + entry_point = "fake-source.mts", extra_entries = [ "extra.json", ], import_map = { - "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.ts": "@angular/dummy-package", + "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.mts": "@angular/dummy-package", }, module_name = "@angular/core", output_name = "extra_api.json", @@ -40,20 +41,24 @@ extract_api_to_json( filegroup( name = "source_files", - srcs = ["fake-source.ts"], + srcs = ["fake-source.mts"], ) -ts_library( +ts_project( name = "unit_test_lib", testonly = True, srcs = - glob(["*.spec.ts"]) + [ - "fake-examples.ts", + glob(["*.spec.mts"]) + [ + "fake-examples.mts", ], - deps = [ - "//adev/shared-docs/pipeline/api-gen/extraction:extract_api_to_json_lib", + interop_deps = [ "@angular//packages/compiler-cli", ], + tsconfig = "//adev/shared-docs:tsconfig_test", + deps = [ + "//:node_modules/@types/node", + "//adev/shared-docs/pipeline/api-gen/extraction:extract_api_to_json_lib_rjs", + ], ) jasmine_node_test( diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/BUILD.bazel index 2a400dc097d1..1ee51a8aaeb5 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/BUILD.bazel @@ -2,5 +2,5 @@ package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages filegroup( name = "dummy_package", - srcs = ["index.ts"], + srcs = ["index.mts"], ) diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/index.ts b/adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/index.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/index.ts rename to adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point/index.mts diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/fake-examples.ts b/adev/shared-docs/pipeline/api-gen/extraction/test/fake-examples.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/extraction/test/fake-examples.ts rename to adev/shared-docs/pipeline/api-gen/extraction/test/fake-examples.mts diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/fake-source.ts b/adev/shared-docs/pipeline/api-gen/extraction/test/fake-source.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/extraction/test/fake-source.ts rename to adev/shared-docs/pipeline/api-gen/extraction/test/fake-source.mts diff --git a/adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.ts b/adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.mts similarity index 98% rename from adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.ts rename to adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.mts index 480913193897..6f6be39944bf 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/extraction/test/interpolate_code_examples.spec.mts @@ -7,9 +7,9 @@ */ import fs from 'fs'; -import {interpolateCodeExamples} from '../interpolate_code_examples'; +import {interpolateCodeExamples} from '../interpolate_code_examples.mjs'; import {DocEntry} from '@angular/compiler-cli'; -import {mockReadFileSync} from './fake-examples'; +import {mockReadFileSync} from './fake-examples.mjs'; const tsMdBlock = (code: string) => '```angular-ts\n' + code + '\n```'; const htmlMdBlock = (code: string) => '```angular-html\n' + code + '\n```'; diff --git a/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel index 8040989a39db..596075d05330 100644 --- a/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel @@ -1,12 +1,12 @@ -load("@npm//@angular/build-tooling/bazel:defaults.bzl", "ts_library") load("@angular//tools/esm-interop:index.bzl", "nodejs_binary") load("@npm//@angular/build-tooling/bazel/esbuild:index.bzl", "esbuild_esm_bundle") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages__"]) esbuild_esm_bundle( name = "bin", - entry_point = ":index.ts", + entry_point = ":index.mts", external = [ "@angular/compiler-cli", ], @@ -19,15 +19,16 @@ esbuild_esm_bundle( ], ) -ts_library( +ts_project( name = "generate_api_manifest_lib", - srcs = glob(["**/*.ts"]), - devmode_module = "commonjs", - tsconfig = "//adev:tsconfig.json", - deps = [ + srcs = glob(["**/*.mts"]), + interop_deps = [ "@angular//packages/compiler-cli", - "@npm//@bazel/runfiles", - "@npm//@types/node", + ], + tsconfig = "//adev/shared-docs:tsconfig_build", + deps = [ + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/node", ], ) diff --git a/adev/shared-docs/pipeline/api-gen/manifest/generate_manifest.ts b/adev/shared-docs/pipeline/api-gen/manifest/generate_manifest.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/manifest/generate_manifest.ts rename to adev/shared-docs/pipeline/api-gen/manifest/generate_manifest.mts diff --git a/adev/shared-docs/pipeline/api-gen/manifest/index.ts b/adev/shared-docs/pipeline/api-gen/manifest/index.mts similarity index 93% rename from adev/shared-docs/pipeline/api-gen/manifest/index.ts rename to adev/shared-docs/pipeline/api-gen/manifest/index.mts index 0f4f968ee165..90e80b4cf33e 100644 --- a/adev/shared-docs/pipeline/api-gen/manifest/index.ts +++ b/adev/shared-docs/pipeline/api-gen/manifest/index.mts @@ -7,7 +7,7 @@ */ import {readFileSync, writeFileSync} from 'fs'; -import {generateManifest} from './generate_manifest'; +import {generateManifest} from './generate_manifest.mjs'; import type {EntryCollection} from '@angular/compiler-cli'; function main() { diff --git a/adev/shared-docs/pipeline/api-gen/manifest/test/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/manifest/test/BUILD.bazel index f14ac680a0a1..d558578db341 100644 --- a/adev/shared-docs/pipeline/api-gen/manifest/test/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/manifest/test/BUILD.bazel @@ -1,6 +1,7 @@ load("//adev/shared-docs/pipeline/api-gen/extraction:extract_api_to_json.bzl", "extract_api_to_json") load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest") -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") generate_api_manifest( name = "test", @@ -12,28 +13,34 @@ generate_api_manifest( extract_api_to_json( name = "another_extraction", - srcs = ["another-fake-source.ts"], - entry_point = "another-fake-source.ts", + srcs = ["another-fake-source.mts"], + entry_point = "another-fake-source.mts", module_name = "@angular/router", output_name = "api.json", private_modules = [""], repo = "angular/angular", ) -ts_library( +ts_project( name = "unit_test_lib", testonly = True, srcs = [ - "manifest.spec.ts", + "manifest.spec.mts", ], + interop_deps = [ + "//packages/compiler-cli", + ], + tsconfig = "//adev/shared-docs:tsconfig_test", deps = [ - "//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest_lib", - "@angular//packages/compiler-cli", + "//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest_lib_rjs", ], ) jasmine_node_test( name = "unit_tests", - data = ["@angular//packages/compiler-cli"], + data = [ + "//packages:package_json", + "//packages/compiler-cli", + ], deps = [":unit_test_lib"], ) diff --git a/adev/shared-docs/pipeline/api-gen/manifest/test/another-fake-source.ts b/adev/shared-docs/pipeline/api-gen/manifest/test/another-fake-source.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/manifest/test/another-fake-source.ts rename to adev/shared-docs/pipeline/api-gen/manifest/test/another-fake-source.mts diff --git a/adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.ts b/adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.mts similarity index 99% rename from adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.ts rename to adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.mts index 866b0a065858..c67ddfe6283a 100644 --- a/adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/manifest/test/manifest.spec.mts @@ -8,7 +8,7 @@ // @ts-ignore This compiles fine, but Webstorm doesn't like the ESM import in a CJS context. import {DocEntry, EntryType, FunctionEntry, JsDocTagEntry} from '@angular/compiler-cli'; -import {generateManifest, Manifest} from '../generate_manifest'; +import {generateManifest, Manifest} from '../generate_manifest.mjs'; describe('api manifest generation', () => { it('should generate a manifest from multiple collections', () => { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel index fe4fac016d4b..7789138e0e14 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel @@ -1,12 +1,12 @@ -load("@npm//@angular/build-tooling/bazel:defaults.bzl", "ts_library") load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") load("@npm//@angular/build-tooling/bazel/esbuild:index.bzl", "esbuild_esm_bundle") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages__"]) esbuild_esm_bundle( name = "bin", - entry_point = ":index.ts", + entry_point = ":index.mts", output = "bin.mjs", platform = "node", target = "es2022", @@ -15,37 +15,37 @@ esbuild_esm_bundle( ], ) -ts_library( +ts_project( name = "render_api_to_html_lib", srcs = glob( [ - "**/*.ts", + "**/*.mts", "**/*.tsx", + "shiki.d.ts", ], exclude = [ - "entities.ts", + "entities.mts", ], ), - devmode_module = "commonjs", - tsconfig = "//adev:tsconfig.json", + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - ":entities", - "@npm//@bazel/runfiles", - "@npm//@types/node", - "@npm//html-entities", - "@npm//marked", - "@npm//preact", - "@npm//preact-render-to-string", - "@npm//shiki", + ":entities_rjs", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/node", + "//:node_modules/html-entities", + "//:node_modules/marked", + "//:node_modules/preact", + "//:node_modules/preact-render-to-string", + "//:node_modules/shiki", ], ) -ts_library( +ts_project( name = "entities", srcs = [ - "entities.ts", + "entities.mts", ], - tsconfig = "//adev:tsconfig.json", + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs/pipeline/api-gen/rendering:__pkg__", "//docs/pipeline/guides:__pkg__", diff --git a/adev/shared-docs/pipeline/api-gen/rendering/cli-entities.ts b/adev/shared-docs/pipeline/api-gen/rendering/cli-entities.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/cli-entities.ts rename to adev/shared-docs/pipeline/api-gen/rendering/cli-entities.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/entities.ts b/adev/shared-docs/pipeline/api-gen/rendering/entities.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/entities.ts rename to adev/shared-docs/pipeline/api-gen/rendering/entities.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.ts b/adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.mts similarity index 97% rename from adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.ts rename to adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.mts index 637c1772e0b0..7d57d9226c51 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/entities/categorization.mts @@ -22,13 +22,12 @@ import { MethodEntry, PropertyEntry, TypeAliasEntry, -} from '../entities'; +} from '../entities.mjs'; -import {CliCommand} from '../cli-entities'; +import {CliCommand} from '../cli-entities.mjs'; import { ClassEntryRenderable, - CliCommandRenderable, ConstantEntryRenderable, DecoratorEntryRenderable, DocEntryRenderable, @@ -39,8 +38,8 @@ import { MemberEntryRenderable, MethodEntryRenderable, TypeAliasEntryRenderable, -} from './renderables'; -import {HasJsDocTags} from './traits'; +} from './renderables.mjs'; +import {HasJsDocTags} from './traits.mjs'; /** Gets whether the given entry represents a class */ export function isClassEntry(entry: DocEntryRenderable): entry is ClassEntryRenderable; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.ts b/adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.mts similarity index 97% rename from adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.ts rename to adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.mts index 5774b16fbcd3..43116cea52ce 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/entities/renderables.mts @@ -20,11 +20,11 @@ import { ParameterEntry, PipeEntry, TypeAliasEntry, -} from '../entities'; +} from '../entities.mjs'; -import {CliCommand, CliOption} from '../cli-entities'; +import {CliCommand, CliOption} from '../cli-entities.mjs'; -import {HasRenderableToc} from './traits'; +import {HasRenderableToc} from './traits.mjs'; /** JsDoc tag info augmented with transformed content for rendering. */ export interface JsDocTagRenderable extends JsDocTagEntry { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/entities/traits.ts b/adev/shared-docs/pipeline/api-gen/rendering/entities/traits.mts similarity index 98% rename from adev/shared-docs/pipeline/api-gen/rendering/entities/traits.ts rename to adev/shared-docs/pipeline/api-gen/rendering/entities/traits.mts index c3319d1c1bf8..ad5c727a5692 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/entities/traits.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/entities/traits.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {JsDocTagEntry, MemberEntry, ParameterEntry} from '../entities'; +import {JsDocTagEntry, MemberEntry, ParameterEntry} from '../entities.mjs'; import { CodeLineRenderable, @@ -14,7 +14,7 @@ import { LinkEntryRenderable, MemberEntryRenderable, ParameterEntryRenderable, -} from './renderables'; +} from './renderables.mjs'; /** A doc entry that has jsdoc tags. */ export interface HasJsDocTags { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/index.ts b/adev/shared-docs/pipeline/api-gen/rendering/index.mts similarity index 93% rename from adev/shared-docs/pipeline/api-gen/rendering/index.ts rename to adev/shared-docs/pipeline/api-gen/rendering/index.mts index e69fb2621975..fcd3234240b3 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/index.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/index.mts @@ -8,14 +8,14 @@ import {existsSync, mkdirSync, readFileSync, writeFileSync} from 'fs'; import path from 'path'; -import {CliCommand} from './cli-entities'; -import {DocEntry} from './entities'; -import {isCliEntry, isHiddenEntry} from './entities/categorization'; -import {configureMarkedGlobally} from './marked/configuration'; -import {getRenderable} from './processing'; -import {renderEntry} from './rendering'; -import {initHighlighter} from './shiki/shiki'; -import {setCurrentSymbol, setSymbols} from './symbol-context'; +import {CliCommand} from './cli-entities.mjs'; +import {DocEntry} from './entities.mjs'; +import {isCliEntry, isHiddenEntry} from './entities/categorization.mjs'; +import {configureMarkedGlobally} from './marked/configuration.mjs'; +import {getRenderable} from './processing.mjs'; +import {renderEntry} from './rendering.mjs'; +import {initHighlighter} from './shiki/shiki.mjs'; +import {setCurrentSymbol, setSymbols} from './symbol-context.mjs'; /** The JSON data file format for extracted API reference info. */ interface EntryCollection { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.ts b/adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.mts similarity index 90% rename from adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.ts rename to adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.mts index e682bd54d06d..40a708e2c4cf 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/marked/configuration.mts @@ -7,7 +7,7 @@ */ import {marked} from 'marked'; -import {renderer} from './renderer'; +import {renderer} from './renderer.mjs'; /** Globally configures marked for rendering JsDoc content to HTML. */ export function configureMarkedGlobally() { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.ts b/adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.mts similarity index 97% rename from adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.ts rename to adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.mts index b801c486de86..2568b7e25efe 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/marked/renderer.mts @@ -7,8 +7,8 @@ */ import {Renderer, Tokens} from 'marked'; -import {codeToHtml} from '../shiki/shiki'; -import {SECTION_HEADING, SECTION_SUB_HEADING} from '../styling/css-classes'; +import {codeToHtml} from '../shiki/shiki.mjs'; +import {SECTION_HEADING, SECTION_SUB_HEADING} from '../styling/css-classes.mjs'; /** * Custom renderer for marked that will be used to transform markdown files to HTML diff --git a/adev/shared-docs/pipeline/api-gen/rendering/processing.ts b/adev/shared-docs/pipeline/api-gen/rendering/processing.mts similarity index 78% rename from adev/shared-docs/pipeline/api-gen/rendering/processing.ts rename to adev/shared-docs/pipeline/api-gen/rendering/processing.mts index e10c64eee6bb..de44a31e6721 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/processing.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/processing.mts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DocEntry} from './entities'; +import {DocEntry} from './entities.mjs'; -import {CliCommand} from './cli-entities'; +import {CliCommand} from './cli-entities.mjs'; import { isClassEntry, isCliEntry, @@ -19,26 +19,26 @@ import { isInitializerApiFunctionEntry, isInterfaceEntry, isTypeAliasEntry, -} from './entities/categorization'; -import {CliCommandRenderable, DocEntryRenderable} from './entities/renderables'; -import {getClassRenderable} from './transforms/class-transforms'; -import {getCliRenderable} from './transforms/cli-transforms'; -import {getConstantRenderable} from './transforms/constant-transforms'; -import {getDecoratorRenderable} from './transforms/decorator-transforms'; -import {getEnumRenderable} from './transforms/enum-transforms'; -import {getFunctionRenderable} from './transforms/function-transforms'; -import {getInitializerApiFunctionRenderable} from './transforms/initializer-api-functions-transform'; -import {getInterfaceRenderable} from './transforms/interface-transforms'; +} from './entities/categorization.mjs'; +import {CliCommandRenderable, DocEntryRenderable} from './entities/renderables.mjs'; +import {getClassRenderable} from './transforms/class-transforms.mjs'; +import {getCliRenderable} from './transforms/cli-transforms.mjs'; +import {getConstantRenderable} from './transforms/constant-transforms.mjs'; +import {getDecoratorRenderable} from './transforms/decorator-transforms.mjs'; +import {getEnumRenderable} from './transforms/enum-transforms.mjs'; +import {getFunctionRenderable} from './transforms/function-transforms.mjs'; +import {getInitializerApiFunctionRenderable} from './transforms/initializer-api-functions-transform.mjs'; +import {getInterfaceRenderable} from './transforms/interface-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './transforms/jsdoc-transforms'; -import {addModuleName} from './transforms/module-name'; -import {addRepo} from './transforms/repo'; -import {getTypeAliasRenderable} from './transforms/type-alias-transforms'; +} from './transforms/jsdoc-transforms.mjs'; +import {addModuleName} from './transforms/module-name.mjs'; +import {addRepo} from './transforms/repo.mjs'; +import {getTypeAliasRenderable} from './transforms/type-alias-transforms.mjs'; export function getRenderable( entry: DocEntry | CliCommand, diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/block-c.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/block-c.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/block-c.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/block-c.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/html.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/html.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/html.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/html.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c-only.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c-only.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c-only.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c-only.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-c.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-hash.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-hash.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-hash.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-matchers/inline-hash.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.mts similarity index 94% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.mts index 8d7ca4de4894..36faecf7db90 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/regions/region-parser.mts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as blockC from './region-matchers/block-c'; -import * as html from './region-matchers/html'; -import * as inlineC from './region-matchers/inline-c'; -import * as inlineCOnly from './region-matchers/inline-c-only'; -import * as inlineHash from './region-matchers/inline-hash'; -import {FileType, removeEslintComments} from './remove-eslint-comments'; +import * as blockC from './region-matchers/block-c.mjs'; +import * as html from './region-matchers/html.mjs'; +import * as inlineC from './region-matchers/inline-c.mjs'; +import * as inlineCOnly from './region-matchers/inline-c-only.mjs'; +import * as inlineHash from './region-matchers/inline-hash.mjs'; +import {FileType, removeEslintComments} from './remove-eslint-comments.mjs'; const WHOLE_FILE_REGION_NAME = ''; const DEFAULT_PLASTER = '. . .'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/regions/remove-eslint-comments.ts b/adev/shared-docs/pipeline/api-gen/rendering/regions/remove-eslint-comments.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/regions/remove-eslint-comments.ts rename to adev/shared-docs/pipeline/api-gen/rendering/regions/remove-eslint-comments.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/rendering.ts b/adev/shared-docs/pipeline/api-gen/rendering/rendering.mts similarity index 94% rename from adev/shared-docs/pipeline/api-gen/rendering/rendering.ts rename to adev/shared-docs/pipeline/api-gen/rendering/rendering.mts index a054ba5ade09..bb4a2b1de849 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/rendering.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/rendering.mts @@ -18,8 +18,8 @@ import { isInitializerApiFunctionEntry, isInterfaceEntry, isTypeAliasEntry, -} from './entities/categorization'; -import {CliCommandRenderable, DocEntryRenderable} from './entities/renderables'; +} from './entities/categorization.mjs'; +import {CliCommandRenderable, DocEntryRenderable} from './entities/renderables.mjs'; import {ClassReference} from './templates/class-reference'; import {CliCommandReference} from './templates/cli-reference'; import {ConstantReference} from './templates/constant-reference'; @@ -28,7 +28,7 @@ import {EnumReference} from './templates/enum-reference'; import {FunctionReference} from './templates/function-reference'; import {InitializerApiFunction} from './templates/initializer-api-function'; import {TypeAliasReference} from './templates/type-alias-reference'; -import {setCurrentSymbol} from './symbol-context'; +import {setCurrentSymbol} from './symbol-context.mjs'; /** Given a doc entry, get the transformed version of the entry for rendering. */ export function renderEntry(renderable: DocEntryRenderable | CliCommandRenderable): string { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/index.d.ts b/adev/shared-docs/pipeline/api-gen/rendering/shiki.d.ts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/index.d.ts rename to adev/shared-docs/pipeline/api-gen/rendering/shiki.d.ts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/shiki/shiki.ts b/adev/shared-docs/pipeline/api-gen/rendering/shiki/shiki.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/shiki/shiki.ts rename to adev/shared-docs/pipeline/api-gen/rendering/shiki/shiki.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/styling/css-classes.ts b/adev/shared-docs/pipeline/api-gen/rendering/styling/css-classes.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/styling/css-classes.ts rename to adev/shared-docs/pipeline/api-gen/rendering/styling/css-classes.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/symbol-context.ts b/adev/shared-docs/pipeline/api-gen/rendering/symbol-context.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/symbol-context.ts rename to adev/shared-docs/pipeline/api-gen/rendering/symbol-context.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member-list.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member-list.tsx index b9e84e5c9686..a59efd4dc558 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member-list.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member-list.tsx @@ -7,7 +7,7 @@ */ import {h} from 'preact'; -import {MemberEntryRenderable} from '../entities/renderables'; +import {MemberEntryRenderable} from '../entities/renderables.mjs'; import {ClassMember} from './class-member'; export function ClassMemberList(props: {members: MemberEntryRenderable[]}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member.tsx index 11483a1cc370..c2d0548c56ba 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-member.tsx @@ -12,15 +12,15 @@ import { isGetterEntry, isPropertyEntry, isSetterEntry, -} from '../entities/categorization'; -import {MemberEntryRenderable, MethodEntryRenderable} from '../entities/renderables'; +} from '../entities/categorization.mjs'; +import {MemberEntryRenderable, MethodEntryRenderable} from '../entities/renderables.mjs'; import { REFERENCE_MEMBER_CARD, REFERENCE_MEMBER_CARD_BODY, REFERENCE_MEMBER_CARD_HEADER, REFERENCE_MEMBER_CARD_ITEM, -} from '../styling/css-classes'; -import {getFunctionMetadataRenderable} from '../transforms/function-transforms'; +} from '../styling/css-classes.mjs'; +import {getFunctionMetadataRenderable} from '../transforms/function-transforms.mjs'; import {ClassMethodInfo} from './class-method-info'; import {CodeSymbol} from './code-symbols'; import {DeprecatedLabel} from './deprecated-label'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-method-info.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-method-info.tsx index b572fa1d444b..c471b64a6a9b 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-method-info.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-method-info.tsx @@ -7,13 +7,8 @@ */ import {Fragment, h} from 'preact'; -import { - FunctionEntryRenderable, - FunctionSignatureMetadataRenderable, - MethodEntryRenderable, - ParameterEntryRenderable, -} from '../entities/renderables'; -import {PARAM_KEYWORD_CLASS_NAME, REFERENCE_MEMBER_CARD_ITEM} from '../styling/css-classes'; +import {FunctionSignatureMetadataRenderable, ParameterEntryRenderable} from '../entities/renderables.mjs'; +import {PARAM_KEYWORD_CLASS_NAME, REFERENCE_MEMBER_CARD_ITEM} from '../styling/css-classes.mjs'; import {DeprecatedLabel} from './deprecated-label'; import {Parameter} from './parameter'; import {RawHtml} from './raw-html'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-reference.tsx index eeab10f2b0d9..273db4f21901 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/class-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/class-reference.tsx @@ -7,25 +7,25 @@ */ import {Fragment, h} from 'preact'; -import {PipeEntry} from '../entities'; +import {PipeEntry} from '../entities.mjs'; import { ClassEntryRenderable, DecoratorEntryRenderable, PipeEntryRenderable, -} from '../entities/renderables'; -import {codeToHtml} from '../shiki/shiki'; +} from '../entities/renderables.mjs'; +import {ClassMemberList} from './class-member-list'; +import {HeaderApi} from './header-api'; import { API_REFERENCE_CONTAINER, REFERENCE_MEMBERS, SECTION_CONTAINER, -} from '../styling/css-classes'; -import {ClassMemberList} from './class-member-list'; -import {HeaderApi} from './header-api'; -import {RawHtml} from './raw-html'; -import {SectionApi} from './section-api'; +} from '../styling/css-classes.mjs'; import {SectionDescription} from './section-description'; -import {SectionHeading} from './section-heading'; import {SectionUsageNotes} from './section-usage-notes'; +import {SectionApi} from './section-api'; +import {SectionHeading} from './section-heading'; +import {codeToHtml} from '../shiki/shiki.mjs'; +import {RawHtml} from './raw-html'; /** Component to render a class API reference document. */ export function ClassReference( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-card.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-card.tsx index d4cfb69392aa..8551d1f8530e 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-card.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-card.tsx @@ -7,9 +7,9 @@ */ import {Fragment, h} from 'preact'; -import {CliCardRenderable} from '../entities/renderables'; +import {CliCardRenderable} from '../entities/renderables.mjs'; import {DeprecatedLabel} from './deprecated-label'; -import {REFERENCE_MEMBER_CARD, REFERENCE_MEMBER_CARD_BODY} from '../styling/css-classes'; +import {REFERENCE_MEMBER_CARD, REFERENCE_MEMBER_CARD_BODY} from '../styling/css-classes.mjs'; export function CliCard(props: {card: CliCardRenderable}) { return ( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-reference.tsx index 30e7d1c2654e..ac87bd4673c4 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/cli-reference.tsx @@ -7,8 +7,8 @@ */ import {Fragment, h} from 'preact'; -import {CliCommandRenderable} from '../entities/renderables'; -import {REFERENCE_MEMBERS} from '../styling/css-classes'; +import {CliCommandRenderable} from '../entities/renderables.mjs'; +import {REFERENCE_MEMBERS} from '../styling/css-classes.mjs'; import {CliCard} from './cli-card'; import {HeaderCli} from './header-cli'; import {RawHtml} from './raw-html'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line-group.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line-group.tsx index 36c1a0dd410f..2bf288fa1928 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line-group.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line-group.tsx @@ -7,7 +7,7 @@ */ import {h} from 'preact'; -import {CodeLineRenderable} from '../entities/renderables'; +import {CodeLineRenderable} from '../entities/renderables.mjs'; import {CodeLine} from './code-line'; export function CodeLineGroup(props: {lines: CodeLineRenderable[]}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line.tsx index 77cb934a3635..64b2ae498f8b 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-line.tsx @@ -7,7 +7,7 @@ */ import {h} from 'preact'; -import {CodeLineRenderable} from '../entities/renderables'; +import {CodeLineRenderable} from '../entities/renderables.mjs'; export function CodeLine(props: {line: CodeLineRenderable}) { const line = props.line; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-symbols.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-symbols.tsx index 3adfee7a2d51..6e98e5c20630 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-symbols.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-symbols.tsx @@ -7,8 +7,8 @@ */ import {h} from 'preact'; -import {getModuleName} from '../symbol-context'; -import {getLinkToModule} from '../transforms/url-transforms'; +import {getModuleName} from '../symbol-context.mjs'; +import {getLinkToModule} from '../transforms/url-transforms.mjs'; const symbolRegex = /([a-zA-Z_$][a-zA-Z_$0-9\.]*)/; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-table-of-contents.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-table-of-contents.tsx index 6ff8254a88dd..42488c84ada9 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/code-table-of-contents.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/code-table-of-contents.tsx @@ -9,7 +9,7 @@ import {h} from 'preact'; import {renderToString} from 'preact-render-to-string'; import {CodeLineGroup} from './code-line-group'; -import {HasRenderableToc} from '../entities/traits'; +import {HasRenderableToc} from '../entities/traits.mjs'; export function CodeTableOfContents(props: {entry: HasRenderableToc}) { const html = `${props.entry.beforeCodeGroups} diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/constant-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/constant-reference.tsx index 3819c4562b9d..e1c638557e03 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/constant-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/constant-reference.tsx @@ -7,12 +7,12 @@ */ import {h} from 'preact'; -import {ConstantEntryRenderable} from '../entities/renderables'; +import {ConstantEntryRenderable} from '../entities/renderables.mjs'; import {HeaderApi} from './header-api'; import {SectionDescription} from './section-description'; import {SectionUsageNotes} from './section-usage-notes'; import {SectionApi} from './section-api'; -import {API_REFERENCE_CONTAINER} from '../styling/css-classes'; +import {API_REFERENCE_CONTAINER} from '../styling/css-classes.mjs'; /** Component to render a constant API reference document. */ export function ConstantReference(entry: ConstantEntryRenderable) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/deprecated-label.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/deprecated-label.tsx index 26fbcaa6bfaa..882d684f2352 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/deprecated-label.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/deprecated-label.tsx @@ -7,7 +7,7 @@ */ import {Fragment, h} from 'preact'; -import {PARAM_KEYWORD_CLASS_NAME} from '../styling/css-classes'; +import {PARAM_KEYWORD_CLASS_NAME} from '../styling/css-classes.mjs'; export function DeprecatedLabel(props: { entry: diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-pill-row.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-pill-row.tsx index 10578b44b708..2dbe55de6b93 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-pill-row.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-pill-row.tsx @@ -7,7 +7,7 @@ */ import {Fragment, h} from 'preact'; -import {LinkEntryRenderable} from '../entities/renderables'; +import {LinkEntryRenderable} from '../entities/renderables.mjs'; /** Component to render a function or method parameter reference doc fragment. */ export function DocsPillRow(props: {links: LinkEntryRenderable[]}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-reference.tsx index f226ad1a7aef..49ee9f886b21 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/docs-reference.tsx @@ -7,10 +7,10 @@ */ import {h} from 'preact'; -import {DocEntryRenderable} from '../entities/renderables'; +import {DocEntryRenderable} from '../entities/renderables.mjs'; import {HeaderApi} from './header-api'; import {SectionDescription} from './section-description'; -import {API_REFERENCE_CONTAINER} from '../styling/css-classes'; +import {API_REFERENCE_CONTAINER} from '../styling/css-classes.mjs'; /** Component to render a block or element API reference document. */ export function DocsReference(entry: DocEntryRenderable) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/enum-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/enum-reference.tsx index 6aa74e642d13..de0499e0b232 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/enum-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/enum-reference.tsx @@ -7,11 +7,11 @@ */ import {h, Fragment} from 'preact'; -import {EnumEntryRenderable, MemberEntryRenderable} from '../entities/renderables'; +import {EnumEntryRenderable, MemberEntryRenderable} from '../entities/renderables.mjs'; import {HeaderApi} from './header-api'; import {SectionDescription} from './section-description'; import {SectionApi} from './section-api'; -import {API_REFERENCE_CONTAINER, REFERENCE_MEMBERS} from '../styling/css-classes'; +import {API_REFERENCE_CONTAINER, REFERENCE_MEMBERS} from '../styling/css-classes.mjs'; import {ClassMember} from './class-member'; /** Component to render a enum API reference document. */ diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/function-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/function-reference.tsx index ddd182b1d9d6..1b202fd76a05 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/function-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/function-reference.tsx @@ -10,16 +10,16 @@ import {Fragment, h} from 'preact'; import { FunctionEntryRenderable, FunctionSignatureMetadataRenderable, -} from '../entities/renderables'; +} from '../entities/renderables.mjs'; import { API_REFERENCE_CONTAINER, REFERENCE_MEMBERS, REFERENCE_MEMBER_CARD, REFERENCE_MEMBER_CARD_BODY, REFERENCE_MEMBER_CARD_HEADER, -} from '../styling/css-classes'; -import {printInitializerFunctionSignatureLine} from '../transforms/code-transforms'; -import {getFunctionMetadataRenderable} from '../transforms/function-transforms'; +} from '../styling/css-classes.mjs'; +import {printInitializerFunctionSignatureLine} from '../transforms/code-transforms.mjs'; +import {getFunctionMetadataRenderable} from '../transforms/function-transforms.mjs'; import {ClassMethodInfo} from './class-method-info'; import {CodeSymbol} from './code-symbols'; import {HeaderApi} from './header-api'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/header-api.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/header-api.tsx index da2de4ae9c03..f9d0cd3aedb0 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/header-api.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/header-api.tsx @@ -7,14 +7,14 @@ */ import {Fragment, h} from 'preact'; -import {EntryType, isDocEntryWithSourceInfo, PipeEntry} from '../entities'; -import {DocEntryRenderable, PipeEntryRenderable} from '../entities/renderables'; +import {EntryType, isDocEntryWithSourceInfo, PipeEntry} from '../entities.mjs'; +import {DocEntryRenderable, PipeEntryRenderable} from '../entities/renderables.mjs'; import { HEADER_CLASS_NAME, HEADER_ENTRY_CATEGORY, HEADER_ENTRY_LABEL, HEADER_ENTRY_TITLE, -} from '../styling/css-classes'; +} from '../styling/css-classes.mjs'; import {DocsPillRow} from './docs-pill-row'; /** Component to render a header of the API page. */ diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/header-cli.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/header-cli.tsx index dd2c475b62b7..1493f55d2f4a 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/header-cli.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/header-cli.tsx @@ -7,8 +7,8 @@ */ import {h} from 'preact'; -import {CliCommandRenderable} from '../entities/renderables'; -import {HEADER_CLASS_NAME, HEADER_ENTRY_CATEGORY, HEADER_ENTRY_LABEL, HEADER_ENTRY_TITLE} from '../styling/css-classes'; +import {CliCommandRenderable} from '../entities/renderables.mjs'; +import {HEADER_CLASS_NAME, HEADER_ENTRY_CATEGORY, HEADER_ENTRY_LABEL, HEADER_ENTRY_TITLE} from '../styling/css-classes.mjs'; /** Component to render a header of the CLI page. */ export function HeaderCli(props: {command: CliCommandRenderable}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/highlight-ts.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/highlight-ts.tsx index 5de0ab288341..aeaaed344b68 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/highlight-ts.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/highlight-ts.tsx @@ -8,7 +8,7 @@ import {h} from 'preact'; import {RawHtml} from './raw-html'; -import {codeToHtml} from '../shiki/shiki'; +import {codeToHtml} from '../shiki/shiki.mjs'; /** Component to render a header of the CLI page. */ export function HighlightTypeScript(props: {code: string}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/initializer-api-function.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/initializer-api-function.tsx index 4d38268eaee7..dce391ee959a 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/initializer-api-function.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/initializer-api-function.tsx @@ -7,9 +7,9 @@ */ import {h, JSX} from 'preact'; -import {InitializerApiFunctionRenderable} from '../entities/renderables'; -import {API_REFERENCE_CONTAINER, REFERENCE_MEMBERS} from '../styling/css-classes'; -import {getFunctionMetadataRenderable} from '../transforms/function-transforms'; +import {InitializerApiFunctionRenderable} from '../entities/renderables.mjs'; +import {API_REFERENCE_CONTAINER, REFERENCE_MEMBERS} from '../styling/css-classes.mjs'; +import {getFunctionMetadataRenderable} from '../transforms/function-transforms.mjs'; import {signatureCard} from './function-reference'; import {HeaderApi} from './header-api'; import {SectionApi} from './section-api'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/parameter.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/parameter.tsx index 103df6875455..55e86703ca16 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/parameter.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/parameter.tsx @@ -7,9 +7,9 @@ */ import {h} from 'preact'; -import {ParameterEntryRenderable} from '../entities/renderables'; +import {ParameterEntryRenderable} from '../entities/renderables.mjs'; import {RawHtml} from './raw-html'; -import {PARAM_GROUP_CLASS_NAME} from '../styling/css-classes'; +import {PARAM_GROUP_CLASS_NAME} from '../styling/css-classes.mjs'; import {CodeSymbol} from './code-symbols'; /** Component to render a function or method parameter reference doc fragment. */ diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-api.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-api.tsx index 3aebe12eb8c4..6ee422c43520 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-api.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-api.tsx @@ -7,10 +7,10 @@ */ import {h} from 'preact'; -import {DocEntryRenderable} from '../entities/renderables'; -import {HasRenderableToc} from '../entities/traits'; +import {DocEntryRenderable} from '../entities/renderables.mjs'; +import {HasRenderableToc} from '../entities/traits.mjs'; import {CodeTableOfContents} from './code-table-of-contents'; -import {SECTION_CONTAINER} from '../styling/css-classes'; +import {SECTION_CONTAINER} from '../styling/css-classes.mjs'; import {SectionHeading} from './section-heading'; const API_SECTION_NAME = 'API'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-description.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-description.tsx index d2d741896ed5..a940809840b3 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-description.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-description.tsx @@ -7,10 +7,10 @@ */ import {Fragment, h} from 'preact'; -import {DocEntryRenderable} from '../entities/renderables'; +import {DocEntryRenderable} from '../entities/renderables.mjs'; import {RawHtml} from './raw-html'; import {CodeSymbol} from './code-symbols'; -import {SECTION_CONTAINER} from '../styling/css-classes'; +import {SECTION_CONTAINER} from '../styling/css-classes.mjs'; import {SectionHeading} from './section-heading'; const DESCRIPTION_SECTION_NAME = 'Description'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-heading.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-heading.tsx index 2984b2a5eb4a..2963acb1833f 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-heading.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-heading.tsx @@ -7,8 +7,8 @@ */ import {h} from 'preact'; -import {convertSectionNameToId} from '../transforms/reference-section-id'; -import {SECTION_HEADING} from '../styling/css-classes'; +import {convertSectionNameToId} from '../transforms/reference-section-id.mjs'; +import {SECTION_HEADING} from '../styling/css-classes.mjs'; /** Component to render the API section. */ export function SectionHeading(props: {name: string}) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-usage-notes.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-usage-notes.tsx index b38470ea77a9..1af6b33c3964 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/section-usage-notes.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/section-usage-notes.tsx @@ -7,9 +7,9 @@ */ import {Fragment, h} from 'preact'; -import {DocEntryRenderable} from '../entities/renderables'; +import {DocEntryRenderable} from '../entities/renderables.mjs'; import {RawHtml} from './raw-html'; -import {SECTION_CONTAINER} from '../styling/css-classes'; +import {SECTION_CONTAINER} from '../styling/css-classes.mjs'; import {SectionHeading} from './section-heading'; const USAGE_NOTES_SECTION_NAME = 'Usage Notes'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/templates/type-alias-reference.tsx b/adev/shared-docs/pipeline/api-gen/rendering/templates/type-alias-reference.tsx index d4a70a3c68bc..caa00654f2c9 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/templates/type-alias-reference.tsx +++ b/adev/shared-docs/pipeline/api-gen/rendering/templates/type-alias-reference.tsx @@ -7,12 +7,12 @@ */ import {h} from 'preact'; -import {TypeAliasEntryRenderable} from '../entities/renderables'; +import {TypeAliasEntryRenderable} from '../entities/renderables.mjs'; import {HeaderApi} from './header-api'; import {SectionDescription} from './section-description'; import {SectionUsageNotes} from './section-usage-notes'; import {SectionApi} from './section-api'; -import {API_REFERENCE_CONTAINER} from '../styling/css-classes'; +import {API_REFERENCE_CONTAINER} from '../styling/css-classes.mjs'; /** Component to render a type alias API reference document. */ export function TypeAliasReference(entry: TypeAliasEntryRenderable) { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/rendering/test/BUILD.bazel index 64ed90d96f84..124de29eaabd 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/BUILD.bazel @@ -1,5 +1,5 @@ load("//adev/shared-docs/pipeline/api-gen/rendering:render_api_to_html.bzl", "render_api_to_html") -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") render_api_to_html( name = "test", @@ -9,28 +9,29 @@ render_api_to_html( ], ) -ts_library( +ts_project( name = "unit_test_lib", testonly = True, srcs = glob( [ - "**/*.spec.ts", + "**/*.spec.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_test", deps = [ - "//adev/shared-docs/pipeline/api-gen/rendering:render_api_to_html_lib", - "@npm//@bazel/runfiles", - "@npm//@types/jsdom", - "@npm//jsdom", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/jsdom", + "//:node_modules/jsdom", + "//adev/shared-docs/pipeline/api-gen/rendering:render_api_to_html_lib_rjs", ], ) -jasmine_node_test( +jasmine_test( name = "unit_tests", data = [ - "@npm//jsdom", + ":unit_test_lib_rjs", + "//:node_modules/jsdom", ] + glob([ "**/*.json", ]), - deps = [":unit_test_lib"], ) diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.ts b/adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.mts similarity index 86% rename from adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.ts rename to adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.mts index ef7437484108..5f8ccde7bac7 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/cli.spec.mts @@ -9,10 +9,10 @@ import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {configureMarkedGlobally} from '../marked/configuration'; -import {getRenderable} from '../processing'; -import {renderEntry} from '../rendering'; -import {initHighlighter} from '../shiki/shiki'; +import {configureMarkedGlobally} from '../marked/configuration.mjs'; +import {getRenderable} from '../processing.mjs'; +import {renderEntry} from '../rendering.mjs'; +import {initHighlighter} from '../shiki/shiki.mjs'; describe('CLI docs to html', () => { let fragment: DocumentFragment; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.ts b/adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.mts similarity index 92% rename from adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.ts rename to adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.mts index 31ed4c4c7224..bc7906642858 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/marked.spec.mts @@ -9,11 +9,11 @@ import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {configureMarkedGlobally} from '../marked/configuration'; -import {getRenderable} from '../processing'; -import {renderEntry} from '../rendering'; -import {initHighlighter} from '../shiki/shiki'; -import {setSymbols} from '../symbol-context'; +import {configureMarkedGlobally} from '../marked/configuration.mjs'; +import {getRenderable} from '../processing.mjs'; +import {renderEntry} from '../rendering.mjs'; +import {initHighlighter} from '../shiki/shiki.mjs'; +import {setSymbols} from '../symbol-context.mjs'; // Note: The tests will probably break if the schema of the api extraction changes. // All entries in the fake-entries are extracted from Angular's api. diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.ts b/adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.mts similarity index 88% rename from adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.ts rename to adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.mts index cbc9f2e6cb53..c0980734bda2 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/renderable.spec.mts @@ -8,11 +8,11 @@ import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; -import {DocEntryRenderable} from '../entities/renderables'; -import {configureMarkedGlobally} from '../marked/configuration'; -import {getRenderable} from '../processing'; -import {initHighlighter} from '../shiki/shiki'; -import {setSymbols} from '../symbol-context'; +import {DocEntryRenderable} from '../entities/renderables.mjs'; +import {configureMarkedGlobally} from '../marked/configuration.mjs'; +import {getRenderable} from '../processing.mjs'; +import {initHighlighter} from '../shiki/shiki.mjs'; +import {setSymbols} from '../symbol-context.mjs'; // Note: The tests will probably break if the schema of the api extraction changes. // All entries in the fake-entries are extracted from Angular's api. diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.ts b/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.mts similarity index 99% rename from adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.ts rename to adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.mts index f5438b7e8bbc..4e18042ce0fe 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/code-transforms.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {makeGenericsText} from '../../transforms/code-transforms'; +import {makeGenericsText} from '../../transforms/code-transforms.mjs'; describe('makeGenericsText', () => { it('should return an empty string if no generics are provided', () => { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.ts b/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.mts similarity index 99% rename from adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.ts rename to adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.mts index 6f8a07ec64de..0444b227d284 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/test/transforms/jsdoc-transforms.spec.mts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {setCurrentSymbol, setSymbols} from '../../symbol-context'; -import {addHtmlAdditionalLinks} from '../../transforms/jsdoc-transforms'; +import {setCurrentSymbol, setSymbols} from '../../symbol-context.mjs'; +import {addHtmlAdditionalLinks} from '../../transforms/jsdoc-transforms.mjs'; // @ts-ignore This compiles fine, but Webstorm doesn't like the ESM import in a CJS context. describe('jsdoc transforms', () => { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.mts similarity index 71% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.mts index c83cd27218f3..c5f226f5ca0e 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/class-transforms.mts @@ -6,19 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ClassEntry} from '../entities'; -import {ClassEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {ClassEntry} from '../entities.mjs'; +import {ClassEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addRenderableMembers} from './member-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addRenderableMembers} from './member-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed class entry, get the fully renderable class entry. */ export function getClassRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.mts similarity index 95% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.mts index c56b5be0c0d1..be99e34f4d58 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/cli-transforms.mts @@ -8,12 +8,12 @@ import {marked} from 'marked'; -import {CliCommand, CliOption} from '../cli-entities'; +import {CliCommand, CliOption} from '../cli-entities.mjs'; import { CliCardRenderable, CliCommandRenderable, CliOptionRenderable, -} from '../entities/renderables'; +} from '../entities/renderables.mjs'; /** Given an unprocessed CLI entry, get the fully renderable CLI entry. */ export function getCliRenderable(command: CliCommand): CliCommandRenderable { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.mts similarity index 98% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.mts index 1a87f865f419..b405763d978b 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/code-transforms.mts @@ -14,7 +14,7 @@ import { MemberTags, ParameterEntry, PropertyEntry, -} from '../entities'; +} from '../entities.mjs'; import { isClassEntry, @@ -29,14 +29,14 @@ import { isInterfaceEntry, isSetterEntry, isTypeAliasEntry, -} from '../entities/categorization'; -import {CodeLineRenderable} from '../entities/renderables'; -import {HasModuleName, HasRenderableToc} from '../entities/traits'; -import {getModuleName} from '../symbol-context'; -import {codeToHtml, replaceKeywordFromShikiHtml} from '../shiki/shiki'; - -import {filterLifecycleMethods, mergeGettersAndSetters} from './member-transforms'; -import {getLinkToModule} from './url-transforms'; +} from '../entities/categorization.mjs'; +import {CodeLineRenderable} from '../entities/renderables.mjs'; +import {HasModuleName, HasRenderableToc} from '../entities/traits.mjs'; +import {getModuleName} from '../symbol-context.mjs'; +import {codeToHtml, replaceKeywordFromShikiHtml} from '../shiki/shiki.mjs'; + +import {filterLifecycleMethods, mergeGettersAndSetters} from './member-transforms.mjs'; +import {getLinkToModule} from './url-transforms.mjs'; // Allows to generate links for code lines. interface CodeTableOfContentsData { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.mts similarity index 73% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.mts index 51094f15b9b9..6c2d77a3c1e0 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/constant-transforms.mts @@ -6,18 +6,18 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ConstantEntry} from '../entities'; -import {ConstantEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {ConstantEntry} from '../entities.mjs'; +import {ConstantEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed constant entry, get the fully renderable constant entry. */ export function getConstantRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.mts similarity index 71% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.mts index 7d88cba974b6..6f099cf60e91 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/decorator-transforms.mts @@ -6,19 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DecoratorEntry} from '../entities'; -import {DecoratorEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {DecoratorEntry} from '../entities.mjs'; +import {DecoratorEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addRenderableMembers} from './member-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addRenderableMembers} from './member-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed class entry, get the fully renderable class entry. */ export function getDecoratorRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.mts similarity index 71% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.mts index cc07ee11c05e..f4f5e6df2048 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/enum-transforms.mts @@ -6,19 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {EnumEntry} from '../entities'; -import {EnumEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {EnumEntry} from '../entities.mjs'; +import {EnumEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addRenderableMembers} from './member-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addRenderableMembers} from './member-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed enum entry, get the fully renderable enum entry. */ export function getEnumRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.mts similarity index 82% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.mts index 9daa94a05843..083ed3c2c9e6 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/function-transforms.mts @@ -6,22 +6,22 @@ * found in the LICENSE file at https://angular.dev/license */ -import {FunctionEntry, FunctionSignatureMetadata} from '../entities'; +import {FunctionEntry, FunctionSignatureMetadata} from '../entities.mjs'; import { FunctionEntryRenderable, FunctionSignatureMetadataRenderable, -} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; -import {addRenderableFunctionParams} from './params-transforms'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRenderableFunctionParams} from './params-transforms.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed function entry, get the fully renderable function entry. */ export function getFunctionRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.mts similarity index 76% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.mts index 336583880ce2..ab51eb1e8210 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/initializer-api-functions-transform.mts @@ -6,20 +6,20 @@ * found in the LICENSE file at https://angular.dev/license */ -import {InitializerApiFunctionEntry} from '../entities'; +import {InitializerApiFunctionEntry} from '../entities.mjs'; -import {InitializerApiFunctionRenderable} from '../entities/renderables'; +import {InitializerApiFunctionRenderable} from '../entities/renderables.mjs'; -import {addRenderableCodeToc} from './code-transforms'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; export function getInitializerApiFunctionRenderable( entry: InitializerApiFunctionEntry, diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.mts similarity index 70% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.mts index 2145f8ee8ab2..dfadd7cb7547 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/interface-transforms.mts @@ -6,19 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {InterfaceEntry} from '../entities'; -import {InterfaceEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {InterfaceEntry} from '../entities.mjs'; +import {InterfaceEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addRenderableMembers} from './member-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addRenderableMembers} from './member-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed interface entry, get the fully renderable interface entry. */ export function getInterfaceRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.mts similarity index 95% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.mts index 4c33048653a0..88d0c02b0be3 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/jsdoc-transforms.mts @@ -7,10 +7,10 @@ */ import {marked} from 'marked'; -import {JsDocTagEntry} from '../entities'; +import {JsDocTagEntry} from '../entities.mjs'; -import {getDeprecatedEntry, getTagSinceVersion} from '../entities/categorization'; -import {LinkEntryRenderable} from '../entities/renderables'; +import {getDeprecatedEntry, getTagSinceVersion} from '../entities/categorization.mjs'; +import {LinkEntryRenderable} from '../entities/renderables.mjs'; import { HasAdditionalLinks, HasDeprecatedFlag, @@ -23,11 +23,11 @@ import { HasRenderableJsDocTags, hasExperimentalFlag, HasStableFlag, -} from '../entities/traits'; +} from '../entities/traits.mjs'; -import {getLinkToModule} from './url-transforms'; -import {addApiLinksToHtml} from './code-transforms'; -import {getCurrentSymbol, getModuleName, unknownSymbolMessage} from '../symbol-context'; +import {getLinkToModule} from './url-transforms.mjs'; +import {addApiLinksToHtml} from './code-transforms.mjs'; +import {getCurrentSymbol, getModuleName, unknownSymbolMessage} from '../symbol-context.mjs'; const JS_DOC_USAGE_NOTE_TAGS: Set = new Set(['remarks', 'usageNotes', 'example']); export const JS_DOC_SEE_TAG = 'see'; diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.mts similarity index 88% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.mts index 70599bfefac2..668fe6f5bda1 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/member-transforms.mts @@ -6,19 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {MemberEntry, MemberTags, MemberType} from '../entities'; -import {isHiddenEntry} from '../entities/categorization'; +import {MemberEntry, MemberTags, MemberType} from '../entities.mjs'; +import {isHiddenEntry} from '../entities/categorization.mjs'; -import {HasMembers, HasModuleName, HasRenderableMembers, HasRepo} from '../entities/traits'; +import {HasMembers, HasModuleName, HasRenderableMembers, HasRepo} from '../entities/traits.mjs'; import { addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; const lifecycleMethods = [ 'ngAfterContentChecked', diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.mts similarity index 86% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.mts index 0ec85b9303f3..1c71d3dd2dbc 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/module-name.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {HasModuleName} from '../entities/traits'; +import {HasModuleName} from '../entities/traits.mjs'; export function addModuleName(entry: T, moduleName: string): T & HasModuleName { return { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.mts similarity index 80% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.mts index ac3e51226c34..3048b70cef0f 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/params-transforms.mts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import {HasModuleName, HasParams, HasRenderableParams} from '../entities/traits'; -import {addHtmlDescription} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; +import {HasModuleName, HasParams, HasRenderableParams} from '../entities/traits.mjs'; +import {addHtmlDescription} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; export function addRenderableFunctionParams( entry: T, diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/reference-section-id.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/reference-section-id.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/reference-section-id.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/reference-section-id.mts diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.mts similarity index 86% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.mts index 9d5bbd0b51ff..b110571aedca 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/repo.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {HasRepo} from '../entities/traits'; +import {HasRepo} from '../entities/traits.mjs'; export function addRepo(entry: T, repo: string): T & HasRepo { return { diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.mts similarity index 73% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.mts index e87fb8e4d5d8..6266590fac93 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.ts +++ b/adev/shared-docs/pipeline/api-gen/rendering/transforms/type-alias-transforms.mts @@ -6,18 +6,18 @@ * found in the LICENSE file at https://angular.dev/license */ -import {TypeAliasEntry} from '../entities'; -import {TypeAliasEntryRenderable} from '../entities/renderables'; -import {addRenderableCodeToc} from './code-transforms'; +import {TypeAliasEntry} from '../entities.mjs'; +import {TypeAliasEntryRenderable} from '../entities/renderables.mjs'; +import {addRenderableCodeToc} from './code-transforms.mjs'; import { addHtmlAdditionalLinks, addHtmlDescription, addHtmlJsDocTagComments, addHtmlUsageNotes, setEntryFlags, -} from './jsdoc-transforms'; -import {addModuleName} from './module-name'; -import {addRepo} from './repo'; +} from './jsdoc-transforms.mjs'; +import {addModuleName} from './module-name.mjs'; +import {addRepo} from './repo.mjs'; /** Given an unprocessed type alias entry, get the fully renderable type alias entry. */ export function getTypeAliasRenderable( diff --git a/adev/shared-docs/pipeline/api-gen/rendering/transforms/url-transforms.ts b/adev/shared-docs/pipeline/api-gen/rendering/transforms/url-transforms.mts similarity index 100% rename from adev/shared-docs/pipeline/api-gen/rendering/transforms/url-transforms.ts rename to adev/shared-docs/pipeline/api-gen/rendering/transforms/url-transforms.mts diff --git a/adev/shared-docs/pipeline/api-gen/test/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/test/BUILD.bazel index e4f684bb977d..d38c49004558 100644 --- a/adev/shared-docs/pipeline/api-gen/test/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/test/BUILD.bazel @@ -3,9 +3,9 @@ load("//adev/shared-docs/pipeline/api-gen:generate_api_docs.bzl", "generate_api_ generate_api_docs( name = "test", srcs = ["//adev/shared-docs/pipeline/api-gen/extraction/test:source_files"], - entry_point = "//adev/shared-docs/pipeline/api-gen/extraction/test:fake-source.ts", + entry_point = "//adev/shared-docs/pipeline/api-gen/extraction/test:fake-source.mts", import_map = { - "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.ts": "@angular/dummy-package", + "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.mts": "@angular/dummy-package", }, module_name = "@angular/core", ) @@ -13,10 +13,10 @@ generate_api_docs( generate_api_docs( name = "test_with_extra_entries", srcs = ["//adev/shared-docs/pipeline/api-gen/extraction/test:source_files"], - entry_point = "//adev/shared-docs/pipeline/api-gen/extraction/test:fake-source.ts", + entry_point = "//adev/shared-docs/pipeline/api-gen/extraction/test:fake-source.mts", extra_entries = ["//adev/shared-docs/pipeline/api-gen/extraction/test:extra.json"], import_map = { - "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.ts": "@angular/dummy-package", + "//adev/shared-docs/pipeline/api-gen/extraction/test/dummy-entry-point:index.mts": "@angular/dummy-package", }, module_name = "@angular/core", ) diff --git a/adev/shared-docs/pipeline/examples/previews/BUILD.bazel b/adev/shared-docs/pipeline/examples/previews/BUILD.bazel index 0120c4e23f9c..5e2509225456 100644 --- a/adev/shared-docs/pipeline/examples/previews/BUILD.bazel +++ b/adev/shared-docs/pipeline/examples/previews/BUILD.bazel @@ -1,19 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "index", srcs = [ - "index.ts", + "index.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - "@npm//@types/node", - "@npm//tinyglobby", - "@npm//typescript", + "//:node_modules/@types/node", + "//:node_modules/tinyglobby", + "//:node_modules/typescript", ], ) @@ -24,6 +25,6 @@ filegroup( ) exports_files([ - "index.ts", + "index.mts", "previews.template", ]) diff --git a/adev/shared-docs/pipeline/examples/previews/index.ts b/adev/shared-docs/pipeline/examples/previews/index.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/previews/index.ts rename to adev/shared-docs/pipeline/examples/previews/index.mts diff --git a/adev/shared-docs/pipeline/examples/shared/BUILD.bazel b/adev/shared-docs/pipeline/examples/shared/BUILD.bazel index ca45f14fe463..7d28df862c25 100644 --- a/adev/shared-docs/pipeline/examples/shared/BUILD.bazel +++ b/adev/shared-docs/pipeline/examples/shared/BUILD.bazel @@ -1,15 +1,16 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "shared", srcs = glob( [ - "*.ts", + "*.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - "@npm//@types/node", + "//:node_modules/@types/node", ], ) diff --git a/adev/shared-docs/pipeline/examples/shared/copyright.ts b/adev/shared-docs/pipeline/examples/shared/copyright.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/shared/copyright.ts rename to adev/shared-docs/pipeline/examples/shared/copyright.mts diff --git a/adev/shared-docs/pipeline/examples/shared/file-system.ts b/adev/shared-docs/pipeline/examples/shared/file-system.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/shared/file-system.ts rename to adev/shared-docs/pipeline/examples/shared/file-system.mts diff --git a/adev/shared-docs/pipeline/examples/stackblitz/BUILD.bazel b/adev/shared-docs/pipeline/examples/stackblitz/BUILD.bazel index bc11d3847400..b7b03c5ef869 100644 --- a/adev/shared-docs/pipeline/examples/stackblitz/BUILD.bazel +++ b/adev/shared-docs/pipeline/examples/stackblitz/BUILD.bazel @@ -1,41 +1,43 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "stackblitz", srcs = glob( [ - "*.ts", + "*.mts", ], exclude = [ - "index.ts", + "index.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - "//adev/shared-docs/pipeline/examples/shared", - "//adev/shared-docs/pipeline/guides", - "@npm//@types/jsdom", - "@npm//@types/node", - "@npm//jsdom", - "@npm//tinyglobby", + "//:node_modules/@types/jsdom", + "//:node_modules/@types/node", + "//:node_modules/jsdom", + "//:node_modules/tinyglobby", + "//adev/shared-docs/pipeline/examples/shared:shared_rjs", + "//adev/shared-docs/pipeline/guides:guides_rjs", ], ) -ts_library( +ts_project( name = "index", srcs = [ - "index.ts", + "index.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":stackblitz", - "@npm//@types/node", + ":stackblitz_rjs", + "//:node_modules/@types/node", ], ) exports_files([ - "index.ts", + "index.mts", ]) diff --git a/adev/shared-docs/pipeline/examples/stackblitz/builder.ts b/adev/shared-docs/pipeline/examples/stackblitz/builder.mts similarity index 97% rename from adev/shared-docs/pipeline/examples/stackblitz/builder.ts rename to adev/shared-docs/pipeline/examples/stackblitz/builder.mts index b1a6dd3564f2..e50cd2296344 100644 --- a/adev/shared-docs/pipeline/examples/stackblitz/builder.ts +++ b/adev/shared-docs/pipeline/examples/stackblitz/builder.mts @@ -8,13 +8,13 @@ import {join} from 'path'; import {readFile} from 'fs/promises'; -import {copyFolder, createFolder, removeFolder} from '../shared/file-system'; +import {copyFolder, createFolder, removeFolder} from '../shared/file-system.mjs'; import jsdom from 'jsdom'; import {glob} from 'tinyglobby'; -import {regionParser} from '../../guides/extensions/docs-code/regions/region-parser'; -import {appendCopyrightToFile} from '../shared/copyright'; -import {FileType} from '../../guides/extensions/docs-code/sanitizers/eslint'; -import {EXCLUDE_FILES_FOR_STACKBLITZ, STACKBLITZ_CONFIG_FILENAME} from './defaults'; +import {regionParser} from '../../guides/extensions/docs-code/regions/region-parser.mjs'; +import {appendCopyrightToFile} from '../shared/copyright.mjs'; +import {FileType} from '../../guides/extensions/docs-code/sanitizers/eslint.mjs'; +import {EXCLUDE_FILES_FOR_STACKBLITZ, STACKBLITZ_CONFIG_FILENAME} from './defaults.mjs'; interface StackblitzConfig { title: string; diff --git a/adev/shared-docs/pipeline/examples/stackblitz/defaults.ts b/adev/shared-docs/pipeline/examples/stackblitz/defaults.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/stackblitz/defaults.ts rename to adev/shared-docs/pipeline/examples/stackblitz/defaults.mts diff --git a/adev/shared-docs/pipeline/examples/stackblitz/index.ts b/adev/shared-docs/pipeline/examples/stackblitz/index.mts similarity index 89% rename from adev/shared-docs/pipeline/examples/stackblitz/index.ts rename to adev/shared-docs/pipeline/examples/stackblitz/index.mts index 856c52b4b2a1..6547466330ba 100644 --- a/adev/shared-docs/pipeline/examples/stackblitz/index.ts +++ b/adev/shared-docs/pipeline/examples/stackblitz/index.mts @@ -7,7 +7,7 @@ */ import {writeFileSync} from 'fs'; -import {generateStackblitzExample} from './builder'; +import {generateStackblitzExample} from './builder.mjs'; const [exampleDir, tmpDir, templateDir, outputFilePath] = process.argv.slice(2); const htmlOutputContent = await generateStackblitzExample(exampleDir, tmpDir, templateDir); diff --git a/adev/shared-docs/pipeline/examples/template/src/app/app.component.ts b/adev/shared-docs/pipeline/examples/template/src/app/app.component.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/template/src/app/app.component.ts rename to adev/shared-docs/pipeline/examples/template/src/app/app.component.mts diff --git a/adev/shared-docs/pipeline/examples/template/src/main.ts b/adev/shared-docs/pipeline/examples/template/src/main.mts similarity index 88% rename from adev/shared-docs/pipeline/examples/template/src/main.ts rename to adev/shared-docs/pipeline/examples/template/src/main.mts index fd552b11b051..f28562663237 100644 --- a/adev/shared-docs/pipeline/examples/template/src/main.ts +++ b/adev/shared-docs/pipeline/examples/template/src/main.mts @@ -8,7 +8,7 @@ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {AppComponent} from './app/app.component.mjs'; bootstrapApplication(AppComponent, { providers: [provideProtractorTestingSupport()], diff --git a/adev/shared-docs/pipeline/examples/zip/BUILD.bazel b/adev/shared-docs/pipeline/examples/zip/BUILD.bazel index 730620ae2338..4124c79b7a72 100644 --- a/adev/shared-docs/pipeline/examples/zip/BUILD.bazel +++ b/adev/shared-docs/pipeline/examples/zip/BUILD.bazel @@ -1,41 +1,43 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "zip", srcs = glob( [ - "*.ts", + "*.mts", ], exclude = [ - "index.ts", + "index.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - "//adev/shared-docs/interfaces", - "//adev/shared-docs/pipeline/examples/shared", - "//adev/shared-docs/pipeline/guides", - "@npm//@types/node", - "@npm//fflate", - "@npm//tinyglobby", + "//:node_modules/@types/node", + "//:node_modules/fflate", + "//:node_modules/tinyglobby", + "//adev/shared-docs/interfaces:interfaces_rjs", + "//adev/shared-docs/pipeline/examples/shared:shared_rjs", + "//adev/shared-docs/pipeline/guides:guides_rjs", ], ) -ts_library( +ts_project( name = "index", srcs = [ - "index.ts", + "index.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":zip", - "@npm//@types/node", + ":zip_rjs", + "//:node_modules/@types/node", ], ) exports_files([ - "index.ts", + "index.mts", ]) diff --git a/adev/shared-docs/pipeline/examples/zip/builder.ts b/adev/shared-docs/pipeline/examples/zip/builder.mts similarity index 92% rename from adev/shared-docs/pipeline/examples/zip/builder.ts rename to adev/shared-docs/pipeline/examples/zip/builder.mts index fc74cc71c893..410c2cd3161b 100644 --- a/adev/shared-docs/pipeline/examples/zip/builder.ts +++ b/adev/shared-docs/pipeline/examples/zip/builder.mts @@ -8,12 +8,12 @@ import {join} from 'path'; import {readFile} from 'fs/promises'; -import {copyFolder, createFolder} from '../shared/file-system'; +import {copyFolder, createFolder} from '../shared/file-system.mjs'; import {glob} from 'tinyglobby'; -import {regionParser} from '../../guides/extensions/docs-code/regions/region-parser'; -import {appendCopyrightToFile} from '../shared/copyright'; -import {FileType} from '../../guides/extensions/docs-code/sanitizers/eslint'; -import {EXCLUDE_FILES, CONFIG_FILENAME} from './defaults'; +import {regionParser} from '../../guides/extensions/docs-code/regions/region-parser.mjs'; +import {appendCopyrightToFile} from '../shared/copyright.mjs'; +import {FileType} from '../../guides/extensions/docs-code/sanitizers/eslint.mjs'; +import {EXCLUDE_FILES, CONFIG_FILENAME} from './defaults.mjs'; import {zip, strToU8} from 'fflate'; import {FileAndContent} from '../../../interfaces'; diff --git a/adev/shared-docs/pipeline/examples/zip/defaults.ts b/adev/shared-docs/pipeline/examples/zip/defaults.mts similarity index 100% rename from adev/shared-docs/pipeline/examples/zip/defaults.ts rename to adev/shared-docs/pipeline/examples/zip/defaults.mts diff --git a/adev/shared-docs/pipeline/examples/zip/index.ts b/adev/shared-docs/pipeline/examples/zip/index.mts similarity index 89% rename from adev/shared-docs/pipeline/examples/zip/index.ts rename to adev/shared-docs/pipeline/examples/zip/index.mts index a9878dab74ae..266b33534df8 100644 --- a/adev/shared-docs/pipeline/examples/zip/index.ts +++ b/adev/shared-docs/pipeline/examples/zip/index.mts @@ -7,7 +7,7 @@ */ import {writeFileSync} from 'fs'; -import {generateZipExample} from './builder'; +import {generateZipExample} from './builder.mjs'; const [exampleDir, tmpDir, templateDir, outputFilePath] = process.argv.slice(2); const zipContent = await generateZipExample(exampleDir, tmpDir, templateDir); diff --git a/adev/shared-docs/pipeline/guides/BUILD.bazel b/adev/shared-docs/pipeline/guides/BUILD.bazel index 0b17f67af6f2..6661db76b81c 100644 --- a/adev/shared-docs/pipeline/guides/BUILD.bazel +++ b/adev/shared-docs/pipeline/guides/BUILD.bazel @@ -1,46 +1,49 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "guides", srcs = glob( [ - "**/*.ts", + "**/*.mts", + "shiki.d.ts", ], - exclude = ["index.ts"], + exclude = ["index.mts"], ), + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - "@npm//@bazel/runfiles", - "@npm//@types/diff", - "@npm//@types/jsdom", - "@npm//@types/node", - "@npm//diff", - "@npm//emoji-regex", - "@npm//html-entities", - "@npm//jsdom", - "@npm//marked", - "@npm//mermaid", - "@npm//playwright-core", - "@npm//shiki", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/diff", + "//:node_modules/@types/jsdom", + "//:node_modules/@types/node", + "//:node_modules/diff", + "//:node_modules/emoji-regex", + "//:node_modules/html-entities", + "//:node_modules/jsdom", + "//:node_modules/marked", + "//:node_modules/mermaid", + "//:node_modules/playwright-core", + "//:node_modules/shiki", ], ) -ts_library( +ts_project( name = "index", srcs = [ - "index.ts", + "index.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":guides", - "@npm//@types/node", + ":guides_rjs", + "//:node_modules/@types/node", ], ) exports_files([ - "index.ts", + "index.mts", ]) diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-alert.ts b/adev/shared-docs/pipeline/guides/extensions/docs-alert.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-alert.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-alert.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-callout.ts b/adev/shared-docs/pipeline/guides/extensions/docs-callout.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-callout.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-callout.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card-container.ts b/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card-container.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card-container.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card-container.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.ts b/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.mts index 104202f9ffc1..f6682b251861 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-card/docs-card.mts @@ -7,8 +7,8 @@ */ import {Tokens, Token, RendererThis, TokenizerThis} from 'marked'; -import {anchorTarget} from '../../helpers'; -import {loadWorkspaceRelativeFile} from '../../utils'; +import {anchorTarget} from '../../helpers.mjs'; +import {loadWorkspaceRelativeFile} from '../../utils.mjs'; interface DocsCardToken extends Tokens.Generic { type: 'docs-card'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.mts index c380014f8d8b..9fb206d1d262 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-block.mts @@ -7,7 +7,7 @@ */ import {TokenizerThis, RendererThis} from 'marked'; -import {CodeToken, formatCode} from './format/index'; +import {CodeToken, formatCode} from './format/index.mjs'; export interface DocsCodeBlock extends CodeToken { type: 'docs-code-block'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-multifile.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-multifile.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-multifile.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code-multifile.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.mts similarity index 95% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.mts index bccab0cea264..29b045794f74 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/docs-code.mts @@ -7,9 +7,9 @@ */ import {TokenizerThis, RendererThis} from 'marked'; -import {CodeToken, formatCode} from './format/index'; -import {FileType, removeEslintComments} from './sanitizers/eslint'; -import {loadWorkspaceRelativeFile} from '../../utils'; +import {CodeToken, formatCode} from './format/index.mjs'; +import {FileType, removeEslintComments} from './sanitizers/eslint.mjs'; +import {loadWorkspaceRelativeFile} from '../../utils.mjs'; /** Marked token for a custom docs element. */ export interface DocsCodeToken extends CodeToken { diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.mts similarity index 93% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.mts index a2c938f0ac40..cb65027876f4 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/diff.mts @@ -7,8 +7,8 @@ */ import {diffLines, Change as DiffChange} from 'diff'; -import {CodeToken} from './index'; -import {loadWorkspaceRelativeFile} from '../../../utils'; +import {CodeToken} from './index.mjs'; +import {loadWorkspaceRelativeFile} from '../../../utils.mjs'; export interface DiffMetadata { code: string; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.mts index 8c4bf5050596..a08fe328dd45 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/highlight.mts @@ -7,8 +7,8 @@ */ import {decode} from 'html-entities'; -import {CodeToken} from './index'; -import {expandRangeStringValues} from './range'; +import {CodeToken} from './index.mjs'; +import {expandRangeStringValues} from './range.mjs'; import {JSDOM} from 'jsdom'; import {createHighlighter, HighlighterGeneric} from 'shiki'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.mts similarity index 92% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.mts index bf3b24345851..8d1fce1fa817 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/index.mts @@ -7,11 +7,11 @@ */ import {Tokens} from 'marked'; -import {DiffMetadata, calculateDiff} from './diff'; -import {highlightCode} from './highlight'; -import {extractRegions} from './region'; +import {DiffMetadata, calculateDiff} from './diff.mjs'; +import {highlightCode} from './highlight.mjs'; +import {extractRegions} from './region.mjs'; import {JSDOM} from 'jsdom'; -import {expandRangeStringValues} from './range'; +import {expandRangeStringValues} from './range.mjs'; /** Marked token for a custom docs element. */ export interface CodeToken extends Tokens.Generic { diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/range.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/range.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/format/range.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/format/range.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.mts similarity index 86% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.mts index 374556f78928..31c33e8dc2f6 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/format/region.mts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import {CodeToken} from './index'; -import {regionParser} from '../regions/region-parser'; -import {FileType} from '../sanitizers/eslint'; +import {CodeToken} from './index.mjs'; +import {regionParser} from '../regions/region-parser.mjs'; +import {FileType} from '../sanitizers/eslint.mjs'; /** * Updates the provided token to include the extracted region as the visible lines for the token. diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/block-c.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/block-c.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/block-c.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/block-c.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/html.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/html.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/html.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/html.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c-only.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c-only.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c-only.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c-only.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-c.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-hash.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-hash.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-hash.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-matchers/inline-hash.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.mts similarity index 95% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.mts index c6e4c32e705a..f7026880ff27 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-code/regions/region-parser.mts @@ -11,11 +11,11 @@ // This also allows for documentation to be included within the source code more easily // in an extractable manner. -import * as blockC from './region-matchers/block-c'; -import * as html from './region-matchers/html'; -import * as inlineC from './region-matchers/inline-c'; -import * as inlineCOnly from './region-matchers/inline-c-only'; -import * as inlineHash from './region-matchers/inline-hash'; +import * as blockC from './region-matchers/block-c.mjs'; +import * as html from './region-matchers/html.mjs'; +import * as inlineC from './region-matchers/inline-c.mjs'; +import * as inlineCOnly from './region-matchers/inline-c-only.mjs'; +import * as inlineHash from './region-matchers/inline-hash.mjs'; const WHOLE_FILE_REGION_NAME = ''; const DEFAULT_PLASTER = '. . .'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-code/sanitizers/eslint.ts b/adev/shared-docs/pipeline/guides/extensions/docs-code/sanitizers/eslint.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-code/sanitizers/eslint.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-code/sanitizers/eslint.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.ts b/adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.mts index e602188e0594..3e465ddd26f7 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-decorative-header.mts @@ -7,7 +7,7 @@ */ import {TokenizerThis, Tokens, RendererThis} from 'marked'; -import {getPageTitle, loadWorkspaceRelativeFile} from '../utils'; +import {getPageTitle, loadWorkspaceRelativeFile} from '../utils.mjs'; interface DocsDecorativeHeaderToken extends Tokens.Generic { type: 'docs-decorative-header'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill-row.ts b/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill-row.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill-row.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill-row.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.ts b/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.mts index 42ee838e09dd..8e9d0c9bb2ad 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-pill/docs-pill.mts @@ -7,7 +7,7 @@ */ import {Token, Tokens, RendererThis, TokenizerThis} from 'marked'; -import {anchorTarget, isExternalLink} from '../../helpers'; +import {anchorTarget, isExternalLink} from '../../helpers.mjs'; interface DocsPillToken extends Tokens.Generic { type: 'docs-pill'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-video.ts b/adev/shared-docs/pipeline/guides/extensions/docs-video.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-video.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-video.mts diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.ts b/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.mts index 36b1fcab6410..e171a8ea163f 100644 --- a/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.ts +++ b/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-step.mts @@ -7,7 +7,7 @@ */ import {Token, Tokens, RendererThis, TokenizerThis} from 'marked'; -import {formatHeading} from '../../tranformations/heading'; +import {formatHeading} from '../../tranformations/heading.mjs'; interface DocsStepToken extends Tokens.Generic { type: 'docs-step'; diff --git a/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-workflow.ts b/adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-workflow.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-workflow.ts rename to adev/shared-docs/pipeline/guides/extensions/docs-workflow/docs-workflow.mts diff --git a/adev/shared-docs/pipeline/guides/helpers.ts b/adev/shared-docs/pipeline/guides/helpers.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/helpers.ts rename to adev/shared-docs/pipeline/guides/helpers.mts diff --git a/adev/shared-docs/pipeline/guides/hooks.ts b/adev/shared-docs/pipeline/guides/hooks.mts similarity index 90% rename from adev/shared-docs/pipeline/guides/hooks.ts rename to adev/shared-docs/pipeline/guides/hooks.mts index a5a2b967a816..f85deae66e02 100644 --- a/adev/shared-docs/pipeline/guides/hooks.ts +++ b/adev/shared-docs/pipeline/guides/hooks.mts @@ -7,7 +7,7 @@ */ import {MarkedExtension} from 'marked'; -import {resetHeaderIdsOfCurrentDocument} from './state'; +import {resetHeaderIdsOfCurrentDocument} from './state.mjs'; /** * Custom hooks for marked that will be used to post-transform markdown files with parent styles for docs. diff --git a/adev/shared-docs/pipeline/guides/index.ts b/adev/shared-docs/pipeline/guides/index.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/index.ts rename to adev/shared-docs/pipeline/guides/index.mts index effa5057ca42..bf48761cbffa 100644 --- a/adev/shared-docs/pipeline/guides/index.ts +++ b/adev/shared-docs/pipeline/guides/index.mts @@ -8,8 +8,8 @@ import {readFileSync, writeFileSync} from 'fs'; import path from 'path'; -import {parseMarkdown} from './parse'; -import {initHighlighter} from './extensions/docs-code/format/highlight'; +import {parseMarkdown} from './parse.mjs'; +import {initHighlighter} from './extensions/docs-code/format/highlight.mjs'; async function main() { const [paramFilePath] = process.argv.slice(2); diff --git a/adev/shared-docs/pipeline/guides/mermaid/index.ts b/adev/shared-docs/pipeline/guides/mermaid/index.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/mermaid/index.ts rename to adev/shared-docs/pipeline/guides/mermaid/index.mts index 118d2980f1d9..7498a3678349 100644 --- a/adev/shared-docs/pipeline/guides/mermaid/index.ts +++ b/adev/shared-docs/pipeline/guides/mermaid/index.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DocsCodeToken} from '../extensions/docs-code/docs-code'; +import {DocsCodeToken} from '../extensions/docs-code/docs-code.mjs'; import {chromium} from 'playwright-core'; import {Mermaid, MermaidConfig} from 'mermaid'; import {runfiles} from '@bazel/runfiles'; diff --git a/adev/shared-docs/pipeline/guides/parse.ts b/adev/shared-docs/pipeline/guides/parse.mts similarity index 76% rename from adev/shared-docs/pipeline/guides/parse.ts rename to adev/shared-docs/pipeline/guides/parse.mts index cf17a734be95..01db329aad89 100644 --- a/adev/shared-docs/pipeline/guides/parse.ts +++ b/adev/shared-docs/pipeline/guides/parse.mts @@ -7,23 +7,23 @@ */ import {marked} from 'marked'; -import {hooks} from './hooks'; -import {Renderer} from './renderer'; -import {docsAlertExtension} from './extensions/docs-alert'; -import {docsCalloutExtension} from './extensions/docs-callout'; -import {docsPillExtension} from './extensions/docs-pill/docs-pill'; -import {docsPillRowExtension} from './extensions/docs-pill/docs-pill-row'; -import {docsVideoExtension} from './extensions/docs-video'; -import {docsWorkflowExtension} from './extensions/docs-workflow/docs-workflow'; -import {docsStepExtension} from './extensions/docs-workflow/docs-step'; -import {docsCardExtension} from './extensions/docs-card/docs-card'; -import {docsCardContainerExtension} from './extensions/docs-card/docs-card-container'; -import {docsDecorativeHeaderExtension} from './extensions/docs-decorative-header'; -import {docsCodeBlockExtension} from './extensions/docs-code/docs-code-block'; -import {docsCodeExtension} from './extensions/docs-code/docs-code'; -import {docsCodeMultifileExtension} from './extensions/docs-code/docs-code-multifile'; -import {ParserContext, setContext} from './utils'; -import {walkTokens} from './walk-tokens'; +import {hooks} from './hooks.mjs'; +import {Renderer} from './renderer.mjs'; +import {docsAlertExtension} from './extensions/docs-alert.mjs'; +import {docsCalloutExtension} from './extensions/docs-callout.mjs'; +import {docsPillExtension} from './extensions/docs-pill/docs-pill.mjs'; +import {docsPillRowExtension} from './extensions/docs-pill/docs-pill-row.mjs'; +import {docsVideoExtension} from './extensions/docs-video.mjs'; +import {docsWorkflowExtension} from './extensions/docs-workflow/docs-workflow.mjs'; +import {docsStepExtension} from './extensions/docs-workflow/docs-step.mjs'; +import {docsCardExtension} from './extensions/docs-card/docs-card.mjs'; +import {docsCardContainerExtension} from './extensions/docs-card/docs-card-container.mjs'; +import {docsDecorativeHeaderExtension} from './extensions/docs-decorative-header.mjs'; +import {docsCodeBlockExtension} from './extensions/docs-code/docs-code-block.mjs'; +import {docsCodeExtension} from './extensions/docs-code/docs-code.mjs'; +import {docsCodeMultifileExtension} from './extensions/docs-code/docs-code-multifile.mjs'; +import {ParserContext, setContext} from './utils.mjs'; +import {walkTokens} from './walk-tokens.mjs'; export async function parseMarkdown( markdownContent: string, diff --git a/adev/shared-docs/pipeline/guides/renderer.ts b/adev/shared-docs/pipeline/guides/renderer.mts similarity index 65% rename from adev/shared-docs/pipeline/guides/renderer.ts rename to adev/shared-docs/pipeline/guides/renderer.mts index 97d645182729..51a819b54f22 100644 --- a/adev/shared-docs/pipeline/guides/renderer.ts +++ b/adev/shared-docs/pipeline/guides/renderer.mts @@ -7,12 +7,12 @@ */ import {Renderer as _Renderer} from 'marked'; -import {linkRender} from './tranformations/link'; -import {tableRender} from './tranformations/table'; -import {listRender} from './tranformations/list'; -import {imageRender} from './tranformations/image'; -import {textRender} from './tranformations/text'; -import {headingRender} from './tranformations/heading'; +import {linkRender} from './tranformations/link.mjs'; +import {tableRender} from './tranformations/table.mjs'; +import {listRender} from './tranformations/list.mjs'; +import {imageRender} from './tranformations/image.mjs'; +import {textRender} from './tranformations/text.mjs'; +import {headingRender} from './tranformations/heading.mjs'; /** * Custom renderer for marked that will be used to transform markdown files to HTML diff --git a/adev/shared-docs/pipeline/guides/index.d.ts b/adev/shared-docs/pipeline/guides/shiki.d.ts similarity index 100% rename from adev/shared-docs/pipeline/guides/index.d.ts rename to adev/shared-docs/pipeline/guides/shiki.d.ts diff --git a/adev/shared-docs/pipeline/guides/state.ts b/adev/shared-docs/pipeline/guides/state.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/state.ts rename to adev/shared-docs/pipeline/guides/state.mts diff --git a/adev/shared-docs/pipeline/guides/testing/BUILD.bazel b/adev/shared-docs/pipeline/guides/testing/BUILD.bazel index 22d81127f7c8..46f22de05231 100644 --- a/adev/shared-docs/pipeline/guides/testing/BUILD.bazel +++ b/adev/shared-docs/pipeline/guides/testing/BUILD.bazel @@ -1,25 +1,28 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "unit_test_lib", testonly = True, srcs = glob([ - "**/*.spec.ts", + "**/*.spec.mts", ]), + tsconfig = "//adev/shared-docs:tsconfig_test", deps = [ - "//adev/shared-docs/pipeline/guides", - "@npm//@bazel/runfiles", - "@npm//@types/jsdom", - "@npm//jsdom", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/jsdom", + "//:node_modules/jsdom", + "//adev/shared-docs/pipeline/guides:guides_rjs", ], ) -ts_library( +ts_project( name = "bootstrap", testonly = True, srcs = [ - "bootstrap.init.ts", + "bootstrap.init.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) jasmine_node_test( diff --git a/packages/core/schematics/migrations/google3/index.ts b/adev/shared-docs/pipeline/guides/testing/bootstrap.init.mts similarity index 72% rename from packages/core/schematics/migrations/google3/index.ts rename to adev/shared-docs/pipeline/guides/testing/bootstrap.init.mts index bf2fef5718ea..5033de4286c3 100644 --- a/packages/core/schematics/migrations/google3/index.ts +++ b/adev/shared-docs/pipeline/guides/testing/bootstrap.init.mts @@ -6,4 +6,4 @@ * found in the LICENSE file at https://angular.dev/license */ -export {Rule as WaitForAsyncRule} from './waitForAsyncRule'; +// HANDLE_MERMAID is implicitly false as unit testing does not handle mermaid. diff --git a/adev/shared-docs/pipeline/guides/testing/bootstrap.init.ts b/adev/shared-docs/pipeline/guides/testing/bootstrap.init.ts deleted file mode 100644 index 265dfd15480c..000000000000 --- a/adev/shared-docs/pipeline/guides/testing/bootstrap.init.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -// Set HANDLE_MERMAID to false as unit testing does not handle mermaid. -(global as any).HANDLE_MERMAID = false; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.mts index c9c7b0331c5f..8467de76166c 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-alert/docs-alert.spec.mts @@ -10,8 +10,8 @@ import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {AlertSeverityLevel} from '../../../guides/extensions/docs-alert'; -import {parseMarkdown} from '../../../guides/parse'; +import {AlertSeverityLevel} from '../../../guides/extensions/docs-alert.mjs'; +import {parseMarkdown} from '../../../guides/parse.mjs'; describe('markdown to html', () => { let markdownDocument: DocumentFragment; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.mts similarity index 93% rename from adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.mts index 3f1e94968524..0373591cc1a3 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-callout/docs-callout.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.mts index 922c55f1e66b..826ef4fe32a2 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-card-container/docs-card-container.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.mts index 5a3a913f09e1..59651d70540e 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-card/docs-card.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.mts similarity index 93% rename from adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.mts index 6e26f399e988..a0c531d778ee 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-code-block/docs-code-block.spec.mts @@ -6,11 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {initHighlighter} from '../../extensions/docs-code/format/highlight'; +import {initHighlighter} from '../../extensions/docs-code/format/highlight.mjs'; describe('markdown to html', () => { let markdownDocument: DocumentFragment; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.mts index 0a26b3409992..4853023ca6c0 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-code-multifile/docs-code-multifile.spec.mts @@ -6,11 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {initHighlighter} from '../../extensions/docs-code/format/highlight'; +import {initHighlighter} from '../../extensions/docs-code/format/highlight.mjs'; describe('markdown to html', () => { let markdownDocument: DocumentFragment; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.mts index adc7aa974d77..e5f35e4c8302 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-code/docs-code.spec.mts @@ -6,11 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; -import {initHighlighter} from '../../extensions/docs-code/format/highlight'; +import {initHighlighter} from '../../extensions/docs-code/format/highlight.mjs'; describe('markdown to html', () => { let markdownDocument: DocumentFragment; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.mts similarity index 95% rename from adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.mts index 31d3b34fa4ee..41faa5e1d67d 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-decorative-header/docs-decorative-header.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.mts index e3248f3546cd..5db6d0d89dfb 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-pill-row/docs-pill-row.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.mts index fd6f524b26bc..822fccf998c0 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-pill/docs-pill.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.mts similarity index 97% rename from adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.mts index 7dc1c81fc5ed..f60bc139aaac 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-step/docs-step.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.mts similarity index 95% rename from adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.mts index a738c20837d2..3d9d934a9c91 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-video/docs-video.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.ts b/adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.ts rename to adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.mts index ec3c7f07e57e..25ef5b55be0b 100644 --- a/adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/docs-workflow/docs-workflow.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/heading/heading.spec.ts b/adev/shared-docs/pipeline/guides/testing/heading/heading.spec.mts similarity index 98% rename from adev/shared-docs/pipeline/guides/testing/heading/heading.spec.ts rename to adev/shared-docs/pipeline/guides/testing/heading/heading.spec.mts index 7bf80539f7c5..364aba6b7dba 100644 --- a/adev/shared-docs/pipeline/guides/testing/heading/heading.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/heading/heading.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/image/image.spec.ts b/adev/shared-docs/pipeline/guides/testing/image/image.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/image/image.spec.ts rename to adev/shared-docs/pipeline/guides/testing/image/image.spec.mts index ceba5ebfb6b3..6cd8e35efa54 100644 --- a/adev/shared-docs/pipeline/guides/testing/image/image.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/image/image.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/link/link.spec.ts b/adev/shared-docs/pipeline/guides/testing/link/link.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/link/link.spec.ts rename to adev/shared-docs/pipeline/guides/testing/link/link.spec.mts index ca416e323a3e..a503b849aaea 100644 --- a/adev/shared-docs/pipeline/guides/testing/link/link.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/link/link.spec.mts @@ -7,7 +7,7 @@ */ import {readFile} from 'fs/promises'; -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; describe('markdown to html', () => { diff --git a/adev/shared-docs/pipeline/guides/testing/list/list.spec.ts b/adev/shared-docs/pipeline/guides/testing/list/list.spec.mts similarity index 96% rename from adev/shared-docs/pipeline/guides/testing/list/list.spec.ts rename to adev/shared-docs/pipeline/guides/testing/list/list.spec.mts index 0a0b850fea1a..5462fa9e12d3 100644 --- a/adev/shared-docs/pipeline/guides/testing/list/list.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/list/list.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/testing/mermaid/BUILD.bazel b/adev/shared-docs/pipeline/guides/testing/mermaid/BUILD.bazel index 4f1909fb9659..a80a4c10d10f 100644 --- a/adev/shared-docs/pipeline/guides/testing/mermaid/BUILD.bazel +++ b/adev/shared-docs/pipeline/guides/testing/mermaid/BUILD.bazel @@ -1,24 +1,30 @@ -load("//tools:defaults.bzl", "esbuild_jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "esbuild_jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "unit_test_lib", testonly = True, srcs = glob([ - "*.spec.ts", + "*.spec.mts", ]), + tsconfig = "//adev/shared-docs:tsconfig_test", deps = [ - "//adev/shared-docs/pipeline/guides", - "@npm//@types/jsdom", - "@npm//jsdom", - "@npm//marked", + "//:node_modules/@types/jsdom", + "//:node_modules/jsdom", + "//:node_modules/marked", + "//adev/shared-docs/pipeline/guides:guides_rjs", ], ) -ts_library( +ts_project( name = "bootstrap", testonly = True, srcs = [ - "bootstrap.init.ts", + "bootstrap.init.mts", + ], + tsconfig = "//adev/shared-docs:tsconfig_test", + deps = [ + "//:node_modules/@types/node", ], ) @@ -35,7 +41,7 @@ esbuild_jasmine_node_test( ] + glob([ "**/*.md", "**/*.svg", - "**/*.ts", + "**/*.mts", ]), env = { "CHROME_BIN": "$(CHROMIUM)", diff --git a/adev/shared-docs/pipeline/guides/testing/mermaid/bootstrap.init.ts b/adev/shared-docs/pipeline/guides/testing/mermaid/bootstrap.init.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/testing/mermaid/bootstrap.init.ts rename to adev/shared-docs/pipeline/guides/testing/mermaid/bootstrap.init.mts diff --git a/adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.ts b/adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.mts similarity index 93% rename from adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.ts rename to adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.mts index f27dfc6e21e7..2251ce651476 100644 --- a/adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/mermaid/mermaid.spec.mts @@ -8,8 +8,8 @@ import {JSDOM} from 'jsdom'; import {marked} from 'marked'; -import {docsCodeBlockExtension} from '../../extensions/docs-code/docs-code-block'; -import {walkTokens} from '../../walk-tokens'; +import {docsCodeBlockExtension} from '../../extensions/docs-code/docs-code-block.mjs'; +import {walkTokens} from '../../walk-tokens.mjs'; describe('markdown to html', () => { let markdownDocument: DocumentFragment; diff --git a/adev/shared-docs/pipeline/guides/testing/table/table.spec.ts b/adev/shared-docs/pipeline/guides/testing/table/table.spec.mts similarity index 95% rename from adev/shared-docs/pipeline/guides/testing/table/table.spec.ts rename to adev/shared-docs/pipeline/guides/testing/table/table.spec.mts index 63a44d043fbe..d66b98e3be23 100644 --- a/adev/shared-docs/pipeline/guides/testing/table/table.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/table/table.spec.mts @@ -7,7 +7,7 @@ */ import {readFile} from 'fs/promises'; -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; describe('markdown to html', () => { diff --git a/adev/shared-docs/pipeline/guides/testing/text/text.spec.ts b/adev/shared-docs/pipeline/guides/testing/text/text.spec.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/testing/text/text.spec.ts rename to adev/shared-docs/pipeline/guides/testing/text/text.spec.mts index ee7ab095a80f..fa5e5f83e88a 100644 --- a/adev/shared-docs/pipeline/guides/testing/text/text.spec.ts +++ b/adev/shared-docs/pipeline/guides/testing/text/text.spec.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {parseMarkdown} from '../../../guides/parse'; +import {parseMarkdown} from '../../../guides/parse.mjs'; import {runfiles} from '@bazel/runfiles'; import {readFile} from 'fs/promises'; import {JSDOM} from 'jsdom'; diff --git a/adev/shared-docs/pipeline/guides/tranformations/heading.ts b/adev/shared-docs/pipeline/guides/tranformations/heading.mts similarity index 94% rename from adev/shared-docs/pipeline/guides/tranformations/heading.ts rename to adev/shared-docs/pipeline/guides/tranformations/heading.mts index 1c86fd37da33..06bfc43e0bf0 100644 --- a/adev/shared-docs/pipeline/guides/tranformations/heading.ts +++ b/adev/shared-docs/pipeline/guides/tranformations/heading.mts @@ -8,8 +8,8 @@ import {Renderer, Tokens} from 'marked'; -import {getHeaderId} from '../state'; -import {getPageTitle} from '../utils'; +import {getHeaderId} from '../state.mjs'; +import {getPageTitle} from '../utils.mjs'; export function headingRender(this: Renderer, {depth, tokens}: Tokens.Heading): string { const text = this?.parser.parseInline(tokens); diff --git a/adev/shared-docs/pipeline/guides/tranformations/image.ts b/adev/shared-docs/pipeline/guides/tranformations/image.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/tranformations/image.ts rename to adev/shared-docs/pipeline/guides/tranformations/image.mts diff --git a/adev/shared-docs/pipeline/guides/tranformations/link.ts b/adev/shared-docs/pipeline/guides/tranformations/link.mts similarity index 91% rename from adev/shared-docs/pipeline/guides/tranformations/link.ts rename to adev/shared-docs/pipeline/guides/tranformations/link.mts index 9ca727ebceea..4ccebec8f139 100644 --- a/adev/shared-docs/pipeline/guides/tranformations/link.ts +++ b/adev/shared-docs/pipeline/guides/tranformations/link.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {anchorTarget} from '../helpers'; +import {anchorTarget} from '../helpers.mjs'; import {Renderer, Tokens} from 'marked'; export function linkRender(this: Renderer, {href, title, tokens}: Tokens.Link) { diff --git a/adev/shared-docs/pipeline/guides/tranformations/list.ts b/adev/shared-docs/pipeline/guides/tranformations/list.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/tranformations/list.ts rename to adev/shared-docs/pipeline/guides/tranformations/list.mts diff --git a/adev/shared-docs/pipeline/guides/tranformations/table.ts b/adev/shared-docs/pipeline/guides/tranformations/table.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/tranformations/table.ts rename to adev/shared-docs/pipeline/guides/tranformations/table.mts diff --git a/adev/shared-docs/pipeline/guides/tranformations/text.ts b/adev/shared-docs/pipeline/guides/tranformations/text.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/tranformations/text.ts rename to adev/shared-docs/pipeline/guides/tranformations/text.mts diff --git a/adev/shared-docs/pipeline/guides/utils.ts b/adev/shared-docs/pipeline/guides/utils.mts similarity index 100% rename from adev/shared-docs/pipeline/guides/utils.ts rename to adev/shared-docs/pipeline/guides/utils.mts diff --git a/adev/shared-docs/pipeline/guides/walk-tokens.ts b/adev/shared-docs/pipeline/guides/walk-tokens.mts similarity index 85% rename from adev/shared-docs/pipeline/guides/walk-tokens.ts rename to adev/shared-docs/pipeline/guides/walk-tokens.mts index 17c709f07e34..169572371a29 100644 --- a/adev/shared-docs/pipeline/guides/walk-tokens.ts +++ b/adev/shared-docs/pipeline/guides/walk-tokens.mts @@ -7,7 +7,7 @@ */ import {Token} from 'marked'; -import {DocsCodeToken} from './extensions/docs-code/docs-code'; +import {DocsCodeToken} from './extensions/docs-code/docs-code.mjs'; /** * Describe a HANDLE_MERMAID value which esbuild will use at build time to determine if the mermaid @@ -25,14 +25,14 @@ function isDocsCodeToken(token: Token): token is DocsCodeToken { * Handle the provided token based on the token itself replacing its content/data in place * as appropriate. */ -let mermaid: typeof import('./mermaid'); +let mermaid: typeof import('./mermaid/index.mjs'); export async function walkTokens(token: Token): Promise { if (!isDocsCodeToken(token) || token.language !== 'mermaid') { return; } if (HANDLE_MERMAID) { - mermaid ??= await import('./mermaid'); + mermaid ??= await import('./mermaid/index.mjs'); return mermaid.processMermaidCodeBlock(token); } } diff --git a/adev/shared-docs/pipeline/navigation/BUILD.bazel b/adev/shared-docs/pipeline/navigation/BUILD.bazel index 40db87b4dddf..05592b6b2312 100644 --- a/adev/shared-docs/pipeline/navigation/BUILD.bazel +++ b/adev/shared-docs/pipeline/navigation/BUILD.bazel @@ -1,36 +1,38 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "lib", srcs = glob( [ - "*.ts", + "*.mts", ], exclude = [ - "index.ts", + "index.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - "//adev/shared-docs/interfaces", - "@npm//@types/node", - "@npm//@webcontainer/api", - "@npm//tinyglobby", + "//:node_modules/@types/node", + "//:node_modules/@webcontainer/api", + "//:node_modules/tinyglobby", + "//adev/shared-docs/interfaces:interfaces_rjs", ], ) -ts_library( +ts_project( name = "navigation", srcs = [ - "index.ts", + "index.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":lib", + ":lib_rjs", + "//:node_modules/@types/node", "//adev/shared-docs/interfaces", - "@npm//@types/node", ], ) diff --git a/adev/shared-docs/pipeline/navigation/index.ts b/adev/shared-docs/pipeline/navigation/index.mts similarity index 86% rename from adev/shared-docs/pipeline/navigation/index.ts rename to adev/shared-docs/pipeline/navigation/index.mts index 38583b76d95b..99cf5b64aa6e 100644 --- a/adev/shared-docs/pipeline/navigation/index.ts +++ b/adev/shared-docs/pipeline/navigation/index.mts @@ -7,8 +7,8 @@ */ import {readFileSync, writeFileSync} from 'fs'; -import {generateNavItems} from './nav-items-gen'; -import {getNavItemGenStrategy} from './strategies'; +import {generateNavItems} from './nav-items-gen.mjs'; +import {getNavItemGenStrategy} from './strategies.mjs'; async function main() { const [paramFilePath] = process.argv.slice(2); diff --git a/adev/shared-docs/pipeline/navigation/nav-items-gen.ts b/adev/shared-docs/pipeline/navigation/nav-items-gen.mts similarity index 96% rename from adev/shared-docs/pipeline/navigation/nav-items-gen.ts rename to adev/shared-docs/pipeline/navigation/nav-items-gen.mts index 0e6e58f23eaf..713c59a36e4a 100644 --- a/adev/shared-docs/pipeline/navigation/nav-items-gen.ts +++ b/adev/shared-docs/pipeline/navigation/nav-items-gen.mts @@ -11,7 +11,7 @@ import readline from 'readline'; import {basename, dirname, resolve} from 'path'; import {NavigationItem} from '../../interfaces'; -import {NavigationItemGenerationStrategy} from './types'; +import {NavigationItemGenerationStrategy} from './types.mjs'; /** * Generate navigations items by a provided strategy. diff --git a/adev/shared-docs/pipeline/navigation/strategies.ts b/adev/shared-docs/pipeline/navigation/strategies.mts similarity index 99% rename from adev/shared-docs/pipeline/navigation/strategies.ts rename to adev/shared-docs/pipeline/navigation/strategies.mts index f817fcdf6778..e8251e9440c7 100644 --- a/adev/shared-docs/pipeline/navigation/strategies.ts +++ b/adev/shared-docs/pipeline/navigation/strategies.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {NavigationItemGenerationStrategy, Strategy} from './types'; +import {NavigationItemGenerationStrategy, Strategy} from './types.mjs'; // Should point to the website content. // Update, if the location is updated or shared-docs is extracted from `adev/`. diff --git a/adev/shared-docs/pipeline/navigation/test/BUILD.bazel b/adev/shared-docs/pipeline/navigation/test/BUILD.bazel index b7472dbe0265..a2ee28bf4bec 100644 --- a/adev/shared-docs/pipeline/navigation/test/BUILD.bazel +++ b/adev/shared-docs/pipeline/navigation/test/BUILD.bazel @@ -1,13 +1,16 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//adev/shared-docs/pipeline/navigation:__subpackages__"]) -ts_library( +ts_project( name = "unit_test_lib", testonly = True, - srcs = glob(["*.spec.ts"]), + srcs = glob(["*.spec.mts"]), + tsconfig = "//adev/shared-docs:tsconfig_test", deps = [ - "//adev/shared-docs/pipeline/navigation:lib", + "//:node_modules/@types/node", + "//adev/shared-docs/pipeline/navigation:lib_rjs", ], ) diff --git a/adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.ts b/adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.mts similarity index 91% rename from adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.ts rename to adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.mts index 0612521bf05a..833348992482 100644 --- a/adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.ts +++ b/adev/shared-docs/pipeline/navigation/test/nav-items-gen.spec.mts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {generateNavItems} from '../nav-items-gen'; -import {NavigationItemGenerationStrategy} from '../types'; +import {generateNavItems} from '../nav-items-gen.mjs'; +import {NavigationItemGenerationStrategy} from '../types.mjs'; import fs from 'fs'; import readline from 'readline'; diff --git a/adev/shared-docs/pipeline/navigation/types.ts b/adev/shared-docs/pipeline/navigation/types.mts similarity index 100% rename from adev/shared-docs/pipeline/navigation/types.ts rename to adev/shared-docs/pipeline/navigation/types.mts diff --git a/adev/shared-docs/pipeline/tutorials/BUILD.bazel b/adev/shared-docs/pipeline/tutorials/BUILD.bazel index c482f8c07f86..8698b9292163 100644 --- a/adev/shared-docs/pipeline/tutorials/BUILD.bazel +++ b/adev/shared-docs/pipeline/tutorials/BUILD.bazel @@ -1,52 +1,55 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "editor", srcs = glob( [ - "*.ts", + "*.mts", ], exclude = [ - "playground.ts", - "tutorial.ts", + "playground.mts", + "tutorial.mts", ], ), + tsconfig = "//adev/shared-docs:tsconfig_build", deps = [ - "//adev/shared-docs/interfaces", - "@npm//@types/node", - "@npm//@webcontainer/api", - "@npm//tinyglobby", + "//:node_modules/@types/node", + "//:node_modules/@webcontainer/api", + "//:node_modules/tinyglobby", + "//adev/shared-docs/interfaces:interfaces_rjs", ], ) -ts_library( +ts_project( name = "playground", srcs = [ - "playground.ts", + "playground.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":editor", - "//adev/shared-docs/interfaces", - "@npm//@types/node", + ":editor_rjs", + "//:node_modules/@types/node", + "//adev/shared-docs/interfaces:interfaces_rjs", ], ) -ts_library( +ts_project( name = "tutorials", srcs = [ - "tutorial.ts", + "tutorial.mts", ], + tsconfig = "//adev/shared-docs:tsconfig_build", visibility = [ "//adev/shared-docs:__subpackages__", ], deps = [ - ":editor", - "//adev/shared-docs/interfaces", - "@npm//@types/node", + ":editor_rjs", + "//:node_modules/@types/node", + "//adev/shared-docs/interfaces:interfaces_rjs", ], ) diff --git a/adev/shared-docs/pipeline/tutorials/common/src/main.ts b/adev/shared-docs/pipeline/tutorials/common/src/main.ts index 0ff1c273f4cf..b9283be8591b 100644 --- a/adev/shared-docs/pipeline/tutorials/common/src/main.ts +++ b/adev/shared-docs/pipeline/tutorials/common/src/main.ts @@ -7,7 +7,7 @@ */ import {bootstrapApplication} from '@angular/platform-browser'; -import {appConfig} from './app/app.config'; -import {AppComponent} from './app/app.component'; +import {appConfig} from './app/app.config.js'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/shared-docs/pipeline/tutorials/metadata.ts b/adev/shared-docs/pipeline/tutorials/metadata.mts similarity index 93% rename from adev/shared-docs/pipeline/tutorials/metadata.ts rename to adev/shared-docs/pipeline/tutorials/metadata.mts index fa3a68de8c8e..b1a5ee2e5cfe 100644 --- a/adev/shared-docs/pipeline/tutorials/metadata.ts +++ b/adev/shared-docs/pipeline/tutorials/metadata.mts @@ -14,7 +14,7 @@ import { TutorialConfig, TutorialMetadata, } from '../../interfaces'; -import {getFileContents} from './utils'; +import {getFileContents} from './utils.mjs'; /** Generate the metadata.json content for a provided tutorial config. */ export async function generateMetadata( @@ -23,7 +23,9 @@ export async function generateMetadata( files: FileAndContentRecord, ): Promise { const tutorialFiles: FileAndContentRecord = {}; - const {dependencies, devDependencies} = JSON.parse(files['package.json']) as PackageJson; + const {dependencies, devDependencies} = JSON.parse( + files['package.json'] as string, + ) as PackageJson; config.openFiles?.forEach((file) => (tutorialFiles[file] = files[file])); diff --git a/adev/shared-docs/pipeline/tutorials/playground.ts b/adev/shared-docs/pipeline/tutorials/playground.mts similarity index 91% rename from adev/shared-docs/pipeline/tutorials/playground.ts rename to adev/shared-docs/pipeline/tutorials/playground.mts index a6188ea29af4..8784ca268e1f 100644 --- a/adev/shared-docs/pipeline/tutorials/playground.ts +++ b/adev/shared-docs/pipeline/tutorials/playground.mts @@ -7,12 +7,12 @@ */ import {join} from 'path'; -import {FileAndContentRecord} from '../../interfaces'; +import {FileAndContentRecord} from '../../interfaces/index'; import {existsSync, mkdirSync, writeFileSync} from 'fs'; -import {addDirectoryToFilesRecord, findAllConfigs} from './utils'; -import {generateMetadata} from './metadata'; -import {generateSourceCode} from './source-code'; -import {generatePlaygroundRoutes} from './routes'; +import {addDirectoryToFilesRecord, findAllConfigs} from './utils.mjs'; +import {generateMetadata} from './metadata.mjs'; +import {generateSourceCode} from './source-code.mjs'; +import {generatePlaygroundRoutes} from './routes.mjs'; /** * Generates the playground files for the playground directory. diff --git a/adev/shared-docs/pipeline/tutorials/routes.ts b/adev/shared-docs/pipeline/tutorials/routes.mts similarity index 98% rename from adev/shared-docs/pipeline/tutorials/routes.ts rename to adev/shared-docs/pipeline/tutorials/routes.mts index aff31dd818d2..dce109993647 100644 --- a/adev/shared-docs/pipeline/tutorials/routes.ts +++ b/adev/shared-docs/pipeline/tutorials/routes.mts @@ -11,7 +11,7 @@ import { TutorialConfig, TutorialNavigationItemWithStep, TutorialNavigationItem, -} from '../../interfaces'; +} from '../../interfaces/index'; export async function generatePlaygroundRoutes( configs: Record, diff --git a/adev/shared-docs/pipeline/tutorials/source-code.ts b/adev/shared-docs/pipeline/tutorials/source-code.mts similarity index 90% rename from adev/shared-docs/pipeline/tutorials/source-code.ts rename to adev/shared-docs/pipeline/tutorials/source-code.mts index 034236bb8269..5de2314dc875 100644 --- a/adev/shared-docs/pipeline/tutorials/source-code.ts +++ b/adev/shared-docs/pipeline/tutorials/source-code.mts @@ -7,8 +7,8 @@ */ import {FileSystemTree} from '@webcontainer/api'; -import {FileAndContentRecord, TutorialConfig} from '../../interfaces'; -import {getFileSystemTree} from './webcontainers'; +import {FileAndContentRecord, TutorialConfig} from '../../interfaces/index'; +import {getFileSystemTree} from './webcontainers.mjs'; /** Generate the source-code.json content for a provided tutorial config. */ export async function generateSourceCode( diff --git a/adev/shared-docs/pipeline/tutorials/tutorial.ts b/adev/shared-docs/pipeline/tutorials/tutorial.mts similarity index 93% rename from adev/shared-docs/pipeline/tutorials/tutorial.ts rename to adev/shared-docs/pipeline/tutorials/tutorial.mts index 7d568d930136..c2024c679c33 100644 --- a/adev/shared-docs/pipeline/tutorials/tutorial.ts +++ b/adev/shared-docs/pipeline/tutorials/tutorial.mts @@ -7,12 +7,12 @@ */ import {basename, join} from 'path'; -import {FileAndContentRecord} from '../../interfaces'; +import {FileAndContentRecord} from '../../interfaces/index'; import {existsSync, mkdirSync, writeFileSync} from 'fs'; -import {addDirectoryToFilesRecord, findAllConfigs, findConfig} from './utils'; -import {generateMetadata} from './metadata'; -import {generateSourceCode} from './source-code'; -import {generateTutorialRoutes} from './routes'; +import {addDirectoryToFilesRecord, findAllConfigs, findConfig} from './utils.mjs'; +import {generateMetadata} from './metadata.mjs'; +import {generateSourceCode} from './source-code.mjs'; +import {generateTutorialRoutes} from './routes.mjs'; /** * Generates the files for the provided tutorial directory. diff --git a/adev/shared-docs/pipeline/tutorials/utils.ts b/adev/shared-docs/pipeline/tutorials/utils.mts similarity index 99% rename from adev/shared-docs/pipeline/tutorials/utils.ts rename to adev/shared-docs/pipeline/tutorials/utils.mts index 34ed49093bfe..a2c65cb85378 100644 --- a/adev/shared-docs/pipeline/tutorials/utils.ts +++ b/adev/shared-docs/pipeline/tutorials/utils.mts @@ -7,7 +7,7 @@ */ import {glob} from 'tinyglobby'; -import {FileAndContentRecord, TutorialConfig} from '../../interfaces'; +import {FileAndContentRecord, TutorialConfig} from '../../interfaces/index'; import {dirname, join} from 'path'; import {existsSync, readFileSync} from 'fs'; diff --git a/adev/shared-docs/pipeline/tutorials/webcontainers.ts b/adev/shared-docs/pipeline/tutorials/webcontainers.mts similarity index 99% rename from adev/shared-docs/pipeline/tutorials/webcontainers.ts rename to adev/shared-docs/pipeline/tutorials/webcontainers.mts index 6c15043c2e7c..e9678a8036b5 100644 --- a/adev/shared-docs/pipeline/tutorials/webcontainers.ts +++ b/adev/shared-docs/pipeline/tutorials/webcontainers.mts @@ -8,7 +8,7 @@ import {basename, dirname, extname} from 'path'; import type {DirectoryNode, FileNode, FileSystemTree} from '@webcontainer/api'; -import {FileAndContent, FileAndContentRecord} from '../../interfaces'; +import {FileAndContent, FileAndContentRecord} from '../../interfaces/index'; /** * Create a WebContainer's FileSystemTree from a list of files and its contents diff --git a/adev/shared-docs/pipes/BUILD.bazel b/adev/shared-docs/pipes/BUILD.bazel index 0650f6c56317..b34d8c70bacb 100644 --- a/adev/shared-docs/pipes/BUILD.bazel +++ b/adev/shared-docs/pipes/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ng_module", "ts_library") +load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "pipes", srcs = [ "index.ts", ], - visibility = ["//adev/shared-docs:__subpackages__"], - deps = [ + interop_deps = [ ":lib", ], + tsconfig = "//adev/shared-docs:tsconfig_test", + visibility = ["//adev/shared-docs:__subpackages__"], ) ng_module( diff --git a/adev/shared-docs/providers/BUILD.bazel b/adev/shared-docs/providers/BUILD.bazel index c1711540b22e..f3087ea0be35 100644 --- a/adev/shared-docs/providers/BUILD.bazel +++ b/adev/shared-docs/providers/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ng_module", "ts_library") +load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "providers", srcs = [ "index.ts", ], - visibility = ["//adev/shared-docs:__subpackages__"], - deps = [ + interop_deps = [ ":lib", ], + tsconfig = "//adev/shared-docs:tsconfig_test", + visibility = ["//adev/shared-docs:__subpackages__"], ) ng_module( diff --git a/adev/shared-docs/services/BUILD.bazel b/adev/shared-docs/services/BUILD.bazel index fec7953c4010..67409449e10a 100644 --- a/adev/shared-docs/services/BUILD.bazel +++ b/adev/shared-docs/services/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite", "ng_module") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "services", srcs = [ "index.ts", ], - visibility = ["//adev/shared-docs:__subpackages__"], - deps = [ + interop_deps = [ ":lib", ], + tsconfig = "//adev/shared-docs:tsconfig_test", + visibility = ["//adev/shared-docs:__subpackages__"], ) ng_module( @@ -37,13 +39,13 @@ ng_module( ], ) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["*.spec.ts"], ), - deps = [ + interop_deps = [ ":lib", "//adev/shared-docs/interfaces", "//adev/shared-docs/providers", @@ -51,6 +53,7 @@ ts_library( "//packages/core", "//packages/core/testing", ], + tsconfig = "//adev/shared-docs:tsconfig_test", ) karma_web_test_suite( diff --git a/adev/shared-docs/styles/docs/_decorative-header.scss b/adev/shared-docs/styles/docs/_decorative-header.scss index b26f982a81a6..85467a7c475c 100644 --- a/adev/shared-docs/styles/docs/_decorative-header.scss +++ b/adev/shared-docs/styles/docs/_decorative-header.scss @@ -6,7 +6,6 @@ .docs-decorative-header { border-radius: 0.625rem; background: var(--septenary-contrast); - max-width: var(--page-width); overflow: hidden; display: flex; position: relative; diff --git a/adev/shared-docs/testing/BUILD.bazel b/adev/shared-docs/testing/BUILD.bazel index abda97666268..c9ea22519945 100644 --- a/adev/shared-docs/testing/BUILD.bazel +++ b/adev/shared-docs/testing/BUILD.bazel @@ -1,30 +1,32 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "testing", srcs = [ "index.ts", ], - visibility = ["//adev/shared-docs:__subpackages__"], - deps = [ + interop_deps = [ ":lib", ], + tsconfig = "//adev/shared-docs:tsconfig_build", + visibility = ["//adev/shared-docs:__subpackages__"], ) -ts_library( +ts_project( name = "lib", srcs = glob( - [ - "*.ts", - ], + ["*.ts"], exclude = [ "index.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", - "@npm//@webcontainer/api", + ], + tsconfig = "//adev/shared-docs:tsconfig_build", + deps = [ + "//:node_modules/@webcontainer/api", ], ) diff --git a/adev/shared-docs/tsconfig-test.json b/adev/shared-docs/tsconfig-test.json new file mode 100644 index 000000000000..c18f2a41c29e --- /dev/null +++ b/adev/shared-docs/tsconfig-test.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": ["jasmine", "node"] + } +} \ No newline at end of file diff --git a/adev/shared-docs/tsconfig.json b/adev/shared-docs/tsconfig.json new file mode 100644 index 000000000000..5b8e565173b0 --- /dev/null +++ b/adev/shared-docs/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "strict": true, + "declaration": true, + "sourceMap": true, + "lib": ["ES2022", "dom"], + "jsx": "react", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + "types": ["node"], + "paths": { + "@angular/*": ["../../packages/*"] + } + } +} \ No newline at end of file diff --git a/adev/shared-docs/utils/BUILD.bazel b/adev/shared-docs/utils/BUILD.bazel index 3d277f55f488..cc5c0e2bfd98 100644 --- a/adev/shared-docs/utils/BUILD.bazel +++ b/adev/shared-docs/utils/BUILD.bazel @@ -1,34 +1,26 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:private"]) -ts_library( +ts_project( name = "utils", - srcs = [ - "index.ts", - ], - visibility = ["//adev/shared-docs:__subpackages__"], - deps = [ - ":lib", - ], -) - -ts_library( - name = "lib", srcs = glob( [ "**/*.ts", ], exclude = [ - "index.ts", "**/*.spec.ts", ], ), - deps = [ + interop_deps = [ "//adev/shared-docs/interfaces", "//adev/shared-docs/providers", "//packages/core", "//packages/router", - "@npm//fflate", + ], + tsconfig = "//adev/shared-docs:tsconfig_test", + visibility = ["//adev/shared-docs:__subpackages__"], + deps = [ + "//:node_modules/fflate", ], ) diff --git a/adev/src/app/app.component.spec.ts b/adev/src/app/app.component.spec.ts index e2d72f3b2e12..043280a8879a 100644 --- a/adev/src/app/app.component.spec.ts +++ b/adev/src/app/app.component.spec.ts @@ -11,16 +11,18 @@ import {AppComponent} from './app.component'; import {provideRouter, withComponentInputBinding} from '@angular/router'; import {routes} from './routes'; import {Search, WINDOW} from '@angular/docs'; -import {CURRENT_MAJOR_VERSION} from './core/providers/current-version'; +import {provideHttpClient} from '@angular/common/http'; +import {provideHttpClientTesting} from '@angular/common/http/testing'; describe('AppComponent', () => { const fakeSearch = {}; const fakeWindow = {location: {hostname: 'angular.dev'}}; - const fakeCurrentMajorVersion = 19; it('should create the app', () => { TestBed.configureTestingModule({ providers: [ + provideHttpClient(), + provideHttpClientTesting(), provideRouter(routes, withComponentInputBinding()), { provide: WINDOW, @@ -30,10 +32,6 @@ describe('AppComponent', () => { provide: Search, useValue: fakeSearch, }, - { - provide: CURRENT_MAJOR_VERSION, - useValue: fakeCurrentMajorVersion, - }, ], }); const fixture = TestBed.createComponent(AppComponent); diff --git a/adev/src/app/app.component.ts b/adev/src/app/app.component.ts index 6bd243a9b577..915c2085f679 100644 --- a/adev/src/app/app.component.ts +++ b/adev/src/app/app.component.ts @@ -13,7 +13,6 @@ import { inject, OnInit, PLATFORM_ID, - input, signal, } from '@angular/core'; import {NavigationEnd, NavigationSkipped, Router, RouterOutlet} from '@angular/router'; diff --git a/adev/src/app/app.config.server.ts b/adev/src/app/app.config.server.ts index c27edbb18452..cd3afd3c97bd 100644 --- a/adev/src/app/app.config.server.ts +++ b/adev/src/app/app.config.server.ts @@ -14,4 +14,4 @@ const serverConfig: ApplicationConfig = { providers: [provideServerRendering(withRoutes([{path: '**', renderMode: RenderMode.Prerender}]))], }; -export const config = mergeApplicationConfig(appConfig, serverConfig); +export const config: ApplicationConfig = mergeApplicationConfig(appConfig, serverConfig); diff --git a/adev/src/app/app.config.ts b/adev/src/app/app.config.ts index 3861f7327843..10104411db1a 100644 --- a/adev/src/app/app.config.ts +++ b/adev/src/app/app.config.ts @@ -32,7 +32,6 @@ import {AnalyticsService} from './core/services/analytics/analytics.service'; import {ContentLoader} from './core/services/content-loader.service'; import {CustomErrorHandler} from './core/services/errors-handling/error-handler'; import {ExampleContentLoader} from './core/services/example-content-loader.service'; -import {CURRENT_MAJOR_VERSION} from './core/providers/current-version'; import {routerProviders} from './router_providers'; export const appConfig: ApplicationConfig = { @@ -43,10 +42,6 @@ export const appConfig: ApplicationConfig = { provideHttpClient(withFetch()), provideEnvironmentInitializer(() => inject(AnalyticsService)), provideAlgoliaSearchClient(environment), - { - provide: CURRENT_MAJOR_VERSION, - useValue: Number(VERSION.major), - }, {provide: ENVIRONMENT, useValue: environment}, {provide: ErrorHandler, useClass: CustomErrorHandler}, {provide: PREVIEWS_COMPONENTS, useValue: PREVIEWS_COMPONENTS_MAP}, diff --git a/adev/src/app/core/constants/versions.ts b/adev/src/app/core/constants/versions.ts deleted file mode 100644 index 1c62311727d2..000000000000 --- a/adev/src/app/core/constants/versions.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -export const VERSIONS_CONFIG = { - aDevVersionsLinkPattern: 'https://{{prefix}}{{version}}angular.dev', - aioVersions: [ - { - version: 'v18', - url: 'https://v18.angular.dev/overview', - }, - { - version: 'v17', - url: 'https://v17.angular.io/docs', - }, - { - version: 'v16', - url: 'https://v16.angular.io/docs', - }, - { - version: 'v15', - url: 'https://v15.angular.io/docs', - }, - { - version: 'v14', - url: 'https://v14.angular.io/docs', - }, - { - version: 'v13', - url: 'https://v13.angular.io/docs', - }, - { - version: 'v12', - url: 'https://v12.angular.io/docs', - }, - { - version: 'v11', - url: 'https://v11.angular.io/docs', - }, - { - version: 'v10', - url: 'https://v10.angular.io/docs', - }, - { - version: 'v9', - url: 'https://v9.angular.io/docs', - }, - { - version: 'v8', - url: 'https://v8.angular.io/docs', - }, - { - version: 'v7', - url: 'https://v7.angular.io/docs', - }, - { - version: 'v6', - url: 'https://v6.angular.io/docs', - }, - { - version: 'v5', - url: 'https://v5.angular.io/docs', - }, - { - version: 'v4', - url: 'https://v4.angular.io/docs', - }, - { - version: 'v2', - url: 'https://v2.angular.io/docs', - }, - ], -}; diff --git a/adev/src/app/core/layout/navigation/navigation.component.html b/adev/src/app/core/layout/navigation/navigation.component.html index e1e8aa9a3feb..4b2ea426eca9 100644 --- a/adev/src/app/core/layout/navigation/navigation.component.html +++ b/adev/src/app/core/layout/navigation/navigation.component.html @@ -150,7 +150,7 @@ (cdkMenuClosed)="closeMenu()" (click)="openVersionMenu($event)" > - {{ currentDocsVersion()?.displayName }} + {{ currentDocsVersion().displayName }} { useValue: fakeSearch, }, ], - }).compileComponents(); + }); TestBed.overrideProvider(ThemeManager, {useValue: fakeThemeManager}); TestBed.overrideProvider(VersionManager, {useValue: fakeVersionManager}); diff --git a/adev/src/app/core/layout/navigation/navigation.component.ts b/adev/src/app/core/layout/navigation/navigation.component.ts index f9442b991bc5..4e0f112c8cd8 100644 --- a/adev/src/app/core/layout/navigation/navigation.component.ts +++ b/adev/src/app/core/layout/navigation/navigation.component.ts @@ -94,7 +94,7 @@ export class Navigation implements OnInit { openedMenu: MenuType | null = null; currentDocsVersion = this.versionManager.currentDocsVersion; - currentDocsVersionMode = this.versionManager.currentDocsVersion()?.version; + currentDocsVersionMode = this.versionManager.currentDocsVersionMode; // Set the values of the search label and title only on the client, because the label is user-agent specific. searchLabel = this.isBrowser diff --git a/adev/src/app/core/layout/progress-bar/progress-bar.component.spec.ts b/adev/src/app/core/layout/progress-bar/progress-bar.component.spec.ts index b8d3cf068c57..6aa43a8b11d9 100644 --- a/adev/src/app/core/layout/progress-bar/progress-bar.component.spec.ts +++ b/adev/src/app/core/layout/progress-bar/progress-bar.component.spec.ts @@ -18,7 +18,7 @@ describe('ProgressBarComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ProgressBarComponent, RouterTestingModule], - }).compileComponents(); + }); fixture = TestBed.createComponent(ProgressBarComponent); component = fixture.componentInstance; diff --git a/adev/src/app/core/providers/current-version.ts b/adev/src/app/core/providers/current-version.ts deleted file mode 100644 index 4258ab0707c1..000000000000 --- a/adev/src/app/core/providers/current-version.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {InjectionToken} from '@angular/core'; - -export const CURRENT_MAJOR_VERSION = new InjectionToken('CURRENT_MAJOR_VERSION'); diff --git a/adev/src/app/core/services/version-manager.service.spec.ts b/adev/src/app/core/services/version-manager.service.spec.ts deleted file mode 100644 index 73b31a5c3195..000000000000 --- a/adev/src/app/core/services/version-manager.service.spec.ts +++ /dev/null @@ -1,59 +0,0 @@ -/*! - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {TestBed} from '@angular/core/testing'; - -import {INITIAL_ADEV_DOCS_VERSION, VersionManager} from './version-manager.service'; -import {WINDOW} from '@angular/docs'; -import {CURRENT_MAJOR_VERSION} from '../providers/current-version'; - -describe('VersionManager', () => { - const fakeWindow = {location: {hostname: 'angular.dev'}}; - const fakeCurrentMajorVersion = 19; - - let service: VersionManager; - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - { - provide: WINDOW, - useValue: fakeWindow, - }, - { - provide: CURRENT_MAJOR_VERSION, - useValue: fakeCurrentMajorVersion, - }, - ], - }); - service = TestBed.inject(VersionManager); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); - - it('should contain correct number of Angular Docs versions', () => { - // Note: From v2 to v18 (inclusive), there were no v3 - const expectedAioDocsVersionsCount = 16; - - // Last stable version and next - const expectedRecentDocsVersionCount = 2; - - const expectedPreviousAdevVersionsCount = fakeCurrentMajorVersion - INITIAL_ADEV_DOCS_VERSION; - - expect(service['getAioVersions']().length).toBe(expectedAioDocsVersionsCount); - expect(service['getRecentVersions']().length).toBe(expectedRecentDocsVersionCount); - expect(service['getAdevVersions']().length).toBe(expectedPreviousAdevVersionsCount); - expect(service.versions().length).toBe( - expectedAioDocsVersionsCount + - expectedRecentDocsVersionCount + - expectedPreviousAdevVersionsCount, - ); - }); -}); diff --git a/adev/src/app/core/services/version-manager.service.ts b/adev/src/app/core/services/version-manager.service.ts index 3da3517a8f84..3e409a67e4fe 100644 --- a/adev/src/app/core/services/version-manager.service.ts +++ b/adev/src/app/core/services/version-manager.service.ts @@ -6,14 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Injectable, computed, inject, signal} from '@angular/core'; -import {VERSIONS_CONFIG} from '../constants/versions'; -import {WINDOW} from '@angular/docs'; -import {CURRENT_MAJOR_VERSION} from '../providers/current-version'; +import {DOCUMENT, Injectable, VERSION, computed, inject} from '@angular/core'; +import {httpResource} from '@angular/common/http'; + +import versionJson from '../../../assets/others/versions.json'; export interface Version { displayName: string; - version: VersionMode; url: string; } @@ -23,17 +22,22 @@ export const INITIAL_ADEV_DOCS_VERSION = 18; export const VERSION_PLACEHOLDER = '{{version}}'; export const MODE_PLACEHOLDER = '{{prefix}}'; +type VersionJson = {version: string; url: string}; + +/** + * This service will rely on 2 sources of data for the list of versions. + * + * To have an up-to-date list of versions, it will fetch a json from the deployed website. + * As fallback it will use a local json file that is bundled with the app. + */ @Injectable({ providedIn: 'root', }) export class VersionManager { - private readonly currentMajorVersion = inject(CURRENT_MAJOR_VERSION); - private readonly window = inject(WINDOW); + private document = inject(DOCUMENT); - // Note: We can assume that if the URL starts with v{{version}}, it is documentation for previous versions of Angular. - // Based on URL we can indicate as well if it's rc or next Docs version. - private get currentVersionMode(): VersionMode { - const hostname = this.window.location.hostname; + get currentDocsVersionMode(): VersionMode { + const hostname = this.document.location.hostname; if (hostname.startsWith('v')) return 'deprecated'; if (hostname.startsWith('rc')) return 'rc'; if (hostname.startsWith('next')) return 'next'; @@ -41,89 +45,49 @@ export class VersionManager { return 'stable'; } - versions = signal([ - ...this.getRecentVersions(), - ...this.getAdevVersions(), - ...this.getAioVersions(), - ]); - - currentDocsVersion = computed(() => { - return this.versions().find( - (version) => version.version.toString() === this.currentVersionMode, - ); + private localVersions = (versionJson as VersionJson[]).map((v) => { + return { + displayName: v.version, + url: v.url, + }; }); - // List of Angular Docs versions which includes current version, next and rc. - private getRecentVersions(): Version[] { - return [ - { - url: this.getAdevDocsUrl('next'), - displayName: `next`, - version: 'next', - }, - // Note: 'rc' should not be visible for now - // { - // url: this.getAdevDocsUrl('rc'), - // displayName: `rc`, - // version: 'rc', - // }, - { - url: 'https://angular.dev/', - displayName: this.getVersion(this.currentMajorVersion), - version: this.currentVersionMode, - }, - ]; - } + versions = computed(() => { + return this.remoteVersions.hasValue() ? this.remoteVersions.value() : this.localVersions; + }); - // List of Angular Docs versions hosted on angular.dev domain. - private getAdevVersions(): Version[] { - const adevVersions: Version[] = []; - for ( - let version = this.currentMajorVersion - 1; - version >= INITIAL_ADEV_DOCS_VERSION; - version-- - ) { - adevVersions.push({ - url: this.getAdevDocsUrl(version), - displayName: this.getVersion(version), - version: 'deprecated', + remoteVersions = httpResource(() => 'https://angular.dev/assets/others/versions.json', { + parse: (json) => { + if (!Array.isArray(json)) { + throw new Error('Invalid version data'); + } + return json.map((v: unknown) => { + if ( + v === undefined || + v === null || + typeof v !== 'object' || + !('version' in v) || + !('url' in v) || + typeof v.version !== 'string' || + typeof v.url !== 'string' + ) { + throw new Error('Invalid version data'); + } + + return { + displayName: v.version, + url: v.url, + }; }); - } - return adevVersions; - } - - // List of Angular Docs versions hosted on angular.io domain. - private getAioVersions(): Version[] { - return VERSIONS_CONFIG.aioVersions.map((item) => - this.mapToVersion(item as Pick), - ); - } - - private mapToVersion(value: Pick): Version { - return { - ...value, - displayName: this.getVersion(value.version), - }; - } + }, + }); - private getVersion(versionMode: VersionMode): string { - if (versionMode === 'stable' || versionMode === 'deprecated') { - return `v${this.currentMajorVersion}`; - } - if (Number.isInteger(versionMode)) { - return `v${versionMode}`; + currentDocsVersion = computed(() => { + // In devmode the version is 0, so we'll target next (which is first on the list) + if (VERSION.major === '0') { + return this.versions()[0]; } - return versionMode.toString(); - } - private getAdevDocsUrl(version: VersionMode): string { - const docsUrlPrefix = isNaN(Number(version)) ? `` : 'v'; - - return VERSIONS_CONFIG.aDevVersionsLinkPattern - .replace(MODE_PLACEHOLDER, docsUrlPrefix) - .replace( - VERSION_PLACEHOLDER, - `${version.toString() === 'stable' ? '' : `${version.toString()}.`}`, - ); - } + return this.versions().find((v) => v.displayName.includes(VERSION.major)) ?? this.versions()[0]; + }); } diff --git a/adev/src/app/editor/code-editor/code-editor.component.spec.ts b/adev/src/app/editor/code-editor/code-editor.component.spec.ts index e966e0732b8e..24abae251772 100644 --- a/adev/src/app/editor/code-editor/code-editor.component.spec.ts +++ b/adev/src/app/editor/code-editor/code-editor.component.spec.ts @@ -80,7 +80,7 @@ describe('CodeEditor', () => { }, }, ], - }).compileComponents(); + }); fixture = TestBed.createComponent(CodeEditor); loader = TestbedHarnessEnvironment.loader(fixture); diff --git a/adev/src/app/editor/editor-ui-state.service.ts b/adev/src/app/editor/editor-ui-state.service.ts index de0dafd2c062..7919b721ce0f 100644 --- a/adev/src/app/editor/editor-ui-state.service.ts +++ b/adev/src/app/editor/editor-ui-state.service.ts @@ -6,54 +6,24 @@ * found in the LICENSE file at https://angular.dev/license */ -import {EnvironmentInjector, inject, Injectable, signal} from '@angular/core'; -import {takeUntilDestroyed} from '@angular/core/rxjs-interop'; -import {filter, from, map, Subject, switchMap} from 'rxjs'; +import {EnvironmentInjector, inject, Injectable} from '@angular/core'; +import {toSignal} from '@angular/core/rxjs-interop'; +import {filter, from, map, switchMap} from 'rxjs'; -import {TutorialMetadata, TutorialType} from '@angular/docs'; +import {TutorialMetadata} from '@angular/docs'; import {injectEmbeddedTutorialManager} from './inject-embedded-tutorial-manager'; -export interface EditorUiStateConfig { - displayOnlyInteractiveTerminal: boolean; -} -export const DEFAULT_EDITOR_UI_STATE: EditorUiStateConfig = { - displayOnlyInteractiveTerminal: false, -}; - @Injectable() export class EditorUiState { private readonly environmentInjector = inject(EnvironmentInjector); - private readonly stateChanged = new Subject(); - - stateChanged$ = this.stateChanged.asObservable(); - uiState = signal(DEFAULT_EDITOR_UI_STATE); - - constructor() { - this.handleTutorialChange(); - } - - patchState(patch: Partial): void { - this.uiState.update((state) => ({...state, ...patch})); - this.stateChanged.next(); - } - - private handleTutorialChange() { - from(injectEmbeddedTutorialManager(this.environmentInjector)) - .pipe( - switchMap((embeddedTutorialManager) => - embeddedTutorialManager.tutorialChanged$.pipe(map(() => embeddedTutorialManager.type())), - ), - filter((tutorialType): tutorialType is TutorialMetadata['type'] => Boolean(tutorialType)), - takeUntilDestroyed(), - ) - .subscribe((tutorialType) => { - if (tutorialType === TutorialType.CLI) { - this.patchState({displayOnlyInteractiveTerminal: true}); - } else { - this.patchState(DEFAULT_EDITOR_UI_STATE); - } - }); - } + tutorialType = toSignal( + from(injectEmbeddedTutorialManager(this.environmentInjector)).pipe( + switchMap((embeddedTutorialManager) => + embeddedTutorialManager.tutorialChanged$.pipe(map(() => embeddedTutorialManager.type())), + ), + filter((tutorialType): tutorialType is TutorialMetadata['type'] => Boolean(tutorialType)), + ), + ); } diff --git a/adev/src/app/editor/embedded-editor.component.html b/adev/src/app/editor/embedded-editor.component.html index 68644eaff2b6..3445748862c4 100644 --- a/adev/src/app/editor/embedded-editor.component.html +++ b/adev/src/app/editor/embedded-editor.component.html @@ -1,5 +1,5 @@
- + @if (!displayOnlyTerminal()) { diff --git a/adev/src/app/editor/embedded-editor.component.ts b/adev/src/app/editor/embedded-editor.component.ts index 785c44a904d0..bd13166bdd66 100644 --- a/adev/src/app/editor/embedded-editor.component.ts +++ b/adev/src/app/editor/embedded-editor.component.ts @@ -8,24 +8,22 @@ import {isPlatformBrowser} from '@angular/common'; import { - AfterViewInit, ChangeDetectionStrategy, - ChangeDetectorRef, Component, DestroyRef, ElementRef, - OnDestroy, - OnInit, PLATFORM_ID, + afterRenderEffect, computed, inject, + linkedSignal, signal, viewChild, } from '@angular/core'; -import {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop'; -import {IconComponent} from '@angular/docs'; +import {toSignal} from '@angular/core/rxjs-interop'; +import {IconComponent, TutorialType} from '@angular/docs'; import {MatTabGroup, MatTabsModule} from '@angular/material/tabs'; -import {distinctUntilChanged, map} from 'rxjs'; +import {map} from 'rxjs'; import {MAX_RECOMMENDED_WEBCONTAINERS_INSTANCES} from './alert-manager.service'; @@ -52,31 +50,31 @@ export const LARGE_EDITOR_HEIGHT_BREAKPOINT = 550; styleUrls: ['./embedded-editor.component.scss'], providers: [EditorUiState], }) -export class EmbeddedEditor implements OnInit, AfterViewInit, OnDestroy { - readonly editorContainer = viewChild.required>('editorContainer'); +export class EmbeddedEditor { + readonly editorContainer = viewChild>('editorContainer'); readonly matTabGroup = viewChild(MatTabGroup); private readonly platformId = inject(PLATFORM_ID); - private readonly changeDetector = inject(ChangeDetectorRef); private readonly destroyRef = inject(DestroyRef); private readonly diagnosticsState = inject(DiagnosticsState); - private readonly editorUiState = inject(EditorUiState); + readonly editorUiState = inject(EditorUiState); private readonly nodeRuntimeState = inject(NodeRuntimeState); private readonly nodeRuntimeSandbox = inject(NodeRuntimeSandbox); - private resizeObserver?: ResizeObserver; - - protected splitDirection: 'horizontal' | 'vertical' = 'vertical'; + protected splitDirection = signal<'horizontal' | 'vertical'>('vertical'); readonly MAX_RECOMMENDED_WEBCONTAINERS_INSTANCES = MAX_RECOMMENDED_WEBCONTAINERS_INSTANCES; readonly TerminalType = TerminalType; readonly displayOnlyTerminal = computed( - () => this.editorUiState.uiState().displayOnlyInteractiveTerminal, + () => this.editorUiState.tutorialType() === TutorialType.CLI, ); - readonly errorsCount = signal(0); readonly displayPreviewInMatTabGroup = signal(true); + readonly selectedTabIndex = linkedSignal({ + source: () => this.displayPreviewInMatTabGroup(), + computation: () => 0, + }); readonly shouldEnableReset = computed( () => @@ -86,69 +84,47 @@ export class EmbeddedEditor implements OnInit, AfterViewInit, OnDestroy { private readonly errorsCount$ = this.diagnosticsState.diagnostics$.pipe( map((diagnosticsItem) => diagnosticsItem.filter((item) => item.severity === 'error').length), - distinctUntilChanged(), - takeUntilDestroyed(this.destroyRef), ); - private readonly displayPreviewInMatTabGroup$ = toObservable( - this.displayPreviewInMatTabGroup, - ).pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)); - - ngOnInit(): void { - this.listenToErrorsCount(); - } - - ngAfterViewInit(): void { - if (isPlatformBrowser(this.platformId)) { - this.setFirstTabAsActiveAfterResize(); + readonly errorsCount = toSignal(this.errorsCount$, {initialValue: 0}); - this.setResizeObserver(); + constructor() { + if (!isPlatformBrowser(this.platformId)) { + return; } - } - - ngOnDestroy(): void { - this.resizeObserver?.disconnect(); - } - setVisibleEmbeddedEditorTabs(): void { - this.displayPreviewInMatTabGroup.set(!this.isLargeEmbeddedEditor()); + const ref = afterRenderEffect({ + read: () => { + const container = this.editorContainer()?.nativeElement; + if (!container) { + return; + } + this.setResizeObserver(container); + ref.destroy(); + }, + }); } async reset(): Promise { await this.nodeRuntimeSandbox.reset(); } - private setFirstTabAsActiveAfterResize(): void { - this.displayPreviewInMatTabGroup$.subscribe(() => { - this.changeDetector.detectChanges(); - const matTabGroup = this.matTabGroup(); - if (matTabGroup) { - matTabGroup.selectedIndex = 0; - } - }); - } - - private listenToErrorsCount(): void { - this.errorsCount$.subscribe((errorsCount) => { - this.errorsCount.set(errorsCount); - }); - } - // Listen to resizing of Embedded Editor and set proper list of the tabs for the current resolution. - private setResizeObserver() { - this.resizeObserver = new ResizeObserver((_) => { - this.setVisibleEmbeddedEditorTabs(); + private setResizeObserver(container: HTMLDivElement) { + const resizeObserver = new ResizeObserver((_) => { + this.displayPreviewInMatTabGroup.set(!this.isLargeEmbeddedEditor(container)); - this.splitDirection = this.isLargeEmbeddedEditor() ? 'horizontal' : 'vertical'; + this.splitDirection.set(this.isLargeEmbeddedEditor(container) ? 'horizontal' : 'vertical'); }); - this.resizeObserver.observe(this.editorContainer().nativeElement); + resizeObserver.observe(container); + this.destroyRef.onDestroy(() => { + resizeObserver.disconnect(); + }); } - private isLargeEmbeddedEditor(): boolean { - const editorContainer = this.editorContainer().nativeElement; - const width = editorContainer.offsetWidth; - const height = editorContainer.offsetHeight; - - return width > LARGE_EDITOR_WIDTH_BREAKPOINT && height > LARGE_EDITOR_HEIGHT_BREAKPOINT; + private isLargeEmbeddedEditor({offsetWidth, offsetHeight}: HTMLDivElement): boolean { + return ( + offsetWidth > LARGE_EDITOR_WIDTH_BREAKPOINT && offsetHeight > LARGE_EDITOR_HEIGHT_BREAKPOINT + ); } } diff --git a/adev/src/app/editor/preview/preview.component.spec.ts b/adev/src/app/editor/preview/preview.component.spec.ts index c800aa1d5e39..3e9367ad3228 100644 --- a/adev/src/app/editor/preview/preview.component.spec.ts +++ b/adev/src/app/editor/preview/preview.component.spec.ts @@ -43,7 +43,7 @@ describe('Preview', () => { useValue: fakeNodeRuntimeState, }, ], - }).compileComponents(); + }); const fixture = TestBed.createComponent(Preview); diff --git a/adev/src/app/editor/terminal/terminal.component.spec.ts b/adev/src/app/editor/terminal/terminal.component.spec.ts index e2dae9a29ecf..f24cae34e3eb 100644 --- a/adev/src/app/editor/terminal/terminal.component.spec.ts +++ b/adev/src/app/editor/terminal/terminal.component.spec.ts @@ -36,7 +36,7 @@ describe('Terminal', () => { useValue: fakeWindow, }, ], - }).compileComponents(); + }); fixture = TestBed.createComponent(Terminal); component = fixture.componentInstance; diff --git a/adev/src/app/features/docs/docs.component.scss b/adev/src/app/features/docs/docs.component.scss index 46df78580e36..52724a9a3783 100644 --- a/adev/src/app/features/docs/docs.component.scss +++ b/adev/src/app/features/docs/docs.component.scss @@ -1,9 +1,19 @@ :host { + display: block; + padding-top: var(--layout-padding); + padding-bottom: var(--layout-padding); + .docs-viewer { &.docs-animate-content { animation: fade-in 500ms; } } + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + display: flex; + justify-content: center; + } } @keyframes fade-in { @@ -14,4 +24,4 @@ to { opacity: 1; } -} +} \ No newline at end of file diff --git a/adev/src/app/features/home/animation/animation.spec.ts b/adev/src/app/features/home/animation/animation.spec.ts index c4cf5b98a4c2..0117e3fb9a9e 100644 --- a/adev/src/app/features/home/animation/animation.spec.ts +++ b/adev/src/app/features/home/animation/animation.spec.ts @@ -83,7 +83,7 @@ describe('Animation', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [AnimationHost], - }).compileComponents(); + }); fixture = TestBed.createComponent(AnimationHost); component = fixture.componentInstance; diff --git a/adev/src/app/features/home/home.component.spec.ts b/adev/src/app/features/home/home.component.spec.ts index 02167547d202..010b8e0283c9 100644 --- a/adev/src/app/features/home/home.component.spec.ts +++ b/adev/src/app/features/home/home.component.spec.ts @@ -26,7 +26,7 @@ beforeEach(async () => { await TestBed.configureTestingModule({ imports: [Home], - }).compileComponents(); + }); TestBed.overrideProvider(HomeAnimation, {useValue: fakeHomeAnimation}); diff --git a/adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.scss b/adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.scss index 3d475c60b4f1..0ef946eca39d 100644 --- a/adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.scss +++ b/adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.scss @@ -2,15 +2,32 @@ @use '@angular/docs/styles/reference' as ref; :host { - display: block; + display: flex; + justify-content: center; width: 100%; - max-width: var(--page-width); - padding: var(--layout-padding) 0 1rem var(--layout-padding); - box-sizing: border-box; - @include mq.for-desktop-down { - padding: var(--layout-padding); - max-width: none; + padding-top: var(--layout-padding); + padding-bottom: var(--layout-padding); + + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + width: calc(100% - 16rem); + } + + + docs-viewer { + display: block; + padding-inline: var(--layout-padding); + width: 100%; + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + max-width: var(--page-width); + } + } &::-webkit-scrollbar-thumb { @@ -19,27 +36,42 @@ transition: background-color 0.3s ease; } + &>* { + padding-inline: 0px; + + @include mq.for-big-desktop-up { + width: var(--page-width); + } + } + h1 { font-size: 1.5rem; } + h2 { font-size: 1.25rem; } + h3 { font-size: 1rem; } + h4 { font-size: 0.95rem; } + h5 { font-size: 0.875rem; } + h6 { font-size: 0.6rem; } + + } ::ng-deep { @include ref.reference-common(); @include ref.api-reference(); -} +} \ No newline at end of file diff --git a/adev/src/app/features/references/api-reference-list/api-reference-list.component.scss b/adev/src/app/features/references/api-reference-list/api-reference-list.component.scss index 28d06721385e..fb34e95db2e8 100644 --- a/adev/src/app/features/references/api-reference-list/api-reference-list.component.scss +++ b/adev/src/app/features/references/api-reference-list/api-reference-list.component.scss @@ -1,6 +1,5 @@ :host { padding: var(--layout-padding); - max-width: var(--page-width); display: block; container: api-ref-page / inline-size; diff --git a/adev/src/app/features/references/cli-reference-details-page/cli-reference-details-page.component.scss b/adev/src/app/features/references/cli-reference-details-page/cli-reference-details-page.component.scss index 9d356ce0c804..c5b913685847 100644 --- a/adev/src/app/features/references/cli-reference-details-page/cli-reference-details-page.component.scss +++ b/adev/src/app/features/references/cli-reference-details-page/cli-reference-details-page.component.scss @@ -2,15 +2,41 @@ @use '@angular/docs/styles/reference' as ref; :host { - display: block; + display: flex; + justify-content: center; width: 100%; - max-width: var(--page-width); - padding: var(--layout-padding) 0 1rem var(--layout-padding); box-sizing: border-box; + padding-top: var(--layout-padding); + padding-bottom: var(--layout-padding); - @include mq.for-desktop-down { - padding: var(--layout-padding); - max-width: none; + + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + width: calc(100% - 16rem); + } + + + docs-viewer { + display: block; + padding-inline: var(--layout-padding); + width: 100%; + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + max-width: var(--page-width); + } + } + + &>* { + width: 100%; + + @include mq.for-desktop-up { + padding-inline: 0px; + width: var(--page-width); + } } } @@ -18,4 +44,4 @@ ::ng-deep { @include ref.reference-common(); @include ref.cli-reference(); -} +} \ No newline at end of file diff --git a/adev/src/app/features/tutorial/tutorial.component.scss b/adev/src/app/features/tutorial/tutorial.component.scss index fd1ec1df958b..8dd3482984ce 100644 --- a/adev/src/app/features/tutorial/tutorial.component.scss +++ b/adev/src/app/features/tutorial/tutorial.component.scss @@ -18,7 +18,7 @@ $column-width: calc(50% - #{$resizer-width} - var(--layout-padding)); // Tablet / Mobile Tutorial Nav @include mq.for-tablet-landscape-up { - > .adev-tutorial-nav-container { + >.adev-tutorial-nav-container { display: none; } } @@ -67,7 +67,6 @@ $column-width: calc(50% - #{$resizer-width} - var(--layout-padding)); } .docs-tutorial-content { - max-width: var(--page-width); min-width: 300px; width: 100%; box-sizing: content-box; @@ -76,7 +75,7 @@ $column-width: calc(50% - #{$resizer-width} - var(--layout-padding)); // Desktop Tutorial Nav @include mq.for-tablet-landscape-down { - > .adev-tutorial-nav-container { + >.adev-tutorial-nav-container { display: none; } } @@ -91,6 +90,16 @@ $column-width: calc(50% - #{$resizer-width} - var(--layout-padding)); backdrop-filter: blur(3px); } } + + .docs-viewer { + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + margin-left: 0rem; + width: unset; + } + } } .docs-viewer { @@ -147,4 +156,4 @@ $column-width: calc(50% - #{$resizer-width} - var(--layout-padding)); // override js applied width from split view resizer width: 100% !important; } -} +} \ No newline at end of file diff --git a/adev/src/app/features/tutorial/tutorial.component.spec.ts b/adev/src/app/features/tutorial/tutorial.component.spec.ts index d01fb6c02348..52445f06370b 100644 --- a/adev/src/app/features/tutorial/tutorial.component.spec.ts +++ b/adev/src/app/features/tutorial/tutorial.component.spec.ts @@ -111,7 +111,7 @@ describe('Tutorial', () => { }, }); - await TestBed.compileComponents(); + await TestBed; fixture = TestBed.createComponent(Tutorial); component = fixture.componentInstance; diff --git a/adev/src/app/features/update/update.component.html b/adev/src/app/features/update/update.component.html index 8635134a7a2a..426a8a2003e1 100644 --- a/adev/src/app/features/update/update.component.html +++ b/adev/src/app/features/update/update.component.html @@ -1,5 +1,5 @@
-

Update Guide

+

Update Guide

Select the options that match your update

diff --git a/adev/src/app/features/update/update.component.scss b/adev/src/app/features/update/update.component.scss index cab0153688a1..2a9c2de8d333 100644 --- a/adev/src/app/features/update/update.component.scss +++ b/adev/src/app/features/update/update.component.scss @@ -1,7 +1,41 @@ +@use '@angular/docs/styles/media-queries' as mq; + +:host { + display: flex; + flex-flow: column; + align-items: center; + padding: var(--layout-padding) 0px; + container: update-guide-page / inline-size; + + .docs-viewer { + padding-inline: var(--layout-padding); + + //applying styles when TOC position got translated to the top right + @media only screen and (min-width: 1431px) { + // take the available space except a reserved area for TOC + margin-left: -16rem; + width: calc(100% - 16rem); + box-sizing: border-box; + } + + .page-header { + margin-top: 0px; + } + } +} + .page { - padding: var(--layout-padding); max-width: var(--page-width); - container: update-guide-page / inline-size; + + &>* { + @include mq.for-big-desktop-up { + padding-inline: 0px; + } + } + + @include mq.for-tablet-landscape-down { + width: 100%; + } } h3, @@ -71,6 +105,7 @@ h4 { padding-block: 0.5rem; font-weight: 400; transition: border 0.3s ease; + span { color: var(--primary-contrast); transition: color 0.3s ease; @@ -89,7 +124,7 @@ h4 { display: flex; align-items: center; - > div { + >div { margin-inline-start: 2rem; } @@ -97,4 +132,4 @@ h4 { ::ng-deep code { cursor: pointer; } -} +} \ No newline at end of file diff --git a/adev/src/app/main.component.ts b/adev/src/app/main.component.ts index 7fde6fe31175..03b3b36b3d28 100644 --- a/adev/src/app/main.component.ts +++ b/adev/src/app/main.component.ts @@ -22,15 +22,12 @@ export default class MainComponent { search = model(''); constructor() { - effect( - () => { - const search = this.search(); - if (search !== undefined) { - this.displaySearchDialog.set(true); - this.searchService.searchQuery.set(search); - } - }, - {allowSignalWrites: true}, - ); + effect(() => { + const search = this.search(); + if (search !== undefined) { + this.displaySearchDialog.set(true); + this.searchService.searchQuery.set(search); + } + }); } } diff --git a/adev/src/app/routes.ts b/adev/src/app/routes.ts index 4f561e135833..2a4060c8e81e 100644 --- a/adev/src/app/routes.ts +++ b/adev/src/app/routes.ts @@ -16,7 +16,7 @@ import MainComponent from './main.component'; // Docs navigation data contains routes which navigates to /tutorials pages, in // that case we should load Tutorial component -export const DOCS_ROUTES = mapNavigationItemsToRoutes( +export const DOCS_ROUTES: Route[] = mapNavigationItemsToRoutes( flatNavigationData(SUB_NAVIGATION_DATA.docs).filter( (route) => !route.path?.startsWith(PagePrefix.TUTORIALS) && route.path !== PagePrefix.PLAYGROUND, diff --git a/adev/src/assets/BUILD.bazel b/adev/src/assets/BUILD.bazel index 9b64479b2659..45962e687e09 100644 --- a/adev/src/assets/BUILD.bazel +++ b/adev/src/assets/BUILD.bazel @@ -1,4 +1,5 @@ load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") +load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest") package(default_visibility = ["//adev:__subpackages__"]) @@ -8,6 +9,7 @@ copy_to_directory( "//adev/src/content", "//adev/src/content/best-practices", "//adev/src/content/best-practices/runtime-performance", + "//adev/src/content/cdk:cdk_docs", "//adev/src/content/cli/help:cli_docs", "//adev/src/content/ecosystem", "//adev/src/content/ecosystem/rxjs-interop", @@ -81,6 +83,7 @@ copy_to_directory( ], replace_prefixes = { "adev/src/content/cli/help/cli_docs_html": "cli/", + "adev/src/content/cdk/cdk_docs_html": "api/", "adev/src/content": "", "packages/**/": "api/", "tools/**/": "api/", @@ -101,10 +104,18 @@ copy_to_directory( }, ) +generate_api_manifest( + name = "docs_api_manifest", + srcs = [ + "//adev/src/content/cdk:cdk_extracted_apis", + "//packages:docs_extracted_apis", + ], +) + copy_to_directory( name = "api", srcs = [ - "//packages:docs_api_manifest", + ":docs_api_manifest", ], replace_prefixes = { "**/": "", diff --git a/adev/src/assets/others/BUILD.bazel b/adev/src/assets/others/BUILD.bazel new file mode 100644 index 000000000000..57e952323cf6 --- /dev/null +++ b/adev/src/assets/others/BUILD.bazel @@ -0,0 +1,13 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") + +exports_files( + glob(["*"]), +) + +copy_to_bin( + name = "others", + srcs = glob(["**/*"]), + visibility = [ + "//visibility:public", + ], +) diff --git a/adev/src/assets/others/versions.json b/adev/src/assets/others/versions.json new file mode 100644 index 000000000000..55d286141c3d --- /dev/null +++ b/adev/src/assets/others/versions.json @@ -0,0 +1,74 @@ +[ + { + "version": "next", + "url": "https://next.angular.dev/overview" + }, + { + "version": "v19", + "url": "https://v19.angular.dev/overview" + }, + { + "version": "v18", + "url": "https://v18.angular.dev/overview" + }, + { + "version": "v17", + "url": "https://v17.angular.io/docs" + }, + { + "version": "v16", + "url": "https://v16.angular.io/docs" + }, + { + "version": "v15", + "url": "https://v15.angular.io/docs" + }, + { + "version": "v14", + "url": "https://v14.angular.io/docs" + }, + { + "version": "v13", + "url": "https://v13.angular.io/docs" + }, + { + "version": "v12", + "url": "https://v12.angular.io/docs" + }, + { + "version": "v11", + "url": "https://v11.angular.io/docs" + }, + { + "version": "v10", + "url": "https://v10.angular.io/docs" + }, + { + "version": "v9", + "url": "https://v9.angular.io/docs" + }, + { + "version": "v8", + "url": "https://v8.angular.io/docs" + }, + { + "version": "v7", + "url": "https://v7.angular.io/docs" + }, + { + "version": "v6", + "url": "https://v6.angular.io/docs" + }, + { + "version": "v5", + "url": "https://v5.angular.io/docs" + }, + { + "version": "v4", + "url": "https://v4.angular.io/docs" + }, + { + "version": "v2", + "url": "https://v2.angular.io/docs" + } +] diff --git a/adev/src/content/cdk/BUILD.bazel b/adev/src/content/cdk/BUILD.bazel new file mode 100644 index 000000000000..2d2b3486d9f7 --- /dev/null +++ b/adev/src/content/cdk/BUILD.bazel @@ -0,0 +1,25 @@ +load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest") +load("//adev/shared-docs/pipeline/api-gen/rendering:render_api_to_html.bzl", "render_api_to_html") + +filegroup( + name = "cdk_extracted_apis", + srcs = glob( + ["*.json"], + exclude = ["_*.json"], + ), + visibility = ["//visibility:public"], +) + +render_api_to_html( + name = "cdk_docs", + srcs = [":cdk_extracted_apis"], + visibility = ["//visibility:public"], +) + +generate_api_manifest( + name = "docs_api_manifest", + srcs = [ + ":cdk_extracted_apis", + ], + visibility = ["//visibility:public"], +) diff --git a/adev/src/content/cdk/_build-info.json b/adev/src/content/cdk/_build-info.json index 77ce266a260d..62084801d663 100644 --- a/adev/src/content/cdk/_build-info.json +++ b/adev/src/content/cdk/_build-info.json @@ -1,4 +1,4 @@ { "branchName": "refs/heads/20.0.x", - "sha": "7ca4fc074012d9f5a1232fe216260a6e1bb31495" + "sha": "7e8e343cf282d50ef5b73ee1987f281f90993b6f" } \ No newline at end of file diff --git a/adev/src/content/cdk/cdk_testing.json b/adev/src/content/cdk/cdk_testing.json index d000ab33f0aa..a9b30160e6c4 100755 --- a/adev/src/content/cdk/cdk_testing.json +++ b/adev/src/content/cdk/cdk_testing.json @@ -1 +1,7032 @@ -{"moduleLabel":"@angular/cdk/testing","moduleName":"@angular/cdk/testing","normalizedModuleName":"angular_cdk_testing","entries":[{"name":"getNoKeysSpecifiedError","signatures":[{"name":"getNoKeysSpecifiedError","entryType":"function","description":"Returns an error which reports that no keys have been specified.","generics":[],"isNewType":false,"jsdocTags":[{"name":"docs-private","comment":""}],"params":[],"rawComment":"/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */","returnType":"Error"}],"implementation":{"params":[],"isNewType":false,"returnType":"Error","generics":[],"name":"getNoKeysSpecifiedError","description":"Returns an error which reports that no keys have been specified.","entryType":"function","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */"},"entryType":"function","description":"Returns an error which reports that no keys have been specified.","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */","source":{"filePath":"/src/cdk/testing/test-element-errors.ts","startLine":13,"endLine":15}},{"name":"ElementDimensions","isAbstract":false,"entryType":"interface","members":[{"name":"top","type":"number","memberType":"property","memberTags":[],"description":"","jsdocTags":[]},{"name":"left","type":"number","memberType":"property","memberTags":[],"description":"","jsdocTags":[]},{"name":"width","type":"number","memberType":"property","memberTags":[],"description":"","jsdocTags":[]},{"name":"height","type":"number","memberType":"property","memberTags":[],"description":"","jsdocTags":[]}],"generics":[],"description":"Dimensions for element size and its position relative to the viewport.","jsdocTags":[],"rawComment":"/**\n * Dimensions for element size and its position relative to the viewport.\n */","implements":[],"source":{"filePath":"/src/cdk/testing/element-dimensions.ts","startLine":12,"endLine":17}},{"name":"AutoChangeDetectionStatus","isAbstract":false,"entryType":"interface","members":[{"name":"isDisabled","type":"boolean","memberType":"property","memberTags":[],"description":"Whether auto change detection is disabled.","jsdocTags":[]},{"name":"onDetectChangesNow","type":"(() => void) | undefined","memberType":"property","memberTags":["optional"],"description":"An optional callback, if present it indicates that change detection should be run immediately,\nwhile handling the status change. The callback should then be called as soon as change\ndetection is done.","jsdocTags":[]}],"generics":[],"description":"Represents the status of auto change detection.","jsdocTags":[],"rawComment":"/** Represents the status of auto change detection. */","implements":[],"source":{"filePath":"src/cdk/testing/change-detection.ts","startLine":12,"endLine":21}},{"name":"ModifierKeys","isAbstract":false,"entryType":"interface","members":[{"name":"control","type":"boolean | undefined","memberType":"property","memberTags":["optional"],"description":"","jsdocTags":[]},{"name":"alt","type":"boolean | undefined","memberType":"property","memberTags":["optional"],"description":"","jsdocTags":[]},{"name":"shift","type":"boolean | undefined","memberType":"property","memberTags":["optional"],"description":"","jsdocTags":[]},{"name":"meta","type":"boolean | undefined","memberType":"property","memberTags":["optional"],"description":"","jsdocTags":[]}],"generics":[],"description":"Modifier keys that may be held while typing.","jsdocTags":[],"rawComment":"/** Modifier keys that may be held while typing. */","implements":[],"source":{"filePath":"/src/cdk/testing/test-element.ts","startLine":12,"endLine":17}},{"name":"AsyncFactoryFn","type":"() => Promise","entryType":"type_alias","generics":[{"name":"T"}],"rawComment":"/** An async function that returns a promise when called. */","description":"An async function that returns a promise when called.","jsdocTags":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":13,"endLine":13}},{"name":"AsyncPredicate","type":"(item: T) => Promise","entryType":"type_alias","generics":[{"name":"T"}],"rawComment":"/** An async function that takes an item and returns a boolean promise */","description":"An async function that takes an item and returns a boolean promise","jsdocTags":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":16,"endLine":16}},{"name":"EventData","type":"| string\n | number\n | boolean\n | Function\n | undefined\n | null\n | EventData[]\n | {[key: string]: EventData}","entryType":"type_alias","generics":[],"rawComment":"/** Data that can be attached to a custom event dispatched from a `TestElement`. */","description":"Data that can be attached to a custom event dispatched from a `TestElement`.","jsdocTags":[],"source":{"filePath":"/src/cdk/testing/test-element.ts","startLine":20,"endLine":28}},{"name":"AsyncOptionPredicate","type":"(item: T, option: O) => Promise","entryType":"type_alias","generics":[{"name":"T"},{"name":"O"}],"rawComment":"/** An async function that takes an item and an option value and returns a boolean promise. */","description":"An async function that takes an item and an option value and returns a boolean promise.","jsdocTags":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":19,"endLine":19}},{"name":"TestKey","entryType":"enum","members":[{"name":"BACKSPACE","type":"TestKey.BACKSPACE","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"TAB","type":"TestKey.TAB","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"ENTER","type":"TestKey.ENTER","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"SHIFT","type":"TestKey.SHIFT","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"CONTROL","type":"TestKey.CONTROL","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"ALT","type":"TestKey.ALT","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"ESCAPE","type":"TestKey.ESCAPE","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"PAGE_UP","type":"TestKey.PAGE_UP","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"PAGE_DOWN","type":"TestKey.PAGE_DOWN","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"END","type":"TestKey.END","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"HOME","type":"TestKey.HOME","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"LEFT_ARROW","type":"TestKey.LEFT_ARROW","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"UP_ARROW","type":"TestKey.UP_ARROW","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"RIGHT_ARROW","type":"TestKey.RIGHT_ARROW","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"DOWN_ARROW","type":"TestKey.DOWN_ARROW","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"INSERT","type":"TestKey.INSERT","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"DELETE","type":"TestKey.DELETE","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F1","type":"TestKey.F1","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F2","type":"TestKey.F2","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F3","type":"TestKey.F3","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F4","type":"TestKey.F4","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F5","type":"TestKey.F5","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F6","type":"TestKey.F6","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F7","type":"TestKey.F7","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F8","type":"TestKey.F8","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F9","type":"TestKey.F9","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F10","type":"TestKey.F10","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F11","type":"TestKey.F11","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"F12","type":"TestKey.F12","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"META","type":"TestKey.META","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]},{"name":"COMMA","type":"TestKey.COMMA","value":"","memberType":"enum_item","jsdocTags":[],"description":"","memberTags":[]}],"rawComment":"/** An enum of non-text keys that can be used with the `sendKeys` method. */","description":"An enum of non-text keys that can be used with the `sendKeys` method.","jsdocTags":[],"source":{"filePath":"/src/cdk/testing/test-element.ts","startLine":37,"endLine":69}},{"name":"HarnessQuery","type":"| ComponentHarnessConstructor\n | HarnessPredicate","entryType":"type_alias","generics":[{"name":"T","constraint":"ComponentHarness"}],"rawComment":"/**\n * A query for a `ComponentHarness`, which is expressed as either a `ComponentHarnessConstructor` or\n * a `HarnessPredicate`.\n */","description":"A query for a `ComponentHarness`, which is expressed as either a `ComponentHarnessConstructor` or\na `HarnessPredicate`.","jsdocTags":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":25,"endLine":27}},{"name":"LocatorFnResult","type":"{\n [I in keyof T]: T[I] extends new (...args: any[]) => infer C // Map `ComponentHarnessConstructor` to `C`.\n ? C\n : // Map `HarnessPredicate` to `C`.\n T[I] extends {harnessType: new (...args: any[]) => infer C}\n ? C\n : // Map `string` to `TestElement`.\n T[I] extends string\n ? TestElement\n : // Map everything else to `never` (should not happen due to the type constraint on `T`).\n never;\n}[number]","entryType":"type_alias","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"rawComment":"/**\n * The result type obtained when searching using a particular list of queries. This type depends on\n * the particular items being queried.\n * - If one of the queries is for a `ComponentHarnessConstructor`, it means that the result\n * might be a harness of type `C1`\n * - If one of the queries is for a `HarnessPredicate`, it means that the result might be a\n * harness of type `C2`\n * - If one of the queries is for a `string`, it means that the result might be a `TestElement`.\n *\n * Since we don't know for sure which query will match, the result type if the union of the types\n * for all possible results.\n *\n * e.g.\n * The type:\n * `LocatorFnResult<[\n * ComponentHarnessConstructor<MyHarness>,\n * HarnessPredicate<MyOtherHarness>,\n * string\n * ]>`\n * is equivalent to:\n * `MyHarness | MyOtherHarness | TestElement`.\n */","description":"The result type obtained when searching using a particular list of queries. This type depends on\nthe particular items being queried.\n- If one of the queries is for a `ComponentHarnessConstructor`, it means that the result\n might be a harness of type `C1`\n- If one of the queries is for a `HarnessPredicate`, it means that the result might be a\n harness of type `C2`\n- If one of the queries is for a `string`, it means that the result might be a `TestElement`.\n\nSince we don't know for sure which query will match, the result type if the union of the types\nfor all possible results.\n\ne.g.\nThe type:\n`LocatorFnResult<[\n ComponentHarnessConstructor<MyHarness>,\n HarnessPredicate<MyOtherHarness>,\n string\n]>`\nis equivalent to:\n`MyHarness | MyOtherHarness | TestElement`.","jsdocTags":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":51,"endLine":62}},{"name":"HarnessEnvironment","isAbstract":true,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"rawRootElement","description":"","type":"E","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessEnvironment","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["protected"]},{"name":"rootElement","type":"TestElement","memberType":"getter","memberTags":[],"description":"","jsdocTags":[]},{"name":"rootElement","type":"TestElement","memberType":"setter","memberTags":[],"description":"","jsdocTags":[]},{"name":"documentRootLocatorFactory","signatures":[{"name":"documentRootLocatorFactory","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"","returnType":"LocatorFactory"}],"implementation":{"params":[],"isNewType":false,"returnType":"LocatorFactory","generics":[],"name":"documentRootLocatorFactory","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"locatorFor","signatures":[{"name":"locatorFor","entryType":"function","description":"","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"","returnType":"AsyncFactoryFn>"}],"implementation":{"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorFor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"locatorForOptional","signatures":[{"name":"locatorForOptional","entryType":"function","description":"","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"","returnType":"AsyncFactoryFn | null>"}],"implementation":{"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn | null>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForOptional","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"locatorForAll","signatures":[{"name":"locatorForAll","entryType":"function","description":"","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"","returnType":"AsyncFactoryFn[]>"}],"implementation":{"params":[{"name":"queries","description":"","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn[]>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForAll","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"rootHarnessLoader","signatures":[{"name":"rootHarnessLoader","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"rootHarnessLoader","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"harnessLoaderFor","signatures":[{"name":"harnessLoaderFor","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderFor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"harnessLoaderForOptional","signatures":[{"name":"harnessLoaderForOptional","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderForOptional","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"harnessLoaderForAll","signatures":[{"name":"harnessLoaderForAll","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderForAll","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getHarness","signatures":[{"name":"getHarness","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarness","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getHarnessOrNull","signatures":[{"name":"getHarnessOrNull","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarnessOrNull","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getAllHarnesses","signatures":[{"name":"getAllHarnesses","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getAllHarnesses","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"hasHarness","signatures":[{"name":"hasHarness","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"hasHarness","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getChildLoader","signatures":[{"name":"getChildLoader","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getChildLoader","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getAllChildLoaders","signatures":[{"name":"getAllChildLoaders","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllChildLoaders","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"createComponentHarness","signatures":[{"name":"createComponentHarness","entryType":"function","description":"Creates a `ComponentHarness` for the given harness type with the given raw host element.","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"harnessType","description":"","type":"ComponentHarnessConstructor","isOptional":false,"isRestParam":false},{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */","returnType":"T"}],"implementation":{"params":[{"name":"harnessType","description":"","type":"ComponentHarnessConstructor","isOptional":false,"isRestParam":false},{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"T","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"createComponentHarness","description":"Creates a `ComponentHarness` for the given harness type with the given raw host element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */"},"entryType":"function","description":"Creates a `ComponentHarness` for the given harness type with the given raw host element.","jsdocTags":[],"rawComment":"/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */","memberType":"method","memberTags":["protected"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["abstract"]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["abstract"]},{"name":"getDocumentRoot","signatures":[{"name":"getDocumentRoot","entryType":"function","description":"Gets the root element for the document.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the root element for the document. */","returnType":"E"}],"implementation":{"params":[],"isNewType":false,"returnType":"E","generics":[],"name":"getDocumentRoot","description":"Gets the root element for the document.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */"},"entryType":"function","description":"Gets the root element for the document.","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */","memberType":"method","memberTags":["protected","abstract"]},{"name":"createTestElement","signatures":[{"name":"createTestElement","entryType":"function","description":"Creates a `TestElement` from a raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `TestElement` from a raw element. */","returnType":"TestElement"}],"implementation":{"params":[{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"TestElement","generics":[],"name":"createTestElement","description":"Creates a `TestElement` from a raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */"},"entryType":"function","description":"Creates a `TestElement` from a raw element.","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */","memberType":"method","memberTags":["protected","abstract"]},{"name":"createEnvironment","signatures":[{"name":"createEnvironment","entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","returnType":"HarnessEnvironment"}],"implementation":{"params":[{"name":"element","description":"","type":"E","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessEnvironment","generics":[],"name":"createEnvironment","description":"Creates a `HarnessLoader` rooted at the given raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","memberType":"method","memberTags":["protected","abstract"]},{"name":"getAllRawElements","signatures":[{"name":"getAllRawElements","entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllRawElements","description":"Gets a list of all elements matching the given selector under this environment's root element.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */"},"entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","memberType":"method","memberTags":["protected","abstract"]}],"generics":[{"name":"E"}],"description":"Base harness environment class that can be extended to allow `ComponentHarness`es to be used in\ndifferent test environments (e.g. testbed, protractor, etc.). This class implements the\nfunctionality of both a `HarnessLoader` and `LocatorFactory`. This class is generic on the raw\nelement type, `E`, used by the particular test environment.","jsdocTags":[],"rawComment":"/**\n * Base harness environment class that can be extended to allow `ComponentHarness`es to be used in\n * different test environments (e.g. testbed, protractor, etc.). This class implements the\n * functionality of both a `HarnessLoader` and `LocatorFactory`. This class is generic on the raw\n * element type, `E`, used by the particular test environment.\n */","implements":["HarnessLoader","LocatorFactory"],"source":{"filePath":"src/cdk/testing/harness-environment.ts","startLine":46,"endLine":243}},{"name":"handleAutoChangeDetectionStatus","signatures":[{"name":"handleAutoChangeDetectionStatus","entryType":"function","description":"Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The handler for the auto change detection status."}],"params":[{"name":"handler","description":"The handler for the auto change detection status.","type":"(status: AutoChangeDetectionStatus) => void","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */","returnType":"void"}],"implementation":{"params":[{"name":"handler","description":"The handler for the auto change detection status.","type":"(status: AutoChangeDetectionStatus) => void","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"void","generics":[],"name":"handleAutoChangeDetectionStatus","description":"Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.","entryType":"function","jsdocTags":[{"name":"param","comment":"The handler for the auto change detection status."}],"rawComment":"/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */"},"entryType":"function","description":"Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.","jsdocTags":[{"name":"param","comment":"The handler for the auto change detection status."}],"rawComment":"/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */","source":{"filePath":"src/cdk/testing/change-detection.ts","startLine":45,"endLine":50}},{"name":"TestElement","isAbstract":false,"entryType":"interface","members":[{"name":"blur","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"blur","description":"Blur the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Blur the element. */"},"entryType":"function","description":"Blur the element.","jsdocTags":[],"rawComment":"/** Blur the element. */","memberType":"method","memberTags":[]},{"name":"clear","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"clear","description":"Clear the element's input (for input and textarea elements only).","entryType":"function","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */"},"entryType":"function","description":"Clear the element's input (for input and textarea elements only).","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","memberType":"method","memberTags":[]},{"name":"click","signatures":[],"implementation":{"params":[{"name":"modifiers","description":"","type":"ModifierKeys | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */"},"entryType":"function","description":"Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.","jsdocTags":[],"rawComment":"/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */","memberType":"method","memberTags":[]},{"name":"click","signatures":[],"implementation":{"params":[{"name":"location","description":"","type":"\"center\"","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"","type":"ModifierKeys | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"Click the element at the element's center.","entryType":"function","jsdocTags":[],"rawComment":"/** Click the element at the element's center. */"},"entryType":"function","description":"Click the element at the element's center.","jsdocTags":[],"rawComment":"/** Click the element at the element's center. */","memberType":"method","memberTags":[]},{"name":"click","signatures":[],"implementation":{"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"ModifierKeys | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"Click the element at the specified coordinates relative to the top-left of the element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"rawComment":"/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */"},"entryType":"function","description":"Click the element at the specified coordinates relative to the top-left of the element.","jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"rawComment":"/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","memberType":"method","memberTags":[]},{"name":"rightClick","signatures":[],"implementation":{"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"ModifierKeys | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"rightClick","description":"Right clicks on the element at the specified coordinates relative to the top-left of it.","entryType":"function","jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"rawComment":"/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */"},"entryType":"function","description":"Right clicks on the element at the specified coordinates relative to the top-left of it.","jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"rawComment":"/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","memberType":"method","memberTags":[]},{"name":"focus","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"focus","description":"Focus the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Focus the element. */"},"entryType":"function","description":"Focus the element.","jsdocTags":[],"rawComment":"/** Focus the element. */","memberType":"method","memberTags":[]},{"name":"getCssValue","signatures":[],"implementation":{"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getCssValue","description":"Get the computed value of the given CSS property for the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */"},"entryType":"function","description":"Get the computed value of the given CSS property for the element.","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */","memberType":"method","memberTags":[]},{"name":"hover","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"hover","description":"Hovers the mouse over the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */"},"entryType":"function","description":"Hovers the mouse over the element.","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */","memberType":"method","memberTags":[]},{"name":"mouseAway","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"mouseAway","description":"Moves the mouse away from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */"},"entryType":"function","description":"Moves the mouse away from the element.","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */","memberType":"method","memberTags":[]},{"name":"sendKeys","signatures":[],"implementation":{"params":[{"name":"keys","description":"","type":"(string | TestKey)[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"sendKeys","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that some environments cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.","entryType":"function","jsdocTags":[{"name":"throws","comment":"An error if no keys have been specified."}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that some environments cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n * @throws An error if no keys have been specified.\n */"},"entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that some environments cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.","jsdocTags":[{"name":"throws","comment":"An error if no keys have been specified."}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that some environments cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n * @throws An error if no keys have been specified.\n */","memberType":"method","memberTags":[]},{"name":"sendKeys","signatures":[],"implementation":{"params":[{"name":"modifiers","description":"","type":"ModifierKeys","isOptional":false,"isRestParam":false},{"name":"keys","description":"","type":"(string | TestKey)[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"sendKeys","description":"Sends the given string to the input as a series of key presses. Also fires input\nevents and attempts to add the string to the Element's value.","entryType":"function","jsdocTags":[{"name":"throws","comment":"An error if no keys have been specified."}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input\n * events and attempts to add the string to the Element's value.\n * @throws An error if no keys have been specified.\n */"},"entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input\nevents and attempts to add the string to the Element's value.","jsdocTags":[{"name":"throws","comment":"An error if no keys have been specified."}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input\n * events and attempts to add the string to the Element's value.\n * @throws An error if no keys have been specified.\n */","memberType":"method","memberTags":[]},{"name":"text","signatures":[],"implementation":{"params":[{"name":"options","description":"Options that affect what text is included.","type":"TextOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"text","description":"Gets the text from the element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */"},"entryType":"function","description":"Gets the text from the element.","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","memberType":"method","memberTags":[]},{"name":"setContenteditableValue","signatures":[],"implementation":{"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setContenteditableValue","description":"Sets the value of a `contenteditable` element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Value to be set on the element."},{"name":"breaking-change","comment":"16.0.0 Will become a required method."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n * @breaking-change 16.0.0 Will become a required method.\n */"},"entryType":"function","description":"Sets the value of a `contenteditable` element.","jsdocTags":[{"name":"param","comment":"Value to be set on the element."},{"name":"breaking-change","comment":"16.0.0 Will become a required method."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n * @breaking-change 16.0.0 Will become a required method.\n */","memberType":"method","memberTags":["optional"]},{"name":"getAttribute","signatures":[],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAttribute","description":"Gets the value for the given attribute from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */"},"entryType":"function","description":"Gets the value for the given attribute from the element.","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */","memberType":"method","memberTags":[]},{"name":"hasClass","signatures":[],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"hasClass","description":"Checks whether the element has the given class.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */"},"entryType":"function","description":"Checks whether the element has the given class.","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */","memberType":"method","memberTags":[]},{"name":"getDimensions","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"getDimensions","description":"Gets the dimensions of the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */"},"entryType":"function","description":"Gets the dimensions of the element.","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */","memberType":"method","memberTags":[]},{"name":"getProperty","signatures":[],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","default":"any"}],"name":"getProperty","description":"Gets the value of a property of an element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */"},"entryType":"function","description":"Gets the value of a property of an element.","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */","memberType":"method","memberTags":[]},{"name":"matchesSelector","signatures":[],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"matchesSelector","description":"Checks whether this element matches the given selector.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */"},"entryType":"function","description":"Checks whether this element matches the given selector.","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */","memberType":"method","memberTags":[]},{"name":"isFocused","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"isFocused","description":"Checks whether the element is focused.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */"},"entryType":"function","description":"Checks whether the element is focused.","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */","memberType":"method","memberTags":[]},{"name":"setInputValue","signatures":[],"implementation":{"params":[{"name":"value","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setInputValue","description":"Sets the value of a property of an input.","entryType":"function","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */"},"entryType":"function","description":"Sets the value of a property of an input.","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */","memberType":"method","memberTags":[]},{"name":"selectOptions","signatures":[],"implementation":{"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"selectOptions","description":"Selects the options at the specified indexes inside of a native `select` element.","entryType":"function","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */"},"entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","memberType":"method","memberTags":[]},{"name":"dispatchEvent","signatures":[],"implementation":{"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"dispatchEvent","description":"Dispatches an event with a particular name.","entryType":"function","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */"},"entryType":"function","description":"Dispatches an event with a particular name.","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"This acts as a common interface for DOM elements across both unit and e2e tests. It is the\ninterface through which the ComponentHarness interacts with the component's DOM.","jsdocTags":[],"rawComment":"/**\n * This acts as a common interface for DOM elements across both unit and e2e tests. It is the\n * interface through which the ComponentHarness interacts with the component's DOM.\n */","implements":[],"source":{"filePath":"/src/cdk/testing/test-element.ts","startLine":75,"endLine":181}},{"name":"stopHandlingAutoChangeDetectionStatus","signatures":[{"name":"stopHandlingAutoChangeDetectionStatus","entryType":"function","description":"Allows a `HarnessEnvironment` to stop handling auto change detection status changes.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */","returnType":"void"}],"implementation":{"params":[],"isNewType":false,"returnType":"void","generics":[],"name":"stopHandlingAutoChangeDetectionStatus","description":"Allows a `HarnessEnvironment` to stop handling auto change detection status changes.","entryType":"function","jsdocTags":[],"rawComment":"/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */"},"entryType":"function","description":"Allows a `HarnessEnvironment` to stop handling auto change detection status changes.","jsdocTags":[],"rawComment":"/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */","source":{"filePath":"src/cdk/testing/change-detection.ts","startLine":53,"endLine":56}},{"name":"HarnessLoader","isAbstract":false,"entryType":"interface","members":[{"name":"getChildLoader","signatures":[],"implementation":{"params":[{"name":"selector","description":"The selector for the root element of the new `HarnessLoader`","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getChildLoader","description":"Searches for an element with the given selector under the current instances's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.","entryType":"function","jsdocTags":[{"name":"param","comment":"The selector for the root element of the new `HarnessLoader`"},{"name":"return","comment":"A `HarnessLoader` rooted at the element matching the given selector."},{"name":"throws","comment":"If a matching element can't be found."}],"rawComment":"/**\n * Searches for an element with the given selector under the current instances's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */"},"entryType":"function","description":"Searches for an element with the given selector under the current instances's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.","jsdocTags":[{"name":"param","comment":"The selector for the root element of the new `HarnessLoader`"},{"name":"return","comment":"A `HarnessLoader` rooted at the element matching the given selector."},{"name":"throws","comment":"If a matching element can't be found."}],"rawComment":"/**\n * Searches for an element with the given selector under the current instances's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */","memberType":"method","memberTags":[]},{"name":"getAllChildLoaders","signatures":[],"implementation":{"params":[{"name":"selector","description":"The selector for the root element of the new `HarnessLoader`","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllChildLoaders","description":"Searches for all elements with the given selector under the current instances's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.","entryType":"function","jsdocTags":[{"name":"param","comment":"The selector for the root element of the new `HarnessLoader`"},{"name":"return","comment":"A list of `HarnessLoader`s, one for each matching element, rooted at that element."}],"rawComment":"/**\n * Searches for all elements with the given selector under the current instances's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */"},"entryType":"function","description":"Searches for all elements with the given selector under the current instances's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.","jsdocTags":[{"name":"param","comment":"The selector for the root element of the new `HarnessLoader`"},{"name":"return","comment":"A list of `HarnessLoader`s, one for each matching element, rooted at that element."}],"rawComment":"/**\n * Searches for all elements with the given selector under the current instances's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */","memberType":"method","memberTags":[]},{"name":"getHarness","signatures":[],"implementation":{"params":[{"name":"query","description":"A query for a harness to create","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarness","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.","entryType":"function","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"An instance of the given harness type"},{"name":"throws","comment":"If a matching component instance can't be found."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */"},"entryType":"function","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"An instance of the given harness type"},{"name":"throws","comment":"If a matching component instance can't be found."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */","memberType":"method","memberTags":[]},{"name":"getHarnessOrNull","signatures":[],"implementation":{"params":[{"name":"query","description":"A query for a harness to create","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarnessOrNull","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.","entryType":"function","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"An instance of the given harness type (or null if not found)."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */"},"entryType":"function","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"An instance of the given harness type (or null if not found)."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */","memberType":"method","memberTags":[]},{"name":"getAllHarnesses","signatures":[],"implementation":{"params":[{"name":"query","description":"A query for a harness to create","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getAllHarnesses","description":"Searches for all instances of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.","entryType":"function","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"A list instances of the given harness type."}],"rawComment":"/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */"},"entryType":"function","description":"Searches for all instances of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"A list instances of the given harness type."}],"rawComment":"/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */","memberType":"method","memberTags":[]},{"name":"hasHarness","signatures":[],"implementation":{"params":[{"name":"query","description":"A query for a harness to create","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"hasHarness","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a boolean indicating if any were found.","entryType":"function","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"A boolean indicating if an instance was found."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */"},"entryType":"function","description":"Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a boolean indicating if any were found.","jsdocTags":[{"name":"param","comment":"A query for a harness to create"},{"name":"return","comment":"A boolean indicating if an instance was found."}],"rawComment":"/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"Interface used to load ComponentHarness objects. This interface is used by test authors to\ninstantiate `ComponentHarness`es.","jsdocTags":[],"rawComment":"/**\n * Interface used to load ComponentHarness objects. This interface is used by test authors to\n * instantiate `ComponentHarness`es.\n */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":68,"endLine":124}},{"name":"manualChangeDetection","signatures":[{"name":"manualChangeDetection","entryType":"function","description":"Disables the harness system's auto change detection for the duration of the given function.","generics":[{"name":"T"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The function to disable auto change detection for."},{"name":"return","comment":"The result of the given function."}],"params":[{"name":"fn","description":"The function to disable auto change detection for.","type":"() => Promise","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"fn","description":"The function to disable auto change detection for.","type":"() => Promise","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T"}],"name":"manualChangeDetection","description":"Disables the harness system's auto change detection for the duration of the given function.","entryType":"function","jsdocTags":[{"name":"param","comment":"The function to disable auto change detection for."},{"name":"return","comment":"The result of the given function."}],"rawComment":"/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */"},"entryType":"function","description":"Disables the harness system's auto change detection for the duration of the given function.","jsdocTags":[{"name":"param","comment":"The function to disable auto change detection for."},{"name":"return","comment":"The result of the given function."}],"rawComment":"/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */","source":{"filePath":"src/cdk/testing/change-detection.ts","startLine":114,"endLine":116}},{"name":"parallel","signatures":[{"name":"parallel","entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","generics":[{"name":"T1"},{"name":"T2"},{"name":"T3"},{"name":"T4"},{"name":"T5"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","returnType":"Promise<[T1, T2, T3, T4, T5]>"},{"name":"parallel","entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","generics":[{"name":"T1"},{"name":"T2"},{"name":"T3"},{"name":"T4"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","returnType":"Promise<[T1, T2, T3, T4]>"},{"name":"parallel","entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","generics":[{"name":"T1"},{"name":"T2"},{"name":"T3"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","returnType":"Promise<[T1, T2, T3]>"},{"name":"parallel","entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","generics":[{"name":"T1"},{"name":"T2"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => [T1 | PromiseLike, T2 | PromiseLike]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","returnType":"Promise<[T1, T2]>"},{"name":"parallel","entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","generics":[{"name":"T"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => (T | PromiseLike)[]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"values","description":"A getter for the async values to resolve in parallel with batched change detection.","type":"() => Iterable>","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise<[T1, T2, T3, T4, T5]>","generics":[{"name":"T"}],"name":"parallel","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","entryType":"function","jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */"},"entryType":"function","description":"Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.","jsdocTags":[{"name":"param","comment":"A getter for the async values to resolve in parallel with batched change detection."},{"name":"return","comment":"The resolved values."}],"rawComment":"/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */","source":{"filePath":"src/cdk/testing/change-detection.ts","startLine":125,"endLine":133}},{"name":"LocatorFactory","isAbstract":false,"entryType":"interface","members":[{"name":"documentRootLocatorFactory","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"LocatorFactory","generics":[],"name":"documentRootLocatorFactory","description":"Gets a locator factory rooted at the document root.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets a locator factory rooted at the document root. */"},"entryType":"function","description":"Gets a locator factory rooted at the document root.","jsdocTags":[],"rawComment":"/** Gets a locator factory rooted at the document root. */","memberType":"method","memberTags":[]},{"name":"rootElement","type":"TestElement","memberType":"property","memberTags":[],"description":"The root element of this `LocatorFactory` as a `TestElement`.","jsdocTags":[]},{"name":"locatorFor","signatures":[],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorFor","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await lf.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await lf.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await lf.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await lf.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await lf.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await lf.locatorFor('span')()` throws because the `Promise` rejects.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await lf.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await lf.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await lf.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await lf.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await lf.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await lf.locatorFor('span')()` throws because the `Promise` rejects.\n */","memberType":"method","memberTags":[]},{"name":"locatorForOptional","signatures":[],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn | null>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForOptional","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await lf.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await lf.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await lf.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await lf.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await lf.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await lf.locatorForOptional('span')()` gets `null`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await lf.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await lf.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await lf.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await lf.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await lf.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await lf.locatorForOptional('span')()` gets `null`.\n */","memberType":"method","memberTags":[]},{"name":"locatorForAll","signatures":[],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn[]>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForAll","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `LocatorFactory`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await lf.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await lf.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await lf.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await lf.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await lf.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await lf.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await lf.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await lf.locatorForAll('span')()` gets `[]`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `LocatorFactory`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await lf.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await lf.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await lf.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await lf.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `LocatorFactory`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await lf.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await lf.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await lf.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await lf.locatorForAll('span')()` gets `[]`.\n */","memberType":"method","memberTags":[]},{"name":"rootHarnessLoader","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"rootHarnessLoader","description":"","entryType":"function","jsdocTags":[{"name":"return","comment":"A `HarnessLoader` rooted at the root element of this `LocatorFactory`."}],"rawComment":"/** @return A `HarnessLoader` rooted at the root element of this `LocatorFactory`. */"},"entryType":"function","description":"","jsdocTags":[{"name":"return","comment":"A `HarnessLoader` rooted at the root element of this `LocatorFactory`."}],"rawComment":"/** @return A `HarnessLoader` rooted at the root element of this `LocatorFactory`. */","memberType":"method","memberTags":[]},{"name":"harnessLoaderFor","signatures":[],"implementation":{"params":[{"name":"selector","description":"The selector for the root element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderFor","description":"Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.","entryType":"function","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A `HarnessLoader` rooted at the first element matching the given selector."},{"name":"throws","comment":"If no matching element is found for the given selector."}],"rawComment":"/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */"},"entryType":"function","description":"Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A `HarnessLoader` rooted at the first element matching the given selector."},{"name":"throws","comment":"If no matching element is found for the given selector."}],"rawComment":"/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */","memberType":"method","memberTags":[]},{"name":"harnessLoaderForOptional","signatures":[],"implementation":{"params":[{"name":"selector","description":"The selector for the root element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderForOptional","description":"Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`","entryType":"function","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found."}],"rawComment":"/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */"},"entryType":"function","description":"Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found."}],"rawComment":"/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */","memberType":"method","memberTags":[]},{"name":"harnessLoaderForAll","signatures":[],"implementation":{"params":[{"name":"selector","description":"The selector for the root element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"harnessLoaderForAll","description":"Gets a list of `HarnessLoader` instances, one for each matching element.","entryType":"function","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A list of `HarnessLoader`, one rooted at each element matching the given selector."}],"rawComment":"/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */"},"entryType":"function","description":"Gets a list of `HarnessLoader` instances, one for each matching element.","jsdocTags":[{"name":"param","comment":"The selector for the root element."},{"name":"return","comment":"A list of `HarnessLoader`, one rooted at each element matching the given selector."}],"rawComment":"/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */","memberType":"method","memberTags":[]},{"name":"forceStabilize","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":[]},{"name":"waitForTasksOutsideAngular","signatures":[],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */"},"entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"Interface used to create asynchronous locator functions used find elements and component\nharnesses. This interface is used by `ComponentHarness` authors to create locator functions for\ntheir `ComponentHarness` subclass.","jsdocTags":[],"rawComment":"/**\n * Interface used to create asynchronous locator functions used find elements and component\n * harnesses. This interface is used by `ComponentHarness` authors to create locator functions for\n * their `ComponentHarness` subclass.\n */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":131,"endLine":266}},{"name":"TextOptions","isAbstract":false,"entryType":"interface","members":[{"name":"exclude","type":"string | undefined","memberType":"property","memberTags":["optional"],"description":"Optional selector for elements to exclude.","jsdocTags":[]}],"generics":[],"description":"","jsdocTags":[],"rawComment":"","implements":[],"source":{"filePath":"/src/cdk/testing/test-element.ts","startLine":183,"endLine":186}},{"name":"ComponentHarness","isAbstract":true,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"locatorFactory","description":"","type":"LocatorFactory","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"ComponentHarness","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"host","signatures":[{"name":"host","entryType":"function","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"host","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */"},"entryType":"function","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","jsdocTags":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */","memberType":"method","memberTags":[]},{"name":"documentRootLocatorFactory","signatures":[{"name":"documentRootLocatorFactory","entryType":"function","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */","returnType":"LocatorFactory"}],"implementation":{"params":[],"isNewType":false,"returnType":"LocatorFactory","generics":[],"name":"documentRootLocatorFactory","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */"},"entryType":"function","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","jsdocTags":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */","memberType":"method","memberTags":["protected"]},{"name":"locatorFor","signatures":[{"name":"locatorFor","entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */","returnType":"AsyncFactoryFn>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorFor","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */","memberType":"method","memberTags":["protected"]},{"name":"locatorForOptional","signatures":[{"name":"locatorForOptional","entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */","returnType":"AsyncFactoryFn | null>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn | null>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForOptional","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */","memberType":"method","memberTags":["protected"]},{"name":"locatorForAll","signatures":[{"name":"locatorForAll","entryType":"function","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */","returnType":"AsyncFactoryFn[]>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn[]>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForAll","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */","memberType":"method","memberTags":["protected"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":["protected"]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */"},"entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","memberType":"method","memberTags":["protected"]}],"generics":[],"description":"Base class for component harnesses that all component harness authors should extend. This base\ncomponent harness provides the basic ability to locate element and sub-component harness. It\nshould be inherited when defining user's own harness.","jsdocTags":[],"rawComment":"/**\n * Base class for component harnesses that all component harness authors should extend. This base\n * component harness provides the basic ability to locate element and sub-component harness. It\n * should be inherited when defining user's own harness.\n */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":273,"endLine":402}},{"name":"ContentContainerComponentHarness","isAbstract":true,"entryType":"undecorated_class","members":[{"name":"getChildLoader","signatures":[{"name":"getChildLoader","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"S","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"S","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getChildLoader","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getAllChildLoaders","signatures":[{"name":"getAllChildLoaders","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"S","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"S","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllChildLoaders","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getHarness","signatures":[{"name":"getHarness","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarness","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getHarnessOrNull","signatures":[{"name":"getHarnessOrNull","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getHarnessOrNull","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getAllHarnesses","signatures":[{"name":"getAllHarnesses","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"getAllHarnesses","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"hasHarness","signatures":[{"name":"hasHarness","entryType":"function","description":"","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"rawComment":"","returnType":"Promise"}],"implementation":{"params":[{"name":"query","description":"","type":"HarnessQuery","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"hasHarness","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"getRootHarnessLoader","signatures":[{"name":"getRootHarnessLoader","entryType":"function","description":"Gets the root harness loader from which to start\nsearching for content contained by this harness.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"getRootHarnessLoader","description":"Gets the root harness loader from which to start\nsearching for content contained by this harness.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */"},"entryType":"function","description":"Gets the root harness loader from which to start\nsearching for content contained by this harness.","jsdocTags":[],"rawComment":"/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */","memberType":"method","memberTags":["protected"]},{"name":"host","signatures":[{"name":"host","entryType":"function","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"host","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */"},"entryType":"function","description":"Gets a `Promise` for the `TestElement` representing the host element of the component.","jsdocTags":[],"rawComment":"/** Gets a `Promise` for the `TestElement` representing the host element of the component. */","memberType":"method","memberTags":["override"]},{"name":"documentRootLocatorFactory","signatures":[{"name":"documentRootLocatorFactory","entryType":"function","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */","returnType":"LocatorFactory"}],"implementation":{"params":[],"isNewType":false,"returnType":"LocatorFactory","generics":[],"name":"documentRootLocatorFactory","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */"},"entryType":"function","description":"Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).","jsdocTags":[],"rawComment":"/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */","memberType":"method","memberTags":["protected","override"]},{"name":"locatorFor","signatures":[{"name":"locatorFor","entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */","returnType":"AsyncFactoryFn>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorFor","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorFor('span')()` throws because the `Promise` rejects."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorFor(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorFor('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorFor('span')()` throws because the `Promise` rejects.\n */","memberType":"method","memberTags":["protected","override"]},{"name":"locatorForOptional","signatures":[{"name":"locatorForOptional","entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */","returnType":"AsyncFactoryFn | null>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn | null>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForOptional","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'`:\n- `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n- `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n- `await ch.locatorForOptional('span')()` gets `null`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'`:\n * - `await ch.locatorForOptional(DivHarness, 'div')()` gets a `DivHarness` instance for `#d1`\n * - `await ch.locatorForOptional('div', DivHarness)()` gets a `TestElement` instance for `#d1`\n * - `await ch.locatorForOptional('span')()` gets `null`.\n */","memberType":"method","memberTags":["protected","override"]},{"name":"locatorForAll","signatures":[{"name":"locatorForAll","entryType":"function","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */","returnType":"AsyncFactoryFn[]>"}],"implementation":{"params":[{"name":"queries","description":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.","type":"T","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"AsyncFactoryFn[]>","generics":[{"name":"T","constraint":"(HarnessQuery | string)[]"}],"name":"locatorForAll","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","entryType":"function","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */"},"entryType":"function","description":"Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.","jsdocTags":[{"name":"param","comment":"A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate."},{"name":"return","comment":"An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query.\n\ne.g. Given the following DOM: `
`, and assuming\n`DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n- `await ch.locatorForAll(DivHarness, 'div')()` gets `[\nDivHarness, // for #d1\nTestElement, // for #d1\nDivHarness, // for #d2\nTestElement // for #d2\n]`\n- `await ch.locatorForAll('div', '#d1')()` gets `[\nTestElement, // for #d1\nTestElement // for #d2\n]`\n- `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\nDivHarness, // for #d1\nIdIsD1Harness, // for #d1\nDivHarness // for #d2\n]`\n- `await ch.locatorForAll('span')()` gets `[]`."}],"rawComment":"/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n *\n * e.g. Given the following DOM: `
`, and assuming\n * `DivHarness.hostSelector === 'div'` and `IdIsD1Harness.hostSelector === '#d1'`:\n * - `await ch.locatorForAll(DivHarness, 'div')()` gets `[\n * DivHarness, // for #d1\n * TestElement, // for #d1\n * DivHarness, // for #d2\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll('div', '#d1')()` gets `[\n * TestElement, // for #d1\n * TestElement // for #d2\n * ]`\n * - `await ch.locatorForAll(DivHarness, IdIsD1Harness)()` gets `[\n * DivHarness, // for #d1\n * IdIsD1Harness, // for #d1\n * DivHarness // for #d2\n * ]`\n * - `await ch.locatorForAll('span')()` gets `[]`.\n */","memberType":"method","memberTags":["protected","override"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":["protected","override"]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */"},"entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","memberType":"method","memberTags":["protected","override"]}],"generics":[{"name":"S","constraint":"string","default":"string"}],"description":"Base class for component harnesses that authors should extend if they anticipate that consumers\nof the harness may want to access other harnesses within the `` of the component.","jsdocTags":[],"rawComment":"/**\n * Base class for component harnesses that authors should extend if they anticipate that consumers\n * of the harness may want to access other harnesses within the `` of the component.\n */","extends":"ComponentHarness","implements":["HarnessLoader"],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":408,"endLine":443}},{"name":"ComponentHarnessConstructor","isAbstract":false,"entryType":"interface","members":[{"name":"hostSelector","type":"string","memberType":"property","memberTags":[],"description":"`ComponentHarness` subclasses must specify a static `hostSelector` property that is used to\nfind the host element for the corresponding component. This property should match the selector\nfor the Angular component.","jsdocTags":[]}],"generics":[{"name":"T","constraint":"ComponentHarness"}],"description":"Constructor for a ComponentHarness subclass.","jsdocTags":[],"rawComment":"/** Constructor for a ComponentHarness subclass. */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":446,"endLine":455}},{"name":"BaseHarnessFilters","isAbstract":false,"entryType":"interface","members":[{"name":"selector","type":"string | undefined","memberType":"property","memberTags":["optional"],"description":"Only find instances whose host element matches the given selector.","jsdocTags":[]},{"name":"ancestor","type":"string | undefined","memberType":"property","memberTags":["optional"],"description":"Only find instances that are nested under an element with the given selector.","jsdocTags":[]}],"generics":[],"description":"A set of criteria that can be used to filter a list of `ComponentHarness` instances.","jsdocTags":[],"rawComment":"/** A set of criteria that can be used to filter a list of `ComponentHarness` instances. */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":458,"endLine":463}},{"name":"HarnessPredicate","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"harnessType","description":"","type":"ComponentHarnessConstructor","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"BaseHarnessFilters","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessPredicate","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"harnessType","type":"ComponentHarnessConstructor","memberType":"property","memberTags":["override"],"description":"","jsdocTags":[]},{"name":"add","signatures":[{"name":"add","entryType":"function","description":"Adds a predicate function to be run against candidate harnesses.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"A description of this predicate that may be used in error messages."},{"name":"param","comment":"An async predicate function."},{"name":"return","comment":"this (for method chaining)."}],"params":[{"name":"description","description":"A description of this predicate that may be used in error messages.","type":"string","isOptional":false,"isRestParam":false},{"name":"predicate","description":"An async predicate function.","type":"AsyncPredicate","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */","returnType":"this"}],"implementation":{"params":[{"name":"description","description":"A description of this predicate that may be used in error messages.","type":"string","isOptional":false,"isRestParam":false},{"name":"predicate","description":"An async predicate function.","type":"AsyncPredicate","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"this","generics":[],"name":"add","description":"Adds a predicate function to be run against candidate harnesses.","entryType":"function","jsdocTags":[{"name":"param","comment":"A description of this predicate that may be used in error messages."},{"name":"param","comment":"An async predicate function."},{"name":"return","comment":"this (for method chaining)."}],"rawComment":"/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */"},"entryType":"function","description":"Adds a predicate function to be run against candidate harnesses.","jsdocTags":[{"name":"param","comment":"A description of this predicate that may be used in error messages."},{"name":"param","comment":"An async predicate function."},{"name":"return","comment":"this (for method chaining)."}],"rawComment":"/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */","memberType":"method","memberTags":[]},{"name":"addOption","signatures":[{"name":"addOption","entryType":"function","description":"Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.","generics":[{"name":"O"}],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The name of the option (may be used in error messages)."},{"name":"param","comment":"The option value."},{"name":"param","comment":"The predicate function to run if the option value is not undefined."},{"name":"return","comment":"this (for method chaining)."}],"params":[{"name":"name","description":"The name of the option (may be used in error messages).","type":"string","isOptional":false,"isRestParam":false},{"name":"option","description":"The option value.","type":"O | undefined","isOptional":false,"isRestParam":false},{"name":"predicate","description":"The predicate function to run if the option value is not undefined.","type":"AsyncOptionPredicate","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */","returnType":"this"}],"implementation":{"params":[{"name":"name","description":"The name of the option (may be used in error messages).","type":"string","isOptional":false,"isRestParam":false},{"name":"option","description":"The option value.","type":"O | undefined","isOptional":false,"isRestParam":false},{"name":"predicate","description":"The predicate function to run if the option value is not undefined.","type":"AsyncOptionPredicate","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"this","generics":[{"name":"O"}],"name":"addOption","description":"Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.","entryType":"function","jsdocTags":[{"name":"param","comment":"The name of the option (may be used in error messages)."},{"name":"param","comment":"The option value."},{"name":"param","comment":"The predicate function to run if the option value is not undefined."},{"name":"return","comment":"this (for method chaining)."}],"rawComment":"/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */"},"entryType":"function","description":"Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.","jsdocTags":[{"name":"param","comment":"The name of the option (may be used in error messages)."},{"name":"param","comment":"The option value."},{"name":"param","comment":"The predicate function to run if the option value is not undefined."},{"name":"return","comment":"this (for method chaining)."}],"rawComment":"/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */","memberType":"method","memberTags":[]},{"name":"filter","signatures":[{"name":"filter","entryType":"function","description":"Filters a list of harnesses on this predicate.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The list of harnesses to filter."},{"name":"return","comment":"A list of harnesses that satisfy this predicate."}],"params":[{"name":"harnesses","description":"The list of harnesses to filter.","type":"T[]","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"harnesses","description":"The list of harnesses to filter.","type":"T[]","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"filter","description":"Filters a list of harnesses on this predicate.","entryType":"function","jsdocTags":[{"name":"param","comment":"The list of harnesses to filter."},{"name":"return","comment":"A list of harnesses that satisfy this predicate."}],"rawComment":"/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */"},"entryType":"function","description":"Filters a list of harnesses on this predicate.","jsdocTags":[{"name":"param","comment":"The list of harnesses to filter."},{"name":"return","comment":"A list of harnesses that satisfy this predicate."}],"rawComment":"/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */","memberType":"method","memberTags":[]},{"name":"evaluate","signatures":[{"name":"evaluate","entryType":"function","description":"Evaluates whether the given harness satisfies this predicate.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The harness to check"},{"name":"return","comment":"A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise."}],"params":[{"name":"harness","description":"The harness to check","type":"T","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"harness","description":"The harness to check","type":"T","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"evaluate","description":"Evaluates whether the given harness satisfies this predicate.","entryType":"function","jsdocTags":[{"name":"param","comment":"The harness to check"},{"name":"return","comment":"A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise."}],"rawComment":"/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */"},"entryType":"function","description":"Evaluates whether the given harness satisfies this predicate.","jsdocTags":[{"name":"param","comment":"The harness to check"},{"name":"return","comment":"A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise."}],"rawComment":"/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */","memberType":"method","memberTags":[]},{"name":"getDescription","signatures":[{"name":"getDescription","entryType":"function","description":"Gets a description of this predicate for use in error messages.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets a description of this predicate for use in error messages. */","returnType":"string"}],"implementation":{"params":[],"isNewType":false,"returnType":"string","generics":[],"name":"getDescription","description":"Gets a description of this predicate for use in error messages.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets a description of this predicate for use in error messages. */"},"entryType":"function","description":"Gets a description of this predicate for use in error messages.","jsdocTags":[],"rawComment":"/** Gets a description of this predicate for use in error messages. */","memberType":"method","memberTags":[]},{"name":"getSelector","signatures":[{"name":"getSelector","entryType":"function","description":"Gets the selector used to find candidate elements.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the selector used to find candidate elements. */","returnType":"string"}],"implementation":{"params":[],"isNewType":false,"returnType":"string","generics":[],"name":"getSelector","description":"Gets the selector used to find candidate elements.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the selector used to find candidate elements. */"},"entryType":"function","description":"Gets the selector used to find candidate elements.","jsdocTags":[],"rawComment":"/** Gets the selector used to find candidate elements. */","memberType":"method","memberTags":[]},{"name":"stringMatches","signatures":[{"name":"stringMatches","entryType":"function","description":"Checks if the specified nullable string value matches the given pattern.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"The nullable string value to check, or a Promise resolving to the\nnullable string value."},{"name":"param","comment":"The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`."},{"name":"return","comment":"Whether the value matches the pattern."}],"params":[{"name":"value","description":"The nullable string value to check, or a Promise resolving to the\nnullable string value.","type":"string | Promise | null","isOptional":false,"isRestParam":false},{"name":"pattern","description":"The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`.","type":"string | RegExp | null","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"The nullable string value to check, or a Promise resolving to the\nnullable string value.","type":"string | Promise | null","isOptional":false,"isRestParam":false},{"name":"pattern","description":"The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`.","type":"string | RegExp | null","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"stringMatches","description":"Checks if the specified nullable string value matches the given pattern.","entryType":"function","jsdocTags":[{"name":"param","comment":"The nullable string value to check, or a Promise resolving to the\nnullable string value."},{"name":"param","comment":"The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`."},{"name":"return","comment":"Whether the value matches the pattern."}],"rawComment":"/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */"},"entryType":"function","description":"Checks if the specified nullable string value matches the given pattern.","jsdocTags":[{"name":"param","comment":"The nullable string value to check, or a Promise resolving to the\nnullable string value."},{"name":"param","comment":"The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`."},{"name":"return","comment":"Whether the value matches the pattern."}],"rawComment":"/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */","memberType":"method","memberTags":["static"]}],"generics":[{"name":"T","constraint":"ComponentHarness"}],"description":"A class used to associate a ComponentHarness class with predicates functions that can be used to\nfilter instances of the class.","jsdocTags":[],"rawComment":"/**\n * A class used to associate a ComponentHarness class with predicates functions that can be used to\n * filter instances of the class.\n */","implements":[],"source":{"filePath":"src/cdk/testing/component-harness.ts","startLine":469,"endLine":597}}],"symbols":[["getNoKeysSpecifiedError","@angular/cdk/testing"],["ElementDimensions","@angular/cdk/testing"],["AutoChangeDetectionStatus","@angular/cdk/testing"],["ModifierKeys","@angular/cdk/testing"],["AsyncFactoryFn","@angular/cdk/testing"],["AsyncPredicate","@angular/cdk/testing"],["EventData","@angular/cdk/testing"],["AsyncOptionPredicate","@angular/cdk/testing"],["TestKey","@angular/cdk/testing"],["HarnessQuery","@angular/cdk/testing"],["LocatorFnResult","@angular/cdk/testing"],["HarnessEnvironment","@angular/cdk/testing"],["handleAutoChangeDetectionStatus","@angular/cdk/testing"],["TestElement","@angular/cdk/testing"],["stopHandlingAutoChangeDetectionStatus","@angular/cdk/testing"],["HarnessLoader","@angular/cdk/testing"],["manualChangeDetection","@angular/cdk/testing"],["parallel","@angular/cdk/testing"],["LocatorFactory","@angular/cdk/testing"],["TextOptions","@angular/cdk/testing"],["ComponentHarness","@angular/cdk/testing"],["ContentContainerComponentHarness","@angular/cdk/testing"],["ComponentHarnessConstructor","@angular/cdk/testing"],["BaseHarnessFilters","@angular/cdk/testing"],["HarnessPredicate","@angular/cdk/testing"],["getNoKeysSpecifiedError","@angular/cdk/testing"],["ElementDimensions","@angular/cdk/testing"],["ElementDimensions.top","@angular/cdk/testing"],["ElementDimensions.left","@angular/cdk/testing"],["ElementDimensions.width","@angular/cdk/testing"],["ElementDimensions.height","@angular/cdk/testing"],["AutoChangeDetectionStatus","@angular/cdk/testing"],["AutoChangeDetectionStatus.isDisabled","@angular/cdk/testing"],["AutoChangeDetectionStatus.onDetectChangesNow","@angular/cdk/testing"],["ModifierKeys","@angular/cdk/testing"],["ModifierKeys.control","@angular/cdk/testing"],["ModifierKeys.alt","@angular/cdk/testing"],["ModifierKeys.shift","@angular/cdk/testing"],["ModifierKeys.meta","@angular/cdk/testing"],["AsyncFactoryFn","@angular/cdk/testing"],["AsyncPredicate","@angular/cdk/testing"],["EventData","@angular/cdk/testing"],["AsyncOptionPredicate","@angular/cdk/testing"],["TestKey","@angular/cdk/testing"],["TestKey.BACKSPACE","@angular/cdk/testing"],["TestKey.TAB","@angular/cdk/testing"],["TestKey.ENTER","@angular/cdk/testing"],["TestKey.SHIFT","@angular/cdk/testing"],["TestKey.CONTROL","@angular/cdk/testing"],["TestKey.ALT","@angular/cdk/testing"],["TestKey.ESCAPE","@angular/cdk/testing"],["TestKey.PAGE_UP","@angular/cdk/testing"],["TestKey.PAGE_DOWN","@angular/cdk/testing"],["TestKey.END","@angular/cdk/testing"],["TestKey.HOME","@angular/cdk/testing"],["TestKey.LEFT_ARROW","@angular/cdk/testing"],["TestKey.UP_ARROW","@angular/cdk/testing"],["TestKey.RIGHT_ARROW","@angular/cdk/testing"],["TestKey.DOWN_ARROW","@angular/cdk/testing"],["TestKey.INSERT","@angular/cdk/testing"],["TestKey.DELETE","@angular/cdk/testing"],["TestKey.F1","@angular/cdk/testing"],["TestKey.F2","@angular/cdk/testing"],["TestKey.F3","@angular/cdk/testing"],["TestKey.F4","@angular/cdk/testing"],["TestKey.F5","@angular/cdk/testing"],["TestKey.F6","@angular/cdk/testing"],["TestKey.F7","@angular/cdk/testing"],["TestKey.F8","@angular/cdk/testing"],["TestKey.F9","@angular/cdk/testing"],["TestKey.F10","@angular/cdk/testing"],["TestKey.F11","@angular/cdk/testing"],["TestKey.F12","@angular/cdk/testing"],["TestKey.META","@angular/cdk/testing"],["TestKey.COMMA","@angular/cdk/testing"],["HarnessQuery","@angular/cdk/testing"],["LocatorFnResult","@angular/cdk/testing"],["HarnessEnvironment","@angular/cdk/testing"],["HarnessEnvironment.constructor","@angular/cdk/testing"],["HarnessEnvironment.rootElement","@angular/cdk/testing"],["HarnessEnvironment.rootElement","@angular/cdk/testing"],["HarnessEnvironment.documentRootLocatorFactory","@angular/cdk/testing"],["HarnessEnvironment.locatorFor","@angular/cdk/testing"],["HarnessEnvironment.locatorForOptional","@angular/cdk/testing"],["HarnessEnvironment.locatorForAll","@angular/cdk/testing"],["HarnessEnvironment.rootHarnessLoader","@angular/cdk/testing"],["HarnessEnvironment.harnessLoaderFor","@angular/cdk/testing"],["HarnessEnvironment.harnessLoaderForOptional","@angular/cdk/testing"],["HarnessEnvironment.harnessLoaderForAll","@angular/cdk/testing"],["HarnessEnvironment.getHarness","@angular/cdk/testing"],["HarnessEnvironment.getHarnessOrNull","@angular/cdk/testing"],["HarnessEnvironment.getAllHarnesses","@angular/cdk/testing"],["HarnessEnvironment.hasHarness","@angular/cdk/testing"],["HarnessEnvironment.getChildLoader","@angular/cdk/testing"],["HarnessEnvironment.getAllChildLoaders","@angular/cdk/testing"],["HarnessEnvironment.createComponentHarness","@angular/cdk/testing"],["HarnessEnvironment.forceStabilize","@angular/cdk/testing"],["HarnessEnvironment.waitForTasksOutsideAngular","@angular/cdk/testing"],["HarnessEnvironment.getDocumentRoot","@angular/cdk/testing"],["HarnessEnvironment.createTestElement","@angular/cdk/testing"],["HarnessEnvironment.createEnvironment","@angular/cdk/testing"],["HarnessEnvironment.getAllRawElements","@angular/cdk/testing"],["handleAutoChangeDetectionStatus","@angular/cdk/testing"],["TestElement","@angular/cdk/testing"],["TestElement.blur","@angular/cdk/testing"],["TestElement.clear","@angular/cdk/testing"],["TestElement.click","@angular/cdk/testing"],["TestElement.click","@angular/cdk/testing"],["TestElement.click","@angular/cdk/testing"],["TestElement.rightClick","@angular/cdk/testing"],["TestElement.focus","@angular/cdk/testing"],["TestElement.getCssValue","@angular/cdk/testing"],["TestElement.hover","@angular/cdk/testing"],["TestElement.mouseAway","@angular/cdk/testing"],["TestElement.sendKeys","@angular/cdk/testing"],["TestElement.sendKeys","@angular/cdk/testing"],["TestElement.text","@angular/cdk/testing"],["TestElement.setContenteditableValue","@angular/cdk/testing"],["TestElement.getAttribute","@angular/cdk/testing"],["TestElement.hasClass","@angular/cdk/testing"],["TestElement.getDimensions","@angular/cdk/testing"],["TestElement.getProperty","@angular/cdk/testing"],["TestElement.matchesSelector","@angular/cdk/testing"],["TestElement.isFocused","@angular/cdk/testing"],["TestElement.setInputValue","@angular/cdk/testing"],["TestElement.selectOptions","@angular/cdk/testing"],["TestElement.dispatchEvent","@angular/cdk/testing"],["stopHandlingAutoChangeDetectionStatus","@angular/cdk/testing"],["HarnessLoader","@angular/cdk/testing"],["HarnessLoader.getChildLoader","@angular/cdk/testing"],["HarnessLoader.getAllChildLoaders","@angular/cdk/testing"],["HarnessLoader.getHarness","@angular/cdk/testing"],["HarnessLoader.getHarnessOrNull","@angular/cdk/testing"],["HarnessLoader.getAllHarnesses","@angular/cdk/testing"],["HarnessLoader.hasHarness","@angular/cdk/testing"],["manualChangeDetection","@angular/cdk/testing"],["parallel","@angular/cdk/testing"],["LocatorFactory","@angular/cdk/testing"],["LocatorFactory.documentRootLocatorFactory","@angular/cdk/testing"],["LocatorFactory.rootElement","@angular/cdk/testing"],["LocatorFactory.locatorFor","@angular/cdk/testing"],["LocatorFactory.locatorForOptional","@angular/cdk/testing"],["LocatorFactory.locatorForAll","@angular/cdk/testing"],["LocatorFactory.rootHarnessLoader","@angular/cdk/testing"],["LocatorFactory.harnessLoaderFor","@angular/cdk/testing"],["LocatorFactory.harnessLoaderForOptional","@angular/cdk/testing"],["LocatorFactory.harnessLoaderForAll","@angular/cdk/testing"],["LocatorFactory.forceStabilize","@angular/cdk/testing"],["LocatorFactory.waitForTasksOutsideAngular","@angular/cdk/testing"],["TextOptions","@angular/cdk/testing"],["TextOptions.exclude","@angular/cdk/testing"],["ComponentHarness","@angular/cdk/testing"],["ComponentHarness.constructor","@angular/cdk/testing"],["ComponentHarness.host","@angular/cdk/testing"],["ComponentHarness.documentRootLocatorFactory","@angular/cdk/testing"],["ComponentHarness.locatorFor","@angular/cdk/testing"],["ComponentHarness.locatorForOptional","@angular/cdk/testing"],["ComponentHarness.locatorForAll","@angular/cdk/testing"],["ComponentHarness.forceStabilize","@angular/cdk/testing"],["ComponentHarness.waitForTasksOutsideAngular","@angular/cdk/testing"],["ContentContainerComponentHarness","@angular/cdk/testing"],["ContentContainerComponentHarness.getChildLoader","@angular/cdk/testing"],["ContentContainerComponentHarness.getAllChildLoaders","@angular/cdk/testing"],["ContentContainerComponentHarness.getHarness","@angular/cdk/testing"],["ContentContainerComponentHarness.getHarnessOrNull","@angular/cdk/testing"],["ContentContainerComponentHarness.getAllHarnesses","@angular/cdk/testing"],["ContentContainerComponentHarness.hasHarness","@angular/cdk/testing"],["ContentContainerComponentHarness.getRootHarnessLoader","@angular/cdk/testing"],["ContentContainerComponentHarness.host","@angular/cdk/testing"],["ContentContainerComponentHarness.documentRootLocatorFactory","@angular/cdk/testing"],["ContentContainerComponentHarness.locatorFor","@angular/cdk/testing"],["ContentContainerComponentHarness.locatorForOptional","@angular/cdk/testing"],["ContentContainerComponentHarness.locatorForAll","@angular/cdk/testing"],["ContentContainerComponentHarness.forceStabilize","@angular/cdk/testing"],["ContentContainerComponentHarness.waitForTasksOutsideAngular","@angular/cdk/testing"],["ComponentHarnessConstructor","@angular/cdk/testing"],["ComponentHarnessConstructor.hostSelector","@angular/cdk/testing"],["BaseHarnessFilters","@angular/cdk/testing"],["BaseHarnessFilters.selector","@angular/cdk/testing"],["BaseHarnessFilters.ancestor","@angular/cdk/testing"],["HarnessPredicate","@angular/cdk/testing"],["HarnessPredicate.constructor","@angular/cdk/testing"],["HarnessPredicate.harnessType","@angular/cdk/testing"],["HarnessPredicate.add","@angular/cdk/testing"],["HarnessPredicate.addOption","@angular/cdk/testing"],["HarnessPredicate.filter","@angular/cdk/testing"],["HarnessPredicate.evaluate","@angular/cdk/testing"],["HarnessPredicate.getDescription","@angular/cdk/testing"],["HarnessPredicate.getSelector","@angular/cdk/testing"],["HarnessPredicate.stringMatches","@angular/cdk/testing"]]} \ No newline at end of file +{ + "repo": "angular/components", + "moduleLabel": "@angular/cdk/testing", + "moduleName": "@angular/cdk/testing", + "normalizedModuleName": "angular_cdk_testing", + "entries": [ + { + "name": "getNoKeysSpecifiedError", + "signatures": [ + { + "name": "getNoKeysSpecifiedError", + "entryType": "function", + "description": "Returns an error which reports that no keys have been specified.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "params": [], + "rawComment": "/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */", + "returnType": "Error" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Error", + "generics": [], + "name": "getNoKeysSpecifiedError", + "description": "Returns an error which reports that no keys have been specified.", + "entryType": "function", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */" + }, + "entryType": "function", + "description": "Returns an error which reports that no keys have been specified.", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/**\n * Returns an error which reports that no keys have been specified.\n * @docs-private\n */", + "source": { + "filePath": "/src/cdk/testing/test-element-errors.ts", + "startLine": 13, + "endLine": 15 + } + }, + { + "name": "ElementDimensions", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "top", + "type": "number", + "memberType": "property", + "memberTags": [], + "description": "The distance from the top of the viewport in pixels", + "jsdocTags": [] + }, + { + "name": "left", + "type": "number", + "memberType": "property", + "memberTags": [], + "description": "The distance from the left of the viewport in pixels", + "jsdocTags": [] + }, + { + "name": "width", + "type": "number", + "memberType": "property", + "memberTags": [], + "description": "The width of the element in pixels", + "jsdocTags": [] + }, + { + "name": "height", + "type": "number", + "memberType": "property", + "memberTags": [], + "description": "The height of the element in pixels", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Dimensions for element size and its position relative to the viewport.", + "jsdocTags": [], + "rawComment": "/**\n * Dimensions for element size and its position relative to the viewport.\n */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/element-dimensions.ts", + "startLine": 12, + "endLine": 21 + } + }, + { + "name": "AutoChangeDetectionStatus", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "isDisabled", + "type": "boolean", + "memberType": "property", + "memberTags": [], + "description": "Whether auto change detection is disabled.", + "jsdocTags": [] + }, + { + "name": "onDetectChangesNow", + "type": "(() => void) | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "An optional callback, if present it indicates that change detection should be run immediately,\nwhile handling the status change. The callback should then be called as soon as change\ndetection is done.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "The status of the test harness auto change detection. If not diabled test harnesses will\nautomatically trigger change detection after every action (such as a click) and before every read\n(such as getting the text of an element).", + "jsdocTags": [], + "rawComment": "/**\n * The status of the test harness auto change detection. If not diabled test harnesses will\n * automatically trigger change detection after every action (such as a click) and before every read\n * (such as getting the text of an element).\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/change-detection.ts", + "startLine": 16, + "endLine": 25 + } + }, + { + "name": "ModifierKeys", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "control", + "type": "boolean | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "", + "jsdocTags": [] + }, + { + "name": "alt", + "type": "boolean | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "", + "jsdocTags": [] + }, + { + "name": "shift", + "type": "boolean | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "", + "jsdocTags": [] + }, + { + "name": "meta", + "type": "boolean | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Modifier keys that may be held while typing.", + "jsdocTags": [], + "rawComment": "/** Modifier keys that may be held while typing. */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/test-element.ts", + "startLine": 12, + "endLine": 17 + } + }, + { + "name": "AsyncFactoryFn", + "type": "() => Promise", + "entryType": "type_alias", + "generics": [ + { + "name": "T" + } + ], + "rawComment": "/**\n * An async function that returns a promise when called.\n * @deprecated This was just an alias for `() => Promise`. Use that instead.\n * @breaking-change 21.0.0 Remove this alias.\n * @docs-private\n */", + "description": "An async function that returns a promise when called.", + "jsdocTags": [ + { + "name": "deprecated", + "comment": "This was just an alias for `() => Promise`. Use that instead." + }, + { + "name": "breaking-change", + "comment": "21.0.0 Remove this alias." + }, + { + "name": "docs-private", + "comment": "" + } + ], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 18, + "endLine": 18 + } + }, + { + "name": "EventData", + "type": "| string\n | number\n | boolean\n | Function\n | undefined\n | null\n | EventData[]\n | {[key: string]: EventData}", + "entryType": "type_alias", + "generics": [], + "rawComment": "/** Data that can be attached to a custom event dispatched from a `TestElement`. */", + "description": "Data that can be attached to a custom event dispatched from a `TestElement`.", + "jsdocTags": [], + "source": { + "filePath": "/src/cdk/testing/test-element.ts", + "startLine": 20, + "endLine": 28 + } + }, + { + "name": "AsyncPredicate", + "type": "(item: T) => Promise", + "entryType": "type_alias", + "generics": [ + { + "name": "T" + } + ], + "rawComment": "/** An async function that takes an item and returns a boolean promise */", + "description": "An async function that takes an item and returns a boolean promise", + "jsdocTags": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 21, + "endLine": 21 + } + }, + { + "name": "TestKey", + "entryType": "enum", + "members": [ + { + "name": "BACKSPACE", + "type": "TestKey.BACKSPACE", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "TAB", + "type": "TestKey.TAB", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "ENTER", + "type": "TestKey.ENTER", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "SHIFT", + "type": "TestKey.SHIFT", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "CONTROL", + "type": "TestKey.CONTROL", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "ALT", + "type": "TestKey.ALT", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "ESCAPE", + "type": "TestKey.ESCAPE", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "PAGE_UP", + "type": "TestKey.PAGE_UP", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "PAGE_DOWN", + "type": "TestKey.PAGE_DOWN", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "END", + "type": "TestKey.END", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "HOME", + "type": "TestKey.HOME", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "LEFT_ARROW", + "type": "TestKey.LEFT_ARROW", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "UP_ARROW", + "type": "TestKey.UP_ARROW", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "RIGHT_ARROW", + "type": "TestKey.RIGHT_ARROW", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "DOWN_ARROW", + "type": "TestKey.DOWN_ARROW", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "INSERT", + "type": "TestKey.INSERT", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "DELETE", + "type": "TestKey.DELETE", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F1", + "type": "TestKey.F1", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F2", + "type": "TestKey.F2", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F3", + "type": "TestKey.F3", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F4", + "type": "TestKey.F4", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F5", + "type": "TestKey.F5", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F6", + "type": "TestKey.F6", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F7", + "type": "TestKey.F7", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F8", + "type": "TestKey.F8", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F9", + "type": "TestKey.F9", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F10", + "type": "TestKey.F10", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F11", + "type": "TestKey.F11", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "F12", + "type": "TestKey.F12", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "META", + "type": "TestKey.META", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + }, + { + "name": "COMMA", + "type": "TestKey.COMMA", + "value": "", + "memberType": "enum_item", + "jsdocTags": [], + "description": "", + "memberTags": [] + } + ], + "rawComment": "/** An enum of non-text keys that can be used with the `sendKeys` method. */", + "description": "An enum of non-text keys that can be used with the `sendKeys` method.", + "jsdocTags": [], + "source": { + "filePath": "/src/cdk/testing/test-element.ts", + "startLine": 37, + "endLine": 69 + } + }, + { + "name": "AsyncOptionPredicate", + "type": "(item: T, option: O) => Promise", + "entryType": "type_alias", + "generics": [ + { + "name": "T" + }, + { + "name": "O" + } + ], + "rawComment": "/** An async function that takes an item and an option value and returns a boolean promise. */", + "description": "An async function that takes an item and an option value and returns a boolean promise.", + "jsdocTags": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 24, + "endLine": 24 + } + }, + { + "name": "HarnessQuery", + "type": "| ComponentHarnessConstructor\n | HarnessPredicate", + "entryType": "type_alias", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "rawComment": "/**\n * A query for a `ComponentHarness`, which is expressed as either a `ComponentHarnessConstructor` or\n * a `HarnessPredicate`.\n */", + "description": "A query for a `ComponentHarness`, which is expressed as either a `ComponentHarnessConstructor` or\na `HarnessPredicate`.", + "jsdocTags": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 30, + "endLine": 32 + } + }, + { + "name": "LocatorFnResult", + "type": "{\n [I in keyof T]: T[I] extends new (...args: any[]) => infer C // Map `ComponentHarnessConstructor` to `C`.\n ? C\n : // Map `HarnessPredicate` to `C`.\n T[I] extends {harnessType: new (...args: any[]) => infer C}\n ? C\n : // Map `string` to `TestElement`.\n T[I] extends string\n ? TestElement\n : // Map everything else to `never` (should not happen due to the type constraint on `T`).\n never;\n}[number]", + "entryType": "type_alias", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "rawComment": "/**\n * The result type obtained when searching using a particular list of queries. This type depends on\n * the particular items being queried.\n * - If one of the queries is for a `ComponentHarnessConstructor`, it means that the result\n * might be a harness of type `C1`\n * - If one of the queries is for a `HarnessPredicate`, it means that the result might be a\n * harness of type `C2`\n * - If one of the queries is for a `string`, it means that the result might be a `TestElement`.\n *\n * Since we don't know for sure which query will match, the result type if the union of the types\n * for all possible results.\n *\n * @usageNotes\n * ### Example\n *\n * The type:\n * ```ts\n * LocatorFnResult<[\n * ComponentHarnessConstructor,\n * HarnessPredicate,\n * string\n * ]>\n * ```\n *\n * is equivalent to:\n *\n * ```ts\n * MyHarness | MyOtherHarness | TestElement\n * ```\n */", + "description": "The result type obtained when searching using a particular list of queries. This type depends on\nthe particular items being queried.\n- If one of the queries is for a `ComponentHarnessConstructor`, it means that the result\n might be a harness of type `C1`\n- If one of the queries is for a `HarnessPredicate`, it means that the result might be a\n harness of type `C2`\n- If one of the queries is for a `string`, it means that the result might be a `TestElement`.\n\nSince we don't know for sure which query will match, the result type if the union of the types\nfor all possible results.", + "jsdocTags": [ + { + "name": "usageNotes", + "comment": "### Example\n\nThe type:\n```ts\nLocatorFnResult<[\n ComponentHarnessConstructor,\n HarnessPredicate,\n string\n]>\n```\n\nis equivalent to:\n\n```ts\nMyHarness | MyOtherHarness | TestElement\n```" + } + ], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 64, + "endLine": 75 + } + }, + { + "name": "HarnessEnvironment", + "isAbstract": true, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "rawRootElement", + "description": "The native root element of this `HarnessEnvironment`.", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessEnvironment", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "rootElement", + "type": "TestElement", + "memberType": "getter", + "memberTags": [], + "description": "The root element of this `HarnessEnvironment` as a `TestElement`.", + "jsdocTags": [] + }, + { + "name": "rootElement", + "type": "TestElement", + "memberType": "setter", + "memberTags": [], + "description": "", + "jsdocTags": [] + }, + { + "name": "documentRootLocatorFactory", + "signatures": [ + { + "name": "documentRootLocatorFactory", + "entryType": "function", + "description": "Gets a locator factory rooted at the document root.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets a locator factory rooted at the document root. */", + "returnType": "LocatorFactory" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "LocatorFactory", + "generics": [], + "name": "documentRootLocatorFactory", + "description": "Gets a locator factory rooted at the document root.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets a locator factory rooted at the document root. */" + }, + "entryType": "function", + "description": "Gets a locator factory rooted at the document root.", + "jsdocTags": [], + "rawComment": "/** Gets a locator factory rooted at the document root. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "locatorFor", + "signatures": [ + { + "name": "locatorFor", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "returnType": "() => Promise>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorFor", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "locatorForOptional", + "signatures": [ + { + "name": "locatorForOptional", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironmnet`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorForOptional('span')() // Gets `null`\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironmnet`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "returnType": "() => Promise | null>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise | null>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForOptional", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironmnet`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorForOptional('span')() // Gets `null`\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironmnet`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `HarnessEnvironmnet`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorForOptional('span')() // Gets `null`\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `HarnessEnvironmnet`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "locatorForAll", + "signatures": [ + { + "name": "locatorForAll", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait lf.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait lf.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait lf.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait lf.locatorForAll('span')()\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await lf.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await lf.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await lf.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await lf.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "returnType": "() => Promise[]>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise[]>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForAll", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait lf.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait lf.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait lf.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait lf.locatorForAll('span')()\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await lf.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await lf.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await lf.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await lf.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `HarnessEnvironment`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait lf.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait lf.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait lf.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait lf.locatorForAll('span')()\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `HarnessEnvironment`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await lf.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await lf.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await lf.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await lf.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rootHarnessLoader", + "signatures": [ + { + "name": "rootHarnessLoader", + "entryType": "function", + "description": "", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`." + } + ], + "params": [], + "rawComment": "/** @return A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rootHarnessLoader", + "description": "", + "entryType": "function", + "jsdocTags": [ + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`." + } + ], + "rawComment": "/** @return A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`. */" + }, + "entryType": "function", + "description": "", + "jsdocTags": [ + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`." + } + ], + "rawComment": "/** @return A `HarnessLoader` rooted at the root element of this `HarnessEnvironment`. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderFor", + "signatures": [ + { + "name": "harnessLoaderFor", + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector." + }, + { + "name": "throws", + "comment": "If no matching element is found for the given selector." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderFor", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector." + }, + { + "name": "throws", + "comment": "If no matching element is found for the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector." + }, + { + "name": "throws", + "comment": "If no matching element is found for the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderForOptional", + "signatures": [ + { + "name": "harnessLoaderForOptional", + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderForOptional", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */" + }, + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `HarnessEnvironment`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderForAll", + "signatures": [ + { + "name": "harnessLoaderForAll", + "entryType": "function", + "description": "Gets a list of `HarnessLoader` instances, one for each matching element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`, one rooted at each element matching the given selector." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderForAll", + "description": "Gets a list of `HarnessLoader` instances, one for each matching element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`, one rooted at each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a list of `HarnessLoader` instances, one for each matching element.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`, one rooted at each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarness", + "signatures": [ + { + "name": "getHarness", + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type" + }, + { + "name": "throws", + "comment": "If a matching component instance can't be found." + } + ], + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarness", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type" + }, + { + "name": "throws", + "comment": "If a matching component instance can't be found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type" + }, + { + "name": "throws", + "comment": "If a matching component instance can't be found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarnessOrNull", + "signatures": [ + { + "name": "getHarnessOrNull", + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type (or null if not found)." + } + ], + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarnessOrNull", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type (or null if not found)." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\nmultiple matching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type (or null if not found)." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a `ComponentHarness` for that instance. If\n * multiple matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllHarnesses", + "signatures": [ + { + "name": "getAllHarnesses", + "entryType": "function", + "description": "Searches for all instances of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A list instances of the given harness type." + } + ], + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getAllHarnesses", + "description": "Searches for all instances of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A list instances of the given harness type." + } + ], + "rawComment": "/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */" + }, + "entryType": "function", + "description": "Searches for all instances of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A list instances of the given harness type." + } + ], + "rawComment": "/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasHarness", + "signatures": [ + { + "name": "hasHarness", + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A boolean indicating if an instance was found." + } + ], + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "hasHarness", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A boolean indicating if an instance was found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A boolean indicating if an instance was found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessEnvironment`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getChildLoader", + "signatures": [ + { + "name": "getChildLoader", + "entryType": "function", + "description": "Searches for an element with the given selector under the evironment's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the element matching the given selector." + }, + { + "name": "throws", + "comment": "If a matching element can't be found." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for an element with the given selector under the evironment's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getChildLoader", + "description": "Searches for an element with the given selector under the evironment's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the element matching the given selector." + }, + { + "name": "throws", + "comment": "If a matching element can't be found." + } + ], + "rawComment": "/**\n * Searches for an element with the given selector under the evironment's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */" + }, + "entryType": "function", + "description": "Searches for an element with the given selector under the evironment's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the element matching the given selector." + }, + { + "name": "throws", + "comment": "If a matching element can't be found." + } + ], + "rawComment": "/**\n * Searches for an element with the given selector under the evironment's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllChildLoaders", + "signatures": [ + { + "name": "getAllChildLoaders", + "entryType": "function", + "description": "Searches for all elements with the given selector under the environment's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`s, one for each matching element, rooted at that element." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Searches for all elements with the given selector under the environment's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAllChildLoaders", + "description": "Searches for all elements with the given selector under the environment's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`s, one for each matching element, rooted at that element." + } + ], + "rawComment": "/**\n * Searches for all elements with the given selector under the environment's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */" + }, + "entryType": "function", + "description": "Searches for all elements with the given selector under the environment's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`s, one for each matching element, rooted at that element." + } + ], + "rawComment": "/**\n * Searches for all elements with the given selector under the environment's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "createComponentHarness", + "signatures": [ + { + "name": "createComponentHarness", + "entryType": "function", + "description": "Creates a `ComponentHarness` for the given harness type with the given raw host element.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "harnessType", + "description": "", + "type": "ComponentHarnessConstructor", + "isOptional": false, + "isRestParam": false + }, + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */", + "returnType": "T" + } + ], + "implementation": { + "params": [ + { + "name": "harnessType", + "description": "", + "type": "ComponentHarnessConstructor", + "isOptional": false, + "isRestParam": false + }, + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "T", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "createComponentHarness", + "description": "Creates a `ComponentHarness` for the given harness type with the given raw host element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */" + }, + "entryType": "function", + "description": "Creates a `ComponentHarness` for the given harness type with the given raw host element.", + "jsdocTags": [], + "rawComment": "/** Creates a `ComponentHarness` for the given harness type with the given raw host element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.\nThis is an abstrct method that must be implemented by subclasses.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n * This is an abstrct method that must be implemented by subclasses.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.\nThis is an abstrct method that must be implemented by subclasses.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n * This is an abstrct method that must be implemented by subclasses.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.\nThis is an abstrct method that must be implemented by subclasses.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n * This is an abstrct method that must be implemented by subclasses.\n */", + "memberType": "method", + "memberTags": [ + "abstract" + ] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.\nThis is an abstrct method that must be implemented by subclasses.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n * This is an abstrct method that must be implemented by subclasses.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.\nThis is an abstrct method that must be implemented by subclasses.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n * This is an abstrct method that must be implemented by subclasses.\n */" + }, + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.\nThis is an abstrct method that must be implemented by subclasses.", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n * This is an abstrct method that must be implemented by subclasses.\n */", + "memberType": "method", + "memberTags": [ + "abstract" + ] + }, + { + "name": "getDocumentRoot", + "signatures": [ + { + "name": "getDocumentRoot", + "entryType": "function", + "description": "Gets the root element for the document.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the root element for the document. */", + "returnType": "E" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "E", + "generics": [], + "name": "getDocumentRoot", + "description": "Gets the root element for the document.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */" + }, + "entryType": "function", + "description": "Gets the root element for the document.", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */", + "memberType": "method", + "memberTags": [ + "protected", + "abstract" + ] + }, + { + "name": "createTestElement", + "signatures": [ + { + "name": "createTestElement", + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "returnType": "TestElement" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "TestElement", + "generics": [], + "name": "createTestElement", + "description": "Creates a `TestElement` from a raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */" + }, + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "memberType": "method", + "memberTags": [ + "protected", + "abstract" + ] + }, + { + "name": "createEnvironment", + "signatures": [ + { + "name": "createEnvironment", + "entryType": "function", + "description": "Creates a `HarnessEnvironment` rooted at the given raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessEnvironment` rooted at the given raw element. */", + "returnType": "HarnessEnvironment" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "E", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessEnvironment", + "generics": [], + "name": "createEnvironment", + "description": "Creates a `HarnessEnvironment` rooted at the given raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessEnvironment` rooted at the given raw element. */" + }, + "entryType": "function", + "description": "Creates a `HarnessEnvironment` rooted at the given raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessEnvironment` rooted at the given raw element. */", + "memberType": "method", + "memberTags": [ + "protected", + "abstract" + ] + }, + { + "name": "getAllRawElements", + "signatures": [ + { + "name": "getAllRawElements", + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAllRawElements", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */" + }, + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "abstract" + ] + } + ], + "generics": [ + { + "name": "E" + } + ], + "description": "Base harness environment class that can be extended to allow `ComponentHarness`es to be used in\ndifferent test environments (e.g. testbed, protractor, etc.). This class implements the\nfunctionality of both a `HarnessLoader` and `LocatorFactory`. This class is generic on the raw\nelement type, `E`, used by the particular test environment.", + "jsdocTags": [], + "rawComment": "/**\n * Base harness environment class that can be extended to allow `ComponentHarness`es to be used in\n * different test environments (e.g. testbed, protractor, etc.). This class implements the\n * functionality of both a `HarnessLoader` and `LocatorFactory`. This class is generic on the raw\n * element type, `E`, used by the particular test environment.\n */", + "implements": [ + "HarnessLoader", + "LocatorFactory" + ], + "source": { + "filePath": "src/cdk/testing/harness-environment.ts", + "startLine": 45, + "endLine": 401 + } + }, + { + "name": "handleAutoChangeDetectionStatus", + "signatures": [ + { + "name": "handleAutoChangeDetectionStatus", + "entryType": "function", + "description": "Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The handler for the auto change detection status." + } + ], + "params": [ + { + "name": "handler", + "description": "The handler for the auto change detection status.", + "type": "(status: AutoChangeDetectionStatus) => void", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */", + "returnType": "void" + } + ], + "implementation": { + "params": [ + { + "name": "handler", + "description": "The handler for the auto change detection status.", + "type": "(status: AutoChangeDetectionStatus) => void", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "void", + "generics": [], + "name": "handleAutoChangeDetectionStatus", + "description": "Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The handler for the auto change detection status." + } + ], + "rawComment": "/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */" + }, + "entryType": "function", + "description": "Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\nchanges.", + "jsdocTags": [ + { + "name": "param", + "comment": "The handler for the auto change detection status." + } + ], + "rawComment": "/**\n * Allows a test `HarnessEnvironment` to install its own handler for auto change detection status\n * changes.\n * @param handler The handler for the auto change detection status.\n */", + "source": { + "filePath": "src/cdk/testing/change-detection.ts", + "startLine": 49, + "endLine": 54 + } + }, + { + "name": "TestElement", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "blur", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "blur", + "description": "Blur the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Blur the element. */" + }, + "entryType": "function", + "description": "Blur the element.", + "jsdocTags": [], + "rawComment": "/** Blur the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "clear", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "clear", + "description": "Clear the element's input (for input and textarea elements only).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */" + }, + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [], + "implementation": { + "params": [ + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */" + }, + "entryType": "function", + "description": "Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.", + "jsdocTags": [], + "rawComment": "/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [], + "implementation": { + "params": [ + { + "name": "location", + "description": "", + "type": "\"center\"", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "Click the element at the element's center.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Click the element at the element's center. */" + }, + "entryType": "function", + "description": "Click the element at the element's center.", + "jsdocTags": [], + "rawComment": "/** Click the element at the element's center. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [], + "implementation": { + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "ModifierKeys | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "Click the element at the specified coordinates relative to the top-left of the element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "rawComment": "/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */" + }, + "entryType": "function", + "description": "Click the element at the specified coordinates relative to the top-left of the element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "rawComment": "/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rightClick", + "signatures": [], + "implementation": { + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "ModifierKeys | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rightClick", + "description": "Right clicks on the element at the specified coordinates relative to the top-left of it.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "rawComment": "/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */" + }, + "entryType": "function", + "description": "Right clicks on the element at the specified coordinates relative to the top-left of it.", + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "rawComment": "/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "focus", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "focus", + "description": "Focus the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Focus the element. */" + }, + "entryType": "function", + "description": "Focus the element.", + "jsdocTags": [], + "rawComment": "/** Focus the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getCssValue", + "signatures": [], + "implementation": { + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getCssValue", + "description": "Get the computed value of the given CSS property for the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */" + }, + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hover", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hover", + "description": "Hovers the mouse over the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */" + }, + "entryType": "function", + "description": "Hovers the mouse over the element.", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "mouseAway", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "mouseAway", + "description": "Moves the mouse away from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */" + }, + "entryType": "function", + "description": "Moves the mouse away from the element.", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "sendKeys", + "signatures": [], + "implementation": { + "params": [ + { + "name": "keys", + "description": "", + "type": "(string | TestKey)[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "sendKeys", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that some environments cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.", + "entryType": "function", + "jsdocTags": [ + { + "name": "throws", + "comment": "An error if no keys have been specified." + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that some environments cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n * @throws An error if no keys have been specified.\n */" + }, + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that some environments cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.", + "jsdocTags": [ + { + "name": "throws", + "comment": "An error if no keys have been specified." + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that some environments cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n * @throws An error if no keys have been specified.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "sendKeys", + "signatures": [], + "implementation": { + "params": [ + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys", + "isOptional": false, + "isRestParam": false + }, + { + "name": "keys", + "description": "", + "type": "(string | TestKey)[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "sendKeys", + "description": "Sends the given string to the input as a series of key presses. Also fires input\nevents and attempts to add the string to the Element's value.", + "entryType": "function", + "jsdocTags": [ + { + "name": "throws", + "comment": "An error if no keys have been specified." + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input\n * events and attempts to add the string to the Element's value.\n * @throws An error if no keys have been specified.\n */" + }, + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input\nevents and attempts to add the string to the Element's value.", + "jsdocTags": [ + { + "name": "throws", + "comment": "An error if no keys have been specified." + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input\n * events and attempts to add the string to the Element's value.\n * @throws An error if no keys have been specified.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "text", + "signatures": [], + "implementation": { + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "TextOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "text", + "description": "Gets the text from the element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */" + }, + "entryType": "function", + "description": "Gets the text from the element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setContenteditableValue", + "signatures": [], + "implementation": { + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setContenteditableValue", + "description": "Sets the value of a `contenteditable` element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + }, + { + "name": "breaking-change", + "comment": "16.0.0 Will become a required method." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n * @breaking-change 16.0.0 Will become a required method.\n */" + }, + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + }, + { + "name": "breaking-change", + "comment": "16.0.0 Will become a required method." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n * @breaking-change 16.0.0 Will become a required method.\n */", + "memberType": "method", + "memberTags": [ + "optional" + ] + }, + { + "name": "getAttribute", + "signatures": [], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAttribute", + "description": "Gets the value for the given attribute from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */" + }, + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasClass", + "signatures": [], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hasClass", + "description": "Checks whether the element has the given class.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */" + }, + "entryType": "function", + "description": "Checks whether the element has the given class.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDimensions", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getDimensions", + "description": "Gets the dimensions of the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */" + }, + "entryType": "function", + "description": "Gets the dimensions of the element.", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getProperty", + "signatures": [], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "name": "getProperty", + "description": "Gets the value of a property of an element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */" + }, + "entryType": "function", + "description": "Gets the value of a property of an element.", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "matchesSelector", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "matchesSelector", + "description": "Checks whether this element matches the given selector.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */" + }, + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "isFocused", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "isFocused", + "description": "Checks whether the element is focused.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */" + }, + "entryType": "function", + "description": "Checks whether the element is focused.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setInputValue", + "signatures": [], + "implementation": { + "params": [ + { + "name": "value", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setInputValue", + "description": "Sets the value of a property of an input.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */" + }, + "entryType": "function", + "description": "Sets the value of a property of an input.", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "selectOptions", + "signatures": [], + "implementation": { + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "selectOptions", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */" + }, + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "dispatchEvent", + "signatures": [], + "implementation": { + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "dispatchEvent", + "description": "Dispatches an event with a particular name.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */" + }, + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "This acts as a common interface for DOM elements across both unit and e2e tests. It is the\ninterface through which the ComponentHarness interacts with the component's DOM.", + "jsdocTags": [], + "rawComment": "/**\n * This acts as a common interface for DOM elements across both unit and e2e tests. It is the\n * interface through which the ComponentHarness interacts with the component's DOM.\n */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/test-element.ts", + "startLine": 75, + "endLine": 181 + } + }, + { + "name": "stopHandlingAutoChangeDetectionStatus", + "signatures": [ + { + "name": "stopHandlingAutoChangeDetectionStatus", + "entryType": "function", + "description": "Allows a `HarnessEnvironment` to stop handling auto change detection status changes.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */", + "returnType": "void" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "void", + "generics": [], + "name": "stopHandlingAutoChangeDetectionStatus", + "description": "Allows a `HarnessEnvironment` to stop handling auto change detection status changes.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */" + }, + "entryType": "function", + "description": "Allows a `HarnessEnvironment` to stop handling auto change detection status changes.", + "jsdocTags": [], + "rawComment": "/** Allows a `HarnessEnvironment` to stop handling auto change detection status changes. */", + "source": { + "filePath": "src/cdk/testing/change-detection.ts", + "startLine": 57, + "endLine": 60 + } + }, + { + "name": "HarnessLoader", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "getChildLoader", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getChildLoader", + "description": "Searches for an element with the given selector under the current instances's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the element matching the given selector." + }, + { + "name": "throws", + "comment": "If a matching element can't be found." + } + ], + "rawComment": "/**\n * Searches for an element with the given selector under the current instances's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */" + }, + "entryType": "function", + "description": "Searches for an element with the given selector under the current instances's root element,\nand returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\nselector, the first is used. If no elements match, an error is thrown.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the element matching the given selector." + }, + { + "name": "throws", + "comment": "If a matching element can't be found." + } + ], + "rawComment": "/**\n * Searches for an element with the given selector under the current instances's root element,\n * and returns a `HarnessLoader` rooted at the matching element. If multiple elements match the\n * selector, the first is used. If no elements match, an error is thrown.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A `HarnessLoader` rooted at the element matching the given selector.\n * @throws If a matching element can't be found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllChildLoaders", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element of the new `HarnessLoader`", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAllChildLoaders", + "description": "Searches for all elements with the given selector under the current instances's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`s, one for each matching element, rooted at that element." + } + ], + "rawComment": "/**\n * Searches for all elements with the given selector under the current instances's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */" + }, + "entryType": "function", + "description": "Searches for all elements with the given selector under the current instances's root element,\nand returns an array of `HarnessLoader`s, one for each matching element, rooted at that\nelement.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element of the new `HarnessLoader`" + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`s, one for each matching element, rooted at that element." + } + ], + "rawComment": "/**\n * Searches for all elements with the given selector under the current instances's root element,\n * and returns an array of `HarnessLoader`s, one for each matching element, rooted at that\n * element.\n * @param selector The selector for the root element of the new `HarnessLoader`\n * @return A list of `HarnessLoader`s, one for each matching element, rooted at that element.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarness", + "signatures": [], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarness", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type" + }, + { + "name": "throws", + "comment": "If a matching component instance can't be found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, an error is thrown.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type" + }, + { + "name": "throws", + "comment": "If a matching component instance can't be found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, an error is thrown.\n * @param query A query for a harness to create\n * @return An instance of the given harness type\n * @throws If a matching component instance can't be found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarnessOrNull", + "signatures": [], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarnessOrNull", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type (or null if not found)." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\nmatching components are found, a harness for the first one is returned. If no matching\ncomponent is found, null is returned.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "An instance of the given harness type (or null if not found)." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a `ComponentHarness` for that instance. If multiple\n * matching components are found, a harness for the first one is returned. If no matching\n * component is found, null is returned.\n * @param query A query for a harness to create\n * @return An instance of the given harness type (or null if not found).\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllHarnesses", + "signatures": [], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getAllHarnesses", + "description": "Searches for all instances of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A list instances of the given harness type." + } + ], + "rawComment": "/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */" + }, + "entryType": "function", + "description": "Searches for all instances of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A list instances of the given harness type." + } + ], + "rawComment": "/**\n * Searches for all instances of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a list `ComponentHarness` for each instance.\n * @param query A query for a harness to create\n * @return A list instances of the given harness type.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasHarness", + "signatures": [], + "implementation": { + "params": [ + { + "name": "query", + "description": "A query for a harness to create", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "hasHarness", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a boolean indicating if any were found.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A boolean indicating if an instance was found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */" + }, + "entryType": "function", + "description": "Searches for an instance of the component corresponding to the given harness type under the\n`HarnessLoader`'s root element, and returns a boolean indicating if any were found.", + "jsdocTags": [ + { + "name": "param", + "comment": "A query for a harness to create" + }, + { + "name": "return", + "comment": "A boolean indicating if an instance was found." + } + ], + "rawComment": "/**\n * Searches for an instance of the component corresponding to the given harness type under the\n * `HarnessLoader`'s root element, and returns a boolean indicating if any were found.\n * @param query A query for a harness to create\n * @return A boolean indicating if an instance was found.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "Interface used to load ComponentHarness objects. This interface is used by test authors to\ninstantiate `ComponentHarness`es.", + "jsdocTags": [], + "rawComment": "/**\n * Interface used to load ComponentHarness objects. This interface is used by test authors to\n * instantiate `ComponentHarness`es.\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 81, + "endLine": 137 + } + }, + { + "name": "manualChangeDetection", + "signatures": [ + { + "name": "manualChangeDetection", + "entryType": "function", + "description": "Disables the harness system's auto change detection for the duration of the given function.", + "generics": [ + { + "name": "T" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The function to disable auto change detection for." + }, + { + "name": "return", + "comment": "The result of the given function." + } + ], + "params": [ + { + "name": "fn", + "description": "The function to disable auto change detection for.", + "type": "() => Promise", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "fn", + "description": "The function to disable auto change detection for.", + "type": "() => Promise", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T" + } + ], + "name": "manualChangeDetection", + "description": "Disables the harness system's auto change detection for the duration of the given function.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The function to disable auto change detection for." + }, + { + "name": "return", + "comment": "The result of the given function." + } + ], + "rawComment": "/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */" + }, + "entryType": "function", + "description": "Disables the harness system's auto change detection for the duration of the given function.", + "jsdocTags": [ + { + "name": "param", + "comment": "The function to disable auto change detection for." + }, + { + "name": "return", + "comment": "The result of the given function." + } + ], + "rawComment": "/**\n * Disables the harness system's auto change detection for the duration of the given function.\n * @param fn The function to disable auto change detection for.\n * @return The result of the given function.\n */", + "source": { + "filePath": "src/cdk/testing/change-detection.ts", + "startLine": 118, + "endLine": 120 + } + }, + { + "name": "parallel", + "signatures": [ + { + "name": "parallel", + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "generics": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike, T5 | PromiseLike]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "returnType": "Promise<[T1, T2, T3, T4, T5]>" + }, + { + "name": "parallel", + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "generics": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike, T4 | PromiseLike]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "returnType": "Promise<[T1, T2, T3, T4]>" + }, + { + "name": "parallel", + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "generics": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => [T1 | PromiseLike, T2 | PromiseLike, T3 | PromiseLike]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "returnType": "Promise<[T1, T2, T3]>" + }, + { + "name": "parallel", + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "generics": [ + { + "name": "T1" + }, + { + "name": "T2" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => [T1 | PromiseLike, T2 | PromiseLike]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "returnType": "Promise<[T1, T2]>" + }, + { + "name": "parallel", + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "generics": [ + { + "name": "T" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => (T | PromiseLike)[]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "values", + "description": "A getter for the async values to resolve in parallel with batched change detection.", + "type": "() => Iterable>", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise<[T1, T2, T3, T4, T5]>", + "generics": [ + { + "name": "T" + } + ], + "name": "parallel", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */" + }, + "entryType": "function", + "description": "Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\ndetection over the entire operation such that change detection occurs exactly once before\nresolving the values and once after.", + "jsdocTags": [ + { + "name": "param", + "comment": "A getter for the async values to resolve in parallel with batched change detection." + }, + { + "name": "return", + "comment": "The resolved values." + } + ], + "rawComment": "/**\n * Resolves the given list of async values in parallel (i.e. via Promise.all) while batching change\n * detection over the entire operation such that change detection occurs exactly once before\n * resolving the values and once after.\n * @param values A getter for the async values to resolve in parallel with batched change detection.\n * @return The resolved values.\n */", + "source": { + "filePath": "src/cdk/testing/change-detection.ts", + "startLine": 129, + "endLine": 137 + } + }, + { + "name": "LocatorFactory", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "documentRootLocatorFactory", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "LocatorFactory", + "generics": [], + "name": "documentRootLocatorFactory", + "description": "Gets a locator factory rooted at the document root.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets a locator factory rooted at the document root. */" + }, + "entryType": "function", + "description": "Gets a locator factory rooted at the document root.", + "jsdocTags": [], + "rawComment": "/** Gets a locator factory rooted at the document root. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rootElement", + "type": "TestElement", + "memberType": "property", + "memberTags": [], + "description": "The root element of this `LocatorFactory` as a `TestElement`.", + "jsdocTags": [] + }, + { + "name": "locatorFor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorFor", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "locatorForOptional", + "signatures": [], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise | null>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForOptional", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorForOptional('span')() // Gets `null`\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait lf.locatorForOptional('span')() // Gets `null`\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await lf.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await lf.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await lf.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "locatorForAll", + "signatures": [], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise[]>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForAll", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait lf.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait lf.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait lf.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait lf.locatorForAll('span')()\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await lf.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await lf.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await lf.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await lf.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the root element of this `LocatorFactory`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait lf.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait lf.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait lf.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait lf.locatorForAll('span')()\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the root element of this `LocatorFactory`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await lf.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await lf.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await lf.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await lf.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rootHarnessLoader", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rootHarnessLoader", + "description": "", + "entryType": "function", + "jsdocTags": [ + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the root element of this `LocatorFactory`." + } + ], + "rawComment": "/** @return A `HarnessLoader` rooted at the root element of this `LocatorFactory`. */" + }, + "entryType": "function", + "description": "", + "jsdocTags": [ + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the root element of this `LocatorFactory`." + } + ], + "rawComment": "/** @return A `HarnessLoader` rooted at the root element of this `LocatorFactory`. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderFor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderFor", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector." + }, + { + "name": "throws", + "comment": "If no matching element is found for the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector." + }, + { + "name": "throws", + "comment": "If no matching element is found for the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`.\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector.\n * @throws If no matching element is found for the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderForOptional", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderForOptional", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */" + }, + "entryType": "function", + "description": "Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A `HarnessLoader` rooted at the first element matching the given selector, or null if\nno matching element is found." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` instance for an element under the root of this `LocatorFactory`\n * @param selector The selector for the root element.\n * @return A `HarnessLoader` rooted at the first element matching the given selector, or null if\n * no matching element is found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessLoaderForAll", + "signatures": [], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for the root element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "harnessLoaderForAll", + "description": "Gets a list of `HarnessLoader` instances, one for each matching element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`, one rooted at each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a list of `HarnessLoader` instances, one for each matching element.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for the root element." + }, + { + "name": "return", + "comment": "A list of `HarnessLoader`, one rooted at each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` instances, one for each matching element.\n * @param selector The selector for the root element.\n * @return A list of `HarnessLoader`, one rooted at each element matching the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "forceStabilize", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */" + }, + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "Interface used to create asynchronous locator functions used find elements and component\nharnesses. This interface is used by `ComponentHarness` authors to create locator functions for\ntheir `ComponentHarness` subclass.", + "jsdocTags": [], + "rawComment": "/**\n * Interface used to create asynchronous locator functions used find elements and component\n * harnesses. This interface is used by `ComponentHarness` authors to create locator functions for\n * their `ComponentHarness` subclass.\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 144, + "endLine": 299 + } + }, + { + "name": "TextOptions", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "exclude", + "type": "string | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "Optional selector for elements whose content should be excluded from the text string.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Options that affect the text returned by `TestElement.text`.", + "jsdocTags": [], + "rawComment": "/**\n * Options that affect the text returned by `TestElement.text`.\n */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/test-element.ts", + "startLine": 186, + "endLine": 189 + } + }, + { + "name": "ComponentHarness", + "isAbstract": true, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "locatorFactory", + "description": "", + "type": "LocatorFactory", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "ComponentHarness", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "host", + "signatures": [ + { + "name": "host", + "entryType": "function", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "host", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */" + }, + "entryType": "function", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "jsdocTags": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "documentRootLocatorFactory", + "signatures": [ + { + "name": "documentRootLocatorFactory", + "entryType": "function", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */", + "returnType": "LocatorFactory" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "LocatorFactory", + "generics": [], + "name": "documentRootLocatorFactory", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */" + }, + "entryType": "function", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "jsdocTags": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "locatorFor", + "signatures": [ + { + "name": "locatorFor", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "returnType": "() => Promise>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorFor", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "locatorForOptional", + "signatures": [ + { + "name": "locatorForOptional", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "returnType": "() => Promise | null>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise | null>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForOptional", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "locatorForAll", + "signatures": [ + { + "name": "locatorForAll", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "returnType": "() => Promise[]>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise[]>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForAll", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */" + }, + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + } + ], + "generics": [], + "description": "Base class for component test harnesses that all component harness authors should extend. This\nbase component harness provides the basic ability to locate element and sub-component harnesses.", + "jsdocTags": [], + "rawComment": "/**\n * Base class for component test harnesses that all component harness authors should extend. This\n * base component harness provides the basic ability to locate element and sub-component harnesses.\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 305, + "endLine": 454 + } + }, + { + "name": "ContentContainerComponentHarness", + "isAbstract": true, + "entryType": "undecorated_class", + "members": [ + { + "name": "getChildLoader", + "signatures": [ + { + "name": "getChildLoader", + "entryType": "function", + "description": "Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\nselector within the current harness's content.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for an element in the component's content." + }, + { + "name": "returns", + "comment": "A `HarnessLoader` that searches for harnesses under the given selector." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for an element in the component's content.", + "type": "S", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\n * selector within the current harness's content.\n * @param selector The selector for an element in the component's content.\n * @returns A `HarnessLoader` that searches for harnesses under the given selector.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for an element in the component's content.", + "type": "S", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "A `HarnessLoader` that searches for harnesses under the given selector.", + "generics": [], + "name": "getChildLoader", + "description": "Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\nselector within the current harness's content.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for an element in the component's content." + }, + { + "name": "returns", + "comment": "A `HarnessLoader` that searches for harnesses under the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\n * selector within the current harness's content.\n * @param selector The selector for an element in the component's content.\n * @returns A `HarnessLoader` that searches for harnesses under the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\nselector within the current harness's content.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for an element in the component's content." + }, + { + "name": "returns", + "comment": "A `HarnessLoader` that searches for harnesses under the given selector." + } + ], + "rawComment": "/**\n * Gets a `HarnessLoader` that searches for harnesses under the first element matching the given\n * selector within the current harness's content.\n * @param selector The selector for an element in the component's content.\n * @returns A `HarnessLoader` that searches for harnesses under the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllChildLoaders", + "signatures": [ + { + "name": "getAllChildLoaders", + "entryType": "function", + "description": "Gets a list of `HarnessLoader` for each element matching the given selector under the current\nharness's cotnent that searches for harnesses under that element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for elements in the component's content." + }, + { + "name": "returns", + "comment": "A list of `HarnessLoader` for each element matching the given selector." + } + ], + "params": [ + { + "name": "selector", + "description": "The selector for elements in the component's content.", + "type": "S", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` for each element matching the given selector under the current\n * harness's cotnent that searches for harnesses under that element.\n * @param selector The selector for elements in the component's content.\n * @returns A list of `HarnessLoader` for each element matching the given selector.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "The selector for elements in the component's content.", + "type": "S", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "A list of `HarnessLoader` for each element matching the given selector.", + "generics": [], + "name": "getAllChildLoaders", + "description": "Gets a list of `HarnessLoader` for each element matching the given selector under the current\nharness's cotnent that searches for harnesses under that element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for elements in the component's content." + }, + { + "name": "returns", + "comment": "A list of `HarnessLoader` for each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` for each element matching the given selector under the current\n * harness's cotnent that searches for harnesses under that element.\n * @param selector The selector for elements in the component's content.\n * @returns A list of `HarnessLoader` for each element matching the given selector.\n */" + }, + "entryType": "function", + "description": "Gets a list of `HarnessLoader` for each element matching the given selector under the current\nharness's cotnent that searches for harnesses under that element.", + "jsdocTags": [ + { + "name": "param", + "comment": "The selector for elements in the component's content." + }, + { + "name": "returns", + "comment": "A list of `HarnessLoader` for each element matching the given selector." + } + ], + "rawComment": "/**\n * Gets a list of `HarnessLoader` for each element matching the given selector under the current\n * harness's cotnent that searches for harnesses under that element.\n * @param selector The selector for elements in the component's content.\n * @returns A list of `HarnessLoader` for each element matching the given selector.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarness", + "signatures": [ + { + "name": "getHarness", + "entryType": "function", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query." + }, + { + "name": "throws", + "comment": "If no matching harness is found." + } + ], + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query.\n * @throws If no matching harness is found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "The first harness matching the given query.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarness", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query." + }, + { + "name": "throws", + "comment": "If no matching harness is found." + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query.\n * @throws If no matching harness is found.\n */" + }, + "entryType": "function", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query." + }, + { + "name": "throws", + "comment": "If no matching harness is found." + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query.\n * @throws If no matching harness is found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getHarnessOrNull", + "signatures": [ + { + "name": "getHarnessOrNull", + "entryType": "function", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query, or null if none is found." + } + ], + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query, or null if none is found.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "The first harness matching the given query, or null if none is found.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getHarnessOrNull", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query, or null if none is found." + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query, or null if none is found.\n */" + }, + "entryType": "function", + "description": "Gets the first matching harness for the given query within the current harness's content.", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The first harness matching the given query, or null if none is found." + } + ], + "rawComment": "/**\n * Gets the first matching harness for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The first harness matching the given query, or null if none is found.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAllHarnesses", + "signatures": [ + { + "name": "getAllHarnesses", + "entryType": "function", + "description": "Gets all matching harnesses for the given query within the current harness's content.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The list of harness matching the given query." + } + ], + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets all matching harnesses for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The list of harness matching the given query.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "The list of harness matching the given query.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "getAllHarnesses", + "description": "Gets all matching harnesses for the given query within the current harness's content.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The list of harness matching the given query." + } + ], + "rawComment": "/**\n * Gets all matching harnesses for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The list of harness matching the given query.\n */" + }, + "entryType": "function", + "description": "Gets all matching harnesses for the given query within the current harness's content.", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "The list of harness matching the given query." + } + ], + "rawComment": "/**\n * Gets all matching harnesses for the given query within the current harness's content.\n * @param query The harness query to search for.\n * @returns The list of harness matching the given query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasHarness", + "signatures": [ + { + "name": "hasHarness", + "entryType": "function", + "description": "Checks whether there is a matching harnesses for the given query within the current harness's\ncontent.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "Whetehr there is matching harnesses for the given query." + } + ], + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Checks whether there is a matching harnesses for the given query within the current harness's\n * content.\n *\n * @param query The harness query to search for.\n * @returns Whetehr there is matching harnesses for the given query.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "query", + "description": "The harness query to search for.", + "type": "HarnessQuery", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "returnDescription": "Whetehr there is matching harnesses for the given query.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "hasHarness", + "description": "Checks whether there is a matching harnesses for the given query within the current harness's\ncontent.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "Whetehr there is matching harnesses for the given query." + } + ], + "rawComment": "/**\n * Checks whether there is a matching harnesses for the given query within the current harness's\n * content.\n *\n * @param query The harness query to search for.\n * @returns Whetehr there is matching harnesses for the given query.\n */" + }, + "entryType": "function", + "description": "Checks whether there is a matching harnesses for the given query within the current harness's\ncontent.", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness query to search for." + }, + { + "name": "returns", + "comment": "Whetehr there is matching harnesses for the given query." + } + ], + "rawComment": "/**\n * Checks whether there is a matching harnesses for the given query within the current harness's\n * content.\n *\n * @param query The harness query to search for.\n * @returns Whetehr there is matching harnesses for the given query.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getRootHarnessLoader", + "signatures": [ + { + "name": "getRootHarnessLoader", + "entryType": "function", + "description": "Gets the root harness loader from which to start\nsearching for content contained by this harness.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getRootHarnessLoader", + "description": "Gets the root harness loader from which to start\nsearching for content contained by this harness.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */" + }, + "entryType": "function", + "description": "Gets the root harness loader from which to start\nsearching for content contained by this harness.", + "jsdocTags": [], + "rawComment": "/**\n * Gets the root harness loader from which to start\n * searching for content contained by this harness.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "host", + "signatures": [ + { + "name": "host", + "entryType": "function", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "host", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */" + }, + "entryType": "function", + "description": "Gets a `Promise` for the `TestElement` representing the host element of the component.", + "jsdocTags": [], + "rawComment": "/** Gets a `Promise` for the `TestElement` representing the host element of the component. */", + "memberType": "method", + "memberTags": [ + "override" + ] + }, + { + "name": "documentRootLocatorFactory", + "signatures": [ + { + "name": "documentRootLocatorFactory", + "entryType": "function", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */", + "returnType": "LocatorFactory" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "LocatorFactory", + "generics": [], + "name": "documentRootLocatorFactory", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */" + }, + "entryType": "function", + "description": "Gets a `LocatorFactory` for the document root element. This factory can be used to create\nlocators for elements that a component creates outside of its own root element. (e.g. by\nappending to document.body).", + "jsdocTags": [], + "rawComment": "/**\n * Gets a `LocatorFactory` for the document root element. This factory can be used to create\n * locators for elements that a component creates outside of its own root element. (e.g. by\n * appending to document.body).\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + }, + { + "name": "locatorFor", + "signatures": [ + { + "name": "locatorFor", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "returnType": "() => Promise>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorFor", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorFor('span')() // Throws because the `Promise` rejects\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\neach query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorFor(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorFor('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorFor('span')() // Throws because the `Promise` rejects\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` rejects. The type that the `Promise` resolves to is a union of all result types for\n * each query.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + }, + { + "name": "locatorForOptional", + "signatures": [ + { + "name": "locatorForOptional", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "returnType": "() => Promise | null>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise | null>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForOptional", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\nor element under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\nawait ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\nawait ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\nawait ch.locatorForOptional('span')() // Gets `null`\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for the\nfirst element or harness matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If no matches are found, the\n`Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\nresult types for each query or null." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find a `ComponentHarness` instance\n * or element under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * await ch.locatorForOptional(DivHarness, 'div')() // Gets a `DivHarness` instance for #d1\n * await ch.locatorForOptional('div', DivHarness)() // Gets a `TestElement` instance for #d1\n * await ch.locatorForOptional('span')() // Gets `null`\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for the\n * first element or harness matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If no matches are found, the\n * `Promise` is resolved with `null`. The type that the `Promise` resolves to is a union of all\n * result types for each query or null.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + }, + { + "name": "locatorForAll", + "signatures": [ + { + "name": "locatorForAll", + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "returnType": "() => Promise[]>" + } + ], + "implementation": { + "params": [ + { + "name": "queries", + "description": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate.", + "type": "T", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "() => Promise[]>", + "generics": [ + { + "name": "T", + "constraint": "(HarnessQuery | string)[]" + } + ], + "name": "locatorForAll", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */" + }, + "entryType": "function", + "description": "Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\nor elements under the host element of this `ComponentHarness`.\n\nFor example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n`IdIsD1Harness.hostSelector` is `'#d1'`\n\n```html\n
\n```\n\nthen we expect:\n\n```ts\n// Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\nawait ch.locatorForAll(DivHarness, 'div')()\n// Gets [TestElement for #d1, TestElement for #d2]\nawait ch.locatorForAll('div', '#d1')()\n// Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\nawait ch.locatorForAll(DivHarness, IdIsD1Harness)()\n// Gets []\nawait ch.locatorForAll('span')()\n```", + "jsdocTags": [ + { + "name": "param", + "comment": "A list of queries specifying which harnesses and elements to search for:\n- A `string` searches for elements matching the CSS selector specified by the string.\n- A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\ngiven class.\n- A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\npredicate." + }, + { + "name": "return", + "comment": "An asynchronous locator function that searches for and returns a `Promise` for all\nelements and harnesses matching the given search criteria. Matches are ordered first by\norder in the DOM, and second by order in the queries list. If an element matches more than\none `ComponentHarness` class, the locator gets an instance of each for the same element. If\nan element matches multiple `string` selectors, only one `TestElement` instance is returned\nfor that element. The type that the `Promise` resolves to is an array where each element is\nthe union of all result types for each query." + } + ], + "rawComment": "/**\n * Creates an asynchronous locator function that can be used to find `ComponentHarness` instances\n * or elements under the host element of this `ComponentHarness`.\n *\n * For example, given the following DOM and assuming `DivHarness.hostSelector` is `'div'` and\n * `IdIsD1Harness.hostSelector` is `'#d1'`\n *\n * ```html\n *
\n * ```\n *\n * then we expect:\n *\n * ```ts\n * // Gets [DivHarness for #d1, TestElement for #d1, DivHarness for #d2, TestElement for #d2]\n * await ch.locatorForAll(DivHarness, 'div')()\n * // Gets [TestElement for #d1, TestElement for #d2]\n * await ch.locatorForAll('div', '#d1')()\n * // Gets [DivHarness for #d1, IdIsD1Harness for #d1, DivHarness for #d2]\n * await ch.locatorForAll(DivHarness, IdIsD1Harness)()\n * // Gets []\n * await ch.locatorForAll('span')()\n * ```\n *\n * @param queries A list of queries specifying which harnesses and elements to search for:\n * - A `string` searches for elements matching the CSS selector specified by the string.\n * - A `ComponentHarness` constructor searches for `ComponentHarness` instances matching the\n * given class.\n * - A `HarnessPredicate` searches for `ComponentHarness` instances matching the given\n * predicate.\n * @return An asynchronous locator function that searches for and returns a `Promise` for all\n * elements and harnesses matching the given search criteria. Matches are ordered first by\n * order in the DOM, and second by order in the queries list. If an element matches more than\n * one `ComponentHarness` class, the locator gets an instance of each for the same element. If\n * an element matches multiple `string` selectors, only one `TestElement` instance is returned\n * for that element. The type that the `Promise` resolves to is an array where each element is\n * the union of all result types for each query.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */" + }, + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "memberType": "method", + "memberTags": [ + "protected", + "override" + ] + } + ], + "generics": [ + { + "name": "S", + "constraint": "string", + "default": "string" + } + ], + "description": "Base class for component harnesses that authors should extend if they anticipate that consumers\nof the harness may want to access other harnesses within the `` of the component.", + "jsdocTags": [], + "rawComment": "/**\n * Base class for component harnesses that authors should extend if they anticipate that consumers\n * of the harness may want to access other harnesses within the `` of the component.\n */", + "extends": "ComponentHarness", + "implements": [ + "HarnessLoader" + ], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 460, + "endLine": 530 + } + }, + { + "name": "ComponentHarnessConstructor", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "hostSelector", + "type": "string", + "memberType": "property", + "memberTags": [], + "description": "`ComponentHarness` subclasses must specify a static `hostSelector` property that is used to\nfind the host element for the corresponding component. This property should match the selector\nfor the Angular component.", + "jsdocTags": [] + } + ], + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "description": "Constructor for a ComponentHarness subclass. To be a valid ComponentHarnessConstructor, the\nclass must also have a static `hostSelector` property.", + "jsdocTags": [], + "rawComment": "/**\n * Constructor for a ComponentHarness subclass. To be a valid ComponentHarnessConstructor, the\n * class must also have a static `hostSelector` property.\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 536, + "endLine": 545 + } + }, + { + "name": "BaseHarnessFilters", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "selector", + "type": "string | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "Only find instances whose host element matches the given selector.", + "jsdocTags": [] + }, + { + "name": "ancestor", + "type": "string | undefined", + "memberType": "property", + "memberTags": [ + "optional" + ], + "description": "Only find instances that are nested under an element with the given selector.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "A set of criteria that can be used to filter a list of `ComponentHarness` instances.", + "jsdocTags": [], + "rawComment": "/** A set of criteria that can be used to filter a list of `ComponentHarness` instances. */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 548, + "endLine": 553 + } + }, + { + "name": "HarnessPredicate", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "harnessType", + "description": "", + "type": "ComponentHarnessConstructor", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "BaseHarnessFilters", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessPredicate", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "harnessType", + "type": "ComponentHarnessConstructor", + "memberType": "property", + "memberTags": [ + "override" + ], + "description": "", + "jsdocTags": [] + }, + { + "name": "add", + "signatures": [ + { + "name": "add", + "entryType": "function", + "description": "Adds a predicate function to be run against candidate harnesses.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "A description of this predicate that may be used in error messages." + }, + { + "name": "param", + "comment": "An async predicate function." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "params": [ + { + "name": "description", + "description": "A description of this predicate that may be used in error messages.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "predicate", + "description": "An async predicate function.", + "type": "AsyncPredicate", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */", + "returnType": "this" + } + ], + "implementation": { + "params": [ + { + "name": "description", + "description": "A description of this predicate that may be used in error messages.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "predicate", + "description": "An async predicate function.", + "type": "AsyncPredicate", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "this", + "generics": [], + "name": "add", + "description": "Adds a predicate function to be run against candidate harnesses.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "A description of this predicate that may be used in error messages." + }, + { + "name": "param", + "comment": "An async predicate function." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "rawComment": "/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */" + }, + "entryType": "function", + "description": "Adds a predicate function to be run against candidate harnesses.", + "jsdocTags": [ + { + "name": "param", + "comment": "A description of this predicate that may be used in error messages." + }, + { + "name": "param", + "comment": "An async predicate function." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "rawComment": "/**\n * Adds a predicate function to be run against candidate harnesses.\n * @param description A description of this predicate that may be used in error messages.\n * @param predicate An async predicate function.\n * @return this (for method chaining).\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "addOption", + "signatures": [ + { + "name": "addOption", + "entryType": "function", + "description": "Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.", + "generics": [ + { + "name": "O" + } + ], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The name of the option (may be used in error messages)." + }, + { + "name": "param", + "comment": "The option value." + }, + { + "name": "param", + "comment": "The predicate function to run if the option value is not undefined." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "params": [ + { + "name": "name", + "description": "The name of the option (may be used in error messages).", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "option", + "description": "The option value.", + "type": "O | undefined", + "isOptional": false, + "isRestParam": false + }, + { + "name": "predicate", + "description": "The predicate function to run if the option value is not undefined.", + "type": "AsyncOptionPredicate", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */", + "returnType": "this" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "The name of the option (may be used in error messages).", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "option", + "description": "The option value.", + "type": "O | undefined", + "isOptional": false, + "isRestParam": false + }, + { + "name": "predicate", + "description": "The predicate function to run if the option value is not undefined.", + "type": "AsyncOptionPredicate", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "this", + "generics": [ + { + "name": "O" + } + ], + "name": "addOption", + "description": "Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The name of the option (may be used in error messages)." + }, + { + "name": "param", + "comment": "The option value." + }, + { + "name": "param", + "comment": "The predicate function to run if the option value is not undefined." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "rawComment": "/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */" + }, + "entryType": "function", + "description": "Adds a predicate function that depends on an option value to be run against candidate\nharnesses. If the option value is undefined, the predicate will be ignored.", + "jsdocTags": [ + { + "name": "param", + "comment": "The name of the option (may be used in error messages)." + }, + { + "name": "param", + "comment": "The option value." + }, + { + "name": "param", + "comment": "The predicate function to run if the option value is not undefined." + }, + { + "name": "return", + "comment": "this (for method chaining)." + } + ], + "rawComment": "/**\n * Adds a predicate function that depends on an option value to be run against candidate\n * harnesses. If the option value is undefined, the predicate will be ignored.\n * @param name The name of the option (may be used in error messages).\n * @param option The option value.\n * @param predicate The predicate function to run if the option value is not undefined.\n * @return this (for method chaining).\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "filter", + "signatures": [ + { + "name": "filter", + "entryType": "function", + "description": "Filters a list of harnesses on this predicate.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The list of harnesses to filter." + }, + { + "name": "return", + "comment": "A list of harnesses that satisfy this predicate." + } + ], + "params": [ + { + "name": "harnesses", + "description": "The list of harnesses to filter.", + "type": "T[]", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "harnesses", + "description": "The list of harnesses to filter.", + "type": "T[]", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "filter", + "description": "Filters a list of harnesses on this predicate.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The list of harnesses to filter." + }, + { + "name": "return", + "comment": "A list of harnesses that satisfy this predicate." + } + ], + "rawComment": "/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */" + }, + "entryType": "function", + "description": "Filters a list of harnesses on this predicate.", + "jsdocTags": [ + { + "name": "param", + "comment": "The list of harnesses to filter." + }, + { + "name": "return", + "comment": "A list of harnesses that satisfy this predicate." + } + ], + "rawComment": "/**\n * Filters a list of harnesses on this predicate.\n * @param harnesses The list of harnesses to filter.\n * @return A list of harnesses that satisfy this predicate.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "evaluate", + "signatures": [ + { + "name": "evaluate", + "entryType": "function", + "description": "Evaluates whether the given harness satisfies this predicate.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The harness to check" + }, + { + "name": "return", + "comment": "A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise." + } + ], + "params": [ + { + "name": "harness", + "description": "The harness to check", + "type": "T", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "harness", + "description": "The harness to check", + "type": "T", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "evaluate", + "description": "Evaluates whether the given harness satisfies this predicate.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness to check" + }, + { + "name": "return", + "comment": "A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise." + } + ], + "rawComment": "/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */" + }, + "entryType": "function", + "description": "Evaluates whether the given harness satisfies this predicate.", + "jsdocTags": [ + { + "name": "param", + "comment": "The harness to check" + }, + { + "name": "return", + "comment": "A promise that resolves to true if the harness satisfies this predicate,\nand resolves to false otherwise." + } + ], + "rawComment": "/**\n * Evaluates whether the given harness satisfies this predicate.\n * @param harness The harness to check\n * @return A promise that resolves to true if the harness satisfies this predicate,\n * and resolves to false otherwise.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDescription", + "signatures": [ + { + "name": "getDescription", + "entryType": "function", + "description": "Gets a description of this predicate for use in error messages.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets a description of this predicate for use in error messages. */", + "returnType": "string" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "string", + "generics": [], + "name": "getDescription", + "description": "Gets a description of this predicate for use in error messages.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets a description of this predicate for use in error messages. */" + }, + "entryType": "function", + "description": "Gets a description of this predicate for use in error messages.", + "jsdocTags": [], + "rawComment": "/** Gets a description of this predicate for use in error messages. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getSelector", + "signatures": [ + { + "name": "getSelector", + "entryType": "function", + "description": "Gets the selector used to find candidate elements.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the selector used to find candidate elements. */", + "returnType": "string" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "string", + "generics": [], + "name": "getSelector", + "description": "Gets the selector used to find candidate elements.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the selector used to find candidate elements. */" + }, + "entryType": "function", + "description": "Gets the selector used to find candidate elements.", + "jsdocTags": [], + "rawComment": "/** Gets the selector used to find candidate elements. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "stringMatches", + "signatures": [ + { + "name": "stringMatches", + "entryType": "function", + "description": "Checks if the specified nullable string value matches the given pattern.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "The nullable string value to check, or a Promise resolving to the\nnullable string value." + }, + { + "name": "param", + "comment": "The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`." + }, + { + "name": "return", + "comment": "Whether the value matches the pattern." + } + ], + "params": [ + { + "name": "value", + "description": "The nullable string value to check, or a Promise resolving to the\nnullable string value.", + "type": "string | Promise | null", + "isOptional": false, + "isRestParam": false + }, + { + "name": "pattern", + "description": "The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`.", + "type": "string | RegExp | null", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "The nullable string value to check, or a Promise resolving to the\nnullable string value.", + "type": "string | Promise | null", + "isOptional": false, + "isRestParam": false + }, + { + "name": "pattern", + "description": "The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`.", + "type": "string | RegExp | null", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "stringMatches", + "description": "Checks if the specified nullable string value matches the given pattern.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "The nullable string value to check, or a Promise resolving to the\nnullable string value." + }, + { + "name": "param", + "comment": "The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`." + }, + { + "name": "return", + "comment": "Whether the value matches the pattern." + } + ], + "rawComment": "/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */" + }, + "entryType": "function", + "description": "Checks if the specified nullable string value matches the given pattern.", + "jsdocTags": [ + { + "name": "param", + "comment": "The nullable string value to check, or a Promise resolving to the\nnullable string value." + }, + { + "name": "param", + "comment": "The pattern the value is expected to match. If `pattern` is a string,\n`value` is expected to match exactly. If `pattern` is a regex, a partial match is\nallowed. If `pattern` is `null`, the value is expected to be `null`." + }, + { + "name": "return", + "comment": "Whether the value matches the pattern." + } + ], + "rawComment": "/**\n * Checks if the specified nullable string value matches the given pattern.\n * @param value The nullable string value to check, or a Promise resolving to the\n * nullable string value.\n * @param pattern The pattern the value is expected to match. If `pattern` is a string,\n * `value` is expected to match exactly. If `pattern` is a regex, a partial match is\n * allowed. If `pattern` is `null`, the value is expected to be `null`.\n * @return Whether the value matches the pattern.\n */", + "memberType": "method", + "memberTags": [ + "static" + ] + } + ], + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "description": "A class used to associate a ComponentHarness class with predicate functions that can be used to\nfilter instances of the class to be matched.", + "jsdocTags": [], + "rawComment": "/**\n * A class used to associate a ComponentHarness class with predicate functions that can be used to\n * filter instances of the class to be matched.\n */", + "implements": [], + "source": { + "filePath": "src/cdk/testing/component-harness.ts", + "startLine": 559, + "endLine": 687 + } + } + ], + "symbols": [ + [ + "getNoKeysSpecifiedError", + "@angular/cdk/testing" + ], + [ + "ElementDimensions", + "@angular/cdk/testing" + ], + [ + "AutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "ModifierKeys", + "@angular/cdk/testing" + ], + [ + "AsyncFactoryFn", + "@angular/cdk/testing" + ], + [ + "EventData", + "@angular/cdk/testing" + ], + [ + "AsyncPredicate", + "@angular/cdk/testing" + ], + [ + "TestKey", + "@angular/cdk/testing" + ], + [ + "AsyncOptionPredicate", + "@angular/cdk/testing" + ], + [ + "HarnessQuery", + "@angular/cdk/testing" + ], + [ + "LocatorFnResult", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment", + "@angular/cdk/testing" + ], + [ + "handleAutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "TestElement", + "@angular/cdk/testing" + ], + [ + "stopHandlingAutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "HarnessLoader", + "@angular/cdk/testing" + ], + [ + "manualChangeDetection", + "@angular/cdk/testing" + ], + [ + "parallel", + "@angular/cdk/testing" + ], + [ + "LocatorFactory", + "@angular/cdk/testing" + ], + [ + "TextOptions", + "@angular/cdk/testing" + ], + [ + "ComponentHarness", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness", + "@angular/cdk/testing" + ], + [ + "ComponentHarnessConstructor", + "@angular/cdk/testing" + ], + [ + "BaseHarnessFilters", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate", + "@angular/cdk/testing" + ], + [ + "getNoKeysSpecifiedError", + "@angular/cdk/testing" + ], + [ + "ElementDimensions", + "@angular/cdk/testing" + ], + [ + "ElementDimensions.top", + "@angular/cdk/testing" + ], + [ + "ElementDimensions.left", + "@angular/cdk/testing" + ], + [ + "ElementDimensions.width", + "@angular/cdk/testing" + ], + [ + "ElementDimensions.height", + "@angular/cdk/testing" + ], + [ + "AutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "AutoChangeDetectionStatus.isDisabled", + "@angular/cdk/testing" + ], + [ + "AutoChangeDetectionStatus.onDetectChangesNow", + "@angular/cdk/testing" + ], + [ + "ModifierKeys", + "@angular/cdk/testing" + ], + [ + "ModifierKeys.control", + "@angular/cdk/testing" + ], + [ + "ModifierKeys.alt", + "@angular/cdk/testing" + ], + [ + "ModifierKeys.shift", + "@angular/cdk/testing" + ], + [ + "ModifierKeys.meta", + "@angular/cdk/testing" + ], + [ + "AsyncFactoryFn", + "@angular/cdk/testing" + ], + [ + "EventData", + "@angular/cdk/testing" + ], + [ + "AsyncPredicate", + "@angular/cdk/testing" + ], + [ + "TestKey", + "@angular/cdk/testing" + ], + [ + "TestKey.BACKSPACE", + "@angular/cdk/testing" + ], + [ + "TestKey.TAB", + "@angular/cdk/testing" + ], + [ + "TestKey.ENTER", + "@angular/cdk/testing" + ], + [ + "TestKey.SHIFT", + "@angular/cdk/testing" + ], + [ + "TestKey.CONTROL", + "@angular/cdk/testing" + ], + [ + "TestKey.ALT", + "@angular/cdk/testing" + ], + [ + "TestKey.ESCAPE", + "@angular/cdk/testing" + ], + [ + "TestKey.PAGE_UP", + "@angular/cdk/testing" + ], + [ + "TestKey.PAGE_DOWN", + "@angular/cdk/testing" + ], + [ + "TestKey.END", + "@angular/cdk/testing" + ], + [ + "TestKey.HOME", + "@angular/cdk/testing" + ], + [ + "TestKey.LEFT_ARROW", + "@angular/cdk/testing" + ], + [ + "TestKey.UP_ARROW", + "@angular/cdk/testing" + ], + [ + "TestKey.RIGHT_ARROW", + "@angular/cdk/testing" + ], + [ + "TestKey.DOWN_ARROW", + "@angular/cdk/testing" + ], + [ + "TestKey.INSERT", + "@angular/cdk/testing" + ], + [ + "TestKey.DELETE", + "@angular/cdk/testing" + ], + [ + "TestKey.F1", + "@angular/cdk/testing" + ], + [ + "TestKey.F2", + "@angular/cdk/testing" + ], + [ + "TestKey.F3", + "@angular/cdk/testing" + ], + [ + "TestKey.F4", + "@angular/cdk/testing" + ], + [ + "TestKey.F5", + "@angular/cdk/testing" + ], + [ + "TestKey.F6", + "@angular/cdk/testing" + ], + [ + "TestKey.F7", + "@angular/cdk/testing" + ], + [ + "TestKey.F8", + "@angular/cdk/testing" + ], + [ + "TestKey.F9", + "@angular/cdk/testing" + ], + [ + "TestKey.F10", + "@angular/cdk/testing" + ], + [ + "TestKey.F11", + "@angular/cdk/testing" + ], + [ + "TestKey.F12", + "@angular/cdk/testing" + ], + [ + "TestKey.META", + "@angular/cdk/testing" + ], + [ + "TestKey.COMMA", + "@angular/cdk/testing" + ], + [ + "AsyncOptionPredicate", + "@angular/cdk/testing" + ], + [ + "HarnessQuery", + "@angular/cdk/testing" + ], + [ + "LocatorFnResult", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.constructor", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.rootElement", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.rootElement", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.documentRootLocatorFactory", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.locatorFor", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.locatorForOptional", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.locatorForAll", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.rootHarnessLoader", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.harnessLoaderFor", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.harnessLoaderForOptional", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.harnessLoaderForAll", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getHarness", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getHarnessOrNull", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getAllHarnesses", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.hasHarness", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getChildLoader", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getAllChildLoaders", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.createComponentHarness", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.forceStabilize", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.waitForTasksOutsideAngular", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getDocumentRoot", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.createTestElement", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.createEnvironment", + "@angular/cdk/testing" + ], + [ + "HarnessEnvironment.getAllRawElements", + "@angular/cdk/testing" + ], + [ + "handleAutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "TestElement", + "@angular/cdk/testing" + ], + [ + "TestElement.blur", + "@angular/cdk/testing" + ], + [ + "TestElement.clear", + "@angular/cdk/testing" + ], + [ + "TestElement.click", + "@angular/cdk/testing" + ], + [ + "TestElement.click", + "@angular/cdk/testing" + ], + [ + "TestElement.click", + "@angular/cdk/testing" + ], + [ + "TestElement.rightClick", + "@angular/cdk/testing" + ], + [ + "TestElement.focus", + "@angular/cdk/testing" + ], + [ + "TestElement.getCssValue", + "@angular/cdk/testing" + ], + [ + "TestElement.hover", + "@angular/cdk/testing" + ], + [ + "TestElement.mouseAway", + "@angular/cdk/testing" + ], + [ + "TestElement.sendKeys", + "@angular/cdk/testing" + ], + [ + "TestElement.sendKeys", + "@angular/cdk/testing" + ], + [ + "TestElement.text", + "@angular/cdk/testing" + ], + [ + "TestElement.setContenteditableValue", + "@angular/cdk/testing" + ], + [ + "TestElement.getAttribute", + "@angular/cdk/testing" + ], + [ + "TestElement.hasClass", + "@angular/cdk/testing" + ], + [ + "TestElement.getDimensions", + "@angular/cdk/testing" + ], + [ + "TestElement.getProperty", + "@angular/cdk/testing" + ], + [ + "TestElement.matchesSelector", + "@angular/cdk/testing" + ], + [ + "TestElement.isFocused", + "@angular/cdk/testing" + ], + [ + "TestElement.setInputValue", + "@angular/cdk/testing" + ], + [ + "TestElement.selectOptions", + "@angular/cdk/testing" + ], + [ + "TestElement.dispatchEvent", + "@angular/cdk/testing" + ], + [ + "stopHandlingAutoChangeDetectionStatus", + "@angular/cdk/testing" + ], + [ + "HarnessLoader", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.getChildLoader", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.getAllChildLoaders", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.getHarness", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.getHarnessOrNull", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.getAllHarnesses", + "@angular/cdk/testing" + ], + [ + "HarnessLoader.hasHarness", + "@angular/cdk/testing" + ], + [ + "manualChangeDetection", + "@angular/cdk/testing" + ], + [ + "parallel", + "@angular/cdk/testing" + ], + [ + "LocatorFactory", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.documentRootLocatorFactory", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.rootElement", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.locatorFor", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.locatorForOptional", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.locatorForAll", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.rootHarnessLoader", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.harnessLoaderFor", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.harnessLoaderForOptional", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.harnessLoaderForAll", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.forceStabilize", + "@angular/cdk/testing" + ], + [ + "LocatorFactory.waitForTasksOutsideAngular", + "@angular/cdk/testing" + ], + [ + "TextOptions", + "@angular/cdk/testing" + ], + [ + "TextOptions.exclude", + "@angular/cdk/testing" + ], + [ + "ComponentHarness", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.constructor", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.host", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.documentRootLocatorFactory", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.locatorFor", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.locatorForOptional", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.locatorForAll", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.forceStabilize", + "@angular/cdk/testing" + ], + [ + "ComponentHarness.waitForTasksOutsideAngular", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getChildLoader", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getAllChildLoaders", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getHarness", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getHarnessOrNull", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getAllHarnesses", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.hasHarness", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.getRootHarnessLoader", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.host", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.documentRootLocatorFactory", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.locatorFor", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.locatorForOptional", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.locatorForAll", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.forceStabilize", + "@angular/cdk/testing" + ], + [ + "ContentContainerComponentHarness.waitForTasksOutsideAngular", + "@angular/cdk/testing" + ], + [ + "ComponentHarnessConstructor", + "@angular/cdk/testing" + ], + [ + "ComponentHarnessConstructor.hostSelector", + "@angular/cdk/testing" + ], + [ + "BaseHarnessFilters", + "@angular/cdk/testing" + ], + [ + "BaseHarnessFilters.selector", + "@angular/cdk/testing" + ], + [ + "BaseHarnessFilters.ancestor", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.constructor", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.harnessType", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.add", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.addOption", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.filter", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.evaluate", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.getDescription", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.getSelector", + "@angular/cdk/testing" + ], + [ + "HarnessPredicate.stringMatches", + "@angular/cdk/testing" + ] + ] +} \ No newline at end of file diff --git a/adev/src/content/cdk/cdk_testing_protractor.json b/adev/src/content/cdk/cdk_testing_protractor.json index abfda18bc075..14092633311d 100755 --- a/adev/src/content/cdk/cdk_testing_protractor.json +++ b/adev/src/content/cdk/cdk_testing_protractor.json @@ -1 +1,1747 @@ -{"moduleLabel":"@angular/cdk/testing/protractor","moduleName":"@angular/cdk/testing/protractor","normalizedModuleName":"angular_cdk_testing_protractor","entries":[{"name":"ProtractorHarnessEnvironmentOptions","isAbstract":false,"entryType":"interface","members":[{"name":"queryFn","type":"(selector: string, root: ElementFinder) => ElementArrayFinder","memberType":"property","memberTags":[],"description":"The query function used to find DOM elements.","jsdocTags":[]}],"generics":[],"description":"Options to configure the environment.","jsdocTags":[{"name":"deprecated","comment":""},{"name":"breaking-change","comment":"13.0.0"}],"rawComment":"/**\n * Options to configure the environment.\n * @deprecated\n * @breaking-change 13.0.0\n */","implements":[],"source":{"filePath":"/src/cdk/testing/protractor/protractor-harness-environment.ts","startLine":18,"endLine":21}},{"name":"ProtractorHarnessEnvironment","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"rawRootElement","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"ProtractorHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"ProtractorHarnessEnvironment","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["protected"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":[]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[{"name":"docs-private","comment":""}],"params":[],"rawComment":"/** @docs-private */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"","entryType":"function","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/** @docs-private */"},"entryType":"function","description":"","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/** @docs-private */","memberType":"method","memberTags":[]},{"name":"getDocumentRoot","signatures":[{"name":"getDocumentRoot","entryType":"function","description":"Gets the root element for the document.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the root element for the document. */","returnType":"ElementFinder"}],"implementation":{"params":[],"isNewType":false,"returnType":"ElementFinder","generics":[],"name":"getDocumentRoot","description":"Gets the root element for the document.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */"},"entryType":"function","description":"Gets the root element for the document.","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */","memberType":"method","memberTags":["protected"]},{"name":"createTestElement","signatures":[{"name":"createTestElement","entryType":"function","description":"Creates a `TestElement` from a raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `TestElement` from a raw element. */","returnType":"TestElement"}],"implementation":{"params":[{"name":"element","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"TestElement","generics":[],"name":"createTestElement","description":"Creates a `TestElement` from a raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */"},"entryType":"function","description":"Creates a `TestElement` from a raw element.","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */","memberType":"method","memberTags":["protected"]},{"name":"createEnvironment","signatures":[{"name":"createEnvironment","entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","returnType":"HarnessEnvironment"}],"implementation":{"params":[{"name":"element","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessEnvironment","generics":[],"name":"createEnvironment","description":"Creates a `HarnessLoader` rooted at the given raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","memberType":"method","memberTags":["protected"]},{"name":"getAllRawElements","signatures":[{"name":"getAllRawElements","entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllRawElements","description":"Gets a list of all elements matching the given selector under this environment's root element.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */"},"entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","memberType":"method","memberTags":["protected"]},{"name":"loader","signatures":[{"name":"loader","entryType":"function","description":"Creates a `HarnessLoader` rooted at the document root.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"options","description":"","type":"ProtractorHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */","returnType":"HarnessLoader"}],"implementation":{"params":[{"name":"options","description":"","type":"ProtractorHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"HarnessLoader","generics":[],"name":"loader","description":"Creates a `HarnessLoader` rooted at the document root.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the document root.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */","memberType":"method","memberTags":["static"]},{"name":"getNativeElement","signatures":[{"name":"getNativeElement","entryType":"function","description":"Gets the ElementFinder corresponding to the given TestElement.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */","returnType":"ElementFinder"}],"implementation":{"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"ElementFinder","generics":[],"name":"getNativeElement","description":"Gets the ElementFinder corresponding to the given TestElement.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */"},"entryType":"function","description":"Gets the ElementFinder corresponding to the given TestElement.","jsdocTags":[],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */","memberType":"method","memberTags":["static"]}],"generics":[],"description":"A `HarnessEnvironment` implementation for Protractor.","jsdocTags":[{"name":"deprecated","comment":"As of v13.0.0, this environment no longer works, as it is not\ncompatible with the new [Angular Package Format](https://angular.dev/tools/libraries/angular-package-format)."},{"name":"breaking-change","comment":"13.0.0"}],"rawComment":"/**\n * A `HarnessEnvironment` implementation for Protractor.\n * @deprecated As of v13.0.0, this environment no longer works, as it is not\n * compatible with the new [Angular Package Format](https://angular.dev/tools/libraries/angular-package-format).\n * @breaking-change 13.0.0\n */","extends":"HarnessEnvironment","implements":[],"source":{"filePath":"/src/cdk/testing/protractor/protractor-harness-environment.ts","startLine":34,"endLine":99}},{"name":"ProtractorElement","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"element","description":"","type":"ElementFinder","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"ProtractorElement","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"blur","signatures":[{"name":"blur","entryType":"function","description":"Blur the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Blur the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"blur","description":"Blur the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Blur the element. */"},"entryType":"function","description":"Blur the element.","jsdocTags":[],"rawComment":"/** Blur the element. */","memberType":"method","memberTags":[]},{"name":"clear","signatures":[{"name":"clear","entryType":"function","description":"Clear the element's input (for input and textarea elements only).","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"clear","description":"Clear the element's input (for input and textarea elements only).","entryType":"function","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */"},"entryType":"function","description":"Clear the element's input (for input and textarea elements only).","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","memberType":"method","memberTags":[]},{"name":"click","signatures":[{"name":"click","entryType":"function","description":"Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the element's center.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"location","description":"","type":"\"center\"","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/** Click the element at the element's center. */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the specified coordinates relative to the top-left of the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"rightClick","signatures":[{"name":"rightClick","entryType":"function","description":"Right clicks on the element at the specified coordinates relative to the top-left of it.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"rightClick","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"focus","signatures":[{"name":"focus","entryType":"function","description":"Focus the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Focus the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"focus","description":"Focus the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Focus the element. */"},"entryType":"function","description":"Focus the element.","jsdocTags":[],"rawComment":"/** Focus the element. */","memberType":"method","memberTags":[]},{"name":"getCssValue","signatures":[{"name":"getCssValue","entryType":"function","description":"Get the computed value of the given CSS property for the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Get the computed value of the given CSS property for the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getCssValue","description":"Get the computed value of the given CSS property for the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */"},"entryType":"function","description":"Get the computed value of the given CSS property for the element.","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */","memberType":"method","memberTags":[]},{"name":"hover","signatures":[{"name":"hover","entryType":"function","description":"Hovers the mouse over the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Hovers the mouse over the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"hover","description":"Hovers the mouse over the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */"},"entryType":"function","description":"Hovers the mouse over the element.","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */","memberType":"method","memberTags":[]},{"name":"mouseAway","signatures":[{"name":"mouseAway","entryType":"function","description":"Moves the mouse away from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Moves the mouse away from the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"mouseAway","description":"Moves the mouse away from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */"},"entryType":"function","description":"Moves the mouse away from the element.","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */","memberType":"method","memberTags":[]},{"name":"sendKeys","signatures":[{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */","returnType":"Promise"},{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"ModifierKeys","isOptional":false,"isRestParam":false},{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"modifiersAndKeys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"sendKeys","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"text","signatures":[{"name":"text","entryType":"function","description":"Gets the text from the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"text","description":"Gets the text from the element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */"},"entryType":"function","description":"Gets the text from the element.","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","memberType":"method","memberTags":[]},{"name":"setContenteditableValue","signatures":[{"name":"setContenteditableValue","entryType":"function","description":"Sets the value of a `contenteditable` element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setContenteditableValue","description":"Sets the value of a `contenteditable` element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */"},"entryType":"function","description":"Sets the value of a `contenteditable` element.","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","memberType":"method","memberTags":[]},{"name":"getAttribute","signatures":[{"name":"getAttribute","entryType":"function","description":"Gets the value for the given attribute from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value for the given attribute from the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAttribute","description":"Gets the value for the given attribute from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */"},"entryType":"function","description":"Gets the value for the given attribute from the element.","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */","memberType":"method","memberTags":[]},{"name":"hasClass","signatures":[{"name":"hasClass","entryType":"function","description":"Checks whether the element has the given class.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether the element has the given class. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"hasClass","description":"Checks whether the element has the given class.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */"},"entryType":"function","description":"Checks whether the element has the given class.","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */","memberType":"method","memberTags":[]},{"name":"getDimensions","signatures":[{"name":"getDimensions","entryType":"function","description":"Gets the dimensions of the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the dimensions of the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"getDimensions","description":"Gets the dimensions of the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */"},"entryType":"function","description":"Gets the dimensions of the element.","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */","memberType":"method","memberTags":[]},{"name":"getProperty","signatures":[{"name":"getProperty","entryType":"function","description":"Gets the value of a property of an element.","generics":[{"name":"T","default":"any"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value of a property of an element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","default":"any"}],"name":"getProperty","description":"Gets the value of a property of an element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */"},"entryType":"function","description":"Gets the value of a property of an element.","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */","memberType":"method","memberTags":[]},{"name":"setInputValue","signatures":[{"name":"setInputValue","entryType":"function","description":"Sets the value of a property of an input.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"value","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Sets the value of a property of an input. */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setInputValue","description":"Sets the value of a property of an input.","entryType":"function","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */"},"entryType":"function","description":"Sets the value of a property of an input.","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */","memberType":"method","memberTags":[]},{"name":"selectOptions","signatures":[{"name":"selectOptions","entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"selectOptions","description":"Selects the options at the specified indexes inside of a native `select` element.","entryType":"function","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */"},"entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","memberType":"method","memberTags":[]},{"name":"matchesSelector","signatures":[{"name":"matchesSelector","entryType":"function","description":"Checks whether this element matches the given selector.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether this element matches the given selector. */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"matchesSelector","description":"Checks whether this element matches the given selector.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */"},"entryType":"function","description":"Checks whether this element matches the given selector.","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */","memberType":"method","memberTags":[]},{"name":"isFocused","signatures":[{"name":"isFocused","entryType":"function","description":"Checks whether the element is focused.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Checks whether the element is focused. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"isFocused","description":"Checks whether the element is focused.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */"},"entryType":"function","description":"Checks whether the element is focused.","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */","memberType":"method","memberTags":[]},{"name":"dispatchEvent","signatures":[{"name":"dispatchEvent","entryType":"function","description":"Dispatches an event with a particular name.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"dispatchEvent","description":"Dispatches an event with a particular name.","entryType":"function","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */"},"entryType":"function","description":"Dispatches an event with a particular name.","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"A `TestElement` implementation for Protractor.","jsdocTags":[{"name":"deprecated","comment":""},{"name":"breaking-change","comment":"13.0.0"}],"rawComment":"/**\n * A `TestElement` implementation for Protractor.\n * @deprecated\n * @breaking-change 13.0.0\n */","implements":["TestElement"],"source":{"filePath":"/src/cdk/testing/protractor/protractor-element.ts","startLine":79,"endLine":330}}],"symbols":[["ProtractorHarnessEnvironmentOptions","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment","@angular/cdk/testing/protractor"],["ProtractorElement","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironmentOptions","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironmentOptions.queryFn","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.constructor","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.forceStabilize","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.waitForTasksOutsideAngular","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.getDocumentRoot","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.createTestElement","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.createEnvironment","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.getAllRawElements","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.loader","@angular/cdk/testing/protractor"],["ProtractorHarnessEnvironment.getNativeElement","@angular/cdk/testing/protractor"],["ProtractorElement","@angular/cdk/testing/protractor"],["ProtractorElement.constructor","@angular/cdk/testing/protractor"],["ProtractorElement.blur","@angular/cdk/testing/protractor"],["ProtractorElement.clear","@angular/cdk/testing/protractor"],["ProtractorElement.click","@angular/cdk/testing/protractor"],["ProtractorElement.rightClick","@angular/cdk/testing/protractor"],["ProtractorElement.focus","@angular/cdk/testing/protractor"],["ProtractorElement.getCssValue","@angular/cdk/testing/protractor"],["ProtractorElement.hover","@angular/cdk/testing/protractor"],["ProtractorElement.mouseAway","@angular/cdk/testing/protractor"],["ProtractorElement.sendKeys","@angular/cdk/testing/protractor"],["ProtractorElement.text","@angular/cdk/testing/protractor"],["ProtractorElement.setContenteditableValue","@angular/cdk/testing/protractor"],["ProtractorElement.getAttribute","@angular/cdk/testing/protractor"],["ProtractorElement.hasClass","@angular/cdk/testing/protractor"],["ProtractorElement.getDimensions","@angular/cdk/testing/protractor"],["ProtractorElement.getProperty","@angular/cdk/testing/protractor"],["ProtractorElement.setInputValue","@angular/cdk/testing/protractor"],["ProtractorElement.selectOptions","@angular/cdk/testing/protractor"],["ProtractorElement.matchesSelector","@angular/cdk/testing/protractor"],["ProtractorElement.isFocused","@angular/cdk/testing/protractor"],["ProtractorElement.dispatchEvent","@angular/cdk/testing/protractor"]]} \ No newline at end of file +{ + "repo": "angular/components", + "moduleLabel": "@angular/cdk/testing/protractor", + "moduleName": "@angular/cdk/testing/protractor", + "normalizedModuleName": "angular_cdk_testing_protractor", + "entries": [ + { + "name": "ProtractorHarnessEnvironmentOptions", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "queryFn", + "type": "(selector: string, root: ElementFinder) => ElementArrayFinder", + "memberType": "property", + "memberTags": [], + "description": "The query function used to find DOM elements.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Options to configure the environment.", + "jsdocTags": [ + { + "name": "deprecated", + "comment": "" + }, + { + "name": "breaking-change", + "comment": "13.0.0" + } + ], + "rawComment": "/**\n * Options to configure the environment.\n * @deprecated\n * @breaking-change 13.0.0\n */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/protractor/protractor-harness-environment.ts", + "startLine": 18, + "endLine": 21 + } + }, + { + "name": "ProtractorHarnessEnvironment", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "rawRootElement", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "ProtractorHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "ProtractorHarnessEnvironment", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "params": [], + "rawComment": "/** @docs-private */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "", + "entryType": "function", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/** @docs-private */" + }, + "entryType": "function", + "description": "", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/** @docs-private */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDocumentRoot", + "signatures": [ + { + "name": "getDocumentRoot", + "entryType": "function", + "description": "Gets the root element for the document.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the root element for the document. */", + "returnType": "ElementFinder" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "ElementFinder", + "generics": [], + "name": "getDocumentRoot", + "description": "Gets the root element for the document.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */" + }, + "entryType": "function", + "description": "Gets the root element for the document.", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createTestElement", + "signatures": [ + { + "name": "createTestElement", + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "returnType": "TestElement" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "TestElement", + "generics": [], + "name": "createTestElement", + "description": "Creates a `TestElement` from a raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */" + }, + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createEnvironment", + "signatures": [ + { + "name": "createEnvironment", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "returnType": "HarnessEnvironment" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessEnvironment", + "generics": [], + "name": "createEnvironment", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "getAllRawElements", + "signatures": [ + { + "name": "getAllRawElements", + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAllRawElements", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */" + }, + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "loader", + "signatures": [ + { + "name": "loader", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "options", + "description": "", + "type": "ProtractorHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */", + "returnType": "HarnessLoader" + } + ], + "implementation": { + "params": [ + { + "name": "options", + "description": "", + "type": "ProtractorHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessLoader", + "generics": [], + "name": "loader", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */", + "memberType": "method", + "memberTags": [ + "static" + ] + }, + { + "name": "getNativeElement", + "signatures": [ + { + "name": "getNativeElement", + "entryType": "function", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */", + "returnType": "ElementFinder" + } + ], + "implementation": { + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "ElementFinder", + "generics": [], + "name": "getNativeElement", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */" + }, + "entryType": "function", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "jsdocTags": [], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */", + "memberType": "method", + "memberTags": [ + "static" + ] + } + ], + "generics": [], + "description": "A `HarnessEnvironment` implementation for Protractor.", + "jsdocTags": [ + { + "name": "deprecated", + "comment": "As of v13.0.0, this environment no longer works, as it is not\ncompatible with the new [Angular Package Format](https://angular.dev/tools/libraries/angular-package-format)." + }, + { + "name": "breaking-change", + "comment": "13.0.0" + } + ], + "rawComment": "/**\n * A `HarnessEnvironment` implementation for Protractor.\n * @deprecated As of v13.0.0, this environment no longer works, as it is not\n * compatible with the new [Angular Package Format](https://angular.dev/tools/libraries/angular-package-format).\n * @breaking-change 13.0.0\n */", + "extends": "HarnessEnvironment", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/protractor/protractor-harness-environment.ts", + "startLine": 34, + "endLine": 99 + } + }, + { + "name": "ProtractorElement", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "ElementFinder", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "ProtractorElement", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "blur", + "signatures": [ + { + "name": "blur", + "entryType": "function", + "description": "Blur the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Blur the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "blur", + "description": "Blur the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Blur the element. */" + }, + "entryType": "function", + "description": "Blur the element.", + "jsdocTags": [], + "rawComment": "/** Blur the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "clear", + "signatures": [ + { + "name": "clear", + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "clear", + "description": "Clear the element's input (for input and textarea elements only).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */" + }, + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [ + { + "name": "click", + "entryType": "function", + "description": "Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the element's center.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "location", + "description": "", + "type": "\"center\"", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Click the element at the element's center. */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the specified coordinates relative to the top-left of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rightClick", + "signatures": [ + { + "name": "rightClick", + "entryType": "function", + "description": "Right clicks on the element at the specified coordinates relative to the top-left of it.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rightClick", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "focus", + "signatures": [ + { + "name": "focus", + "entryType": "function", + "description": "Focus the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Focus the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "focus", + "description": "Focus the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Focus the element. */" + }, + "entryType": "function", + "description": "Focus the element.", + "jsdocTags": [], + "rawComment": "/** Focus the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getCssValue", + "signatures": [ + { + "name": "getCssValue", + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getCssValue", + "description": "Get the computed value of the given CSS property for the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */" + }, + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hover", + "signatures": [ + { + "name": "hover", + "entryType": "function", + "description": "Hovers the mouse over the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Hovers the mouse over the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hover", + "description": "Hovers the mouse over the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */" + }, + "entryType": "function", + "description": "Hovers the mouse over the element.", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "mouseAway", + "signatures": [ + { + "name": "mouseAway", + "entryType": "function", + "description": "Moves the mouse away from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Moves the mouse away from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "mouseAway", + "description": "Moves the mouse away from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */" + }, + "entryType": "function", + "description": "Moves the mouse away from the element.", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "sendKeys", + "signatures": [ + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */", + "returnType": "Promise" + }, + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys", + "isOptional": false, + "isRestParam": false + }, + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "modifiersAndKeys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "sendKeys", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "text", + "signatures": [ + { + "name": "text", + "entryType": "function", + "description": "Gets the text from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "text", + "description": "Gets the text from the element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */" + }, + "entryType": "function", + "description": "Gets the text from the element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setContenteditableValue", + "signatures": [ + { + "name": "setContenteditableValue", + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setContenteditableValue", + "description": "Sets the value of a `contenteditable` element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */" + }, + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAttribute", + "signatures": [ + { + "name": "getAttribute", + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAttribute", + "description": "Gets the value for the given attribute from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */" + }, + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasClass", + "signatures": [ + { + "name": "hasClass", + "entryType": "function", + "description": "Checks whether the element has the given class.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether the element has the given class. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hasClass", + "description": "Checks whether the element has the given class.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */" + }, + "entryType": "function", + "description": "Checks whether the element has the given class.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDimensions", + "signatures": [ + { + "name": "getDimensions", + "entryType": "function", + "description": "Gets the dimensions of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the dimensions of the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getDimensions", + "description": "Gets the dimensions of the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */" + }, + "entryType": "function", + "description": "Gets the dimensions of the element.", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getProperty", + "signatures": [ + { + "name": "getProperty", + "entryType": "function", + "description": "Gets the value of a property of an element.", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value of a property of an element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "name": "getProperty", + "description": "Gets the value of a property of an element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */" + }, + "entryType": "function", + "description": "Gets the value of a property of an element.", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setInputValue", + "signatures": [ + { + "name": "setInputValue", + "entryType": "function", + "description": "Sets the value of a property of an input.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "value", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Sets the value of a property of an input. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setInputValue", + "description": "Sets the value of a property of an input.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */" + }, + "entryType": "function", + "description": "Sets the value of a property of an input.", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "selectOptions", + "signatures": [ + { + "name": "selectOptions", + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "selectOptions", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */" + }, + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "matchesSelector", + "signatures": [ + { + "name": "matchesSelector", + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether this element matches the given selector. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "matchesSelector", + "description": "Checks whether this element matches the given selector.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */" + }, + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "isFocused", + "signatures": [ + { + "name": "isFocused", + "entryType": "function", + "description": "Checks whether the element is focused.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Checks whether the element is focused. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "isFocused", + "description": "Checks whether the element is focused.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */" + }, + "entryType": "function", + "description": "Checks whether the element is focused.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "dispatchEvent", + "signatures": [ + { + "name": "dispatchEvent", + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "dispatchEvent", + "description": "Dispatches an event with a particular name.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */" + }, + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "A `TestElement` implementation for Protractor.", + "jsdocTags": [ + { + "name": "deprecated", + "comment": "" + }, + { + "name": "breaking-change", + "comment": "13.0.0" + } + ], + "rawComment": "/**\n * A `TestElement` implementation for Protractor.\n * @deprecated\n * @breaking-change 13.0.0\n */", + "implements": [ + "TestElement" + ], + "source": { + "filePath": "/src/cdk/testing/protractor/protractor-element.ts", + "startLine": 79, + "endLine": 330 + } + } + ], + "symbols": [ + [ + "ProtractorHarnessEnvironmentOptions", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironmentOptions", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironmentOptions.queryFn", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.constructor", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.forceStabilize", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.waitForTasksOutsideAngular", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.getDocumentRoot", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.createTestElement", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.createEnvironment", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.getAllRawElements", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.loader", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorHarnessEnvironment.getNativeElement", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.constructor", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.blur", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.clear", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.click", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.rightClick", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.focus", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.getCssValue", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.hover", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.mouseAway", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.sendKeys", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.text", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.setContenteditableValue", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.getAttribute", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.hasClass", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.getDimensions", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.getProperty", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.setInputValue", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.selectOptions", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.matchesSelector", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.isFocused", + "@angular/cdk/testing/protractor" + ], + [ + "ProtractorElement.dispatchEvent", + "@angular/cdk/testing/protractor" + ] + ] +} \ No newline at end of file diff --git a/adev/src/content/cdk/cdk_testing_selenium_webdriver.json b/adev/src/content/cdk/cdk_testing_selenium_webdriver.json index 8a3fcec4bc66..4172de1849f1 100755 --- a/adev/src/content/cdk/cdk_testing_selenium_webdriver.json +++ b/adev/src/content/cdk/cdk_testing_selenium_webdriver.json @@ -1 +1,1801 @@ -{"moduleLabel":"@angular/cdk//selenium-webdriver","moduleName":"@angular/cdk//selenium-webdriver","normalizedModuleName":"angular_cdk__selenium-webdriver","entries":[{"name":"SeleniumWebDriverElement","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"element","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false},{"name":"_stabilize","description":"","type":"() => Promise","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"SeleniumWebDriverElement","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"blur","signatures":[{"name":"blur","entryType":"function","description":"Blur the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Blur the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"blur","description":"Blur the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Blur the element. */"},"entryType":"function","description":"Blur the element.","jsdocTags":[],"rawComment":"/** Blur the element. */","memberType":"method","memberTags":[]},{"name":"clear","signatures":[{"name":"clear","entryType":"function","description":"Clear the element's input (for input and textarea elements only).","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"clear","description":"Clear the element's input (for input and textarea elements only).","entryType":"function","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */"},"entryType":"function","description":"Clear the element's input (for input and textarea elements only).","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","memberType":"method","memberTags":[]},{"name":"click","signatures":[{"name":"click","entryType":"function","description":"Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the element's center.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"location","description":"","type":"\"center\"","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/** Click the element at the element's center. */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the specified coordinates relative to the top-left of the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"rightClick","signatures":[{"name":"rightClick","entryType":"function","description":"Right clicks on the element at the specified coordinates relative to the top-left of it.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"rightClick","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"focus","signatures":[{"name":"focus","entryType":"function","description":"Focus the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Focus the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"focus","description":"Focus the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Focus the element. */"},"entryType":"function","description":"Focus the element.","jsdocTags":[],"rawComment":"/** Focus the element. */","memberType":"method","memberTags":[]},{"name":"getCssValue","signatures":[{"name":"getCssValue","entryType":"function","description":"Get the computed value of the given CSS property for the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Get the computed value of the given CSS property for the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getCssValue","description":"Get the computed value of the given CSS property for the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */"},"entryType":"function","description":"Get the computed value of the given CSS property for the element.","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */","memberType":"method","memberTags":[]},{"name":"hover","signatures":[{"name":"hover","entryType":"function","description":"Hovers the mouse over the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Hovers the mouse over the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"hover","description":"Hovers the mouse over the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */"},"entryType":"function","description":"Hovers the mouse over the element.","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */","memberType":"method","memberTags":[]},{"name":"mouseAway","signatures":[{"name":"mouseAway","entryType":"function","description":"Moves the mouse away from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Moves the mouse away from the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"mouseAway","description":"Moves the mouse away from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */"},"entryType":"function","description":"Moves the mouse away from the element.","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */","memberType":"method","memberTags":[]},{"name":"sendKeys","signatures":[{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */","returnType":"Promise"},{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"ModifierKeys","isOptional":false,"isRestParam":false},{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"modifiersAndKeys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"sendKeys","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"text","signatures":[{"name":"text","entryType":"function","description":"Gets the text from the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"text","description":"Gets the text from the element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */"},"entryType":"function","description":"Gets the text from the element.","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","memberType":"method","memberTags":[]},{"name":"setContenteditableValue","signatures":[{"name":"setContenteditableValue","entryType":"function","description":"Sets the value of a `contenteditable` element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setContenteditableValue","description":"Sets the value of a `contenteditable` element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */"},"entryType":"function","description":"Sets the value of a `contenteditable` element.","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","memberType":"method","memberTags":[]},{"name":"getAttribute","signatures":[{"name":"getAttribute","entryType":"function","description":"Gets the value for the given attribute from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value for the given attribute from the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAttribute","description":"Gets the value for the given attribute from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */"},"entryType":"function","description":"Gets the value for the given attribute from the element.","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */","memberType":"method","memberTags":[]},{"name":"hasClass","signatures":[{"name":"hasClass","entryType":"function","description":"Checks whether the element has the given class.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether the element has the given class. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"hasClass","description":"Checks whether the element has the given class.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */"},"entryType":"function","description":"Checks whether the element has the given class.","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */","memberType":"method","memberTags":[]},{"name":"getDimensions","signatures":[{"name":"getDimensions","entryType":"function","description":"Gets the dimensions of the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the dimensions of the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"getDimensions","description":"Gets the dimensions of the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */"},"entryType":"function","description":"Gets the dimensions of the element.","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */","memberType":"method","memberTags":[]},{"name":"getProperty","signatures":[{"name":"getProperty","entryType":"function","description":"Gets the value of a property of an element.","generics":[{"name":"T","default":"any"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value of a property of an element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","default":"any"}],"name":"getProperty","description":"Gets the value of a property of an element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */"},"entryType":"function","description":"Gets the value of a property of an element.","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */","memberType":"method","memberTags":[]},{"name":"setInputValue","signatures":[{"name":"setInputValue","entryType":"function","description":"Sets the value of a property of an input.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"newValue","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Sets the value of a property of an input. */","returnType":"Promise"}],"implementation":{"params":[{"name":"newValue","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setInputValue","description":"Sets the value of a property of an input.","entryType":"function","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */"},"entryType":"function","description":"Sets the value of a property of an input.","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */","memberType":"method","memberTags":[]},{"name":"selectOptions","signatures":[{"name":"selectOptions","entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"selectOptions","description":"Selects the options at the specified indexes inside of a native `select` element.","entryType":"function","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */"},"entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","memberType":"method","memberTags":[]},{"name":"matchesSelector","signatures":[{"name":"matchesSelector","entryType":"function","description":"Checks whether this element matches the given selector.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether this element matches the given selector. */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"matchesSelector","description":"Checks whether this element matches the given selector.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */"},"entryType":"function","description":"Checks whether this element matches the given selector.","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */","memberType":"method","memberTags":[]},{"name":"isFocused","signatures":[{"name":"isFocused","entryType":"function","description":"Checks whether the element is focused.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Checks whether the element is focused. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"isFocused","description":"Checks whether the element is focused.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */"},"entryType":"function","description":"Checks whether the element is focused.","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */","memberType":"method","memberTags":[]},{"name":"dispatchEvent","signatures":[{"name":"dispatchEvent","entryType":"function","description":"Dispatches an event with a particular name.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"dispatchEvent","description":"Dispatches an event with a particular name.","entryType":"function","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */"},"entryType":"function","description":"Dispatches an event with a particular name.","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"A `TestElement` implementation for WebDriver.","jsdocTags":[],"rawComment":"/** A `TestElement` implementation for WebDriver. */","implements":["TestElement"],"source":{"filePath":"/src/cdk/testing/selenium-webdriver/selenium-web-driver-element.ts","startLine":17,"endLine":318}},{"name":"WebDriverHarnessEnvironmentOptions","isAbstract":false,"entryType":"interface","members":[{"name":"queryFn","type":"(selector: string, root: () => webdriver.WebElement) => Promise","memberType":"property","memberTags":[],"description":"The query function used to find DOM elements.","jsdocTags":[]}],"generics":[],"description":"Options to configure the environment.","jsdocTags":[],"rawComment":"/** Options to configure the environment. */","implements":[],"source":{"filePath":"/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts","startLine":35,"endLine":38}},{"name":"waitForAngularReady","signatures":[{"name":"waitForAngularReady","entryType":"function","description":"Waits for angular to be ready after the page load.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"wd","description":"","type":"webdriver.WebDriver","isOptional":false,"isRestParam":false}],"rawComment":"/** Waits for angular to be ready after the page load. */","returnType":"Promise"}],"implementation":{"params":[{"name":"wd","description":"","type":"webdriver.WebDriver","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForAngularReady","description":"Waits for angular to be ready after the page load.","entryType":"function","jsdocTags":[],"rawComment":"/** Waits for angular to be ready after the page load. */"},"entryType":"function","description":"Waits for angular to be ready after the page load.","jsdocTags":[],"rawComment":"/** Waits for angular to be ready after the page load. */","source":{"filePath":"/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts","startLine":65,"endLine":68}},{"name":"SeleniumWebDriverHarnessEnvironment","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"rawRootElement","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"WebDriverHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"SeleniumWebDriverHarnessEnvironment","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["protected"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":[]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"","generics":[],"isNewType":false,"jsdocTags":[{"name":"docs-private","comment":""}],"params":[],"rawComment":"/** @docs-private */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"","entryType":"function","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/** @docs-private */"},"entryType":"function","description":"","jsdocTags":[{"name":"docs-private","comment":""}],"rawComment":"/** @docs-private */","memberType":"method","memberTags":[]},{"name":"getDocumentRoot","signatures":[{"name":"getDocumentRoot","entryType":"function","description":"Gets the root element for the document.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the root element for the document. */","returnType":"() => webdriver.WebElement"}],"implementation":{"params":[],"isNewType":false,"returnType":"() => webdriver.WebElement","generics":[],"name":"getDocumentRoot","description":"Gets the root element for the document.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */"},"entryType":"function","description":"Gets the root element for the document.","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */","memberType":"method","memberTags":["protected"]},{"name":"createTestElement","signatures":[{"name":"createTestElement","entryType":"function","description":"Creates a `TestElement` from a raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `TestElement` from a raw element. */","returnType":"TestElement"}],"implementation":{"params":[{"name":"element","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"TestElement","generics":[],"name":"createTestElement","description":"Creates a `TestElement` from a raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */"},"entryType":"function","description":"Creates a `TestElement` from a raw element.","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */","memberType":"method","memberTags":["protected"]},{"name":"createEnvironment","signatures":[{"name":"createEnvironment","entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","returnType":"HarnessEnvironment<() => webdriver.WebElement>"}],"implementation":{"params":[{"name":"element","description":"","type":"() => webdriver.WebElement","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessEnvironment<() => webdriver.WebElement>","generics":[],"name":"createEnvironment","description":"Creates a `HarnessLoader` rooted at the given raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","memberType":"method","memberTags":["protected"]},{"name":"getAllRawElements","signatures":[{"name":"getAllRawElements","entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","returnType":"Promise<(() => webdriver.WebElement)[]>"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise<(() => webdriver.WebElement)[]>","generics":[],"name":"getAllRawElements","description":"Gets a list of all elements matching the given selector under this environment's root element.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */"},"entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","memberType":"method","memberTags":["protected"]},{"name":"getNativeElement","signatures":[{"name":"getNativeElement","entryType":"function","description":"Gets the ElementFinder corresponding to the given TestElement.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */","returnType":"webdriver.WebElement"}],"implementation":{"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"webdriver.WebElement","generics":[],"name":"getNativeElement","description":"Gets the ElementFinder corresponding to the given TestElement.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */"},"entryType":"function","description":"Gets the ElementFinder corresponding to the given TestElement.","jsdocTags":[],"rawComment":"/** Gets the ElementFinder corresponding to the given TestElement. */","memberType":"method","memberTags":["static"]},{"name":"loader","signatures":[{"name":"loader","entryType":"function","description":"Creates a `HarnessLoader` rooted at the document root.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"driver","description":"","type":"webdriver.WebDriver","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"WebDriverHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */","returnType":"HarnessLoader"}],"implementation":{"params":[{"name":"driver","description":"","type":"webdriver.WebDriver","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"WebDriverHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"HarnessLoader","generics":[],"name":"loader","description":"Creates a `HarnessLoader` rooted at the document root.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the document root.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the document root. */","memberType":"method","memberTags":["static"]}],"generics":[],"description":"A `HarnessEnvironment` implementation for WebDriver.","jsdocTags":[],"rawComment":"/** A `HarnessEnvironment` implementation for WebDriver. */","extends":"HarnessEnvironment<\n () => webdriver.WebElement\n>","implements":[],"source":{"filePath":"/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts","startLine":71,"endLine":150}}],"symbols":[["SeleniumWebDriverElement","@angular/cdk//selenium-webdriver"],["WebDriverHarnessEnvironmentOptions","@angular/cdk//selenium-webdriver"],["waitForAngularReady","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.constructor","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.blur","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.clear","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.click","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.rightClick","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.focus","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.getCssValue","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.hover","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.mouseAway","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.sendKeys","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.text","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.setContenteditableValue","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.getAttribute","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.hasClass","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.getDimensions","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.getProperty","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.setInputValue","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.selectOptions","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.matchesSelector","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.isFocused","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverElement.dispatchEvent","@angular/cdk//selenium-webdriver"],["WebDriverHarnessEnvironmentOptions","@angular/cdk//selenium-webdriver"],["WebDriverHarnessEnvironmentOptions.queryFn","@angular/cdk//selenium-webdriver"],["waitForAngularReady","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.constructor","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.forceStabilize","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.waitForTasksOutsideAngular","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.getDocumentRoot","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.createTestElement","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.createEnvironment","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.getAllRawElements","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.getNativeElement","@angular/cdk//selenium-webdriver"],["SeleniumWebDriverHarnessEnvironment.loader","@angular/cdk//selenium-webdriver"]]} \ No newline at end of file +{ + "repo": "angular/components", + "moduleLabel": "@angular/cdk/testing/selenium-webdriver", + "moduleName": "@angular/cdk/testing/selenium-webdriver", + "normalizedModuleName": "angular_cdk_testing_selenium-webdriver", + "entries": [ + { + "name": "SeleniumWebDriverElement", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + }, + { + "name": "_stabilize", + "description": "", + "type": "() => Promise", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "SeleniumWebDriverElement", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "blur", + "signatures": [ + { + "name": "blur", + "entryType": "function", + "description": "Blur the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Blur the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "blur", + "description": "Blur the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Blur the element. */" + }, + "entryType": "function", + "description": "Blur the element.", + "jsdocTags": [], + "rawComment": "/** Blur the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "clear", + "signatures": [ + { + "name": "clear", + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "clear", + "description": "Clear the element's input (for input and textarea elements only).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */" + }, + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [ + { + "name": "click", + "entryType": "function", + "description": "Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the element's center.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "location", + "description": "", + "type": "\"center\"", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Click the element at the element's center. */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the specified coordinates relative to the top-left of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rightClick", + "signatures": [ + { + "name": "rightClick", + "entryType": "function", + "description": "Right clicks on the element at the specified coordinates relative to the top-left of it.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rightClick", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "focus", + "signatures": [ + { + "name": "focus", + "entryType": "function", + "description": "Focus the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Focus the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "focus", + "description": "Focus the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Focus the element. */" + }, + "entryType": "function", + "description": "Focus the element.", + "jsdocTags": [], + "rawComment": "/** Focus the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getCssValue", + "signatures": [ + { + "name": "getCssValue", + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getCssValue", + "description": "Get the computed value of the given CSS property for the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */" + }, + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hover", + "signatures": [ + { + "name": "hover", + "entryType": "function", + "description": "Hovers the mouse over the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Hovers the mouse over the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hover", + "description": "Hovers the mouse over the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */" + }, + "entryType": "function", + "description": "Hovers the mouse over the element.", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "mouseAway", + "signatures": [ + { + "name": "mouseAway", + "entryType": "function", + "description": "Moves the mouse away from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Moves the mouse away from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "mouseAway", + "description": "Moves the mouse away from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */" + }, + "entryType": "function", + "description": "Moves the mouse away from the element.", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "sendKeys", + "signatures": [ + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */", + "returnType": "Promise" + }, + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys", + "isOptional": false, + "isRestParam": false + }, + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "modifiersAndKeys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "sendKeys", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "text", + "signatures": [ + { + "name": "text", + "entryType": "function", + "description": "Gets the text from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "text", + "description": "Gets the text from the element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */" + }, + "entryType": "function", + "description": "Gets the text from the element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setContenteditableValue", + "signatures": [ + { + "name": "setContenteditableValue", + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setContenteditableValue", + "description": "Sets the value of a `contenteditable` element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */" + }, + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAttribute", + "signatures": [ + { + "name": "getAttribute", + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAttribute", + "description": "Gets the value for the given attribute from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */" + }, + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasClass", + "signatures": [ + { + "name": "hasClass", + "entryType": "function", + "description": "Checks whether the element has the given class.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether the element has the given class. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hasClass", + "description": "Checks whether the element has the given class.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */" + }, + "entryType": "function", + "description": "Checks whether the element has the given class.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDimensions", + "signatures": [ + { + "name": "getDimensions", + "entryType": "function", + "description": "Gets the dimensions of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the dimensions of the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getDimensions", + "description": "Gets the dimensions of the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */" + }, + "entryType": "function", + "description": "Gets the dimensions of the element.", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getProperty", + "signatures": [ + { + "name": "getProperty", + "entryType": "function", + "description": "Gets the value of a property of an element.", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value of a property of an element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "name": "getProperty", + "description": "Gets the value of a property of an element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */" + }, + "entryType": "function", + "description": "Gets the value of a property of an element.", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setInputValue", + "signatures": [ + { + "name": "setInputValue", + "entryType": "function", + "description": "Sets the value of a property of an input.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "newValue", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Sets the value of a property of an input. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "newValue", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setInputValue", + "description": "Sets the value of a property of an input.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */" + }, + "entryType": "function", + "description": "Sets the value of a property of an input.", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "selectOptions", + "signatures": [ + { + "name": "selectOptions", + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "selectOptions", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */" + }, + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "matchesSelector", + "signatures": [ + { + "name": "matchesSelector", + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether this element matches the given selector. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "matchesSelector", + "description": "Checks whether this element matches the given selector.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */" + }, + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "isFocused", + "signatures": [ + { + "name": "isFocused", + "entryType": "function", + "description": "Checks whether the element is focused.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Checks whether the element is focused. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "isFocused", + "description": "Checks whether the element is focused.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */" + }, + "entryType": "function", + "description": "Checks whether the element is focused.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "dispatchEvent", + "signatures": [ + { + "name": "dispatchEvent", + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "dispatchEvent", + "description": "Dispatches an event with a particular name.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */" + }, + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "A `TestElement` implementation for WebDriver.", + "jsdocTags": [], + "rawComment": "/** A `TestElement` implementation for WebDriver. */", + "implements": [ + "TestElement" + ], + "source": { + "filePath": "/src/cdk/testing/selenium-webdriver/selenium-web-driver-element.ts", + "startLine": 17, + "endLine": 318 + } + }, + { + "name": "WebDriverHarnessEnvironmentOptions", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "queryFn", + "type": "(selector: string, root: () => webdriver.WebElement) => Promise", + "memberType": "property", + "memberTags": [], + "description": "The query function used to find DOM elements.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Options to configure the environment.", + "jsdocTags": [], + "rawComment": "/** Options to configure the environment. */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts", + "startLine": 35, + "endLine": 38 + } + }, + { + "name": "waitForAngularReady", + "signatures": [ + { + "name": "waitForAngularReady", + "entryType": "function", + "description": "Waits for angular to be ready after the page load.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "wd", + "description": "", + "type": "webdriver.WebDriver", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Waits for angular to be ready after the page load. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "wd", + "description": "", + "type": "webdriver.WebDriver", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForAngularReady", + "description": "Waits for angular to be ready after the page load.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Waits for angular to be ready after the page load. */" + }, + "entryType": "function", + "description": "Waits for angular to be ready after the page load.", + "jsdocTags": [], + "rawComment": "/** Waits for angular to be ready after the page load. */", + "source": { + "filePath": "/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts", + "startLine": 65, + "endLine": 68 + } + }, + { + "name": "SeleniumWebDriverHarnessEnvironment", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "rawRootElement", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "WebDriverHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "SeleniumWebDriverHarnessEnvironment", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "params": [], + "rawComment": "/** @docs-private */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "", + "entryType": "function", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/** @docs-private */" + }, + "entryType": "function", + "description": "", + "jsdocTags": [ + { + "name": "docs-private", + "comment": "" + } + ], + "rawComment": "/** @docs-private */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDocumentRoot", + "signatures": [ + { + "name": "getDocumentRoot", + "entryType": "function", + "description": "Gets the root element for the document.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the root element for the document. */", + "returnType": "() => webdriver.WebElement" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "() => webdriver.WebElement", + "generics": [], + "name": "getDocumentRoot", + "description": "Gets the root element for the document.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */" + }, + "entryType": "function", + "description": "Gets the root element for the document.", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createTestElement", + "signatures": [ + { + "name": "createTestElement", + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "returnType": "TestElement" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "TestElement", + "generics": [], + "name": "createTestElement", + "description": "Creates a `TestElement` from a raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */" + }, + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createEnvironment", + "signatures": [ + { + "name": "createEnvironment", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "returnType": "HarnessEnvironment<() => webdriver.WebElement>" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "() => webdriver.WebElement", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessEnvironment<() => webdriver.WebElement>", + "generics": [], + "name": "createEnvironment", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "getAllRawElements", + "signatures": [ + { + "name": "getAllRawElements", + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "returnType": "Promise<(() => webdriver.WebElement)[]>" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise<(() => webdriver.WebElement)[]>", + "generics": [], + "name": "getAllRawElements", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */" + }, + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "getNativeElement", + "signatures": [ + { + "name": "getNativeElement", + "entryType": "function", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */", + "returnType": "webdriver.WebElement" + } + ], + "implementation": { + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "webdriver.WebElement", + "generics": [], + "name": "getNativeElement", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */" + }, + "entryType": "function", + "description": "Gets the ElementFinder corresponding to the given TestElement.", + "jsdocTags": [], + "rawComment": "/** Gets the ElementFinder corresponding to the given TestElement. */", + "memberType": "method", + "memberTags": [ + "static" + ] + }, + { + "name": "loader", + "signatures": [ + { + "name": "loader", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "driver", + "description": "", + "type": "webdriver.WebDriver", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "WebDriverHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */", + "returnType": "HarnessLoader" + } + ], + "implementation": { + "params": [ + { + "name": "driver", + "description": "", + "type": "webdriver.WebDriver", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "WebDriverHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessLoader", + "generics": [], + "name": "loader", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the document root.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the document root. */", + "memberType": "method", + "memberTags": [ + "static" + ] + } + ], + "generics": [], + "description": "A `HarnessEnvironment` implementation for WebDriver.", + "jsdocTags": [], + "rawComment": "/** A `HarnessEnvironment` implementation for WebDriver. */", + "extends": "HarnessEnvironment<\n () => webdriver.WebElement\n>", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts", + "startLine": 71, + "endLine": 150 + } + } + ], + "symbols": [ + [ + "SeleniumWebDriverElement", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "WebDriverHarnessEnvironmentOptions", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "waitForAngularReady", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.constructor", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.blur", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.clear", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.click", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.rightClick", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.focus", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.getCssValue", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.hover", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.mouseAway", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.sendKeys", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.text", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.setContenteditableValue", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.getAttribute", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.hasClass", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.getDimensions", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.getProperty", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.setInputValue", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.selectOptions", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.matchesSelector", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.isFocused", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverElement.dispatchEvent", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "WebDriverHarnessEnvironmentOptions", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "WebDriverHarnessEnvironmentOptions.queryFn", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "waitForAngularReady", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.constructor", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.forceStabilize", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.waitForTasksOutsideAngular", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.getDocumentRoot", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.createTestElement", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.createEnvironment", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.getAllRawElements", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.getNativeElement", + "@angular/cdk/testing/selenium-webdriver" + ], + [ + "SeleniumWebDriverHarnessEnvironment.loader", + "@angular/cdk/testing/selenium-webdriver" + ] + ] +} \ No newline at end of file diff --git a/adev/src/content/cdk/cdk_testing_testbed.json b/adev/src/content/cdk/cdk_testing_testbed.json index bd0a29113ad7..7bc9402dd5d8 100755 --- a/adev/src/content/cdk/cdk_testing_testbed.json +++ b/adev/src/content/cdk/cdk_testing_testbed.json @@ -1 +1,1903 @@ -{"moduleLabel":"@angular/cdk/testing/testbed","moduleName":"@angular/cdk/testing/testbed","normalizedModuleName":"angular_cdk_testing_testbed","entries":[{"name":"TestbedHarnessEnvironmentOptions","isAbstract":false,"entryType":"interface","members":[{"name":"queryFn","type":"(selector: string, root: Element) => Iterable | ArrayLike","memberType":"property","memberTags":[],"description":"The query function used to find DOM elements.","jsdocTags":[]}],"generics":[],"description":"Options to configure the environment.","jsdocTags":[],"rawComment":"/** Options to configure the environment. */","implements":[],"source":{"filePath":"/src/cdk/testing/testbed/testbed-harness-environment.ts","startLine":25,"endLine":28}},{"name":"TestbedHarnessEnvironment","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"rawRootElement","description":"","type":"Element","isOptional":false,"isRestParam":false},{"name":"_fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"TestbedHarnessEnvironment","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":["protected"]},{"name":"forceStabilize","signatures":[{"name":"forceStabilize","entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"forceStabilize","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */"},"entryType":"function","description":"Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.","jsdocTags":[],"rawComment":"/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */","memberType":"method","memberTags":[]},{"name":"waitForTasksOutsideAngular","signatures":[{"name":"waitForTasksOutsideAngular","entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"waitForTasksOutsideAngular","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */"},"entryType":"function","description":"Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.","jsdocTags":[],"rawComment":"/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */","memberType":"method","memberTags":[]},{"name":"getDocumentRoot","signatures":[{"name":"getDocumentRoot","entryType":"function","description":"Gets the root element for the document.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the root element for the document. */","returnType":"Element"}],"implementation":{"params":[],"isNewType":false,"returnType":"Element","generics":[],"name":"getDocumentRoot","description":"Gets the root element for the document.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */"},"entryType":"function","description":"Gets the root element for the document.","jsdocTags":[],"rawComment":"/** Gets the root element for the document. */","memberType":"method","memberTags":["protected"]},{"name":"createTestElement","signatures":[{"name":"createTestElement","entryType":"function","description":"Creates a `TestElement` from a raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"Element","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `TestElement` from a raw element. */","returnType":"TestElement"}],"implementation":{"params":[{"name":"element","description":"","type":"Element","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"TestElement","generics":[],"name":"createTestElement","description":"Creates a `TestElement` from a raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */"},"entryType":"function","description":"Creates a `TestElement` from a raw element.","jsdocTags":[],"rawComment":"/** Creates a `TestElement` from a raw element. */","memberType":"method","memberTags":["protected"]},{"name":"createEnvironment","signatures":[{"name":"createEnvironment","entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"element","description":"","type":"Element","isOptional":false,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","returnType":"HarnessEnvironment"}],"implementation":{"params":[{"name":"element","description":"","type":"Element","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"HarnessEnvironment","generics":[],"name":"createEnvironment","description":"Creates a `HarnessLoader` rooted at the given raw element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the given raw element.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given raw element. */","memberType":"method","memberTags":["protected"]},{"name":"getAllRawElements","signatures":[{"name":"getAllRawElements","entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAllRawElements","description":"Gets a list of all elements matching the given selector under this environment's root element.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */"},"entryType":"function","description":"Gets a list of all elements matching the given selector under this environment's root element.","jsdocTags":[],"rawComment":"/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */","memberType":"method","memberTags":["protected"]},{"name":"loader","signatures":[{"name":"loader","entryType":"function","description":"Creates a `HarnessLoader` rooted at the given fixture's root element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/** Creates a `HarnessLoader` rooted at the given fixture's root element. */","returnType":"HarnessLoader"}],"implementation":{"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"HarnessLoader","generics":[],"name":"loader","description":"Creates a `HarnessLoader` rooted at the given fixture's root element.","entryType":"function","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given fixture's root element. */"},"entryType":"function","description":"Creates a `HarnessLoader` rooted at the given fixture's root element.","jsdocTags":[],"rawComment":"/** Creates a `HarnessLoader` rooted at the given fixture's root element. */","memberType":"method","memberTags":["static"]},{"name":"documentRootLoader","signatures":[{"name":"documentRootLoader","entryType":"function","description":"Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */","returnType":"HarnessLoader"}],"implementation":{"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"HarnessLoader","generics":[],"name":"documentRootLoader","description":"Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */"},"entryType":"function","description":"Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).","jsdocTags":[],"rawComment":"/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */","memberType":"method","memberTags":["static"]},{"name":"getNativeElement","signatures":[{"name":"getNativeElement","entryType":"function","description":"Gets the native DOM element corresponding to the given TestElement.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the native DOM element corresponding to the given TestElement. */","returnType":"Element"}],"implementation":{"params":[{"name":"el","description":"","type":"TestElement","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Element","generics":[],"name":"getNativeElement","description":"Gets the native DOM element corresponding to the given TestElement.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the native DOM element corresponding to the given TestElement. */"},"entryType":"function","description":"Gets the native DOM element corresponding to the given TestElement.","jsdocTags":[],"rawComment":"/** Gets the native DOM element corresponding to the given TestElement. */","memberType":"method","memberTags":["static"]},{"name":"harnessForFixture","signatures":[{"name":"harnessForFixture","entryType":"function","description":"Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.","generics":[{"name":"T","constraint":"ComponentHarness"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"harnessType","description":"","type":"ComponentHarnessConstructor","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"fixture","description":"","type":"ComponentFixture","isOptional":false,"isRestParam":false},{"name":"harnessType","description":"","type":"ComponentHarnessConstructor","isOptional":false,"isRestParam":false},{"name":"options","description":"","type":"TestbedHarnessEnvironmentOptions | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","constraint":"ComponentHarness"}],"name":"harnessForFixture","description":"Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.","entryType":"function","jsdocTags":[],"rawComment":"/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */"},"entryType":"function","description":"Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.","jsdocTags":[],"rawComment":"/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */","memberType":"method","memberTags":["static"]}],"generics":[],"description":"A `HarnessEnvironment` implementation for Angular's Testbed.","jsdocTags":[],"rawComment":"/** A `HarnessEnvironment` implementation for Angular's Testbed. */","extends":"HarnessEnvironment","implements":[],"source":{"filePath":"/src/cdk/testing/testbed/testbed-harness-environment.ts","startLine":89,"endLine":222}},{"name":"UnitTestElement","isAbstract":false,"entryType":"undecorated_class","members":[{"name":"constructor","signatures":[],"implementation":{"params":[{"name":"element","description":"","type":"Element","isOptional":false,"isRestParam":false},{"name":"_stabilize","description":"","type":"() => Promise","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"UnitTestElement","generics":[],"name":"constructor","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"blur","signatures":[{"name":"blur","entryType":"function","description":"Blur the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Blur the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"blur","description":"Blur the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Blur the element. */"},"entryType":"function","description":"Blur the element.","jsdocTags":[],"rawComment":"/** Blur the element. */","memberType":"method","memberTags":[]},{"name":"clear","signatures":[{"name":"clear","entryType":"function","description":"Clear the element's input (for input and textarea elements only).","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"clear","description":"Clear the element's input (for input and textarea elements only).","entryType":"function","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */"},"entryType":"function","description":"Clear the element's input (for input and textarea elements only).","jsdocTags":[],"rawComment":"/** Clear the element's input (for input and textarea elements only). */","memberType":"method","memberTags":[]},{"name":"click","signatures":[{"name":"click","entryType":"function","description":"Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the element's center.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"location","description":"","type":"\"center\"","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/** Click the element at the element's center. */","returnType":"Promise"},{"name":"click","entryType":"function","description":"Click the element at the specified coordinates relative to the top-left of the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"click","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"rightClick","signatures":[{"name":"rightClick","entryType":"function","description":"Right clicks on the element at the specified coordinates relative to the top-left of it.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Coordinate within the element, along the X-axis at which to click."},{"name":"param","comment":"Coordinate within the element, along the Y-axis at which to click."},{"name":"param","comment":"Modifier keys held while clicking"}],"params":[{"name":"relativeX","description":"Coordinate within the element, along the X-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"relativeY","description":"Coordinate within the element, along the Y-axis at which to click.","type":"number","isOptional":false,"isRestParam":false},{"name":"modifiers","description":"Modifier keys held while clicking","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"args","description":"","type":"[any?] | [\"center\", any?] | [number, number, any?]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"rightClick","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"focus","signatures":[{"name":"focus","entryType":"function","description":"Focus the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Focus the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"focus","description":"Focus the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Focus the element. */"},"entryType":"function","description":"Focus the element.","jsdocTags":[],"rawComment":"/** Focus the element. */","memberType":"method","memberTags":[]},{"name":"getCssValue","signatures":[{"name":"getCssValue","entryType":"function","description":"Get the computed value of the given CSS property for the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Get the computed value of the given CSS property for the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"property","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getCssValue","description":"Get the computed value of the given CSS property for the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */"},"entryType":"function","description":"Get the computed value of the given CSS property for the element.","jsdocTags":[],"rawComment":"/** Get the computed value of the given CSS property for the element. */","memberType":"method","memberTags":[]},{"name":"hover","signatures":[{"name":"hover","entryType":"function","description":"Hovers the mouse over the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Hovers the mouse over the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"hover","description":"Hovers the mouse over the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */"},"entryType":"function","description":"Hovers the mouse over the element.","jsdocTags":[],"rawComment":"/** Hovers the mouse over the element. */","memberType":"method","memberTags":[]},{"name":"mouseAway","signatures":[{"name":"mouseAway","entryType":"function","description":"Moves the mouse away from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Moves the mouse away from the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"mouseAway","description":"Moves the mouse away from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */"},"entryType":"function","description":"Moves the mouse away from the element.","jsdocTags":[],"rawComment":"/** Moves the mouse away from the element. */","memberType":"method","memberTags":[]},{"name":"sendKeys","signatures":[{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that this cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that this cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n */","returnType":"Promise"},{"name":"sendKeys","entryType":"function","description":"Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"modifiers","description":"","type":"ModifierKeys","isOptional":false,"isRestParam":false},{"name":"keys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"rawComment":"/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"modifiersAndKeys","description":"","type":"any[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"sendKeys","description":"","entryType":"function","jsdocTags":[],"rawComment":""},"entryType":"function","description":"","jsdocTags":[],"rawComment":"","memberType":"method","memberTags":[]},{"name":"text","signatures":[{"name":"text","entryType":"function","description":"Gets the text from the element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"options","description":"Options that affect what text is included.","type":"any","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"text","description":"Gets the text from the element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */"},"entryType":"function","description":"Gets the text from the element.","jsdocTags":[{"name":"param","comment":"Options that affect what text is included."}],"rawComment":"/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */","memberType":"method","memberTags":[]},{"name":"setContenteditableValue","signatures":[{"name":"setContenteditableValue","entryType":"function","description":"Sets the value of a `contenteditable` element.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"Value to be set on the element.","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setContenteditableValue","description":"Sets the value of a `contenteditable` element.","entryType":"function","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */"},"entryType":"function","description":"Sets the value of a `contenteditable` element.","jsdocTags":[{"name":"param","comment":"Value to be set on the element."}],"rawComment":"/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */","memberType":"method","memberTags":[]},{"name":"getAttribute","signatures":[{"name":"getAttribute","entryType":"function","description":"Gets the value for the given attribute from the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value for the given attribute from the element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"getAttribute","description":"Gets the value for the given attribute from the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */"},"entryType":"function","description":"Gets the value for the given attribute from the element.","jsdocTags":[],"rawComment":"/** Gets the value for the given attribute from the element. */","memberType":"method","memberTags":[]},{"name":"hasClass","signatures":[{"name":"hasClass","entryType":"function","description":"Checks whether the element has the given class.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether the element has the given class. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"hasClass","description":"Checks whether the element has the given class.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */"},"entryType":"function","description":"Checks whether the element has the given class.","jsdocTags":[],"rawComment":"/** Checks whether the element has the given class. */","memberType":"method","memberTags":[]},{"name":"getDimensions","signatures":[{"name":"getDimensions","entryType":"function","description":"Gets the dimensions of the element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Gets the dimensions of the element. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"getDimensions","description":"Gets the dimensions of the element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */"},"entryType":"function","description":"Gets the dimensions of the element.","jsdocTags":[],"rawComment":"/** Gets the dimensions of the element. */","memberType":"method","memberTags":[]},{"name":"getProperty","signatures":[{"name":"getProperty","entryType":"function","description":"Gets the value of a property of an element.","generics":[{"name":"T","default":"any"}],"isNewType":false,"jsdocTags":[],"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Gets the value of a property of an element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[{"name":"T","default":"any"}],"name":"getProperty","description":"Gets the value of a property of an element.","entryType":"function","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */"},"entryType":"function","description":"Gets the value of a property of an element.","jsdocTags":[],"rawComment":"/** Gets the value of a property of an element. */","memberType":"method","memberTags":[]},{"name":"setInputValue","signatures":[{"name":"setInputValue","entryType":"function","description":"Sets the value of a property of an input.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"value","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Sets the value of a property of an input. */","returnType":"Promise"}],"implementation":{"params":[{"name":"value","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"setInputValue","description":"Sets the value of a property of an input.","entryType":"function","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */"},"entryType":"function","description":"Sets the value of a property of an input.","jsdocTags":[],"rawComment":"/** Sets the value of a property of an input. */","memberType":"method","memberTags":[]},{"name":"selectOptions","signatures":[{"name":"selectOptions","entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","returnType":"Promise"}],"implementation":{"params":[{"name":"optionIndexes","description":"","type":"number[]","isOptional":false,"isRestParam":true}],"isNewType":false,"returnType":"Promise","generics":[],"name":"selectOptions","description":"Selects the options at the specified indexes inside of a native `select` element.","entryType":"function","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */"},"entryType":"function","description":"Selects the options at the specified indexes inside of a native `select` element.","jsdocTags":[],"rawComment":"/** Selects the options at the specified indexes inside of a native `select` element. */","memberType":"method","memberTags":[]},{"name":"matchesSelector","signatures":[{"name":"matchesSelector","entryType":"function","description":"Checks whether this element matches the given selector.","generics":[],"isNewType":false,"jsdocTags":[],"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"rawComment":"/** Checks whether this element matches the given selector. */","returnType":"Promise"}],"implementation":{"params":[{"name":"selector","description":"","type":"string","isOptional":false,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"matchesSelector","description":"Checks whether this element matches the given selector.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */"},"entryType":"function","description":"Checks whether this element matches the given selector.","jsdocTags":[],"rawComment":"/** Checks whether this element matches the given selector. */","memberType":"method","memberTags":[]},{"name":"isFocused","signatures":[{"name":"isFocused","entryType":"function","description":"Checks whether the element is focused.","generics":[],"isNewType":false,"jsdocTags":[],"params":[],"rawComment":"/** Checks whether the element is focused. */","returnType":"Promise"}],"implementation":{"params":[],"isNewType":false,"returnType":"Promise","generics":[],"name":"isFocused","description":"Checks whether the element is focused.","entryType":"function","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */"},"entryType":"function","description":"Checks whether the element is focused.","jsdocTags":[],"rawComment":"/** Checks whether the element is focused. */","memberType":"method","memberTags":[]},{"name":"dispatchEvent","signatures":[{"name":"dispatchEvent","entryType":"function","description":"Dispatches an event with a particular name.","generics":[],"isNewType":false,"jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","returnType":"Promise"}],"implementation":{"params":[{"name":"name","description":"Name of the event to be dispatched.","type":"string","isOptional":false,"isRestParam":false},{"name":"data","description":"","type":"Record | undefined","isOptional":true,"isRestParam":false}],"isNewType":false,"returnType":"Promise","generics":[],"name":"dispatchEvent","description":"Dispatches an event with a particular name.","entryType":"function","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */"},"entryType":"function","description":"Dispatches an event with a particular name.","jsdocTags":[{"name":"param","comment":"Name of the event to be dispatched."}],"rawComment":"/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */","memberType":"method","memberTags":[]}],"generics":[],"description":"A `TestElement` implementation for unit tests.","jsdocTags":[],"rawComment":"/** A `TestElement` implementation for unit tests. */","implements":["TestElement"],"source":{"filePath":"/src/cdk/testing/testbed/unit-test-element.ts","startLine":68,"endLine":405}}],"symbols":[["ComponentFixture","@angular/core/testing"],["flush","@angular/core/testing"],["TestbedHarnessEnvironmentOptions","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment","@angular/cdk/testing/testbed"],["UnitTestElement","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironmentOptions","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironmentOptions.queryFn","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.constructor","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.forceStabilize","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.waitForTasksOutsideAngular","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.getDocumentRoot","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.createTestElement","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.createEnvironment","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.getAllRawElements","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.loader","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.documentRootLoader","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.getNativeElement","@angular/cdk/testing/testbed"],["TestbedHarnessEnvironment.harnessForFixture","@angular/cdk/testing/testbed"],["UnitTestElement","@angular/cdk/testing/testbed"],["UnitTestElement.constructor","@angular/cdk/testing/testbed"],["UnitTestElement.blur","@angular/cdk/testing/testbed"],["UnitTestElement.clear","@angular/cdk/testing/testbed"],["UnitTestElement.click","@angular/cdk/testing/testbed"],["UnitTestElement.rightClick","@angular/cdk/testing/testbed"],["UnitTestElement.focus","@angular/cdk/testing/testbed"],["UnitTestElement.getCssValue","@angular/cdk/testing/testbed"],["UnitTestElement.hover","@angular/cdk/testing/testbed"],["UnitTestElement.mouseAway","@angular/cdk/testing/testbed"],["UnitTestElement.sendKeys","@angular/cdk/testing/testbed"],["UnitTestElement.text","@angular/cdk/testing/testbed"],["UnitTestElement.setContenteditableValue","@angular/cdk/testing/testbed"],["UnitTestElement.getAttribute","@angular/cdk/testing/testbed"],["UnitTestElement.hasClass","@angular/cdk/testing/testbed"],["UnitTestElement.getDimensions","@angular/cdk/testing/testbed"],["UnitTestElement.getProperty","@angular/cdk/testing/testbed"],["UnitTestElement.setInputValue","@angular/cdk/testing/testbed"],["UnitTestElement.selectOptions","@angular/cdk/testing/testbed"],["UnitTestElement.matchesSelector","@angular/cdk/testing/testbed"],["UnitTestElement.isFocused","@angular/cdk/testing/testbed"],["UnitTestElement.dispatchEvent","@angular/cdk/testing/testbed"]]} \ No newline at end of file +{ + "repo": "angular/components", + "moduleLabel": "@angular/cdk/testing/testbed", + "moduleName": "@angular/cdk/testing/testbed", + "normalizedModuleName": "angular_cdk_testing_testbed", + "entries": [ + { + "name": "TestbedHarnessEnvironmentOptions", + "isAbstract": false, + "entryType": "interface", + "members": [ + { + "name": "queryFn", + "type": "(selector: string, root: Element) => Iterable | ArrayLike", + "memberType": "property", + "memberTags": [], + "description": "The query function used to find DOM elements.", + "jsdocTags": [] + } + ], + "generics": [], + "description": "Options to configure the environment.", + "jsdocTags": [], + "rawComment": "/** Options to configure the environment. */", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/testbed/testbed-harness-environment.ts", + "startLine": 25, + "endLine": 28 + } + }, + { + "name": "TestbedHarnessEnvironment", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "rawRootElement", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + }, + { + "name": "_fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "TestbedHarnessEnvironment", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "forceStabilize", + "signatures": [ + { + "name": "forceStabilize", + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "forceStabilize", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */" + }, + "entryType": "function", + "description": "Flushes change detection and async tasks captured in the Angular zone.\nIn most cases it should not be necessary to call this manually. However, there may be some edge\ncases where it is needed to fully flush animation events.", + "jsdocTags": [], + "rawComment": "/**\n * Flushes change detection and async tasks captured in the Angular zone.\n * In most cases it should not be necessary to call this manually. However, there may be some edge\n * cases where it is needed to fully flush animation events.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "waitForTasksOutsideAngular", + "signatures": [ + { + "name": "waitForTasksOutsideAngular", + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "waitForTasksOutsideAngular", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */" + }, + "entryType": "function", + "description": "Waits for all scheduled or running async tasks to complete. This allows harness\nauthors to wait for async tasks outside of the Angular zone.", + "jsdocTags": [], + "rawComment": "/**\n * Waits for all scheduled or running async tasks to complete. This allows harness\n * authors to wait for async tasks outside of the Angular zone.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDocumentRoot", + "signatures": [ + { + "name": "getDocumentRoot", + "entryType": "function", + "description": "Gets the root element for the document.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the root element for the document. */", + "returnType": "Element" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Element", + "generics": [], + "name": "getDocumentRoot", + "description": "Gets the root element for the document.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */" + }, + "entryType": "function", + "description": "Gets the root element for the document.", + "jsdocTags": [], + "rawComment": "/** Gets the root element for the document. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createTestElement", + "signatures": [ + { + "name": "createTestElement", + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "returnType": "TestElement" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "TestElement", + "generics": [], + "name": "createTestElement", + "description": "Creates a `TestElement` from a raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */" + }, + "entryType": "function", + "description": "Creates a `TestElement` from a raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `TestElement` from a raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "createEnvironment", + "signatures": [ + { + "name": "createEnvironment", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "element", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "returnType": "HarnessEnvironment" + } + ], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessEnvironment", + "generics": [], + "name": "createEnvironment", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given raw element.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given raw element. */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "getAllRawElements", + "signatures": [ + { + "name": "getAllRawElements", + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAllRawElements", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */" + }, + "entryType": "function", + "description": "Gets a list of all elements matching the given selector under this environment's root element.", + "jsdocTags": [], + "rawComment": "/**\n * Gets a list of all elements matching the given selector under this environment's root element.\n */", + "memberType": "method", + "memberTags": [ + "protected" + ] + }, + { + "name": "loader", + "signatures": [ + { + "name": "loader", + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given fixture's root element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given fixture's root element. */", + "returnType": "HarnessLoader" + } + ], + "implementation": { + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessLoader", + "generics": [], + "name": "loader", + "description": "Creates a `HarnessLoader` rooted at the given fixture's root element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given fixture's root element. */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` rooted at the given fixture's root element.", + "jsdocTags": [], + "rawComment": "/** Creates a `HarnessLoader` rooted at the given fixture's root element. */", + "memberType": "method", + "memberTags": [ + "static" + ] + }, + { + "name": "documentRootLoader", + "signatures": [ + { + "name": "documentRootLoader", + "entryType": "function", + "description": "Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */", + "returnType": "HarnessLoader" + } + ], + "implementation": { + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "HarnessLoader", + "generics": [], + "name": "documentRootLoader", + "description": "Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */" + }, + "entryType": "function", + "description": "Creates a `HarnessLoader` at the document root. This can be used if harnesses are\nlocated outside of a fixture (e.g. overlays appended to the document body).", + "jsdocTags": [], + "rawComment": "/**\n * Creates a `HarnessLoader` at the document root. This can be used if harnesses are\n * located outside of a fixture (e.g. overlays appended to the document body).\n */", + "memberType": "method", + "memberTags": [ + "static" + ] + }, + { + "name": "getNativeElement", + "signatures": [ + { + "name": "getNativeElement", + "entryType": "function", + "description": "Gets the native DOM element corresponding to the given TestElement.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the native DOM element corresponding to the given TestElement. */", + "returnType": "Element" + } + ], + "implementation": { + "params": [ + { + "name": "el", + "description": "", + "type": "TestElement", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Element", + "generics": [], + "name": "getNativeElement", + "description": "Gets the native DOM element corresponding to the given TestElement.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the native DOM element corresponding to the given TestElement. */" + }, + "entryType": "function", + "description": "Gets the native DOM element corresponding to the given TestElement.", + "jsdocTags": [], + "rawComment": "/** Gets the native DOM element corresponding to the given TestElement. */", + "memberType": "method", + "memberTags": [ + "static" + ] + }, + { + "name": "harnessForFixture", + "signatures": [ + { + "name": "harnessForFixture", + "entryType": "function", + "description": "Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "harnessType", + "description": "", + "type": "ComponentHarnessConstructor", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "fixture", + "description": "", + "type": "ComponentFixture", + "isOptional": false, + "isRestParam": false + }, + { + "name": "harnessType", + "description": "", + "type": "ComponentHarnessConstructor", + "isOptional": false, + "isRestParam": false + }, + { + "name": "options", + "description": "", + "type": "TestbedHarnessEnvironmentOptions | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "constraint": "ComponentHarness" + } + ], + "name": "harnessForFixture", + "description": "Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */" + }, + "entryType": "function", + "description": "Creates an instance of the given harness type, using the fixture's root element as the\nharness's host element. This method should be used when creating a harness for the root element\nof a fixture, as components do not have the correct selector when they are created as the root\nof the fixture.", + "jsdocTags": [], + "rawComment": "/**\n * Creates an instance of the given harness type, using the fixture's root element as the\n * harness's host element. This method should be used when creating a harness for the root element\n * of a fixture, as components do not have the correct selector when they are created as the root\n * of the fixture.\n */", + "memberType": "method", + "memberTags": [ + "static" + ] + } + ], + "generics": [], + "description": "A `HarnessEnvironment` implementation for Angular's Testbed.", + "jsdocTags": [], + "rawComment": "/** A `HarnessEnvironment` implementation for Angular's Testbed. */", + "extends": "HarnessEnvironment", + "implements": [], + "source": { + "filePath": "/src/cdk/testing/testbed/testbed-harness-environment.ts", + "startLine": 89, + "endLine": 222 + } + }, + { + "name": "UnitTestElement", + "isAbstract": false, + "entryType": "undecorated_class", + "members": [ + { + "name": "constructor", + "signatures": [], + "implementation": { + "params": [ + { + "name": "element", + "description": "", + "type": "Element", + "isOptional": false, + "isRestParam": false + }, + { + "name": "_stabilize", + "description": "", + "type": "() => Promise", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "UnitTestElement", + "generics": [], + "name": "constructor", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "blur", + "signatures": [ + { + "name": "blur", + "entryType": "function", + "description": "Blur the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Blur the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "blur", + "description": "Blur the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Blur the element. */" + }, + "entryType": "function", + "description": "Blur the element.", + "jsdocTags": [], + "rawComment": "/** Blur the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "clear", + "signatures": [ + { + "name": "clear", + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "clear", + "description": "Clear the element's input (for input and textarea elements only).", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */" + }, + "entryType": "function", + "description": "Clear the element's input (for input and textarea elements only).", + "jsdocTags": [], + "rawComment": "/** Clear the element's input (for input and textarea elements only). */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "click", + "signatures": [ + { + "name": "click", + "entryType": "function", + "description": "Click the element at the default location for the current environment. If you need to guarantee\nthe element is clicked at a specific location, consider using `click('center')` or\n`click(x, y)` instead.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the default location for the current environment. If you need to guarantee\n * the element is clicked at a specific location, consider using `click('center')` or\n * `click(x, y)` instead.\n */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the element's center.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "location", + "description": "", + "type": "\"center\"", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/** Click the element at the element's center. */", + "returnType": "Promise" + }, + { + "name": "click", + "entryType": "function", + "description": "Click the element at the specified coordinates relative to the top-left of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Click the element at the specified coordinates relative to the top-left of the element.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "click", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "rightClick", + "signatures": [ + { + "name": "rightClick", + "entryType": "function", + "description": "Right clicks on the element at the specified coordinates relative to the top-left of it.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Coordinate within the element, along the X-axis at which to click." + }, + { + "name": "param", + "comment": "Coordinate within the element, along the Y-axis at which to click." + }, + { + "name": "param", + "comment": "Modifier keys held while clicking" + } + ], + "params": [ + { + "name": "relativeX", + "description": "Coordinate within the element, along the X-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "relativeY", + "description": "Coordinate within the element, along the Y-axis at which to click.", + "type": "number", + "isOptional": false, + "isRestParam": false + }, + { + "name": "modifiers", + "description": "Modifier keys held while clicking", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Right clicks on the element at the specified coordinates relative to the top-left of it.\n * @param relativeX Coordinate within the element, along the X-axis at which to click.\n * @param relativeY Coordinate within the element, along the Y-axis at which to click.\n * @param modifiers Modifier keys held while clicking\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "args", + "description": "", + "type": "[any?] | [\"center\", any?] | [number, number, any?]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "rightClick", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "focus", + "signatures": [ + { + "name": "focus", + "entryType": "function", + "description": "Focus the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Focus the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "focus", + "description": "Focus the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Focus the element. */" + }, + "entryType": "function", + "description": "Focus the element.", + "jsdocTags": [], + "rawComment": "/** Focus the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getCssValue", + "signatures": [ + { + "name": "getCssValue", + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "property", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getCssValue", + "description": "Get the computed value of the given CSS property for the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */" + }, + "entryType": "function", + "description": "Get the computed value of the given CSS property for the element.", + "jsdocTags": [], + "rawComment": "/** Get the computed value of the given CSS property for the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hover", + "signatures": [ + { + "name": "hover", + "entryType": "function", + "description": "Hovers the mouse over the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Hovers the mouse over the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hover", + "description": "Hovers the mouse over the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */" + }, + "entryType": "function", + "description": "Hovers the mouse over the element.", + "jsdocTags": [], + "rawComment": "/** Hovers the mouse over the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "mouseAway", + "signatures": [ + { + "name": "mouseAway", + "entryType": "function", + "description": "Moves the mouse away from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Moves the mouse away from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "mouseAway", + "description": "Moves the mouse away from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */" + }, + "entryType": "function", + "description": "Moves the mouse away from the element.", + "jsdocTags": [], + "rawComment": "/** Moves the mouse away from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "sendKeys", + "signatures": [ + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value. Note that this cannot\nreproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value. Note that this cannot\n * reproduce native browser behavior for keyboard shortcuts such as Tab, Ctrl + A, etc.\n */", + "returnType": "Promise" + }, + { + "name": "sendKeys", + "entryType": "function", + "description": "Sends the given string to the input as a series of key presses. Also fires input events\nand attempts to add the string to the Element's value.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "modifiers", + "description": "", + "type": "ModifierKeys", + "isOptional": false, + "isRestParam": false + }, + { + "name": "keys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/**\n * Sends the given string to the input as a series of key presses. Also fires input events\n * and attempts to add the string to the Element's value.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "modifiersAndKeys", + "description": "", + "type": "any[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "sendKeys", + "description": "", + "entryType": "function", + "jsdocTags": [], + "rawComment": "" + }, + "entryType": "function", + "description": "", + "jsdocTags": [], + "rawComment": "", + "memberType": "method", + "memberTags": [] + }, + { + "name": "text", + "signatures": [ + { + "name": "text", + "entryType": "function", + "description": "Gets the text from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "options", + "description": "Options that affect what text is included.", + "type": "any", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "text", + "description": "Gets the text from the element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */" + }, + "entryType": "function", + "description": "Gets the text from the element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Options that affect what text is included." + } + ], + "rawComment": "/**\n * Gets the text from the element.\n * @param options Options that affect what text is included.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setContenteditableValue", + "signatures": [ + { + "name": "setContenteditableValue", + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "Value to be set on the element.", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setContenteditableValue", + "description": "Sets the value of a `contenteditable` element.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */" + }, + "entryType": "function", + "description": "Sets the value of a `contenteditable` element.", + "jsdocTags": [ + { + "name": "param", + "comment": "Value to be set on the element." + } + ], + "rawComment": "/**\n * Sets the value of a `contenteditable` element.\n * @param value Value to be set on the element.\n */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getAttribute", + "signatures": [ + { + "name": "getAttribute", + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getAttribute", + "description": "Gets the value for the given attribute from the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */" + }, + "entryType": "function", + "description": "Gets the value for the given attribute from the element.", + "jsdocTags": [], + "rawComment": "/** Gets the value for the given attribute from the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "hasClass", + "signatures": [ + { + "name": "hasClass", + "entryType": "function", + "description": "Checks whether the element has the given class.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether the element has the given class. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "hasClass", + "description": "Checks whether the element has the given class.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */" + }, + "entryType": "function", + "description": "Checks whether the element has the given class.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element has the given class. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getDimensions", + "signatures": [ + { + "name": "getDimensions", + "entryType": "function", + "description": "Gets the dimensions of the element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Gets the dimensions of the element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "getDimensions", + "description": "Gets the dimensions of the element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */" + }, + "entryType": "function", + "description": "Gets the dimensions of the element.", + "jsdocTags": [], + "rawComment": "/** Gets the dimensions of the element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "getProperty", + "signatures": [ + { + "name": "getProperty", + "entryType": "function", + "description": "Gets the value of a property of an element.", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Gets the value of a property of an element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [ + { + "name": "T", + "default": "any" + } + ], + "name": "getProperty", + "description": "Gets the value of a property of an element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */" + }, + "entryType": "function", + "description": "Gets the value of a property of an element.", + "jsdocTags": [], + "rawComment": "/** Gets the value of a property of an element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "setInputValue", + "signatures": [ + { + "name": "setInputValue", + "entryType": "function", + "description": "Sets the value of a property of an input.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "value", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Sets the value of a property of an input. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "value", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "setInputValue", + "description": "Sets the value of a property of an input.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */" + }, + "entryType": "function", + "description": "Sets the value of a property of an input.", + "jsdocTags": [], + "rawComment": "/** Sets the value of a property of an input. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "selectOptions", + "signatures": [ + { + "name": "selectOptions", + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "optionIndexes", + "description": "", + "type": "number[]", + "isOptional": false, + "isRestParam": true + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "selectOptions", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */" + }, + "entryType": "function", + "description": "Selects the options at the specified indexes inside of a native `select` element.", + "jsdocTags": [], + "rawComment": "/** Selects the options at the specified indexes inside of a native `select` element. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "matchesSelector", + "signatures": [ + { + "name": "matchesSelector", + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "rawComment": "/** Checks whether this element matches the given selector. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "selector", + "description": "", + "type": "string", + "isOptional": false, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "matchesSelector", + "description": "Checks whether this element matches the given selector.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */" + }, + "entryType": "function", + "description": "Checks whether this element matches the given selector.", + "jsdocTags": [], + "rawComment": "/** Checks whether this element matches the given selector. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "isFocused", + "signatures": [ + { + "name": "isFocused", + "entryType": "function", + "description": "Checks whether the element is focused.", + "generics": [], + "isNewType": false, + "jsdocTags": [], + "params": [], + "rawComment": "/** Checks whether the element is focused. */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "isFocused", + "description": "Checks whether the element is focused.", + "entryType": "function", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */" + }, + "entryType": "function", + "description": "Checks whether the element is focused.", + "jsdocTags": [], + "rawComment": "/** Checks whether the element is focused. */", + "memberType": "method", + "memberTags": [] + }, + { + "name": "dispatchEvent", + "signatures": [ + { + "name": "dispatchEvent", + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "generics": [], + "isNewType": false, + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "returnType": "Promise" + } + ], + "implementation": { + "params": [ + { + "name": "name", + "description": "Name of the event to be dispatched.", + "type": "string", + "isOptional": false, + "isRestParam": false + }, + { + "name": "data", + "description": "", + "type": "Record | undefined", + "isOptional": true, + "isRestParam": false + } + ], + "isNewType": false, + "returnType": "Promise", + "generics": [], + "name": "dispatchEvent", + "description": "Dispatches an event with a particular name.", + "entryType": "function", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */" + }, + "entryType": "function", + "description": "Dispatches an event with a particular name.", + "jsdocTags": [ + { + "name": "param", + "comment": "Name of the event to be dispatched." + } + ], + "rawComment": "/**\n * Dispatches an event with a particular name.\n * @param name Name of the event to be dispatched.\n */", + "memberType": "method", + "memberTags": [] + } + ], + "generics": [], + "description": "A `TestElement` implementation for unit tests.", + "jsdocTags": [], + "rawComment": "/** A `TestElement` implementation for unit tests. */", + "implements": [ + "TestElement" + ], + "source": { + "filePath": "/src/cdk/testing/testbed/unit-test-element.ts", + "startLine": 68, + "endLine": 405 + } + } + ], + "symbols": [ + [ + "ComponentFixture", + "@angular/core/testing" + ], + [ + "flush", + "@angular/core/testing" + ], + [ + "TestbedHarnessEnvironmentOptions", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironmentOptions", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironmentOptions.queryFn", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.constructor", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.forceStabilize", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.waitForTasksOutsideAngular", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.getDocumentRoot", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.createTestElement", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.createEnvironment", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.getAllRawElements", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.loader", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.documentRootLoader", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.getNativeElement", + "@angular/cdk/testing/testbed" + ], + [ + "TestbedHarnessEnvironment.harnessForFixture", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.constructor", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.blur", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.clear", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.click", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.rightClick", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.focus", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.getCssValue", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.hover", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.mouseAway", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.sendKeys", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.text", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.setContenteditableValue", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.getAttribute", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.hasClass", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.getDimensions", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.getProperty", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.setInputValue", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.selectOptions", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.matchesSelector", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.isFocused", + "@angular/cdk/testing/testbed" + ], + [ + "UnitTestElement.dispatchEvent", + "@angular/cdk/testing/testbed" + ] + ] +} \ No newline at end of file diff --git a/adev/src/content/examples/angular-compiler-options/src/app/app.component.spec.ts b/adev/src/content/examples/angular-compiler-options/src/app/app.component.spec.ts index c546db4466ac..4eed4f9cc71d 100644 --- a/adev/src/content/examples/angular-compiler-options/src/app/app.component.spec.ts +++ b/adev/src/content/examples/angular-compiler-options/src/app/app.component.spec.ts @@ -5,7 +5,7 @@ describe('AppComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [AppComponent], - }).compileComponents(); + }); }); it('should create the app', () => { diff --git a/adev/src/content/examples/forms-overview/src/app/app.component.spec.ts b/adev/src/content/examples/forms-overview/src/app/app.component.spec.ts index a7a1a9083aee..d930cf29d178 100644 --- a/adev/src/content/examples/forms-overview/src/app/app.component.spec.ts +++ b/adev/src/content/examples/forms-overview/src/app/app.component.spec.ts @@ -8,7 +8,7 @@ describe('AppComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AppComponent], - }).compileComponents(); + }); })); it('should create the app', waitForAsync(() => { diff --git a/adev/src/content/examples/forms-overview/src/app/reactive/favorite-color/favorite-color.component.spec.ts b/adev/src/content/examples/forms-overview/src/app/reactive/favorite-color/favorite-color.component.spec.ts index b9da15a3e0de..522631e835a3 100644 --- a/adev/src/content/examples/forms-overview/src/app/reactive/favorite-color/favorite-color.component.spec.ts +++ b/adev/src/content/examples/forms-overview/src/app/reactive/favorite-color/favorite-color.component.spec.ts @@ -10,7 +10,7 @@ describe('Favorite Color Component', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [FavoriteColorReactiveComponent], - }).compileComponents(); + }); })); beforeEach(() => { diff --git a/adev/src/content/examples/forms-overview/src/app/template/favorite-color/favorite-color.component.spec.ts b/adev/src/content/examples/forms-overview/src/app/template/favorite-color/favorite-color.component.spec.ts index 4e5cda6746b4..9ae630b31aea 100644 --- a/adev/src/content/examples/forms-overview/src/app/template/favorite-color/favorite-color.component.spec.ts +++ b/adev/src/content/examples/forms-overview/src/app/template/favorite-color/favorite-color.component.spec.ts @@ -10,7 +10,7 @@ describe('FavoriteColorComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [FavoriteColorTemplateComponent], - }).compileComponents(); + }); })); beforeEach(() => { diff --git a/adev/src/content/examples/schematics-for-libraries/projects/my-lib/src/lib/my-lib.component.spec.ts b/adev/src/content/examples/schematics-for-libraries/projects/my-lib/src/lib/my-lib.component.spec.ts index e97b312a2c1c..dd91c711f012 100644 --- a/adev/src/content/examples/schematics-for-libraries/projects/my-lib/src/lib/my-lib.component.spec.ts +++ b/adev/src/content/examples/schematics-for-libraries/projects/my-lib/src/lib/my-lib.component.spec.ts @@ -7,7 +7,7 @@ describe('MyLibComponent', () => { let fixture: ComponentFixture; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({declarations: [MyLibComponent]}).compileComponents(); + TestBed.configureTestingModule({declarations: [MyLibComponent]}); })); beforeEach(() => { diff --git a/adev/src/content/examples/setup/src/app/app.component.spec.ts b/adev/src/content/examples/setup/src/app/app.component.spec.ts index f57784bade31..83183612ce0e 100644 --- a/adev/src/content/examples/setup/src/app/app.component.spec.ts +++ b/adev/src/content/examples/setup/src/app/app.component.spec.ts @@ -10,7 +10,7 @@ describe('AppComponent', () => { let fixture: ComponentFixture; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({declarations: [AppComponent]}).compileComponents(); + TestBed.configureTestingModule({declarations: [AppComponent]}); })); beforeEach(() => { diff --git a/adev/src/content/examples/testing/src/app/app-initial.component.spec.ts b/adev/src/content/examples/testing/src/app/app-initial.component.spec.ts index 6be3760189c6..c8799d3fc0c8 100755 --- a/adev/src/content/examples/testing/src/app/app-initial.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/app-initial.component.spec.ts @@ -15,7 +15,7 @@ describe('AppComponent (initial CLI version)', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [AppComponent], - }).compileComponents(); + }); })); it('should create the app', waitForAsync(() => { const fixture = TestBed.createComponent(AppComponent); diff --git a/adev/src/content/examples/testing/src/app/app.component.router.spec.ts b/adev/src/content/examples/testing/src/app/app.component.router.spec.ts index c6e8964d4a2c..b25464e59b36 100755 --- a/adev/src/content/examples/testing/src/app/app.component.router.spec.ts +++ b/adev/src/content/examples/testing/src/app/app.component.router.spec.ts @@ -39,7 +39,7 @@ describe('AppComponent & router testing', () => { ]), ], }), - ).compileComponents(); + ); })); it('should navigate to "Dashboard" immediately', fakeAsync(() => { @@ -87,7 +87,7 @@ import {provideHttpClient} from '@angular/common/http'; ///////// Can't get lazy loaded Heroes to work yet xdescribe('AppComponent & Lazy Loading (not working yet)', () => { beforeEach(waitForAsync(() => { - TestBed.configureTestingModule(appConfig).compileComponents(); + TestBed.configureTestingModule(appConfig); })); beforeEach(fakeAsync(() => { diff --git a/adev/src/content/examples/testing/src/app/app.component.spec.ts b/adev/src/content/examples/testing/src/app/app.component.spec.ts index 6819f96c9f21..ae66f1302a20 100755 --- a/adev/src/content/examples/testing/src/app/app.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/app.component.spec.ts @@ -38,7 +38,7 @@ describe('AppComponent & TestModule', () => { }), ) // #enddocregion testbed-stubs - .compileComponents() + .then(() => { fixture = TestBed.createComponent(AppComponent); comp = fixture.componentInstance; @@ -65,7 +65,7 @@ describe('AppComponent & NO_ERRORS_SCHEMA', () => { }), ) // #enddocregion no-errors-schema, mixed-setup - .compileComponents() + .then(() => { fixture = TestBed.createComponent(AppComponent); comp = fixture.componentInstance; diff --git a/adev/src/content/examples/testing/src/app/banner/banner-external.component.spec.ts b/adev/src/content/examples/testing/src/app/banner/banner-external.component.spec.ts index 55b35fc7402f..5febcddd4e4c 100755 --- a/adev/src/content/examples/testing/src/app/banner/banner-external.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/banner/banner-external.component.spec.ts @@ -28,7 +28,7 @@ describe('BannerComponent (external files)', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [BannerComponent], - }).compileComponents(); // compile template and css + }); // compile template and css }); // #enddocregion async-before-each @@ -49,7 +49,7 @@ describe('BannerComponent (external files)', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [BannerComponent], - }).compileComponents(); + }); fixture = TestBed.createComponent(BannerComponent); component = fixture.componentInstance; h1 = fixture.nativeElement.querySelector('h1'); diff --git a/adev/src/content/examples/testing/src/app/banner/banner-initial.component.spec.ts b/adev/src/content/examples/testing/src/app/banner/banner-initial.component.spec.ts index 1d9c687b8a62..ef951d417be8 100755 --- a/adev/src/content/examples/testing/src/app/banner/banner-initial.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/banner/banner-initial.component.spec.ts @@ -24,7 +24,7 @@ describe('BannerComponent (initial CLI generated)', () => { let fixture: ComponentFixture; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({imports: [BannerComponent]}).compileComponents(); + TestBed.configureTestingModule({imports: [BannerComponent]}); })); beforeEach(() => { diff --git a/adev/src/content/examples/testing/src/app/dashboard/dashboard-hero.component.spec.ts b/adev/src/content/examples/testing/src/app/dashboard/dashboard-hero.component.spec.ts index 815e2dda79da..16550730e7cb 100755 --- a/adev/src/content/examples/testing/src/app/dashboard/dashboard-hero.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/dashboard/dashboard-hero.component.spec.ts @@ -110,9 +110,8 @@ describe('DashboardHeroComponent when inside a test host', () => { TestBed.configureTestingModule({ providers: appProviders, imports: [DashboardHeroComponent, TestHostComponent], - }) - // #enddocregion test-host-setup - .compileComponents(); + }); + // #enddocregion test-host-setup })); beforeEach(() => { diff --git a/adev/src/content/examples/testing/src/app/demo/demo.testbed.spec.ts b/adev/src/content/examples/testing/src/app/demo/demo.testbed.spec.ts index d5e1444031d9..a0414808d42c 100755 --- a/adev/src/content/examples/testing/src/app/demo/demo.testbed.spec.ts +++ b/adev/src/content/examples/testing/src/app/demo/demo.testbed.spec.ts @@ -162,7 +162,7 @@ describe('demo (with TestBed):', () => { // beforeEach(waitForAsync(() => { // TestBed.configureTestingModule() // // Compile everything in DemoModule - // .compileComponents(); + // ; // })); it('should create a component with inline template', () => { diff --git a/adev/src/content/examples/testing/src/app/hero/hero-detail.component.spec.ts b/adev/src/content/examples/testing/src/app/hero/hero-detail.component.spec.ts index d41cba411969..cc4dce5f6092 100755 --- a/adev/src/content/examples/testing/src/app/hero/hero-detail.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/hero/hero-detail.component.spec.ts @@ -67,9 +67,8 @@ function overrideSetup() { // #docregion override-component-method .overrideComponent(HeroDetailComponent, { set: {providers: [{provide: HeroDetailService, useClass: HeroDetailServiceSpy}]}, - }) - // #enddocregion override-component-method - .compileComponents(); + }); + // #enddocregion override-component-method }); // #enddocregion setup-override @@ -137,7 +136,7 @@ function heroModuleSetup() { provideHttpClientTesting(), ], }), - ).compileComponents(); + ); }); // #enddocregion setup-hero-module @@ -226,7 +225,7 @@ function formsModuleSetup() { provideRouter([{path: 'heroes/:id', component: HeroDetailComponent}]), ], }), - ).compileComponents(); + ); }); // #enddocregion setup-forms-module @@ -252,7 +251,7 @@ function sharedModuleSetup() { provideHttpClientTesting(), ], }), - ).compileComponents(); + ); }); // #enddocregion setup-shared-module diff --git a/adev/src/content/examples/testing/src/app/hero/hero-list.component.spec.ts b/adev/src/content/examples/testing/src/app/hero/hero-list.component.spec.ts index 46de53a6716e..2ba082c9ee98 100755 --- a/adev/src/content/examples/testing/src/app/hero/hero-list.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/hero/hero-list.component.spec.ts @@ -34,7 +34,7 @@ describe('HeroListComponent', () => { ], }), ) - .compileComponents() + .then(createComponent); })); diff --git a/adev/src/content/examples/testing/src/app/shared/canvas.component.spec.ts b/adev/src/content/examples/testing/src/app/shared/canvas.component.spec.ts index 6566ebfb522e..c1127063e215 100755 --- a/adev/src/content/examples/testing/src/app/shared/canvas.component.spec.ts +++ b/adev/src/content/examples/testing/src/app/shared/canvas.component.spec.ts @@ -20,7 +20,7 @@ describe('CanvasComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ imports: [CanvasComponent], - }).compileComponents(); + }); }); it('should be able to generate blob data from canvas', fakeAsync(() => { diff --git a/adev/src/content/guide/components/lifecycle.md b/adev/src/content/guide/components/lifecycle.md index 63c0c56d932d..7222eebf3c41 100644 --- a/adev/src/content/guide/components/lifecycle.md +++ b/adev/src/content/guide/components/lifecycle.md @@ -72,7 +72,7 @@ process. Runs once the next time that all components have been rendered to the DOM. - afterRender + afterEveryRender Runs every time all components have been rendered to the DOM. @@ -219,16 +219,16 @@ here, attempting to change any state in this method results in an [ExpressionChangedAfterItHasBeenCheckedError](errors/NG0100). -### afterRender and afterNextRender +### afterEveryRender and afterNextRender -The `afterRender` and `afterNextRender` functions let you register a **render callback** to be +The `afterEveryRender` and `afterNextRender` functions let you register a **render callback** to be invoked after Angular has finished rendering _all components_ on the page into the DOM. These functions are different from the other lifecycle hooks described in this guide. Rather than a class method, they are standalone functions that accept a callback. The execution of render callbacks are not tied to any specific component instance, but instead an application-wide hook. -`afterRender` and `afterNextRender` must be called in +`afterEveryRender` and `afterNextRender` must be called in an [injection context](guide/di/dependency-injection-context), typically a component's constructor. @@ -237,9 +237,9 @@ See [Using DOM APIs](guide/components/dom-apis) for guidance on working with the Render callbacks do not run during server-side rendering or during build-time pre-rendering. -#### afterRender phases +#### after*Render phases -When using `afterRender` or `afterNextRender`, you can optionally split the work into phases. The +When using `afterEveryRender` or `afterNextRender`, you can optionally split the work into phases. The phase gives you control over the sequencing of DOM operations, letting you sequence _write_ operations before _read_ operations in order to minimize [layout thrashing](https://web.dev/avoid-large-complex-layouts-and-layout-thrashing). In order to @@ -327,7 +327,7 @@ ngDoCheck-->ngAfterViewInit ngAfterContentInit-->ngAfterContentChecked ngAfterViewInit-->ngAfterViewChecked end -CHANGE--Rendering-->afterRender +CHANGE--Rendering-->afterNextRender-->afterEveryRender ``` ### Subsequent updates @@ -340,7 +340,7 @@ ngOnChanges-->ngDoCheck ngDoCheck-->ngAfterContentChecked; ngDoCheck-->ngAfterViewChecked end -CHANGE--Rendering-->afterRender +CHANGE--Rendering-->afterEveryRender ``` ### Ordering with directives diff --git a/adev/src/content/guide/directives/structural-directives.md b/adev/src/content/guide/directives/structural-directives.md index 5f7592e7391a..5c4024ddedb6 100644 --- a/adev/src/content/guide/directives/structural-directives.md +++ b/adev/src/content/guide/directives/structural-directives.md @@ -83,7 +83,7 @@ import {Directive, TemplateRef, ViewContainerRef} from '@angular/core'; }) export class SelectDirective { private templateRef = inject(TemplateRef); - private ViewContainerRef = inject(ViewContainerRef); + private viewContainerRef = inject(ViewContainerRef); } ``` diff --git a/adev/src/content/guide/forms/form-validation.md b/adev/src/content/guide/forms/form-validation.md index b8d0000efa18..699eed94cc05 100644 --- a/adev/src/content/guide/forms/form-validation.md +++ b/adev/src/content/guide/forms/form-validation.md @@ -25,9 +25,9 @@ Notice the following features illustrated by the example. `NgModel` mirrors many of the properties of its underlying `FormControl` instance, so you can use this in the template to check for control states such as `valid` and `dirty`. For a full list of control properties, see the [AbstractControl](api/forms/AbstractControl) API reference. - * The `*ngIf` on the `
` element reveals a set of nested message `divs` but only if the `name` is invalid and the control is either `dirty` or `touched`. + * The outermost `@if` reveals a set of nested messages but only if the `name` is invalid and the control is either `dirty` or `touched`. - * Each nested `
` can present a custom message for one of the possible validation errors. + * Each nested `@if` can present a custom message for one of the possible validation errors. There are messages for `required`, `minlength`, and `forbiddenName`. HELPFUL: To prevent the validator from displaying errors before the user has a chance to edit the form, you should check for either the `dirty` or `touched` states in a control. @@ -213,7 +213,7 @@ To provide better user experience, the template shows an appropriate error messa -This `*ngIf` displays the error if the `FormGroup` has the cross validation error returned by the `unambiguousRoleValidator` validator, but only if the user finished [interacting with the form](#control-status-css-classes). +This `@if` displays the error if the `FormGroup` has the cross validation error returned by the `unambiguousRoleValidator` validator, but only if the user finished [interacting with the form](#control-status-css-classes). ### Adding cross-validation to template-driven forms diff --git a/adev/src/content/guide/forms/template-driven-forms.md b/adev/src/content/guide/forms/template-driven-forms.md index 91f629cee97a..f7d51963807d 100644 --- a/adev/src/content/guide/forms/template-driven-forms.md +++ b/adev/src/content/guide/forms/template-driven-forms.md @@ -98,7 +98,7 @@ In the course of this tutorial, you bind a sample form to data and handle user i 1. The form requires that an actor's skill is chosen from a predefined list of `skills` maintained internally in `ActorFormComponent`. - The Angular [NgForOf directive](api/common/NgForOf 'API reference') iterates over the data values to populate the `` element. diff --git a/adev/src/content/guide/ssr.md b/adev/src/content/guide/ssr.md index cc6f766240c6..2f6d897524ca 100644 --- a/adev/src/content/guide/ssr.md +++ b/adev/src/content/guide/ssr.md @@ -367,7 +367,7 @@ bootstrapApplication(AppComponent, { Some common browser APIs and capabilities might not be available on the server. Applications cannot make use of browser-specific global objects like `window`, `document`, `navigator`, or `location` as well as certain properties of `HTMLElement`. -In general, code which relies on browser-specific symbols should only be executed in the browser, not on the server. This can be enforced through the [`afterRender`](api/core/afterRender) and [`afterNextRender`](api/core/afterNextRender) lifecycle hooks. These are only executed on the browser and skipped on the server. +In general, code which relies on browser-specific symbols should only be executed in the browser, not on the server. This can be enforced through the [`afterEveryRender`](api/core/afterEveryRender) and [`afterNextRender`](api/core/afterNextRender) lifecycle hooks. These are only executed on the browser and skipped on the server. ```angular-ts import { Component, ViewChild, afterNextRender } from '@angular/core'; diff --git a/adev/src/content/guide/templates/event-listeners.md b/adev/src/content/guide/templates/event-listeners.md index 2623dd9f1ce5..f8c10ded461b 100644 --- a/adev/src/content/guide/templates/event-listeners.md +++ b/adev/src/content/guide/templates/event-listeners.md @@ -97,3 +97,24 @@ Angular also allows you to specify [Code values for keyboard events](https://dev ``` This can be useful for handling keyboard events consistently across different operating systems. For example, when using the Alt key on MacOS devices, the `key` property reports the key based on the character already modified by the Alt key. This means that a combination like Alt + S reports a `key` value of `'ß'`. The `code` property, however, corresponds to the physical or virtual button pressed rather than the character produced. + +## Preventing event default behavior + +If your event handler should replace the native browser behavior, you can use the event object's [`preventDefault` method](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault): + +```angular-ts +@Component({ + template: ` + + `, + ... +}) +export class AppComponent{ + showOverlay(event: PointerEvent): void { + event.preventDefault(); + console.log('Show overlay without updating the URL!'); + } +} +``` + +If the event handler statement evaluates to `false`, Angular automatically calls `preventDefault()`, similar to [native event handler attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes#event_handler_attributes). *Always prefer explicitly calling `preventDefault`*, as this approach makes the code's intent obvious. diff --git a/adev/src/content/guide/templates/expression-syntax.md b/adev/src/content/guide/templates/expression-syntax.md index b2dd034c8d01..d704531d25dd 100644 --- a/adev/src/content/guide/templates/expression-syntax.md +++ b/adev/src/content/guide/templates/expression-syntax.md @@ -98,7 +98,7 @@ Angular expressions additionally also support the following non-standard operato Angular expressions are evaluated within the context of the component class as well as any relevant [template variables](/guide/templates/variables), locals, and globals. -When referring to class members, `this` is always implied. +When referring to component class members, `this` is always implied. However, if a template declares a [template variables](guide/templates/variables) with the same name as a member, the variable shadows that member. You can unambiguously reference such a class member by explicitly using `this.`. This can be useful when creating an `@let` declaration that shadows a class member, e.g. for signal narrowing purposes. ## Declarations diff --git a/adev/src/content/guide/templates/variables.md b/adev/src/content/guide/templates/variables.md index 4737be41518f..f8a40ee4a0dd 100644 --- a/adev/src/content/guide/templates/variables.md +++ b/adev/src/content/guide/templates/variables.md @@ -138,7 +138,7 @@ If you declare the variable on a Angular component, the variable refers to the c ``` -If you declare the variable on an `` element, the variable refers to a TemplateRef instance which represents the template. For more information, see [How Angular uses the asterisk, \*, syntax](/guide/directives/structural-directives#asterisk) in [Structural directives](/guide/directives/structural-directives). +If you declare the variable on an `` element, the variable refers to a TemplateRef instance which represents the template. For more information, see [How Angular uses the asterisk, \*, syntax](/guide/directives/structural-directives#structural-directive-shorthand) in [Structural directives](/guide/directives/structural-directives). ```angular-html diff --git a/adev/src/content/guide/testing/component-harnesses-overview.md b/adev/src/content/guide/testing/component-harnesses-overview.md index 0887ef536190..0b67f0d8d178 100644 --- a/adev/src/content/guide/testing/component-harnesses-overview.md +++ b/adev/src/content/guide/testing/component-harnesses-overview.md @@ -3,6 +3,7 @@ A component harness is a class that allows tests to interact with components the way an end user does via a supported API. You can create test harnesses for any component, ranging from small reusable widgets to full pages. Harnesses offer several benefits: + - They make tests less brittle by insulating themselves against implementation details of a component, such as its DOM structure - They make tests become more readable and easier to maintain - They can be used across multiple testing environments @@ -21,10 +22,10 @@ Component harnesses support multiple testing environments. You can use the same Many developers can be categorized by one of the following developer type categories: test authors, component harness authors, and harness environment authors. Use the table below to find the most relevant section in this guide based on these categories: -| Developer Type | Description | Relevant Section | -|:--- | :--- | :--- | -| Test Authors | Developers that use component harnesses written by someone else to test their application. For example, this could be an app developer who uses a third-party menu component and needs to interact with the menu in a unit test. | [Using component harnesses in tests](guide/testing/using-component-harnesses) | -| Component harness authors | Developers who maintain some reusable Angular components and want to create a test harness for its users to use in their tests. For example, an author of a third party Angular component library or a developer who maintains a set of common components for a large Angular application. | [Creating component harnesses for your components](guide/testing/creating-component-harnesses ) | +| Developer Type | Description | Relevant Section | +| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- | +| Test Authors | Developers that use component harnesses written by someone else to test their application. For example, this could be an app developer who uses a third-party menu component and needs to interact with the menu in a unit test. | [Using component harnesses in tests](guide/testing/using-component-harnesses) | +| Component harness authors | Developers who maintain some reusable Angular components and want to create a test harness for its users to use in their tests. For example, an author of a third party Angular component library or a developer who maintains a set of common components for a large Angular application. | [Creating component harnesses for your components](guide/testing/creating-component-harnesses) | | Harness environment authors | Developers who want to add support for using component harnesses in additional testing environments. For information on supported testing environments out-of-the-box, see the [test harness environments and loaders](guide/testing/using-component-harnesses#test-harness-environments-and-loaders). | [Adding support for additional testing environments](guide/testing/component-harnesses-testing-environments) | -For the full API reference, please see the [Angular CDK's component harness API reference page](https://material.angular.io/cdk/testing/api). +For the full API reference, please see the [Angular CDK's component harness API reference page](/api/cdk/testing/AsyncOptionPredicate). diff --git a/adev/src/content/guide/testing/component-harnesses-testing-environments.md b/adev/src/content/guide/testing/component-harnesses-testing-environments.md index 428664ae49d1..5c0160289d05 100644 --- a/adev/src/content/guide/testing/component-harnesses-testing-environments.md +++ b/adev/src/content/guide/testing/component-harnesses-testing-environments.md @@ -7,6 +7,7 @@ TIP: This guide assumes you've already read the [component harnesses overview gu ### When does adding support for a test environment make sense? To use component harnesses in the following environments, you can use Angular CDK's two built-in environments: + - Unit tests - WebDriver end-to-end tests @@ -26,34 +27,36 @@ The [Component Dev Kit (CDK)](https://material.angular.io/cdk/categories) is a s Every test environment must define a `TestElement` implementation. The `TestElement` interface serves as an environment-agnostic representation of a DOM element. It enables harnesses to interact with DOM elements regardless of the underlying environment. Because some environments don't support interacting with DOM elements synchronously (e.g. WebDriver), all `TestElement` methods are asynchronous, returning a `Promise` with the result of the operation. -`TestElement` offers a number of methods to interact with the underlying DOM such as `blur()`, `click()`, `getAttribute()`, and more. See the [TestElement API reference page](https://material.angular.io/cdk/testing/api#TestElement) for the full list of methods. +`TestElement` offers a number of methods to interact with the underlying DOM such as `blur()`, `click()`, `getAttribute()`, and more. See the [TestElement API reference page](/api/cdk/testing/TestElement) for the full list of methods. The `TestElement` interface consists largely of methods that resemble methods available on `HTMLElement`. Similar methods exist in most test environments, which makes implementing the methods fairly straightforward. However, one important difference to note when implementing the `sendKeys` method, is that the key codes in the `TestKey` enum likely differ from the key codes used in the test environment. Environment authors should maintain a mapping from `TestKey` codes to the codes used in the particular testing environment. -The [UnitTestElement](https://github.com/angular/components/blob/main/src/cdk/testing/testbed/unit-test-element.ts#L33) and [SeleniumWebDriverElement](https://github.com/angular/components/blob/main/src/cdk/testing/selenium-webdriver/selenium-webdriver-keys.ts#L16) implementations in Angular CDK serve as good examples of implementations of this interface. +The [UnitTestElement](/api/cdk/testing/testbed/UnitTestElement) and [SeleniumWebDriverElement](/api/cdk/testing/selenium-webdriver/SeleniumWebDriverElement) implementations in Angular CDK serve as good examples of implementations of this interface. ## Creating a `HarnessEnvironment` implementation + Test authors use `HarnessEnvironment` to create component harness instances for use in tests. `HarnessEnvironment` is an abstract class that must be extended to create a concrete subclass for the new environment. When supporting a new test environment, create a `HarnessEnvironment` subclass that adds concrete implementations for all abstract members. `HarnessEnvironment` has a generic type parameter: `HarnessEnvironment`. This parameter, `E`, represents the raw element type of the environment. For example, this parameter is Element for unit test environments. The following are the abstract methods that must be implemented: -| Method | Description | -|:--- | :--- | -| `abstract getDocumentRoot(): E` | Gets the root element for the environment (e.g. `document.body`). | -| `abstract createTestElement(element: E): TestElement` | Creates a `TestElement` for the given raw element. | -| `abstract createEnvironment(element: E): HarnessEnvironment` | Creates a `HarnessEnvironment` rooted at the given raw element. | -| `abstract getAllRawElements(selector: string): Promise` | Gets all of the raw elements under the root element of the environment matching the given selector. | -| `abstract forceStabilize(): Promise` | Gets a `Promise` that resolves when the `NgZone` is stable. Additionally, if applicable, tells `NgZone` to stabilize (e.g. calling `flush()` in a `fakeAsync` test). | -| `abstract waitForTasksOutsideAngular(): Promise` | Gets a `Promise` that resolves when the parent zone of `NgZone` is stable. | +| Method | Description | +| :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `abstract getDocumentRoot(): E` | Gets the root element for the environment (e.g. `document.body`). | +| `abstract createTestElement(element: E): TestElement` | Creates a `TestElement` for the given raw element. | +| `abstract createEnvironment(element: E): HarnessEnvironment` | Creates a `HarnessEnvironment` rooted at the given raw element. | +| `abstract getAllRawElements(selector: string): Promise` | Gets all of the raw elements under the root element of the environment matching the given selector. | +| `abstract forceStabilize(): Promise` | Gets a `Promise` that resolves when the `NgZone` is stable. Additionally, if applicable, tells `NgZone` to stabilize (e.g. calling `flush()` in a `fakeAsync` test). | +| `abstract waitForTasksOutsideAngular(): Promise` | Gets a `Promise` that resolves when the parent zone of `NgZone` is stable. | In addition to implementing the missing methods, this class should provide a way for test authors to get `ComponentHarness` instances. You should define a protected constructor and provide a static method called `loader` that returns a `HarnessLoader` instance. This allows test authors to write code like: `SomeHarnessEnvironment.loader().getHarness(...)`. Depending on the needs of the particular environment, the class may provide several different static methods or require arguments to be passed. (e.g. the `loader` method on `TestbedHarnessEnvironment` takes a `ComponentFixture`, and the class provides additional static methods called `documentRootLoader` and `harnessForFixture`). -The [`TestbedHarnessEnvironment`](https://github.com/angular/components/blob/main/src/cdk/testing/testbed/testbed-harness-environment.ts#L89) and [SeleniumWebDriverHarnessEnvironment](https://github.com/angular/components/blob/main/src/cdk/testing/selenium-webdriver/selenium-web-driver-harness-environment.ts#L71) implementations in Angular CDK serve as good examples of implementations of this interface. +The [`TestbedHarnessEnvironment`](/api/cdk/testing/testbed/TestbedHarnessEnvironment) and [SeleniumWebDriverHarnessEnvironment](/api/cdk/testing/selenium-webdriver/SeleniumWebDriverHarnessEnvironment) implementations in Angular CDK serve as good examples of implementations of this interface. ## Handling auto change detection + In order to support the `manualChangeDetection` and parallel APIs, your environment should install a handler for the auto change detection status. -When your environment wants to start handling the auto change detection status it can call `handleAutoChangeDetectionStatus(handler)`. The handler function will receive a `AutoChangeDetectionStatus` which has two properties `isDisabled` and `onDetectChangesNow()`. See the [AutoChangeDetectionStatus API reference page](https://material.angular.io/cdk/testing/api#AutoChangeDetectionStatus) for more information. +When your environment wants to start handling the auto change detection status it can call `handleAutoChangeDetectionStatus(handler)`. The handler function will receive a `AutoChangeDetectionStatus` which has two properties `isDisabled` and `onDetectChangesNow()`. See the [AutoChangeDetectionStatus API reference page](/api/cdk/testing/AutoChangeDetectionStatus) for more information. If your environment wants to stop handling auto change detection status it can call `stopHandlingAutoChangeDetectionStatus()`. diff --git a/adev/src/content/guide/testing/creating-component-harnesses.md b/adev/src/content/guide/testing/creating-component-harnesses.md index 0cddcb16ed41..458171aef3a9 100644 --- a/adev/src/content/guide/testing/creating-component-harnesses.md +++ b/adev/src/content/guide/testing/creating-component-harnesses.md @@ -37,11 +37,11 @@ The `hostSelector` property identifies elements in the DOM that match this harne class MyPopup { triggerText = input(''); - isOpen = signal(false); +isOpen = signal(false); - toggle() { - this.isOpen.update((value) => !value); - } +toggle() { +this.isOpen.update((value) => !value); +} } @@ -61,7 +61,7 @@ Each instance of a `ComponentHarness` subclass represents a particular instance `ComponentHarness` also offers several methods for locating elements within the component's DOM. These methods are `locatorFor()`, `locatorForOptional()`, and `locatorForAll()`. These methods create functions that find elements, they do not directly find elements. This approach safeguards against caching references to out-of-date elements. For example, when an `ngIf` hides and then shows an element, the result is a new DOM element; using functions ensures that tests always reference the current state of the DOM. -See the [ComponentHarness API reference page](https://material.angular.io/cdk/testing/api#ComponentHarness) for the full list details of the different `locatorFor` methods. +See the [ComponentHarness API reference page](/api/cdk/testing/ComponentHarness) for the full list details of the different `locatorFor` methods. For example, the `MyPopupHarness` example discussed above could provide methods to get the trigger and content elements as follows: @@ -69,11 +69,11 @@ For example, the `MyPopupHarness` example discussed above could provide methods class MyPopupHarness extends ComponentHarness { static hostSelector = 'my-popup'; - /** Gets the trigger element */ - getTriggerElement = this.locatorFor('button'); +/\*_ Gets the trigger element _/ +getTriggerElement = this.locatorFor('button'); - /** Gets the content element. */ - getContentElement = this.locatorForOptional('.my-popup-content'); +/\*_ Gets the content element. _/ +getContentElement = this.locatorForOptional('.my-popup-content'); } @@ -81,7 +81,7 @@ class MyPopupHarness extends ComponentHarness { `TestElement` is an abstraction designed to work across different test environments (Unit tests, WebDriver, etc). When using harnesses, you should perform all DOM interaction via this interface. Other means of accessing DOM elements, such as `document.querySelector()`, do not work in all test environments. -`TestElement` has a number of methods to interact with the underlying DOM, such as `blur()`, `click()`, `getAttribute()`, and more. See the [TestElement API reference page](https://material.angular.io/cdk/testing/api#TestElement) for the full list of methods. +`TestElement` has a number of methods to interact with the underlying DOM, such as `blur()`, `click()`, `getAttribute()`, and more. See the [TestElement API reference page](/api/cdk/testing/TestElement) for the full list of methods. Do not expose `TestElement` instances to harness users unless it's an element the component consumer defines directly, such as the component's host element. Exposing `TestElement` instances for internal elements leads users to depend on a component's internal DOM structure. @@ -91,20 +91,20 @@ Instead, provide more narrow-focused methods for specific actions the end-user m class MyPopupHarness extends ComponentHarness { static hostSelector = 'my-popup'; - protected getTriggerElement = this.locatorFor('button'); - protected getContentElement = this.locatorForOptional('.my-popup-content'); +protected getTriggerElement = this.locatorFor('button'); +protected getContentElement = this.locatorForOptional('.my-popup-content'); - /** Toggles the open state of the popup. */ - async toggle() { - const trigger = await this.getTriggerElement(); - return trigger.click(); - } +/\*_ Toggles the open state of the popup. _/ +async toggle() { +const trigger = await this.getTriggerElement(); +return trigger.click(); +} - /** Checks if the popup us open. */ - async isOpen() { - const content = await this.getContentElement(); - return !!content; - } +/\*_ Checks if the popup us open. _/ +async isOpen() { +const content = await this.getContentElement(); +return !!content; +} } @@ -112,7 +112,7 @@ class MyPopupHarness extends ComponentHarness { Larger components often compose sub-components. You can reflect this structure in a component's harness as well. Each of the `locatorFor` methods on `ComponentHarness` has an alternate signature that can be used for locating sub-harnesses rather than elements. -See the [ComponentHarness API reference page](https://material.angular.io/cdk/testing/api#ComponentHarness) for the full list of the different locatorFor methods. +See the [ComponentHarness API reference page](/api/cdk/testing/ComponentHarness) for the full list of the different locatorFor methods. For example, consider a menu build using the popup from above: @@ -123,17 +123,16 @@ For example, consider a menu build using the popup from above: class MyMenuItem {} @Component({ - selector: 'my-menu', - template: ` - +selector: 'my-menu', +template: ` ` }) class MyMenu { - triggerText = input(''); +triggerText = input(''); - @ContentChildren(MyMenuItem) items: QueryList; +@ContentChildren(MyMenuItem) items: QueryList; } @@ -143,29 +142,30 @@ The harness for `MyMenu` can then take advantage of other harnesses for `MyPopup class MyMenuHarness extends ComponentHarness { static hostSelector = 'my-menu'; - protected getPopupHarness = this.locatorFor(MyPopupHarness); +protected getPopupHarness = this.locatorFor(MyPopupHarness); - /** Gets the currently shown menu items (empty list if menu is closed). */ - getItems = this.locatorForAll(MyMenuItemHarness); +/\*_ Gets the currently shown menu items (empty list if menu is closed). _/ +getItems = this.locatorForAll(MyMenuItemHarness); - /** Toggles open state of the menu. */ - async toggle() { - const popupHarness = await this.getPopupHarness(); - return popupHarness.toggle(); - } +/\*_ Toggles open state of the menu. _/ +async toggle() { +const popupHarness = await this.getPopupHarness(); +return popupHarness.toggle(); +} } class MyMenuItemHarness extends ComponentHarness { - static hostSelector = 'my-menu-item'; +static hostSelector = 'my-menu-item'; } ## Filtering harness instances with `HarnessPredicate` + When a page contains multiple instances of a particular component, you may want to filter based on some property of the component to get a particular component instance. For example, you may want a button with some specific text, or a menu with a specific ID. The `HarnessPredicate` class can capture criteria like this for a `ComponentHarness` subclass. While the test author is able to construct `HarnessPredicate` instances manually, it's easier when the `ComponentHarness` subclass provides a helper method to construct predicates for common filters. You should create a static `with()` method on each `ComponentHarness` subclass that returns a `HarnessPredicate` for that class. This allows test authors to write easily understandable code, e.g. `loader.getHarness(MyMenuHarness.with({selector: '#menu1'}))`. In addition to the standard selector and ancestor options, the `with` method should add any other options that make sense for the particular subclass. -Harnesses that need to add additional options should extend the `BaseHarnessFilters` interface and additional optional properties as needed. `HarnessPredicate` provides several convenience methods for adding options: `stringMatches()`, `addOption()`, and `add()`. See the [HarnessPredicate API page](https://material.angular.io/cdk/testing/api#HarnessPredicate) for the full description. +Harnesses that need to add additional options should extend the `BaseHarnessFilters` interface and additional optional properties as needed. `HarnessPredicate` provides several convenience methods for adding options: `stringMatches()`, `addOption()`, and `add()`. See the [HarnessPredicate API page](/api/cdk/testing/HarnessPredicate) for the full description. For example, when working with a menu it is useful to filter based on trigger text and to filter menu items based on their text: @@ -176,45 +176,45 @@ interface MyMenuHarnessFilters extends BaseHarnessFilters { } interface MyMenuItemHarnessFilters extends BaseHarnessFilters { - /** Filters based on the text of the menu item. */ - text?: string | RegExp; +/\*_ Filters based on the text of the menu item. _/ +text?: string | RegExp; } class MyMenuHarness extends ComponentHarness { - static hostSelector = 'my-menu'; +static hostSelector = 'my-menu'; + +/\*_ Creates a `HarnessPredicate` used to locate a particular `MyMenuHarness`. _/ +static with(options: MyMenuHarnessFilters): HarnessPredicate { +return new HarnessPredicate(MyMenuHarness, options) +.addOption('trigger text', options.triggerText, +(harness, text) => HarnessPredicate.stringMatches(harness.getTriggerText(), text)); +} + +protected getPopupHarness = this.locatorFor(MyPopupHarness); - /** Creates a `HarnessPredicate` used to locate a particular `MyMenuHarness`. */ - static with(options: MyMenuHarnessFilters): HarnessPredicate { - return new HarnessPredicate(MyMenuHarness, options) - .addOption('trigger text', options.triggerText, - (harness, text) => HarnessPredicate.stringMatches(harness.getTriggerText(), text)); - } - - protected getPopupHarness = this.locatorFor(MyPopupHarness); - - /** Gets the text of the menu trigger. */ - async getTriggerText(): Promise { - const popupHarness = await this.getPopupHarness(); - return popupHarness.getTriggerText(); - } - ... +/\*_ Gets the text of the menu trigger. _/ +async getTriggerText(): Promise { +const popupHarness = await this.getPopupHarness(); +return popupHarness.getTriggerText(); +} +... } class MyMenuItemHarness extends ComponentHarness { - static hostSelector = 'my-menu-item'; - - /** Creates a `HarnessPredicate` used to locate a particular `MyMenuItemHarness`. */ - static with(options: MyMenuItemHarnessFilters): HarnessPredicate { - return new HarnessPredicate(MyMenuItemHarness, options) - .addOption('text', options.text, - (harness, text) => HarnessPredicate.stringMatches(harness.getText(), text)); - } - - /** Gets the text of the menu item. */ - async getText(): Promise { - const host = await this.host(); - return host.text(); - } +static hostSelector = 'my-menu-item'; + +/\*_ Creates a `HarnessPredicate` used to locate a particular `MyMenuItemHarness`. _/ +static with(options: MyMenuItemHarnessFilters): HarnessPredicate { +return new HarnessPredicate(MyMenuItemHarness, options) +.addOption('text', options.text, +(harness, text) => HarnessPredicate.stringMatches(harness.getText(), text)); +} + +/\*_ Gets the text of the menu item. _/ +async getText(): Promise { +const host = await this.host(); +return host.text(); +} } @@ -224,12 +224,12 @@ You can pass a `HarnessPredicate` instead of a `ComponentHarness` class to any o class MyMenuHarness extends ComponentHarness { static hostSelector = 'my-menu'; - /** Gets a list of items in the menu, optionally filtered based on the given criteria. */ - async getItems(filters: MyMenuItemHarnessFilters = {}): Promise { - const getFilteredItems = this.locatorForAll(MyMenuItemHarness.with(filters)); - return getFilteredItems(); - } - ... +/\*_ Gets a list of items in the menu, optionally filtered based on the given criteria. _/ +async getItems(filters: MyMenuItemHarnessFilters = {}): Promise { +const getFilteredItems = this.locatorForAll(MyMenuItemHarness.with(filters)); +return getFilteredItems(); +} +... } @@ -237,7 +237,7 @@ class MyMenuHarness extends ComponentHarness { Some components project additional content into the component's template. See the [content projection guide](guide/components/content-projection) for more information. -Add a `HarnessLoader` instance scoped to the element containing the `` when you create a harness for a component that uses content projection. This allows the user of the harness to load additional harnesses for whatever components were passed in as content. `ComponentHarness` has several methods that can be used to create HarnessLoader instances for cases like this: `harnessLoaderFor()`, `harnessLoaderForOptional()`, `harnessLoaderForAll()`. See the [HarnessLoader interface API reference page](https://material.angular.io/cdk/testing/api#HarnessLoader) for more details. +Add a `HarnessLoader` instance scoped to the element containing the `` when you create a harness for a component that uses content projection. This allows the user of the harness to load additional harnesses for whatever components were passed in as content. `ComponentHarness` has several methods that can be used to create HarnessLoader instances for cases like this: `harnessLoaderFor()`, `harnessLoaderForOptional()`, `harnessLoaderForAll()`. See the [HarnessLoader interface API reference page](/api/cdk/testing/HarnessLoader) for more details. For example, the `MyPopupHarness` example from above can extend `ContentContainerComponentHarness` to add support to load harnesses within the `` of the component. @@ -259,11 +259,11 @@ Consider if the `MyPopup` component above used the CDK overlay for the popup con class MyPopupHarness extends ComponentHarness { static hostSelector = 'my-popup'; - /** Gets a `HarnessLoader` whose root element is the popup's content element. */ - async getHarnessLoaderForContent(): Promise { - const rootLocator = this.documentRootLocatorFactory(); - return rootLocator.harnessLoaderFor('my-popup-content'); - } +/\*_ Gets a `HarnessLoader` whose root element is the popup's content element. _/ +async getHarnessLoaderForContent(): Promise { +const rootLocator = this.documentRootLocatorFactory(); +return rootLocator.harnessLoaderFor('my-popup-content'); +} } diff --git a/adev/src/content/guide/testing/using-component-harnesses.md b/adev/src/content/guide/testing/using-component-harnesses.md index e39ccb903c4f..f43623bd067e 100644 --- a/adev/src/content/guide/testing/using-component-harnesses.md +++ b/adev/src/content/guide/testing/using-component-harnesses.md @@ -15,17 +15,17 @@ The [Component Dev Kit (CDK)](https://material.angular.io/cdk/categories) is a s ## Test harness environments and loaders You can use component test harnesses in different test environments. Angular CDK supports two built-in environments: + - Unit tests with Angular's `TestBed` - End-to-end tests with [WebDriver](https://developer.mozilla.org/en-US/docs/Web/WebDriver) - Each environment provides a harness loader. The loader creates the harness instances you use throughout your tests. See below for more specific guidance on supported testing environments. Additional testing environments require custom bindings. See the [adding harness support for additional testing environments guide](guide/testing/component-harnesses-testing-environments) for more information. ### Using the loader from `TestbedHarnessEnvironment` for unit tests -For unit tests you can create a harness loader from [TestbedHarnessEnvironment](https://material.angular.io/cdk/testing/api#TestbedHarnessEnvironment). This environment uses a [component fixture](api/core/testing/ComponentFixture) created by Angular's `TestBed`. +For unit tests you can create a harness loader from [TestbedHarnessEnvironment](/api/cdk/testing/TestbedHarnessEnvironment). This environment uses a [component fixture](api/core/testing/ComponentFixture) created by Angular's `TestBed`. To create a harness loader rooted at the fixture's root element, use the `loader()` method: @@ -72,6 +72,7 @@ const myComponentHarnesses = await loader.getHarnesses(MyComponent); As an example, consider a reusable dialog-button component that opens a dialog on click. It contains the following components, each with a corresponding harness: + - `MyDialogButton` (composes the `MyButton` and `MyDialog` with a convenient API) - `MyButton` (a standard button component) - `MyDialog` (a dialog appended to `document.body` by `MyDialogButton` upon click) @@ -84,23 +85,23 @@ let loader: HarnessLoader; let rootLoader: HarnessLoader; beforeEach(() => { - fixture = TestBed.createComponent(MyDialogButton); - loader = TestbedHarnessEnvironment.loader(fixture); - rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture); +fixture = TestBed.createComponent(MyDialogButton); +loader = TestbedHarnessEnvironment.loader(fixture); +rootLoader = TestbedHarnessEnvironment.documentRootLoader(fixture); }); it('loads harnesses', async () => { - // Load a harness for the bootstrapped component with `harnessForFixture` - dialogButtonHarness = - await TestbedHarnessEnvironment.harnessForFixture(fixture, MyDialogButtonHarness); - // The button element is inside the fixture's root element, so we use `loader`. - const buttonHarness = await loader.getHarness(MyButtonHarness); - // Click the button to open the dialog - await buttonHarness.click(); - // The dialog is appended to `document.body`, outside of the fixture's root element, - // so we use `rootLoader` in this case. - const dialogHarness = await rootLoader.getHarness(MyDialogHarness); - // ... make some assertions +// Load a harness for the bootstrapped component with `harnessForFixture` +dialogButtonHarness = +await TestbedHarnessEnvironment.harnessForFixture(fixture, MyDialogButtonHarness); +// The button element is inside the fixture's root element, so we use `loader`. +const buttonHarness = await loader.getHarness(MyButtonHarness); +// Click the button to open the dialog +await buttonHarness.click(); +// The dialog is appended to `document.body`, outside of the fixture's root element, +// so we use `rootLoader` in this case. +const dialogHarness = await rootLoader.getHarness(MyDialogHarness); +// ... make some assertions }); @@ -127,6 +128,7 @@ const allChildLoaders = await myComponentHarness.getAllChildLoaders('.child'); When a page contains multiple instances of a particular component, you may want to filter based on some property of the component to get a particular component instance. You can use a harness predicate, a class used to associate a `ComponentHarness` class with predicates functions that can be used to filter component instances, to do so. When you ask a `HarnessLoader` for a harness, you're actually providing a HarnessQuery. A query can be one of two things: + - A harness constructor. This just gets that harness - A `HarnessPredicate`, which gets harnesses that are filtered based on one or more conditions @@ -149,7 +151,7 @@ For more details refer to the specific harness documentation since additional fi ## Using test harness APIs -While every harness defines an API specific to its corresponding component, they all share a common base class, [ComponentHarness](https://material.angular.io/cdk/testing/api#ComponentHarness). This base class defines a static property, `hostSelector`, that matches the harness class to instances of the component in the DOM. +While every harness defines an API specific to its corresponding component, they all share a common base class, [ComponentHarness](/api/cdk/testing/ComponentHarness). This base class defines a static property, `hostSelector`, that matches the harness class to instances of the component in the DOM. Beyond that, the API of any given harness is specific to its corresponding component; refer to the component's documentation to learn how to use a specific harness. @@ -185,6 +187,7 @@ it('checks state while async action is in progress', async () => { Almost all harness methods are asynchronous and return a `Promise` to support the following: + - Support for unit tests - Support for end-to-end tests - Insulate tests against changes in asynchronous behavior diff --git a/adev/src/content/guide/zoneless.md b/adev/src/content/guide/zoneless.md index 3d2387705bb1..5cf090ce83a6 100644 --- a/adev/src/content/guide/zoneless.md +++ b/adev/src/content/guide/zoneless.md @@ -69,7 +69,7 @@ Similarly, `NgZone.isStable` will always be `true` and should not be used as a c The `NgZone.onMicrotaskEmpty` and `NgZone.onStable` observables are most often used to wait for Angular to complete change detection before performing a task. Instead, these can be replaced by `afterNextRender` -if they need to wait for a single change detection or `afterRender` if there is some condition that might span +if they need to wait for a single change detection or `afterEveryRender` if there is some condition that might span several change detection rounds. In other cases, these observables were used because they happened to be familiar and have similar timing to what was needed. More straightforward or direct DOM APIs can be used instead, such as `MutationObserver` when code needs to wait for certain DOM state (rather than waiting for it indirectly diff --git a/adev/src/content/reference/errors/NG0602.md b/adev/src/content/reference/errors/NG0602.md index 38a92d47c3c6..09e5bf120a8c 100644 --- a/adev/src/content/reference/errors/NG0602.md +++ b/adev/src/content/reference/errors/NG0602.md @@ -7,10 +7,10 @@ Avoid calling functions like `effect` as part of template expressions, as those Computed expressions are expected to be pure. Pure means that expression do not trigger any side effects. -Side effects are operations like scheduling `afterRender`, creating a new `effect`, or subscribing to observables. +Side effects are operations like scheduling `afterNextRender`/`afterEveryRender`, creating a new `effect`, or subscribing to observables. Some operations are explicitly banned inside reactive contexts in order to avoid common pitfalls. -As an example, using `afterRender` inside a `computed` will schedule new render hooks every time the computed expression evaluates. +As an example, using `afterNextRender`/`afterEveryRender` inside a `computed` will schedule new render hooks every time the computed expression evaluates. This is likely not intended and could degrade application performance. ### Fixing the error @@ -18,8 +18,8 @@ This is likely not intended and could degrade application performance. This error guide is non-exhaustive. It captures a few common scenarios and how to address the error. -#### `afterRender` -Move the call for `afterRender` outside of the reactive context. +#### `afterNextRender`/`afterEveryRender` +Move the call for `afterNextRender`/`afterEveryRender` outside of the reactive context. A good place to schedule the after render hook is in the component's class constructor. Alternatively, use `untracked` to leave the reactive context and explicitly opt-out of this error. diff --git a/adev/src/content/reference/releases.md b/adev/src/content/reference/releases.md index 562afa462c61..4c19f2328a4e 100644 --- a/adev/src/content/reference/releases.md +++ b/adev/src/content/reference/releases.md @@ -74,9 +74,9 @@ HELPFUL: Approximate dates are offered as general guidance and are subject to ch | Version | Date | |:--------|:-------------------| -| v19.1 | Week of 2025-01-13 | -| v19.2 | Week of 2025-02-24 | -| v20.0 | Week of 2025-05-26 | +| v20.1 | TBD | +| v20.2 | TBD | +| v21.0 | TBD | ### Support window @@ -93,11 +93,11 @@ The following table provides the status for Angular versions under support. | Version | Status | Released | Active ends | LTS ends | |:--------|:-------|:-----------|:------------|:-----------| -| ^19.0.0 | Active | 2024-11-19 | 2025-05-19 | 2026-05-19 | -| ^18.0.0 | LTS | 2024-05-22 | 2024-11-19 | 2025-11-19 | -| ^17.0.0 | LTS | 2023-11-08 | 2024-05-08 | 2025-05-15 | +| ^20.0.0 | Active | 2025-05-28 | 2025-11-21 | 2026-11-21 | +| ^19.0.0 | LTS | 2024-11-19 | 2025-05-28 | 2026-05-19 | +| ^18.0.0 | LTS | 2024-05-22 | 2024-11-19 | 2025-11-21 | -Angular versions v2 to v16 are no longer supported. +Angular versions v2 to v17 are no longer supported. ### LTS fixes diff --git a/adev/src/content/reference/versions.md b/adev/src/content/reference/versions.md index b1d88458f5b7..79196d85062b 100644 --- a/adev/src/content/reference/versions.md +++ b/adev/src/content/reference/versions.md @@ -15,9 +15,6 @@ This table covers [Angular versions under active support](reference/releases#act | 19.0.x | ^18.19.1 \|\| ^20.11.1 \|\| ^22.0.0 | >=5.5.0 <5.7.0 | ^6.5.3 \|\| ^7.4.0 | | 18.1.x \|\| 18.2.x | ^18.19.1 \|\| ^20.11.1 \|\| ^22.0.0 | >=5.4.0 <5.6.0 | ^6.5.3 \|\| ^7.4.0 | | 18.0.x | ^18.19.1 \|\| ^20.11.1 \|\| ^22.0.0 | >=5.4.0 <5.5.0 | ^6.5.3 \|\| ^7.4.0 | -| 17.3.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.5.0 | ^6.5.3 \|\| ^7.4.0 | -| 17.1.x \|\| 17.2.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.4.0 | ^6.5.3 \|\| ^7.4.0 | -| 17.0.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.3.0 | ^6.5.3 \|\| ^7.4.0 | ## Unsupported Angular versions @@ -27,6 +24,9 @@ guarantees. It is listed here for historical reference. | Angular | Node.js | TypeScript | RxJS | | ------------------ | ------------------------------------ | -------------- | ------------------ | +| 17.3.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.5.0 | ^6.5.3 \|\| ^7.4.0 | +| 17.1.x \|\| 17.2.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.4.0 | ^6.5.3 \|\| ^7.4.0 | +| 17.0.x | ^18.13.0 \|\| ^20.9.0 | >=5.2.0 <5.3.0 | ^6.5.3 \|\| ^7.4.0 | | 16.1.x \|\| 16.2.x | ^16.14.0 \|\| ^18.10.0 | >=4.9.3 <5.2.0 | ^6.5.3 \|\| ^7.4.0 | | 16.0.x | ^16.14.0 \|\| ^18.10.0 | >=4.9.3 <5.1.0 | ^6.5.3 \|\| ^7.4.0 | | 15.1.x \|\| 15.2.x | ^14.20.0 \|\| ^16.13.0 \|\| ^18.10.0 | >=4.8.2 <5.0.0 | ^6.5.3 \|\| ^7.4.0 | diff --git a/adev/src/content/tutorials/deferrable-views/intro/config.json b/adev/src/content/tutorials/deferrable-views/intro/config.json index e734d8b90714..7c095a388732 100644 --- a/adev/src/content/tutorials/deferrable-views/intro/config.json +++ b/adev/src/content/tutorials/deferrable-views/intro/config.json @@ -2,5 +2,5 @@ "title": "Deferrable Views", "type": "editor", "nextTutorial": "first-app", - "openFiles": ["src/app/app.component.ts"] + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/deferrable-views/intro/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/intro/src/app/app.ts similarity index 81% rename from adev/src/content/tutorials/deferrable-views/intro/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/intro/src/app/app.ts index 5321711c297c..6b43cd5dc499 100644 --- a/adev/src/content/tutorials/deferrable-views/intro/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/intro/src/app/app.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; Welcome to Angular! `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/README.md b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/README.md index 6a58ecd67882..89e7690f6797 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/README.md +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/README.md @@ -10,7 +10,7 @@ In this activity, you'll learn how to use deferrable views to defer load a secti -In your `app.component.ts`, wrap the `article-comments` component with a `@defer` block to defer load it. +In your `app.ts`, wrap the `article-comments` component with a `@defer` block to defer load it. @defer { diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.ts similarity index 78% rename from adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.ts index c523a7662fa8..aa67bfde28dd 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -22,6 +22,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.ts similarity index 92% rename from adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.ts index a92992cb753d..8d84a38a547a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.ts @@ -25,4 +25,4 @@ import {Component} from '@angular/core'; `, ], }) -export class ArticleCommentsComponent {} +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/config.json b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/config.json index 164da544038f..c8c1fe1085c0 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/config.json +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts", "src/app/article-comments.component.ts"], + "openFiles": ["src/app/app.ts", "src/app/article-comments.ts"], "title": "What are deferrable views", "type": "editor" } diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.ts similarity index 77% rename from adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.ts index 18a2bcf6bb70..1d01152fbf4e 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -20,6 +20,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.ts similarity index 92% rename from adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.ts index a92992cb753d..8d84a38a547a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/answer/src/app/article-comments.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.ts @@ -25,4 +25,4 @@ import {Component} from '@angular/core'; `, ], }) -export class ArticleCommentsComponent {} +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/README.md b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/README.md index dbdbc355e952..70af0fda0246 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/README.md +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/README.md @@ -37,7 +37,7 @@ In this activity, you'll learn how to use the `@loading`, `@error` and `@placeho -In your `app.component.ts`, add a `@placeholder` block to the `@defer` block. +In your `app.ts`, add a `@placeholder` block to the `@defer` block. @defer { @@ -70,7 +70,7 @@ The `@loading` block accepts two optional parameters: Both parameters are specified in time increments of milliseconds (ms) or seconds (s). -Update `app.component.ts` to include a `@loading` block with a minimum parameter of `1s` as well as an after parameter with the value 500ms to the @loading block. +Update `app.ts` to include a `@loading` block with a minimum parameter of `1s` as well as an after parameter with the value 500ms to the @loading block. @defer { diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.ts similarity index 83% rename from adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.ts index 2937cb93bfdb..010d534fbf6a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -28,6 +28,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.ts similarity index 92% rename from adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.ts index a92992cb753d..8d84a38a547a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/article-comments.ts @@ -25,4 +25,4 @@ import {Component} from '@angular/core'; `, ], }) -export class ArticleCommentsComponent {} +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/config.json b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/config.json index 58ccf17a4c5e..69eb5ada4085 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/config.json +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts", "src/app/article-comments.component.ts"], + "openFiles": ["src/app/app.ts", "src/app/article-comments.ts"], "title": "@loading, @error and @placeholder blocks", "type": "editor" } diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.ts similarity index 78% rename from adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.ts index c523a7662fa8..aa67bfde28dd 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -22,6 +22,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.ts similarity index 92% rename from adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.ts index a92992cb753d..8d84a38a547a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/1-what-are-deferrable-views/src/app/article-comments.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/app/article-comments.ts @@ -25,4 +25,4 @@ import {Component} from '@angular/core'; `, ], }) -export class ArticleCommentsComponent {} +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/README.md b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/README.md index ccd77e884526..a0cfc837a8ec 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/README.md +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/README.md @@ -39,7 +39,7 @@ In this activity, you'll learn how to use triggers to specify the condition to l -In your `app.component.ts`, add an `on hover` trigger to the `@defer` block. +In your `app.ts`, add an `on hover` trigger to the `@defer` block. @defer (on hover) { diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.ts similarity index 85% rename from adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.ts index b91abc88c564..fbd6bdfd3545 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -30,6 +30,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.component.ts deleted file mode 100644 index a92992cb753d..000000000000 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'article-comments', - template: ` -

Comments

-

- Building for the web is fantastic! -

-

- The new template syntax is great -

-

- I agree with the other comments! -

- `, - styles: [ - ` - .comment { - padding: 15px; - margin-left: 30px; - background-color: paleturquoise; - border-radius: 20px; - } - `, - ], -}) -export class ArticleCommentsComponent {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.ts new file mode 100644 index 000000000000..8d84a38a547a --- /dev/null +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/app/article-comments.ts @@ -0,0 +1,28 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'article-comments', + template: ` +

Comments

+

+ Building for the web is fantastic! +

+

+ The new template syntax is great +

+

+ I agree with the other comments! +

+ `, + styles: [ + ` + .comment { + padding: 15px; + margin-left: 30px; + background-color: paleturquoise; + border-radius: 20px; + } + `, + ], +}) +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/config.json b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/config.json index 0151d3e72e20..ee6cc05cdac8 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/config.json +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts", "src/app/article-comments.component.ts"], + "openFiles": ["src/app/app.ts", "src/app/article-comments.ts"], "title": "Defer triggers", "type": "editor" } diff --git a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.component.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.ts similarity index 83% rename from adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.component.ts rename to adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.ts index 2937cb93bfdb..010d534fbf6a 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/2-loading-error-placeholder/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ArticleCommentsComponent} from './article-comments.component'; +import {ArticleComments} from './article-comments'; @Component({ selector: 'app-root', @@ -28,6 +28,6 @@ import {ArticleCommentsComponent} from './article-comments.component';
`, - imports: [ArticleCommentsComponent], + imports: [ArticleComments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.component.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.component.ts deleted file mode 100644 index a92992cb753d..000000000000 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'article-comments', - template: ` -

Comments

-

- Building for the web is fantastic! -

-

- The new template syntax is great -

-

- I agree with the other comments! -

- `, - styles: [ - ` - .comment { - padding: 15px; - margin-left: 30px; - background-color: paleturquoise; - border-radius: 20px; - } - `, - ], -}) -export class ArticleCommentsComponent {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.ts new file mode 100644 index 000000000000..8d84a38a547a --- /dev/null +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/app/article-comments.ts @@ -0,0 +1,28 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'article-comments', + template: ` +

Comments

+

+ Building for the web is fantastic! +

+

+ The new template syntax is great +

+

+ I agree with the other comments! +

+ `, + styles: [ + ` + .comment { + padding: 15px; + margin-left: 30px; + background-color: paleturquoise; + border-radius: 20px; + } + `, + ], +}) +export class ArticleComments {} diff --git a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/main.ts b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/main.ts +++ b/adev/src/content/tutorials/deferrable-views/steps/3-defer-triggers/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/first-app/intro/config.json b/adev/src/content/tutorials/first-app/intro/config.json index d60096b3ca11..0f79c0f9b5bc 100644 --- a/adev/src/content/tutorials/first-app/intro/config.json +++ b/adev/src/content/tutorials/first-app/intro/config.json @@ -3,5 +3,5 @@ "type": "editor", "src": "../steps/14-http/src", "nextTutorial": "learn-angular", - "openFiles": ["src/app/app.component.ts"] + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/01-hello-world/README.md b/adev/src/content/tutorials/first-app/steps/01-hello-world/README.md index 51550d2067d7..bdeae67f3bd3 100644 --- a/adev/src/content/tutorials/first-app/steps/01-hello-world/README.md +++ b/adev/src/content/tutorials/first-app/steps/01-hello-world/README.md @@ -58,12 +58,12 @@ In the **Explorer** pane of your IDE: 1. `main.ts` is where the app starts running. 1. `favicon.ico` is the app's icon, just as you would find in any web site. 1. In the file explorer, find the Angular app's component files (`/app`). - 1. `app.component.ts` is the source file that describes the `app-root` component. + 1. `app.ts` is the source file that describes the `app-root` component. This is the top-level Angular component in the app. A component is the basic building block of an Angular application. The component description includes the component's code, HTML template, and styles, which can be described in this file, or in separate files. In this app, the styles are in a separate file while the component's code and HTML template are in this file. - 1. `app.component.css` is the style sheet for this component. + 1. `app.css` is the style sheet for this component. 1. New components are added to this directory. 1. In the file explorer, find the image directory (`/assets`) that contains images used by the app. 1. In the file explorer, find the files and directories that an Angular app needs to build and run, but they are not files that you normally interact with. @@ -87,20 +87,20 @@ In your IDE: 1. In `index.html`, replace the `` element with this code to update the title of the app. - <docs-code header="Replace in src/index.html" path="adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/index.html" visibleLines="[5]"/> + <docs-code header="Replace in src/index.html" path="adev/src/content/tutorials/first-app/steps/02-Home/src/index.html" visibleLines="[5]"/> Then, save the changes you just made to `index.html`. -1. Next, open `first-app/src/app/app.component.ts`. -1. In `app.component.ts`, in the `@Component` definition, replace the `template` line with this code to change the text in the app component. +1. Next, open `first-app/src/app/app.ts`. +1. In `app.ts`, in the `@Component` definition, replace the `template` line with this code to change the text in the app component. - <docs-code header="Replace in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.ts" visibleLines="[7,9]"/> + <docs-code header="Replace in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.ts" visibleLines="[7,9]"/> -1. In `app.component.ts`, in the `AppComponent` class definition, replace the `title` line with this code to change the component title. +1. In `app.ts`, in the `App` class definition, replace the `title` line with this code to change the component title. - <docs-code header="Replace in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.ts" visibleLines="[12,14]"/> + <docs-code header="Replace in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.ts" visibleLines="[12,14]"/> - Then, save the changes you made to `app.component.ts`. + Then, save the changes you made to `app.ts`. 1. If you stopped the `ng serve` command from step 1, in the **Terminal** window of your IDE, run `ng serve` again. 1. Open your browser and navigate to `localhost:4200` and confirm that the app builds without error and displays *Hello world* in the title and body of your app: diff --git a/adev/src/content/tutorials/first-app/steps/01-hello-world/config.json b/adev/src/content/tutorials/first-app/steps/01-hello-world/config.json index e6bfeed95b13..b67a5512c96d 100644 --- a/adev/src/content/tutorials/first-app/steps/01-hello-world/config.json +++ b/adev/src/content/tutorials/first-app/steps/01-hello-world/config.json @@ -1,6 +1,6 @@ { "title": "Hello world!", "type": "editor", - "answerSrc": "../02-HomeComponent/src", - "openFiles": ["src/app/app.component.ts"] + "answerSrc": "../02-Home/src", + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.ts index b4007e5e572c..59bc4cad7c69 100644 --- a/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/01-hello-world/src/app/app.ts @@ -6,8 +6,8 @@ import {Component} from '@angular/core'; template: ` <h1>Default</h1> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'default'; } diff --git a/adev/src/content/tutorials/first-app/steps/01-hello-world/src/main.ts b/adev/src/content/tutorials/first-app/steps/01-hello-world/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/01-hello-world/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/01-hello-world/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/README.md b/adev/src/content/tutorials/first-app/steps/02-Home/README.md similarity index 60% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/README.md rename to adev/src/content/tutorials/first-app/steps/02-Home/README.md index f5724801e8c5..4007439832d6 100644 --- a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/README.md +++ b/adev/src/content/tutorials/first-app/steps/02-Home/README.md @@ -6,7 +6,7 @@ This tutorial lesson demonstrates how to create a new [component](guide/componen ## What you'll learn -Your app has a new component: `HomeComponent`. +Your app has a new component: `Home`. ## Conceptual preview of Angular components @@ -15,7 +15,7 @@ Components contain the code, HTML layout, and CSS style information that provide In Angular, components can contain other components. An app's functions and appearance can be divided and partitioned into components. In Angular, components have metadata that define its properties. -When you create your `HomeComponent`, you use these properties: +When you create your `Home`, you use these properties: * `selector`: to describe how Angular refers to the component in templates. * `standalone`: to describe whether the component requires a `NgModule`. @@ -29,13 +29,13 @@ When you create your `HomeComponent`, you use these properties: <docs-workflow> -<docs-step title="Create the `HomeComponent`"> +<docs-step title="Create the `Home`"> In this step, you create a new component for your app. In the **Terminal** pane of your IDE: 1. In your project directory, navigate to the `first-app` directory. -1. Run this command to create a new `HomeComponent` +1. Run this command to create a new `Home` <docs-code language="shell"> ng generate component home @@ -59,54 +59,54 @@ In the **Terminal** pane of your IDE: </docs-step> <docs-step title="Add the new component to your app's layout"> -In this step, you add the new component, `HomeComponent` to your app's root component, `AppComponent`, so that it displays in your app's layout. +In this step, you add the new component, `Home` to your app's root component, `App`, so that it displays in your app's layout. In the **Edit** pane of your IDE: -1. Open `app.component.ts` in the editor. -1. In `app.component.ts`, import `HomeComponent` by adding this line to the file level imports. +1. Open `app.ts` in the editor. +1. In `app.ts`, import `Home` by adding this line to the file level imports. - <docs-code header="Import HomeComponent in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts" visibleLines="[2]"/> + <docs-code header="Import Home in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts" visibleLines="[2]"/> -1. In `app.component.ts`, in `@Component`, update the `imports` array property and add `HomeComponent`. +1. In `app.ts`, in `@Component`, update the `imports` array property and add `Home`. - <docs-code header="Replace in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts" visibleLines="[7]"/> + <docs-code header="Replace in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts" visibleLines="[7]"/> -1. In `app.component.ts`, in `@Component`, update the `template` property to include the following HTML code. +1. In `app.ts`, in `@Component`, update the `template` property to include the following HTML code. - <docs-code header="Replace in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts" visibleLines="[8,17]"/> + <docs-code header="Replace in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts" visibleLines="[8,17]"/> -1. Save your changes to `app.component.ts`. +1. Save your changes to `app.ts`. 1. If `ng serve` is running, the app should update. If `ng serve` is not running, start it again. - *Hello world* in your app should change to *home works!* from the `HomeComponent`. + *Hello world* in your app should change to *home works!* from the `Home`. 1. Check the running app in the browser and confirm that the app has been updated. <img alt="browser frame of page displaying the text 'home works!'" src="assets/images/tutorials/first-app/homes-app-lesson-02-step-2.png"> </docs-step> -<docs-step title="Add features to `HomeComponent`"> +<docs-step title="Add features to `Home`"> -In this step you add features to `HomeComponent`. +In this step you add features to `Home`. -In the previous step, you added the default `HomeComponent` to your app's template so its default HTML appeared in the app. +In the previous step, you added the default `Home` to your app's template so its default HTML appeared in the app. In this step, you add a search filter and button that is used in a later lesson. -For now, that's all that `HomeComponent` has. +For now, that's all that `Home` has. Note that, this step just adds the search elements to the layout without any functionality, yet. In the **Edit** pane of your IDE: -1. In the `first-app` directory, open `home.component.ts` in the editor. -1. In `home.component.ts`, in `@Component`, update the `template` property with this code. +1. In the `first-app` directory, open `home.ts` in the editor. +1. In `home.ts`, in `@Component`, update the `template` property with this code. - <docs-code header="Replace in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.ts" visibleLines="[8,15]"/> + <docs-code header="Replace in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.ts" visibleLines="[8,15]"/> -1. Next, open `home.component.css` in the editor and update the content with these styles. +1. Next, open `home.css` in the editor and update the content with these styles. - NOTE: In the browser, these can go in `src/app/home/home.component.ts` in the `styles` array. + NOTE: In the browser, these can go in `src/app/home/home.ts` in the `styles` array. - <docs-code header="Replace in src/app/home/home.component.css" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.css"/> + <docs-code header="Replace in src/app/home/home.css" path="adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.css"/> 1. Confirm that the app builds without error. You should find the filter query box and button in your app and they should be styled. diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/config.json b/adev/src/content/tutorials/first-app/steps/02-Home/config.json similarity index 70% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/config.json rename to adev/src/content/tutorials/first-app/steps/02-Home/config.json index 2b801039e39e..4074bc42c8a0 100644 --- a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/config.json +++ b/adev/src/content/tutorials/first-app/steps/02-Home/config.json @@ -2,5 +2,5 @@ "title": "Create home component", "type": "editor", "answerSrc": "../03-HousingLocation/src", - "openFiles": ["src/app/app.component.ts"] + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.ts similarity index 71% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.ts index 7ed4a202280b..3e08b2d8c3c3 100644 --- a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/02-Home/src/app/app.ts @@ -6,8 +6,8 @@ import {Component} from '@angular/core'; template: ` <h1>Hello world!</h1> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/assets/location-pin.svg b/adev/src/content/tutorials/first-app/steps/02-Home/src/assets/location-pin.svg similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/assets/location-pin.svg rename to adev/src/content/tutorials/first-app/steps/02-Home/src/assets/location-pin.svg diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/assets/logo.svg b/adev/src/content/tutorials/first-app/steps/02-Home/src/assets/logo.svg similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/assets/logo.svg rename to adev/src/content/tutorials/first-app/steps/02-Home/src/assets/logo.svg diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/favicon.ico b/adev/src/content/tutorials/first-app/steps/02-Home/src/favicon.ico similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/favicon.ico rename to adev/src/content/tutorials/first-app/steps/02-Home/src/favicon.ico diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/index.html b/adev/src/content/tutorials/first-app/steps/02-Home/src/index.html similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/index.html rename to adev/src/content/tutorials/first-app/steps/02-Home/src/index.html diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/main.ts b/adev/src/content/tutorials/first-app/steps/02-Home/src/main.ts similarity index 64% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/main.ts rename to adev/src/content/tutorials/first-app/steps/02-Home/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/02-Home/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/styles.css b/adev/src/content/tutorials/first-app/steps/02-Home/src/styles.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/02-HomeComponent/src/styles.css rename to adev/src/content/tutorials/first-app/steps/02-Home/src/styles.css diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/README.md b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/README.md index aa5fa19612ea..91332a02c899 100644 --- a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/README.md +++ b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/README.md @@ -6,18 +6,18 @@ This tutorial lesson demonstrates how to add the `HousingLocation` component to ## What you'll learn -* Your app has a new component: `HousingLocationComponent` and it displays a message confirming that the component was added to your application. +* Your app has a new component: `HousingLocation` and it displays a message confirming that the component was added to your application. <docs-workflow> -<docs-step title="Create the `HousingLocationComponent`"> +<docs-step title="Create the `HousingLocation`"> In this step, you create a new component for your app. In the **Terminal** pane of your IDE: 1. In your project directory, navigate to the `first-app` directory. -1. Run this command to create a new `HousingLocationComponent` +1. Run this command to create a new `HousingLocation` <docs-code language="shell"> ng generate component housingLocation @@ -40,33 +40,33 @@ In the **Terminal** pane of your IDE: </docs-step> <docs-step title="Add the new component to your app's layout"> -In this step, you add the new component, `HousingLocationComponent` to your app's `HomeComponent`, so that it displays in your app's layout. +In this step, you add the new component, `HousingLocation` to your app's `Home`, so that it displays in your app's layout. In the **Edit** pane of your IDE: -1. Open `home.component.ts` in the editor. -1. In `home.component.ts`, import `HousingLocationComponent` by adding this line to the file level imports. +1. Open `home.ts` in the editor. +1. In `home.ts`, import `HousingLocation` by adding this line to the file level imports. - <docs-code header="Import HousingLocationComponent in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts" visibleLines="[3]"/> + <docs-code header="Import HousingLocation in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts" visibleLines="[3]"/> -1. Next update the `imports` property of the `@Component` metadata by adding `HousingLocationComponent` to the array. +1. Next update the `imports` property of the `@Component` metadata by adding `HousingLocation` to the array. - <docs-code header="Add HousingLocationComponent to imports array in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts" visibleLines="[7]"/> + <docs-code header="Add HousingLocation to imports array in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts" visibleLines="[7]"/> -1. Now the component is ready for use in the template for the `HomeComponent`. Update the `template` property of the `@Component` metadata to include a reference to the `<app-housing-location>` tag. +1. Now the component is ready for use in the template for the `Home`. Update the `template` property of the `@Component` metadata to include a reference to the `<app-housing-location>` tag. - <docs-code header="Add housing location to the component template in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts" visibleLines="[8,18]"/> + <docs-code header="Add housing location to the component template in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts" visibleLines="[8,18]"/> </docs-step> <docs-step title="Add the styles for the component"> -In this step, you will copy over the pre-written styles for the `HousingLocationComponent` to your app so that the app renders properly. +In this step, you will copy over the pre-written styles for the `HousingLocation` to your app so that the app renders properly. -1. Open `src/app/housing-location/housing-location.component.css`, and paste the styles below into the file: +1. Open `src/app/housing-location/housing-location.css`, and paste the styles below into the file: - NOTE: In the browser, these can go in `src/app/housing-location/housing-location.component.ts` in the `styles` array. + NOTE: In the browser, these can go in `src/app/housing-location/housing-location.ts` in the `styles` array. - <docs-code header="Add CSS styles to housing location to the component in src/app/housing-location/housing-location.component.css" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.css"/> + <docs-code header="Add CSS styles to housing location to the component in src/app/housing-location/housing-location.css" path="adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.css"/> 1. Save your code, return to the browser and confirm that the app builds without error. You should find the message "housing-location works!" rendered to the screen.Correct any errors before you continue to the next step. diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/config.json b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/config.json index 0549b4ac7286..494c487c770b 100644 --- a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/config.json +++ b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/config.json @@ -2,5 +2,5 @@ "title": "Create housing location component", "type": "editor", "answerSrc": "../04-interfaces/src", - "openFiles": ["src/app/home/home.component.ts"] + "openFiles": ["src/app/home/home.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts similarity index 71% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts index 81cc46a21001..b67e16f7f684 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; @Component({ selector: 'app-root', - imports: [HomeComponent], + imports: [Home], template: ` <main> <header class="brand-name"> @@ -14,8 +14,8 @@ import {HomeComponent} from './home/home.component'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.ts similarity index 83% rename from adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.ts index 09dced57301a..bf4ee6b2f96f 100644 --- a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/home/home.ts @@ -12,6 +12,6 @@ import {CommonModule} from '@angular/common'; </form> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/main.ts b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/README.md b/adev/src/content/tutorials/first-app/steps/04-interfaces/README.md index bb1584bd8d6b..548970bb50ec 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/README.md +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/README.md @@ -63,20 +63,20 @@ You won't see this sample data appear in your app yet. There are a few more lessons to complete before that happens. 1. In the **Terminal** pane of your IDE, run the `ng serve` command, if it isn't already running, to build the app and serve your app to `http://localhost:4200`. -1. In the **Edit** pane of your IDE, open `src/app/home/home.component.ts`. -1. In `src/app/home/home.component.ts`, add this import statement after the existing `import` statements so that `HomeComponent` can use the new interface. +1. In the **Edit** pane of your IDE, open `src/app/home/home.ts`. +1. In `src/app/home/home.ts`, add this import statement after the existing `import` statements so that `Home` can use the new interface. - <docs-code header="Import HomeComponent in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts" visibleLines="[4]"/> + <docs-code header="Import Home in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts" visibleLines="[4]"/> -1. In `src/app/home/home.component.ts`, replace the empty `export class HomeComponent {}` definition with this code to create a single instance of the new interface in the component. +1. In `src/app/home/home.ts`, replace the empty `export class Home {}` definition with this code to create a single instance of the new interface in the component. - <docs-code header="Add sample data to src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts" visibleLines="[23,36]"/> + <docs-code header="Add sample data to src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts" visibleLines="[23,36]"/> -1. Confirm that your `home.component.ts` file matches like this example. +1. Confirm that your `home.ts` file matches like this example. - <docs-code header="src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts" visibleLines="[1,36]" /> + <docs-code header="src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts" visibleLines="[1,36]" /> - By adding the `housingLocation` property of type `HousingLocation` to the `HomeComponent` class, we're able to confirm that the data matches the description of the interface. If the data didn't satisfy the description of the interface, the IDE has enough information to give us helpful errors. + By adding the `housingLocation` property of type `HousingLocation` to the `Home` class, we're able to confirm that the data matches the description of the interface. If the data didn't satisfy the description of the interface, the IDE has enough information to give us helpful errors. 1. Save your changes and confirm the app does not have any errors. Open the browser and confirm that your application still displays the message "housing-location works!" diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/config.json b/adev/src/content/tutorials/first-app/steps/04-interfaces/config.json index 3cb7a1325c20..5c7c02806964 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/config.json +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/config.json @@ -2,5 +2,5 @@ "title": "Create an interface", "type": "editor", "answerSrc": "../05-inputs/src", - "openFiles": ["src/app/home/home.component.ts"] + "openFiles": ["src/app/home/home.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.ts similarity index 71% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.ts index 81cc46a21001..b67e16f7f684 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; @Component({ selector: 'app-root', - imports: [HomeComponent], + imports: [Home], template: ` <main> <header class="brand-name"> @@ -14,8 +14,8 @@ import {HomeComponent} from './home/home.component'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts similarity index 66% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts index 1f51c8f12687..8cea4c62c07f 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/home/home.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; +import {HousingLocation} from '../housing-location/housing-location'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -15,6 +15,6 @@ import {HousingLocationComponent} from '../housing-location/housing-location.com <app-housing-location></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.ts index d533c877af8c..79632760e936 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/housing-location/housing-location.ts @@ -7,6 +7,6 @@ import {CommonModule} from '@angular/common'; template: ` <p>housing-location works!</p> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent {} +export class HousingLocation {} diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/main.ts b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/04-interfaces/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/README.md b/adev/src/content/tutorials/first-app/steps/05-inputs/README.md index 97e4e6541690..dac34b0deab6 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/README.md +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/README.md @@ -6,13 +6,13 @@ This tutorial lesson demonstrates how to create a component `@Input()` and use i ## What you'll learn -Your app's `HousingLocationComponent` template has a `HousingLocation` property to receive input. +Your app's `HousingLocation` template has a `HousingLocation` property to receive input. ## Conceptual preview of Inputs [Inputs](api/core/Input) allow components to share data. The direction of the data sharing is from parent component to child component. -In this lesson, you'll define `@Input()` properties in the `HousingLocationComponent` component which will enable you to customize the data displayed in the component. +In this lesson, you'll define `@Input()` properties in the `HousingLocation` component which will enable you to customize the data displayed in the component. Learn more in the [Accepting data with input properties](guide/components/inputs) and [Custom events with outputs](guide/components/outputs) guides. @@ -23,17 +23,17 @@ This step imports the `Input` decorator into the class. In the code editor: -1. Navigate to `src/app/housing-location/housing-location.component.ts` +1. Navigate to `src/app/housing-location/housing-location.ts` 1. Update the file imports to include `Input` and `HousingLocation`: - <docs-code header="Import HousingLocationComponent and Input in src/app/housing-location/housing-location.component.ts" path="adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.ts" visibleLines="[1,3]"/> + <docs-code header="Import HousingLocation and Input in src/app/housing-location/housing-location.ts" path="adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.ts" visibleLines="[1,3]"/> </docs-step> <docs-step title="Add the Input property"> -1. In the same file, add a property called `housingLocation` of type `HousingLocation` to the `HousingLocationComponent` class. Add an `!` after the property name and prefix it with the `@Input()` decorator: +1. In the same file, add a property called `housingLocation` of type `HousingLocation` to the `HousingLocation` class. Add an `!` after the property name and prefix it with the `@Input()` decorator: - <docs-code header="Import HousingLocationComponent and Input in src/app/housing-location/housing-location.component.ts" path="adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.ts" visibleLines="[13,15]"/> + <docs-code header="Import HousingLocation and Input in src/app/housing-location/housing-location.ts" path="adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.ts" visibleLines="[13,15]"/> You have to add the `!` because the input is expecting the value to be passed. In this case, there is no default value. In our example application case we know that the value will be passed in - this is by design. The exclamation point is called the non-null assertion operator and it tells the TypeScript compiler that the value of this property won't be null or undefined. diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/config.json b/adev/src/content/tutorials/first-app/steps/05-inputs/config.json index 2908f719ea3f..b129c0dd7a61 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/config.json +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/config.json @@ -2,5 +2,5 @@ "title": "Add inputs to components", "type": "editor", "answerSrc": "../06-property-binding/src", - "openFiles": ["src/app/housing-location/housing-location.component.ts"] + "openFiles": ["src/app/housing-location/housing-location.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.ts similarity index 71% rename from adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.ts index 81cc46a21001..b67e16f7f684 100644 --- a/adev/src/content/tutorials/first-app/steps/04-interfaces/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/app.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; @Component({ selector: 'app-root', - imports: [HomeComponent], + imports: [Home], template: ` <main> <header class="brand-name"> @@ -14,8 +14,8 @@ import {HomeComponent} from './home/home.component'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts index ff56dfc5e797..3b2d98a1f8fb 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocation} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -17,9 +17,9 @@ import {HousingLocation} from '../housinglocation'; <app-housing-location></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { +export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; housingLocation: HousingLocation = { diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.ts index d533c877af8c..79632760e936 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housing-location/housing-location.ts @@ -7,6 +7,6 @@ import {CommonModule} from '@angular/common'; template: ` <p>housing-location works!</p> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent {} +export class HousingLocation {} diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/05-inputs/src/main.ts b/adev/src/content/tutorials/first-app/steps/05-inputs/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/05-inputs/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/05-inputs/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/README.md b/adev/src/content/tutorials/first-app/steps/06-property-binding/README.md index 864a21a61c62..a03c898c228f 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/README.md +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/README.md @@ -6,8 +6,8 @@ This tutorial lesson demonstrates how to add property binding to a template and ## What you'll learn -* Your app has data bindings in the `HomeComponent` template. -* Your app sends data from the `HomeComponent` to the `HousingLocationComponent`. +* Your app has data bindings in the `Home` template. +* Your app sends data from the `Home` to the `HousingLocation`. ## Conceptual preview of Inputs @@ -19,18 +19,18 @@ For a more in depth explanation, please refer to the [Property binding](guide/te <docs-workflow> -<docs-step title="Update the `HomeComponent` template"> +<docs-step title="Update the `Home` template"> This step adds property binding to the `<app-housing-location>` tag. In the code editor: -1. Navigate to `src/app/home/home.component.ts` +1. Navigate to `src/app/home/home.ts` 1. In the template property of the `@Component` decorator, update the code to match the code below: - <docs-code header="Add housingLocation property binding" path="adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.ts" visibleLines="[17,19]"/> + <docs-code header="Add housingLocation property binding" path="adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.ts" visibleLines="[17,19]"/> When adding a property binding to a component tag, we use the `[attribute] = "value"` syntax to notify Angular that the assigned value should be treated as a property from the component class and not a string value. - The value on the right-hand side is the name of the property from the `HomeComponent`. + The value on the right-hand side is the name of the property from the `Home`. </docs-step> <docs-step title="Confirm the code still works"> @@ -40,7 +40,7 @@ In the code editor: </docs-workflow> -SUMMARY: In this lesson, you added a new property binding and passed in a reference to a class property. Now, the `HousingLocationComponent` has access to data that it can use to customize the component's display. +SUMMARY: In this lesson, you added a new property binding and passed in a reference to a class property. Now, the `HousingLocation` has access to data that it can use to customize the component's display. For more information about the topics covered in this lesson, visit: diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/config.json b/adev/src/content/tutorials/first-app/steps/06-property-binding/config.json index 40bb487d6309..6be9c8765608 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/config.json +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/config.json @@ -2,5 +2,5 @@ "title": "Add property binding to components", "type": "editor", "answerSrc": "../07-dynamic-template-values/src", - "openFiles": ["src/app/home/home.component.ts"] + "openFiles": ["src/app/home/home.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.ts similarity index 71% rename from adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.ts index 81cc46a21001..b67e16f7f684 100644 --- a/adev/src/content/tutorials/first-app/steps/03-HousingLocation/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/app.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; @Component({ selector: 'app-root', - imports: [HomeComponent], + imports: [Home], template: ` <main> <header class="brand-name"> @@ -14,8 +14,8 @@ import {HomeComponent} from './home/home.component'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.ts similarity index 69% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.ts index ff56dfc5e797..1862017677ae 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocation} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -17,12 +17,12 @@ import {HousingLocation} from '../housinglocation'; <app-housing-location></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { +export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - housingLocation: HousingLocation = { + housingLocation: HousingLocationInfo = { id: 9999, name: 'Test Home', city: 'Test city', diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.ts similarity index 54% rename from adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.ts index 308f6c6ac25f..af4acf4b1977 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housing-location/housing-location.ts @@ -1,14 +1,14 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-housing-location', imports: [CommonModule], template: ` <p>housing-location works!</p> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/main.ts b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/06-property-binding/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/06-property-binding/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/README.md b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/README.md index e0bc8d36ca0d..1f479d8a0093 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/README.md +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/README.md @@ -6,7 +6,7 @@ This tutorial lesson demonstrates how to add interpolation to Angular templates ## What you'll learn -- Your app will display interpolated values in the `HousingLocationComponent` template. +- Your app will display interpolated values in the `HousingLocation` template. - Your app will render a housing location data to the browser. ## Conceptual preview of interpolation @@ -19,15 +19,15 @@ For a more in depth explanation, please refer to the [Displaying values with int <docs-workflow> -<docs-step title="Update `HousingLocationComponent` template to include interpolated values"> -This step adds new HTML structure and interpolated values in the `HousingLocationComponent` template. +<docs-step title="Update `HousingLocation` template to include interpolated values"> +This step adds new HTML structure and interpolated values in the `HousingLocation` template. In the code editor: -1. Navigate to `src/app/housing-location/housing-location.component.ts` +1. Navigate to `src/app/housing-location/housing-location.ts` 1. In the template property of the `@Component` decorator, replace the existing HTML markup with the following code: -<docs-code header="Update HousingLocationComponent template" path="adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.ts" visibleLines="[9,20]"/> +<docs-code header="Update HousingLocation template" path="adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.ts" visibleLines="[9,20]"/> In this updated template code you have used property binding to bind the `housingLocation.photo` to the `src` attribute. The `alt` attribute uses interpolation to give more context to the alt text of the image. diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/config.json b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/config.json index a2fd1893733b..0b74f2e24ec8 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/config.json +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/config.json @@ -2,5 +2,5 @@ "title": "Add dynamic values to templates", "type": "editor", "answerSrc": "../08-ngFor/src", - "openFiles": ["src/app/housing-location/housing-location.component.ts"] + "openFiles": ["src/app/housing-location/housing-location.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.component.ts deleted file mode 100644 index 81cc46a21001..000000000000 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; - -@Component({ - selector: 'app-root', - imports: [HomeComponent], - template: ` - <main> - <header class="brand-name"> - <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> - </header> - <section class="content"> - <app-home></app-home> - </section> - </main> - `, - styleUrls: ['./app.component.css'], -}) -export class AppComponent { - title = 'homes'; -} diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.ts new file mode 100644 index 000000000000..b67e16f7f684 --- /dev/null +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/app.ts @@ -0,0 +1,21 @@ +import {Component} from '@angular/core'; +import {Home} from './home/home'; + +@Component({ + selector: 'app-root', + imports: [Home], + template: ` + <main> + <header class="brand-name"> + <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> + </header> + <section class="content"> + <app-home></app-home> + </section> + </main> + `, + styleUrls: ['./app.css'], +}) +export class App { + title = 'homes'; +} diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.ts index 12ad1d27c613..54a16e327458 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -17,12 +17,12 @@ import {HousingLocation} from '../housinglocation'; <app-housing-location [housingLocation]="housingLocation"></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { +export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - housingLocation: HousingLocation = { + housingLocation: HousingLocationInfo = { id: 9999, name: 'Test Home', city: 'Test city', diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.ts similarity index 54% rename from adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.ts index 9187bf0929c6..66e647918d27 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-housing-location', @@ -8,8 +8,8 @@ import {HousingLocation} from '../housinglocation'; template: ` <p>housing-location works!</p> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/main.ts b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/README.md b/adev/src/content/tutorials/first-app/steps/08-ngFor/README.md index db60aa6eab89..67d45115c2cd 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/README.md +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/README.md @@ -19,27 +19,27 @@ For a more in depth explanation, please refer to the [Built-in directives](guide <docs-workflow> -<docs-step title="Add housing data to the `HomeComponent`"> +<docs-step title="Add housing data to the `Home`"> -In the `HomeComponent` there is only a single housing location. In this step, you will add an array of `HousingLocation` entries. +In the `Home` there is only a single housing location. In this step, you will add an array of `HousingLocation` entries. -1. In `src/app/home/home.component.ts`, remove the `housingLocation` property from the `HomeComponent` class. -1. Update the `HomeComponent` class to have a property called `housingLocationList`. Update your code to match the following code: - <docs-code header="Add housingLocationList property" path="adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.ts" visibleLines="26-131"/> +1. In `src/app/home/home.ts`, remove the `housingLocation` property from the `Home` class. +1. Update the `Home` class to have a property called `housingLocationList`. Update your code to match the following code: + <docs-code header="Add housingLocationList property" path="adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.ts" visibleLines="26-131"/> IMPORTANT: Do not remove the `@Component` decorator, you will update that code in an upcoming step. </docs-step> -<docs-step title="Update the `HomeComponent` template to use `ngFor`"> +<docs-step title="Update the `Home` template to use `ngFor`"> Now the app has a dataset that you can use to display the entries in the browser using the `ngFor` directive. 1. Update the `<app-housing-location>` tag in the template code to this: - <docs-code header="Add ngFor to HomeComponent template" path="adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.ts" visibleLines="[17,22]"/> + <docs-code header="Add ngFor to Home template" path="adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.ts" visibleLines="[17,22]"/> - Note, in the code `[housingLocation] = "housingLocation"` the `housingLocation` value now refers to the variable used in the `ngFor` directive. Before this change, it referred to the property on the `HomeComponent` class. + Note, in the code `[housingLocation] = "housingLocation"` the `housingLocation` value now refers to the variable used in the `ngFor` directive. Before this change, it referred to the property on the `Home` class. - IMPORTANT: Don't forget to import the `NgFor` directive in your `HomeComponent` class. + IMPORTANT: Don't forget to import the `NgFor` directive in your `Home` class. 1. Save all changes. diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/config.json b/adev/src/content/tutorials/first-app/steps/08-ngFor/config.json index bc9b5928ae40..c2edee61c25c 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/config.json +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/config.json @@ -2,5 +2,5 @@ "title": "Use *ngFor in templates", "type": "editor", "answerSrc": "../09-services/src", - "openFiles": ["src/app/home/home.component.ts"] + "openFiles": ["src/app/home/home.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.component.ts deleted file mode 100644 index 81cc46a21001..000000000000 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; - -@Component({ - selector: 'app-root', - imports: [HomeComponent], - template: ` - <main> - <header class="brand-name"> - <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> - </header> - <section class="content"> - <app-home></app-home> - </section> - </main> - `, - styleUrls: ['./app.component.css'], -}) -export class AppComponent { - title = 'homes'; -} diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.ts new file mode 100644 index 000000000000..b67e16f7f684 --- /dev/null +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/app.ts @@ -0,0 +1,21 @@ +import {Component} from '@angular/core'; +import {Home} from './home/home'; + +@Component({ + selector: 'app-root', + imports: [Home], + template: ` + <main> + <header class="brand-name"> + <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> + </header> + <section class="content"> + <app-home></app-home> + </section> + </main> + `, + styleUrls: ['./app.css'], +}) +export class App { + title = 'homes'; +} diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.ts index 12ad1d27c613..54a16e327458 100644 --- a/adev/src/content/tutorials/first-app/steps/07-dynamic-template-values/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -17,12 +17,12 @@ import {HousingLocation} from '../housinglocation'; <app-housing-location [housingLocation]="housingLocation"></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { +export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - housingLocation: HousingLocation = { + housingLocation: HousingLocationInfo = { id: 9999, name: 'Test Home', city: 'Test city', diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.ts similarity index 75% rename from adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.ts index 1018f02ef90e..2e3465bf128c 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-housing-location', @@ -17,8 +17,8 @@ import {HousingLocation} from '../housinglocation'; <p class="listing-location">{{ housingLocation.city }}, {{ housingLocation.state }}</p> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/main.ts b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/08-ngFor/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/09-services/README.md b/adev/src/content/tutorials/first-app/steps/09-services/README.md index 4b28634e4151..b189ecdda8d6 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/README.md +++ b/adev/src/content/tutorials/first-app/steps/09-services/README.md @@ -47,13 +47,13 @@ In the **Terminal** pane of your IDE: <docs-step title="Add static data to the new service"> This step adds some sample data to your new service. In a later lesson, you'll replace the static data with a web interface to get data as you might in a real app. -For now, your app's new service uses the data that has, so far, been created locally in `HomeComponent`. +For now, your app's new service uses the data that has, so far, been created locally in `Home`. In the **Edit** pane of your IDE: -1. In `src/app/home/home.component.ts`, from `HomeComponent`, copy the `housingLocationList` variable and its array value. +1. In `src/app/home/home.ts`, from `Home`, copy the `housingLocationList` variable and its array value. 1. In `src/app/housing.service.ts`: - 1. Inside the `HousingService` class, paste the variable that you copied from `HomeComponent` in the previous step. + 1. Inside the `HousingService` class, paste the variable that you copied from `Home` in the previous step. 1. Inside the `HousingService` class, paste these functions after the data you just copied. These functions allow dependencies to access the service's data. @@ -69,33 +69,33 @@ In the **Edit** pane of your IDE: Correct any errors before you continue to the next step. </docs-step> -<docs-step title="Inject the new service into `HomeComponent`"> -This step injects the new service into your app's `HomeComponent` so that it can read the app's data from a service. +<docs-step title="Inject the new service into `Home`"> +This step injects the new service into your app's `Home` so that it can read the app's data from a service. In a later lesson, you'll replace the static data with a live data source to get data as you might in a real app. -In the **Edit** pane of your IDE, in `src/app/home/home.component.ts`: +In the **Edit** pane of your IDE, in `src/app/home/home.ts`: -1. At the top of `src/app/home/home.component.ts`, add the `inject` to the items imported from `@angular/core`. This will import the `inject` function into the `HomeComponent` class. +1. At the top of `src/app/home/home.ts`, add the `inject` to the items imported from `@angular/core`. This will import the `inject` function into the `Home` class. - <docs-code header="Update to src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts" visibleLines="[1]"/> + <docs-code header="Update to src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts" visibleLines="[1]"/> 1. Add a new file level import for the `HousingService`: - <docs-code header="Add import to src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts" visibleLines="[5]"/> + <docs-code header="Add import to src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts" visibleLines="[5]"/> -1. From `HomeComponent`, delete the `housingLocationList` array entries and assign `housingLocationList` the value of empty array (`[]`). In a few steps you will update the code to pull the data from the `HousingService`. +1. From `Home`, delete the `housingLocationList` array entries and assign `housingLocationList` the value of empty array (`[]`). In a few steps you will update the code to pull the data from the `HousingService`. -1. In `HomeComponent`, add the following code to inject the new service and initialize the data for the app. The `constructor` is the first function that runs when this component is created. The code in the `constructor` will assign the `housingLocationList` the value returned from the call to `getAllHousingLocations`. +1. In `Home`, add the following code to inject the new service and initialize the data for the app. The `constructor` is the first function that runs when this component is created. The code in the `constructor` will assign the `housingLocationList` the value returned from the call to `getAllHousingLocations`. - <docs-code header="Initialize data from service in src/app/home/home.component.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts" visibleLines="[25,32]"/> + <docs-code header="Initialize data from service in src/app/home/home.ts" path="adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts" visibleLines="[25,32]"/> -1. Save the changes to `src/app/home/home.component.ts` and confirm your app builds without error. +1. Save the changes to `src/app/home/home.ts` and confirm your app builds without error. Correct any errors before you continue to the next step. </docs-step> </docs-workflow> -SUMMARY: In this lesson, you added an Angular service to your app and injected it into the `HomeComponent` class. +SUMMARY: In this lesson, you added an Angular service to your app and injected it into the `Home` class. This compartmentalizes how your app gets its data. For now, the new service gets its data from a static array of data. In a later lesson, you'll refactor the service to get its data from an API endpoint. diff --git a/adev/src/content/tutorials/first-app/steps/09-services/config.json b/adev/src/content/tutorials/first-app/steps/09-services/config.json index e492a6550fad..df458e182f61 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/config.json +++ b/adev/src/content/tutorials/first-app/steps/09-services/config.json @@ -2,5 +2,5 @@ "title": "Angular services", "type": "editor", "answerSrc": "../10-routing/src", - "openFiles": ["src/app/home/home.component.ts"] + "openFiles": ["src/app/home/home.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.component.ts deleted file mode 100644 index 81cc46a21001..000000000000 --- a/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; - -@Component({ - selector: 'app-root', - imports: [HomeComponent], - template: ` - <main> - <header class="brand-name"> - <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> - </header> - <section class="content"> - <app-home></app-home> - </section> - </main> - `, - styleUrls: ['./app.component.css'], -}) -export class AppComponent { - title = 'homes'; -} diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/09-services/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/09-services/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.ts new file mode 100644 index 000000000000..b67e16f7f684 --- /dev/null +++ b/adev/src/content/tutorials/first-app/steps/09-services/src/app/app.ts @@ -0,0 +1,21 @@ +import {Component} from '@angular/core'; +import {Home} from './home/home'; + +@Component({ + selector: 'app-root', + imports: [Home], + template: ` + <main> + <header class="brand-name"> + <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> + </header> + <section class="content"> + <app-home></app-home> + </section> + </main> + `, + styleUrls: ['./app.css'], +}) +export class App { + title = 'homes'; +} diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.ts similarity index 90% rename from adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.ts index 65436ed5b860..79bed4f750b4 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/09-services/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -20,12 +20,12 @@ import {HousingLocation} from '../housinglocation'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { +export class Home { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - housingLocationList: HousingLocation[] = [ + housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.ts similarity index 75% rename from adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.ts index 1018f02ef90e..2e3465bf128c 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/09-services/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-housing-location', @@ -17,8 +17,8 @@ import {HousingLocation} from '../housinglocation'; <p class="listing-location">{{ housingLocation.city }}, {{ housingLocation.state }}</p> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/09-services/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/09-services/src/main.ts b/adev/src/content/tutorials/first-app/steps/09-services/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/09-services/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/09-services/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/README.md b/adev/src/content/tutorials/first-app/steps/10-routing/README.md index 9608edad6af8..fc57ba74fddc 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/README.md +++ b/adev/src/content/tutorials/first-app/steps/10-routing/README.md @@ -21,7 +21,7 @@ In this lesson, you will enable routing in your application to navigate to the d <docs-workflow> <docs-step title="Create a default details component "> -1. From the terminal, enter the following command to create the `DetailsComponent`: +1. From the terminal, enter the following command to create the `Details`: <docs-code language="shell"> ng generate component details @@ -42,18 +42,18 @@ In this lesson, you will enable routing in your application to navigate to the d <docs-code header="Add router configuration in src/main.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/main.ts" visibleLines="[10,17]"/> -1. In `src/app/app.component.ts`, update the component to use routing: +1. In `src/app/app.ts`, update the component to use routing: 1. Add a file level import for `RoutingModule`: - <docs-code header="Import RouterModule in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts" visibleLines="[3]"/> + <docs-code header="Import RouterModule in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts" visibleLines="[3]"/> 1. Add `RouterModule` to the `@Component` metadata imports - <docs-code header="Import RouterModule in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts" visibleLines="[7]"/> + <docs-code header="Import RouterModule in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts" visibleLines="[7]"/> 1. In the `template` property, replace the `<app-home></app-home>` tag with the `<router-outlet>` directive and add a link back to the home page. Your code should match this code: - <docs-code header="Add router-outlet in src/app/app.component.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts" visibleLines="[8,18]"/> + <docs-code header="Add router-outlet in src/app/app.ts" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts" visibleLines="[8,18]"/> </docs-step> @@ -61,14 +61,14 @@ In this lesson, you will enable routing in your application to navigate to the d In the previous step you removed the reference to the `<app-home>` component in the template. In this step, you will add a new route to that component. 1. In `routes.ts`, perform the following updates to create a route. - 1. Add a file level imports for the `HomeComponent`, `DetailsComponent` and the `Routes` type that you'll use in the route definitions. + 1. Add a file level imports for the `Home`, `Details` and the `Routes` type that you'll use in the route definitions. <docs-code header="Import components and Routes" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts" visibleLines="[1,3]"/> 1. Define a variable called `routeConfig` of type `Routes` and define two routes for the app: <docs-code header="Add routes to the app" path="adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts" visibleLines="[5,18]"/> - The entries in the `routeConfig` array represent the routes in the application. The first entry navigates to the `HomeComponent` whenever the url matches `''`. The second entry uses some special formatting that will be revisited in a future lesson. + The entries in the `routeConfig` array represent the routes in the application. The first entry navigates to the `Home` whenever the url matches `''`. The second entry uses some special formatting that will be revisited in a future lesson. 1. Save all changes and confirm that the application works in the browser. The application should still display the list of housing locations. </docs-step> diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/config.json b/adev/src/content/tutorials/first-app/steps/10-routing/config.json index 488f77221cab..fdc7fd1a47d1 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/config.json +++ b/adev/src/content/tutorials/first-app/steps/10-routing/config.json @@ -2,5 +2,5 @@ "title": "Add routing", "type": "local", "answerSrc": "../11-details-page/src", - "openFiles": ["src/main.ts", "src/app/app.component.ts"] + "openFiles": ["src/main.ts", "src/app/app.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.component.ts deleted file mode 100644 index 81cc46a21001..000000000000 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; - -@Component({ - selector: 'app-root', - imports: [HomeComponent], - template: ` - <main> - <header class="brand-name"> - <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> - </header> - <section class="content"> - <app-home></app-home> - </section> - </main> - `, - styleUrls: ['./app.component.css'], -}) -export class AppComponent { - title = 'homes'; -} diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.ts new file mode 100644 index 000000000000..b67e16f7f684 --- /dev/null +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/app.ts @@ -0,0 +1,21 @@ +import {Component} from '@angular/core'; +import {Home} from './home/home'; + +@Component({ + selector: 'app-root', + imports: [Home], + template: ` + <main> + <header class="brand-name"> + <img class="brand-logo" src="/assets/logo.svg" alt="logo" aria-hidden="true" /> + </header> + <section class="content"> + <app-home></app-home> + </section> + </main> + `, + styleUrls: ['./app.css'], +}) +export class App { + title = 'homes'; +} diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts index 6d0d99293ba0..cd5a476b48a5 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/home/home.ts @@ -1,11 +1,11 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -20,10 +20,10 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); constructor() { diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.ts similarity index 75% rename from adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.ts index 1018f02ef90e..2e3465bf128c 100644 --- a/adev/src/content/tutorials/first-app/steps/08-ngFor/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-housing-location', @@ -17,8 +17,8 @@ import {HousingLocation} from '../housinglocation'; <p class="listing-location">{{ housingLocation.city }}, {{ housingLocation.state }}</p> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing.service.ts index 75bcfb471b9a..2c0a8c0247e7 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housing.service.ts @@ -1,12 +1,12 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', }) export class HousingService { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - protected housingLocationList: HousingLocation[] = [ + protected housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', @@ -109,11 +109,11 @@ export class HousingService { }, ]; - getAllHousingLocations(): HousingLocation[] { + getAllHousingLocations(): HousingLocationInfo[] { return this.housingLocationList; } - getHousingLocationById(id: number): HousingLocation | undefined { + getHousingLocationById(id: number): HousingLocationInfo | undefined { return this.housingLocationList.find((housingLocation) => housingLocation.id === id); } } diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/10-routing/src/main.ts b/adev/src/content/tutorials/first-app/steps/10-routing/src/main.ts index 3fcb79da648c..4093863e5e3e 100644 --- a/adev/src/content/tutorials/first-app/steps/10-routing/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/10-routing/src/main.ts @@ -3,8 +3,8 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; -bootstrapApplication(AppComponent, {providers: [provideProtractorTestingSupport()]}).catch((err) => +bootstrapApplication(App, {providers: [provideProtractorTestingSupport()]}).catch((err) => console.error(err), ); diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/README.md b/adev/src/content/tutorials/first-app/steps/11-details-page/README.md index 802554778698..2b65717d6ae2 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/README.md +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/README.md @@ -27,9 +27,9 @@ In lesson 10, you added a second route to `src/app/routes.ts` which includes a s In this case, `:id` is dynamic and will change based on how the route is requested by the code. -1. In `src/app/housing-location/housing-location.component.ts`, add an anchor tag to the `section` element and include the `routerLink` directive: +1. In `src/app/housing-location/housing-location.ts`, add an anchor tag to the `section` element and include the `routerLink` directive: - <docs-code header="Add anchor with a routerLink directive to housing-location.component.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.ts" visibleLines="[20]"/> + <docs-code header="Add anchor with a routerLink directive to housing-location.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.ts" visibleLines="[20]"/> The `routerLink` directive enables Angular's router to create dynamic links in the application. The value assigned to the `routerLink` is an array with two entries: the static portion of the path and the dynamic data. @@ -41,11 +41,11 @@ In this case, `:id` is dynamic and will change based on how the route is request </docs-step> <docs-step title="Get route parameters"> -In this step, you will get the route parameter in the `DetailsComponent`. Currently, the app displays `details works!`. Next you'll update the code to display the `id` value passed using the route parameters. +In this step, you will get the route parameter in the `Details`. Currently, the app displays `details works!`. Next you'll update the code to display the `id` value passed using the route parameters. -1. In `src/app/details/details.component.ts` update the template to import the functions, classes and services that you'll need to use in the `DetailsComponent`: +1. In `src/app/details/details.ts` update the template to import the functions, classes and services that you'll need to use in the `Details`: - <docs-code header="Update file level imports" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts" visibleLines="[1,5]"/> + <docs-code header="Update file level imports" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts" visibleLines="[1,5]"/> 1. Update the `template` property of the `@Component` decorator to display the value `housingLocationId`: @@ -53,10 +53,10 @@ In this step, you will get the route parameter in the `DetailsComponent`. Curren template: `<p>details works! {{ housingLocationId }}</p>`, </docs-code> -1. Update the body of the `DetailsComponent` class with the following code: +1. Update the body of the `Details` class with the following code: <docs-code language="javascript"> - export class DetailsComponent { + export class Details { route: ActivatedRoute = inject(ActivatedRoute); housingLocationId = -1; constructor() { @@ -65,33 +65,33 @@ In this step, you will get the route parameter in the `DetailsComponent`. Curren } </docs-code> - This code gives the `DetailsComponent` access to the `ActivatedRoute` router feature that enables you to have access to the data about the current route. In the `constructor`, the code converts the `id` parameter acquired from the route from a string to a number. + This code gives the `Details` access to the `ActivatedRoute` router feature that enables you to have access to the data about the current route. In the `constructor`, the code converts the `id` parameter acquired from the route from a string to a number. 1. Save all changes. 1. In the browser, click on one of the housing location's "Learn More" links and confirm that the numeric value displayed on the page matches the `id` property for that location in the data. </docs-step> -<docs-step title="Customize the `DetailComponent`"> -Now that routing is working properly in the application this is a great time to update the template of the `DetailsComponent` to display the specific data represented by the housing location for the route parameter. +<docs-step title="Customize the `Detail`"> +Now that routing is working properly in the application this is a great time to update the template of the `Details` to display the specific data represented by the housing location for the route parameter. To access the data you will add a call to the `HousingService`. 1. Update the template code to match the following code: - <docs-code header="Update the DetailsComponent template in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts" visibleLines="[11,32]"/> + <docs-code header="Update the Details template in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts" visibleLines="[11,32]"/> Notice that the `housingLocation` properties are being accessed with the optional chaining operator `?`. This ensures that if the `housingLocation` value is null or undefined the application doesn't crash. -1. Update the body of the `DetailsComponent` class to match the following code: +1. Update the body of the `Details` class to match the following code: - <docs-code header="Update the DetailsComponent class in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts" visibleLines="[35,44]"/> + <docs-code header="Update the Details class in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts" visibleLines="[35,44]"/> Now the component has the code to display the correct information based on the selected housing location. The `constructor` now includes a call to the `HousingService` to pass the route parameter as an argument to the `getHousingLocationById` service function. -1. Copy the following styles into the `src/app/details/details.component.css` file: +1. Copy the following styles into the `src/app/details/details.css` file: - <docs-code header="Add styles for the DetailsComponent" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.css" visibleLines="[1,71]"/> + <docs-code header="Add styles for the Details" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.css" visibleLines="[1,71]"/> 1. Save your changes. @@ -101,12 +101,12 @@ To access the data you will add a call to the `HousingService`. </docs-step> -<docs-step title="Add navigation to the `HomeComponent`"> -In a previous lesson you updated the `AppComponent` template to include a `routerLink`. Adding that code updated your app to enable navigation back to the `HomeComponent` whenever the logo is clicked. +<docs-step title="Add navigation to the `Home`"> +In a previous lesson you updated the `App` template to include a `routerLink`. Adding that code updated your app to enable navigation back to the `Home` whenever the logo is clicked. 1. Confirm that your code matches the following: - <docs-code header="Add routerLink to AppComponent" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.ts" visibleLines="[8,20]"/> + <docs-code header="Add routerLink to App" path="adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.ts" visibleLines="[8,20]"/> Your code may already be up-to-date but confirm to be sure. </docs-step> diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/config.json b/adev/src/content/tutorials/first-app/steps/11-details-page/config.json index a942ec79a380..5dc490333b66 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/config.json +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/config.json @@ -3,8 +3,8 @@ "type": "local", "answerSrc": "../12-forms/src", "openFiles": [ - "src/app/housing-location/housing-location.component.ts", - "src/app/details/details.component.ts", - "src/app/app.component.ts" + "src/app/housing-location/housing-location.ts", + "src/app/details/details.ts", + "src/app/app.ts" ] } diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts similarity index 74% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts index 976382f5ce1b..afbfa8697ccb 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/app.ts @@ -1,9 +1,9 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; import {RouterModule} from '@angular/router'; @Component({ selector: 'app-root', - imports: [HomeComponent, RouterModule], + imports: [Home, RouterModule], template: ` <main> <a [routerLink]="['/']"> @@ -16,8 +16,8 @@ import {RouterModule} from '@angular/router'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.component.css b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.component.css rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.css diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.component.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.component.ts rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.ts index c4520a9db63d..e921bfabb4a2 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.component.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/details/details.ts @@ -7,6 +7,6 @@ import {CommonModule} from '@angular/common'; template: ` <p>details works!</p> `, - styleUrls: ['./details.component.css'], + styleUrls: ['./details.css'], }) -export class DetailsComponent {} +export class Details {} diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.ts index b7694fb2f91b..4a04e91a7ccc 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/home/home.ts @@ -1,12 +1,12 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -21,10 +21,10 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); constructor() { diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.ts similarity index 76% rename from adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.ts index 5f0ae13baecd..3e97cadf8ed0 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {RouterModule} from '@angular/router'; @Component({ @@ -18,8 +18,8 @@ import {RouterModule} from '@angular/router'; <p class="listing-location">{{ housingLocation.city }}, {{ housingLocation.state }}</p> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing.service.ts index fccee353187b..609b19afc385 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housing.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', @@ -7,7 +7,7 @@ import {HousingLocation} from './housinglocation'; export class HousingService { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - protected housingLocationList: HousingLocation[] = [ + protected housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', @@ -110,11 +110,11 @@ export class HousingService { }, ]; - getAllHousingLocations(): HousingLocation[] { + getAllHousingLocations(): HousingLocationInfo[] { return this.housingLocationList; } - getHousingLocationById(id: number): HousingLocation | undefined { + getHousingLocationById(id: number): HousingLocationInfo | undefined { return this.housingLocationList.find((housingLocation) => housingLocation.id === id); } } diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts index e813655080aa..a3a911a96935 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/app/routes.ts @@ -1,16 +1,16 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {DetailsComponent} from './details/details.component'; +import {Home} from './home/home'; +import {Details} from './details/details'; const routeConfig: Routes = [ { path: '', - component: HomeComponent, + component: Home, title: 'Home page', }, { path: 'details/:id', - component: DetailsComponent, + component: Details, title: 'Home details', }, ]; diff --git a/adev/src/content/tutorials/first-app/steps/11-details-page/src/main.ts b/adev/src/content/tutorials/first-app/steps/11-details-page/src/main.ts index b8c7ddedc810..a2453b30c087 100644 --- a/adev/src/content/tutorials/first-app/steps/11-details-page/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/11-details-page/src/main.ts @@ -3,10 +3,10 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {provideRouter} from '@angular/router'; import routeConfig from './app/routes'; -bootstrapApplication(AppComponent, { +bootstrapApplication(App, { providers: [provideProtractorTestingSupport(), provideRouter(routeConfig)], }).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/README.md b/adev/src/content/tutorials/first-app/steps/12-forms/README.md index 07198d029a8c..09ce9e001ed2 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/README.md +++ b/adev/src/content/tutorials/first-app/steps/12-forms/README.md @@ -34,25 +34,25 @@ In the **Edit** pane of your IDE: <docs-step title="Add the form functions to the details page"> This step adds the code to the details page that handles the form's interactions. -In the **Edit** pane of your IDE, in `src/app/details/details.component.ts`: +In the **Edit** pane of your IDE, in `src/app/details/details.ts`: 1. After the `import` statements at the top of the file, add the following code to import the Angular form classes. -<docs-code header="Forms imports in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts" visibleLines="[6]"/> +<docs-code header="Forms imports in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts" visibleLines="[6]"/> -1. In the `DetailsComponent` decorator metadata, update the `imports` property with the following code: +1. In the `Details` decorator metadata, update the `imports` property with the following code: -<docs-code header="imports directive in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts" visibleLines="[10]"/> +<docs-code header="imports directive in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts" visibleLines="[10]"/> -1. In the `DetailsComponent` class, before the `constructor()` method, add the following code to create the form object. +1. In the `Details` class, before the `constructor()` method, add the following code to create the form object. - <docs-code header="template directive in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts" visibleLines="[53,57]"/> + <docs-code header="template directive in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts" visibleLines="[53,57]"/> In Angular, `FormGroup` and `FormControl` are types that enable you to build forms. The `FormControl` type can provide a default value and shape the form data. In this example `firstName` is a `string` and the default value is empty string. -1. In the `DetailsComponent` class, after the `constructor()` method, add the following code to handle the **Apply now** click. +1. In the `Details` class, after the `constructor()` method, add the following code to handle the **Apply now** click. - <docs-code header="template directive in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts" visibleLines="[63,69]"/> + <docs-code header="template directive in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts" visibleLines="[63,69]"/> This button does not exist yet - you will add it in the next step. In the above code, the `FormControl`s may return `null`. This code uses the nullish coalescing operator to default to empty string if the value is `null`. @@ -63,11 +63,11 @@ In the **Edit** pane of your IDE, in `src/app/details/details.component.ts`: <docs-step title="Add the form's markup to the details page"> This step adds the markup to the details page that displays the form. -In the **Edit** pane of your IDE, in `src/app/details/details.component.ts`: +In the **Edit** pane of your IDE, in `src/app/details/details.ts`: -1. In the `DetailsComponent` decorator metadata, update the `template` HTML to match the following code to add the form's markup. +1. In the `Details` decorator metadata, update the `template` HTML to match the following code to add the form's markup. - <docs-code header="template directive in src/app/details/details.component.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts" visibleLines="[11,46]"/> + <docs-code header="template directive in src/app/details/details.ts" path="adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts" visibleLines="[11,46]"/> The template now includes an event handler `(submit)="submitApplication()"`. Angular uses parentheses syntax around the event name to define events in the template code. The code on the right hand side of the equals sign is the code that should be executed when this event is triggered. You can bind to browser events and custom events. diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/config.json b/adev/src/content/tutorials/first-app/steps/12-forms/config.json index 965c796f54b4..46a7602839ee 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/config.json +++ b/adev/src/content/tutorials/first-app/steps/12-forms/config.json @@ -2,5 +2,5 @@ "title": "Integrate Angular forms", "type": "local", "answerSrc": "../13-search/src", - "openFiles": ["src/app/housing.service.ts", "src/app/details/details.component.ts"] + "openFiles": ["src/app/housing.service.ts", "src/app/details/details.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.ts index 44c1aa0cd672..c9be1236e28a 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.ts @@ -1,10 +1,10 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; import {RouterLink, RouterOutlet} from '@angular/router'; @Component({ selector: 'app-root', - imports: [HomeComponent, RouterLink, RouterOutlet], + imports: [Home, RouterLink, RouterOutlet], template: ` <main> <a [routerLink]="['/']"> @@ -17,8 +17,8 @@ import {RouterLink, RouterOutlet} from '@angular/router'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.css b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.css rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.css diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts similarity index 88% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts index f3d57bb90243..34ec9c6de111 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.component.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/details/details.ts @@ -2,7 +2,7 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; import {ActivatedRoute} from '@angular/router'; import {HousingService} from '../housing.service'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; @Component({ selector: 'app-details', @@ -29,12 +29,12 @@ import {HousingLocation} from '../housinglocation'; </section> </article> `, - styleUrls: ['./details.component.css'], + styleUrls: ['./details.css'], }) -export class DetailsComponent { +export class Details { route: ActivatedRoute = inject(ActivatedRoute); housingService = inject(HousingService); - housingLocation: HousingLocation | undefined; + housingLocation: HousingLocationInfo | undefined; constructor() { const housingLocationId = Number(this.route.snapshot.params['id']); diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.ts index b7694fb2f91b..4a04e91a7ccc 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/home/home.ts @@ -1,12 +1,12 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -21,10 +21,10 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); constructor() { diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.ts similarity index 78% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.ts index 9af78ed8e2a5..f15cd14cd51b 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {RouterModule} from '@angular/router'; @Component({ @@ -19,8 +19,8 @@ import {RouterModule} from '@angular/router'; <a [routerLink]="['/details', housingLocation.id]">Learn More</a> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing.service.ts index fccee353187b..609b19afc385 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housing.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', @@ -7,7 +7,7 @@ import {HousingLocation} from './housinglocation'; export class HousingService { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - protected housingLocationList: HousingLocation[] = [ + protected housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', @@ -110,11 +110,11 @@ export class HousingService { }, ]; - getAllHousingLocations(): HousingLocation[] { + getAllHousingLocations(): HousingLocationInfo[] { return this.housingLocationList; } - getHousingLocationById(id: number): HousingLocation | undefined { + getHousingLocationById(id: number): HousingLocationInfo | undefined { return this.housingLocationList.find((housingLocation) => housingLocation.id === id); } } diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/routes.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/routes.ts index e813655080aa..a3a911a96935 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/routes.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/app/routes.ts @@ -1,16 +1,16 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {DetailsComponent} from './details/details.component'; +import {Home} from './home/home'; +import {Details} from './details/details'; const routeConfig: Routes = [ { path: '', - component: HomeComponent, + component: Home, title: 'Home page', }, { path: 'details/:id', - component: DetailsComponent, + component: Details, title: 'Home details', }, ]; diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/main.ts b/adev/src/content/tutorials/first-app/steps/12-forms/src/main.ts index b8c7ddedc810..a2453b30c087 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/12-forms/src/main.ts @@ -3,10 +3,10 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {provideRouter} from '@angular/router'; import routeConfig from './app/routes'; -bootstrapApplication(AppComponent, { +bootstrapApplication(App, { providers: [provideProtractorTestingSupport(), provideRouter(routeConfig)], }).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/first-app/steps/13-search/README.md b/adev/src/content/tutorials/first-app/steps/13-search/README.md index e4e15e519bdb..86f8e5795e49 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/README.md +++ b/adev/src/content/tutorials/first-app/steps/13-search/README.md @@ -16,26 +16,26 @@ IMPORTANT: We recommend using your local environment for this step of the tutori <docs-workflow> <docs-step title="Update the home component properties"> -In this step, you'll update the `HomeComponent` class to store data in a new array property that you will use for filtering. +In this step, you'll update the `Home` class to store data in a new array property that you will use for filtering. -1. In `src/app/home/home.component.ts`, add new property to the class called `filteredLocationList`. +1. In `src/app/home/home.ts`, add new property to the class called `filteredLocationList`. - <docs-code header="Add the filtered results property" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts" visibleLines="[30]"/> + <docs-code header="Add the filtered results property" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts" visibleLines="[30]"/> The `filteredLocationList` hold the values that match the search criteria entered by the user. -1. The `filteredLocationList` should contain the total set of housing locations values by default when the page loads. Update the `constructor` for the `HomeComponent` to set the value. +1. The `filteredLocationList` should contain the total set of housing locations values by default when the page loads. Update the `constructor` for the `Home` to set the value. -<docs-code header="Set the value of filteredLocationList" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts" visibleLines="[31,34]"/> +<docs-code header="Set the value of filteredLocationList" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts" visibleLines="[31,34]"/> </docs-step> <docs-step title="Update the home component template"> -The `HomeComponent` already contains an input field that you will use to capture input from the user. That string text will be used to filter the results. +The `Home` already contains an input field that you will use to capture input from the user. That string text will be used to filter the results. -1. Update the `HomeComponent` template to include a template variable in the `input` element called `#filter`. +1. Update the `Home` template to include a template variable in the `input` element called `#filter`. - <docs-code header="Add a template variable to HomeComponent's template" language="html"> + <docs-code header="Add a template variable to Home's template" language="html"> <input type="text" placeholder="Filter by city" #filter> </docs-code> @@ -58,11 +58,11 @@ The `HomeComponent` already contains an input field that you will use to capture </docs-step> <docs-step title="Implement the event handler function"> -The template has been updated to bind the `filterResults` function to the `click` event. Next, your task is to implement the `filterResults` function in the `HomeComponent` class. +The template has been updated to bind the `filterResults` function to the `click` event. Next, your task is to implement the `filterResults` function in the `Home` class. -1. Update the `HomeComponent` class to include the implementation of the `filterResults` function. +1. Update the `Home` class to include the implementation of the `filterResults` function. - <docs-code header="Add the filterResults function implementation" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts" visibleLines="[35,44]"/> + <docs-code header="Add the filterResults function implementation" path="adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts" visibleLines="[35,44]"/> This function uses the `String` `filter` function to compare the value of the `text` parameter against the `housingLocation.city` property. You can update this function to match against any property or multiple properties for a fun exercise. diff --git a/adev/src/content/tutorials/first-app/steps/13-search/config.json b/adev/src/content/tutorials/first-app/steps/13-search/config.json index 6c1c6ea8aa1f..64e500f41e81 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/config.json +++ b/adev/src/content/tutorials/first-app/steps/13-search/config.json @@ -2,5 +2,5 @@ "title": "Add search functionality", "type": "local", "answerSrc": "../14-http/src", - "openFiles": ["src/app/home/home.component.ts", "src/app/details/details.component.ts"] + "openFiles": ["src/app/home/home.ts", "src/app/details/details.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/app.ts index 44c1aa0cd672..c9be1236e28a 100644 --- a/adev/src/content/tutorials/first-app/steps/12-forms/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.ts @@ -1,10 +1,10 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; import {RouterLink, RouterOutlet} from '@angular/router'; @Component({ selector: 'app-root', - imports: [HomeComponent, RouterLink, RouterOutlet], + imports: [Home, RouterLink, RouterOutlet], template: ` <main> <a [routerLink]="['/']"> @@ -17,8 +17,8 @@ import {RouterLink, RouterOutlet} from '@angular/router'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.css b/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.css rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.css diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts similarity index 93% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts index 1c12a8c64c1c..2982b18957b1 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.component.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/details/details.ts @@ -2,7 +2,7 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; import {ActivatedRoute} from '@angular/router'; import {HousingService} from '../housing.service'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; @Component({ selector: 'app-details', @@ -43,12 +43,12 @@ import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; </section> </article> `, - styleUrls: ['./details.component.css'], + styleUrls: ['./details.css'], }) -export class DetailsComponent { +export class Details { route: ActivatedRoute = inject(ActivatedRoute); housingService = inject(HousingService); - housingLocation: HousingLocation | undefined; + housingLocation: HousingLocationInfo | undefined; applyForm = new FormGroup({ firstName: new FormControl(''), lastName: new FormControl(''), diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.ts similarity index 70% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.ts index b7694fb2f91b..4a04e91a7ccc 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/home/home.ts @@ -1,12 +1,12 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -21,10 +21,10 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); constructor() { diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.ts similarity index 78% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.ts index 9af78ed8e2a5..f15cd14cd51b 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {RouterModule} from '@angular/router'; @Component({ @@ -19,8 +19,8 @@ import {RouterModule} from '@angular/router'; <a [routerLink]="['/details', housingLocation.id]">Learn More</a> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing.service.ts index 6fc03bfa84ac..96abae0c068a 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housing.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', @@ -7,7 +7,7 @@ import {HousingLocation} from './housinglocation'; export class HousingService { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - protected housingLocationList: HousingLocation[] = [ + protected housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', @@ -110,11 +110,11 @@ export class HousingService { }, ]; - getAllHousingLocations(): HousingLocation[] { + getAllHousingLocations(): HousingLocationInfo[] { return this.housingLocationList; } - getHousingLocationById(id: number): HousingLocation | undefined { + getHousingLocationById(id: number): HousingLocationInfo | undefined { return this.housingLocationList.find((housingLocation) => housingLocation.id === id); } submitApplication(firstName: string, lastName: string, email: string) { diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/routes.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/app/routes.ts index e813655080aa..a3a911a96935 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/routes.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/app/routes.ts @@ -1,16 +1,16 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {DetailsComponent} from './details/details.component'; +import {Home} from './home/home'; +import {Details} from './details/details'; const routeConfig: Routes = [ { path: '', - component: HomeComponent, + component: Home, title: 'Home page', }, { path: 'details/:id', - component: DetailsComponent, + component: Details, title: 'Home details', }, ]; diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/main.ts b/adev/src/content/tutorials/first-app/steps/13-search/src/main.ts index b8c7ddedc810..a2453b30c087 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/13-search/src/main.ts @@ -3,10 +3,10 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {provideRouter} from '@angular/router'; import routeConfig from './app/routes'; -bootstrapApplication(AppComponent, { +bootstrapApplication(App, { providers: [provideProtractorTestingSupport(), provideRouter(routeConfig)], }).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/first-app/steps/14-http/README.md b/adev/src/content/tutorials/first-app/steps/14-http/README.md index 52086b25f680..12202b6d6255 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/README.md +++ b/adev/src/content/tutorials/first-app/steps/14-http/README.md @@ -183,13 +183,13 @@ The data source has been configured, the next step is to update your web app to <docs-step title="Update the components to use asynchronous calls to the housing service"> The server is now reading data from the HTTP request but the components that rely on the service now have errors because they were programmed to use the synchronous version of the service. -1. In `src/app/home/home.component.ts`, update the `constructor` to use the new asynchronous version of the `getAllHousingLocations` method. +1. In `src/app/home/home.ts`, update the `constructor` to use the new asynchronous version of the `getAllHousingLocations` method. - <docs-code header="" path="adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.ts" visibleLines="[32,37]"/> + <docs-code header="" path="adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.ts" visibleLines="[32,37]"/> -1. In `src/app/details/details.component.ts`, update the `constructor` to use the new asynchronous version of the `getHousingLocationById` method. +1. In `src/app/details/details.ts`, update the `constructor` to use the new asynchronous version of the `getHousingLocationById` method. - <docs-code header="" path="adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.ts" visibleLines="[61,66]"/> + <docs-code header="" path="adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.ts" visibleLines="[61,66]"/> 1. Save your code. diff --git a/adev/src/content/tutorials/first-app/steps/14-http/config.json b/adev/src/content/tutorials/first-app/steps/14-http/config.json index 73372ac1e4b5..d3d2c0cf9c4d 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/config.json +++ b/adev/src/content/tutorials/first-app/steps/14-http/config.json @@ -2,5 +2,5 @@ "title": "Add HTTP communication", "type": "local", "answerSrc": "./src-final", - "openFiles": ["src/app/app.component.ts"] + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/13-search/src/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.ts index 44c1aa0cd672..c9be1236e28a 100644 --- a/adev/src/content/tutorials/first-app/steps/13-search/src/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.ts @@ -1,10 +1,10 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; import {RouterLink, RouterOutlet} from '@angular/router'; @Component({ selector: 'app-root', - imports: [HomeComponent, RouterLink, RouterOutlet], + imports: [Home, RouterLink, RouterOutlet], template: ` <main> <a [routerLink]="['/']"> @@ -17,8 +17,8 @@ import {RouterLink, RouterOutlet} from '@angular/router'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.ts similarity index 93% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.ts index 6047253e9d6b..023e6ecd3876 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/details/details.ts @@ -2,7 +2,7 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; import {ActivatedRoute} from '@angular/router'; import {HousingService} from '../housing.service'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; @Component({ @@ -44,12 +44,12 @@ import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; </section> </article> `, - styleUrls: ['./details.component.css'], + styleUrls: ['./details.css'], }) -export class DetailsComponent { +export class Details { route: ActivatedRoute = inject(ActivatedRoute); housingService = inject(HousingService); - housingLocation: HousingLocation | undefined; + housingLocation: HousingLocationInfo | undefined; applyForm = new FormGroup({ firstName: new FormControl(''), diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.ts similarity index 64% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.ts index d4aa2fa5de0d..29663093c873 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/home/home.ts @@ -1,12 +1,12 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -21,18 +21,20 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); - filteredLocationList: HousingLocation[] = []; + filteredLocationList: HousingLocationInfo[] = []; constructor() { - this.housingService.getAllHousingLocations().then((housingLocationList: HousingLocation[]) => { - this.housingLocationList = housingLocationList; - this.filteredLocationList = housingLocationList; - }); + this.housingService + .getAllHousingLocations() + .then((housingLocationList: HousingLocationInfo[]) => { + this.housingLocationList = housingLocationList; + this.filteredLocationList = housingLocationList; + }); } filterResults(text: string) { diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.ts similarity index 78% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.ts index 9af78ed8e2a5..f15cd14cd51b 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {RouterModule} from '@angular/router'; @Component({ @@ -19,8 +19,8 @@ import {RouterModule} from '@angular/router'; <a [routerLink]="['/details', housingLocation.id]">Learn More</a> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing.service.ts index 35e2c52a3ef3..b054c6bcaf5b 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', @@ -7,12 +7,12 @@ import {HousingLocation} from './housinglocation'; export class HousingService { url = 'http://localhost:3000/locations'; - async getAllHousingLocations(): Promise<HousingLocation[]> { + async getAllHousingLocations(): Promise<HousingLocationInfo[]> { const data = await fetch(this.url); return (await data.json()) ?? []; } - async getHousingLocationById(id: number): Promise<HousingLocation | undefined> { + async getHousingLocationById(id: number): Promise<HousingLocationInfo | undefined> { const data = await fetch(`${this.url}?id=${id}`); const locationJson = await data.json(); return locationJson[0] ?? {}; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/routes.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/routes.ts index e813655080aa..a3a911a96935 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/routes.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/routes.ts @@ -1,16 +1,16 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {DetailsComponent} from './details/details.component'; +import {Home} from './home/home'; +import {Details} from './details/details'; const routeConfig: Routes = [ { path: '', - component: HomeComponent, + component: Home, title: 'Home page', }, { path: 'details/:id', - component: DetailsComponent, + component: Details, title: 'Home details', }, ]; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/main.ts b/adev/src/content/tutorials/first-app/steps/14-http/src-final/main.ts index b8c7ddedc810..a2453b30c087 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/main.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src-final/main.ts @@ -3,10 +3,10 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {provideRouter} from '@angular/router'; import routeConfig from './app/routes'; -bootstrapApplication(AppComponent, { +bootstrapApplication(App, { providers: [provideProtractorTestingSupport(), provideRouter(routeConfig)], }).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/app.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/app.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.ts similarity index 73% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/app.ts index 44c1aa0cd672..c9be1236e28a 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/app.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/app.ts @@ -1,10 +1,10 @@ import {Component} from '@angular/core'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; import {RouterLink, RouterOutlet} from '@angular/router'; @Component({ selector: 'app-root', - imports: [HomeComponent, RouterLink, RouterOutlet], + imports: [Home, RouterLink, RouterOutlet], template: ` <main> <a [routerLink]="['/']"> @@ -17,8 +17,8 @@ import {RouterLink, RouterOutlet} from '@angular/router'; </section> </main> `, - styleUrls: ['./app.component.css'], + styleUrls: ['./app.css'], }) -export class AppComponent { +export class App { title = 'homes'; } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.ts similarity index 93% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.ts index 76f697ca3ff5..a6b746ed409b 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/details/details.ts @@ -2,7 +2,7 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; import {ActivatedRoute} from '@angular/router'; import {HousingService} from '../housing.service'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; @Component({ @@ -44,12 +44,12 @@ import {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms'; </section> </article> `, - styleUrls: ['./details.component.css'], + styleUrls: ['./details.css'], }) -export class DetailsComponent { +export class Details { route: ActivatedRoute = inject(ActivatedRoute); housingService = inject(HousingService); - housingLocation: HousingLocation | undefined; + housingLocation: HousingLocationInfo | undefined; applyForm = new FormGroup({ firstName: new FormControl(''), diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts similarity index 76% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts index 845351e213ba..aea67d72817d 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/home/home.ts @@ -1,12 +1,12 @@ import {Component, inject} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocationComponent} from '../housing-location/housing-location.component'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housing-location/housing-location'; +import {HousingLocationInfo} from '../housinglocation'; import {HousingService} from '../housing.service'; @Component({ selector: 'app-home', - imports: [CommonModule, HousingLocationComponent], + imports: [CommonModule, HousingLocation], template: ` <section> <form> @@ -21,12 +21,12 @@ import {HousingService} from '../housing.service'; ></app-housing-location> </section> `, - styleUrls: ['./home.component.css'], + styleUrls: ['./home.css'], }) -export class HomeComponent { - housingLocationList: HousingLocation[] = []; +export class Home { + housingLocationList: HousingLocationInfo[] = []; housingService: HousingService = inject(HousingService); - filteredLocationList: HousingLocation[] = []; + filteredLocationList: HousingLocationInfo[] = []; constructor() { this.housingLocationList = this.housingService.getAllHousingLocations(); this.filteredLocationList = this.housingLocationList; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.component.css b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.css similarity index 100% rename from adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.component.css rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.css diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.component.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.ts similarity index 78% rename from adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.component.ts rename to adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.ts index 9af78ed8e2a5..f15cd14cd51b 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src-final/app/housing-location/housing-location.component.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing-location/housing-location.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {HousingLocation} from '../housinglocation'; +import {HousingLocationInfo} from '../housinglocation'; import {RouterModule} from '@angular/router'; @Component({ @@ -19,8 +19,8 @@ import {RouterModule} from '@angular/router'; <a [routerLink]="['/details', housingLocation.id]">Learn More</a> </section> `, - styleUrls: ['./housing-location.component.css'], + styleUrls: ['./housing-location.css'], }) -export class HousingLocationComponent { - @Input() housingLocation!: HousingLocation; +export class HousingLocation { + @Input() housingLocation!: HousingLocationInfo; } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing.service.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing.service.ts index 591d3f9ca63b..c339ecfdd161 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing.service.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housing.service.ts @@ -1,5 +1,5 @@ import {Injectable} from '@angular/core'; -import {HousingLocation} from './housinglocation'; +import {HousingLocationInfo} from './housinglocation'; @Injectable({ providedIn: 'root', @@ -7,7 +7,7 @@ import {HousingLocation} from './housinglocation'; export class HousingService { readonly baseUrl = 'https://angular.dev/assets/images/tutorials/common'; - protected housingLocationList: HousingLocation[] = [ + protected housingLocationList: HousingLocationInfo[] = [ { id: 0, name: 'Acme Fresh Start Housing', @@ -110,11 +110,11 @@ export class HousingService { }, ]; - getAllHousingLocations(): HousingLocation[] { + getAllHousingLocations(): HousingLocationInfo[] { return this.housingLocationList; } - getHousingLocationById(id: number): HousingLocation | undefined { + getHousingLocationById(id: number): HousingLocationInfo | undefined { return this.housingLocationList.find((housingLocation) => housingLocation.id === id); } diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housinglocation.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housinglocation.ts index 8303b6754eb2..927425950e62 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/housinglocation.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/housinglocation.ts @@ -1,4 +1,4 @@ -export interface HousingLocation { +export interface HousingLocationInfo { id: number; name: string; city: string; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/app/routes.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/app/routes.ts index e813655080aa..a3a911a96935 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/app/routes.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/app/routes.ts @@ -1,16 +1,16 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {DetailsComponent} from './details/details.component'; +import {Home} from './home/home'; +import {Details} from './details/details'; const routeConfig: Routes = [ { path: '', - component: HomeComponent, + component: Home, title: 'Home page', }, { path: 'details/:id', - component: DetailsComponent, + component: Details, title: 'Home details', }, ]; diff --git a/adev/src/content/tutorials/first-app/steps/14-http/src/main.ts b/adev/src/content/tutorials/first-app/steps/14-http/src/main.ts index b8c7ddedc810..a2453b30c087 100644 --- a/adev/src/content/tutorials/first-app/steps/14-http/src/main.ts +++ b/adev/src/content/tutorials/first-app/steps/14-http/src/main.ts @@ -3,10 +3,10 @@ * Protractor is used in this example for compatibility with Angular documentation tools. */ import {bootstrapApplication, provideProtractorTestingSupport} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {provideRouter} from '@angular/router'; import routeConfig from './app/routes'; -bootstrapApplication(AppComponent, { +bootstrapApplication(App, { providers: [provideProtractorTestingSupport(), provideRouter(routeConfig)], }).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/homepage/src/main.ts b/adev/src/content/tutorials/homepage/src/main.ts index 2427d3319ea8..fa739ad1b23a 100644 --- a/adev/src/content/tutorials/homepage/src/main.ts +++ b/adev/src/content/tutorials/homepage/src/main.ts @@ -12,8 +12,8 @@ import {bootstrapApplication} from '@angular/platform-browser'; `, imports: [FormsModule], }) -export class DemoComponent { +export class Demo { name = ''; } -bootstrapApplication(DemoComponent); +bootstrapApplication(Demo); diff --git a/adev/src/content/tutorials/learn-angular/intro/config.json b/adev/src/content/tutorials/learn-angular/intro/config.json index 42787daaadd4..c2afbd379b80 100644 --- a/adev/src/content/tutorials/learn-angular/intro/config.json +++ b/adev/src/content/tutorials/learn-angular/intro/config.json @@ -2,5 +2,5 @@ "title": "Learn Angular", "type": "editor", "nextTutorial": "first-app", - "openFiles": ["src/app/app.component.ts"] + "openFiles": ["src/app/app.ts"] } diff --git a/adev/src/content/tutorials/learn-angular/intro/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/intro/src/app/app.ts similarity index 81% rename from adev/src/content/tutorials/learn-angular/intro/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/intro/src/app/app.ts index 5321711c297c..6b43cd5dc499 100644 --- a/adev/src/content/tutorials/learn-angular/intro/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/intro/src/app/app.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; Welcome to Angular! `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.ts index f7852940e916..cb52ccb56808 100644 --- a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/answer/src/app/app.ts @@ -11,4 +11,4 @@ import {Component} from '@angular/core'; } `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/config.json b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/config.json index aef1553bcd9c..1b76849bae2a 100644 --- a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "type": "editor", "title": "Anatomy of a Component" } diff --git a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.ts index 3c35edd1525b..0a27c4c16d7a 100644 --- a/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/1-components-in-angular/src/app/app.ts @@ -11,4 +11,4 @@ import {Component} from '@angular/core'; } `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.ts similarity index 96% rename from adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.ts index 7114758d8856..787f0f5c673c 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {CommentsComponent} from './comments.component'; +import {Comments} from './comments'; @Component({ selector: 'app-root', @@ -62,6 +62,6 @@ import {CommentsComponent} from './comments.component'; } </div> `, - imports: [CommentsComponent], + imports: [Comments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.component.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.component.ts rename to adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.ts index 8c9c186b2a7d..b1746b9fc498 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/app/comments.ts @@ -10,4 +10,4 @@ import {Component} from '@angular/core'; </ul> `, }) -export class CommentsComponent {} +export class Comments {} diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/config.json b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/config.json index be9a50210d61..b38b3c4de612 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts", "src/app/comments.component.ts"], + "openFiles": ["src/app/app.ts", "src/app/comments.ts"], "title": "Deferrable views", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.ts similarity index 63% rename from adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.ts index b6c143c6561b..3db1c752dcdb 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {CommentsComponent} from './comments.component'; +import {Comments} from './comments'; @Component({ selector: 'app-root', @@ -10,6 +10,6 @@ import {CommentsComponent} from './comments.component'; <comments /> </div> `, - imports: [CommentsComponent], + imports: [Comments], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.component.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.component.ts rename to adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.ts index 8c9c186b2a7d..b1746b9fc498 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/app/comments.ts @@ -10,4 +10,4 @@ import {Component} from '@angular/core'; </ul> `, }) -export class CommentsComponent {} +export class Comments {} diff --git a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/10-deferrable-views/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.ts similarity index 52% rename from adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.ts index eb3f15f9917a..6ad5866234c2 100644 --- a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/app.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; +import {User} from './user'; @Component({ selector: 'app-root', template: ` <app-user /> `, - imports: [UserComponent], + imports: [User], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.ts similarity index 95% rename from adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.ts index 9ec7e6cd7304..7248be2bc71f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/answer/src/app/user.ts @@ -19,7 +19,7 @@ import {NgOptimizedImage} from '@angular/common'; `, imports: [NgOptimizedImage], }) -export class UserComponent { +export class User { logoUrl = '/assets/logo.svg'; logoAlt = 'Angular logo'; username = 'youngTech'; diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/config.json b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/config.json index b80a4e9621b8..159d4ecd208b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/user.component.ts"], + "openFiles": ["src/app/user.ts"], "title": "Optimizing images", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.ts similarity index 94% rename from adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.ts index 240cde9531f6..e04d82805d96 100644 --- a/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/11-optimizing-images/src/app/user.ts @@ -18,7 +18,7 @@ import {Component} from '@angular/core'; `, imports: [], }) -export class UserComponent { +export class User { logoUrl = '/assets/logo.svg'; logoAlt = 'Angular logo'; username = 'youngTech'; diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/README.md b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/README.md index f559032b2642..3009baa3143d 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/README.md @@ -49,7 +49,7 @@ providers: [provideRouter(routes)], Finally, to make sure your app is ready to use the Angular Router, you need to tell the app where you expect the router to display the desired content. Accomplish that by using the `RouterOutlet` directive from `@angular/router`. -Update the template for `AppComponent` by adding `<router-outlet />` +Update the template for `App` by adding `<router-outlet />` <docs-code language="angular-ts" highlight="[11]"> import {RouterOutlet} from '@angular/router'; @@ -65,7 +65,7 @@ template: ` <nav> `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} </docs-code> </docs-step> diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.ts similarity index 90% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.ts index e6797ef04e48..92ab881a771b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/app.ts @@ -13,4 +13,4 @@ import {RouterOutlet} from '@angular/router'; `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.ts similarity index 80% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.ts index 58543721aef0..b86e87c406a8 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; <div>Home Page</div> `, }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.ts index 4540dca47572..377730b1e266 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; <div>Username: {{ username }}</div> `, }) -export class UserComponent { +export class User { username = 'youngTech'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/config.json b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/config.json index 71d839e38069..8e73f7ac6364 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.routes.ts", "src/app/app.component.ts", "src/app/app.config.ts"], + "openFiles": ["src/app/app.routes.ts", "src/app/app.ts", "src/app/app.config.ts"], "title": "Enabling routing", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.ts similarity index 90% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.ts index 7c14e0df2ec0..e44b162514fa 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/app.ts @@ -12,4 +12,4 @@ import {RouterOutlet} from '@angular/router'; `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.ts similarity index 80% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.ts index 58543721aef0..b86e87c406a8 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/home/home.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; <div>Home Page</div> `, }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.ts index 4540dca47572..377730b1e266 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/app/user/user.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; <div>Username: {{ username }}</div> `, }) -export class UserComponent { +export class User { username = 'youngTech'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/README.md b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/README.md index 37b25fe0ff23..61fc58fb0d94 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/README.md @@ -22,19 +22,19 @@ To define a route, add a route object to the `routes` array in `app.routes.ts` t ```ts import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; export const routes: Routes = [ { path: '', - component: HomeComponent, + component: Home, }, ]; ``` -The code above is an example of how `HomeComponent` can be added as a route. Now go ahead and implement this along with the `UserComponent` in the playground. +The code above is an example of how `Home` can be added as a route. Now go ahead and implement this along with the `User` in the playground. -Use `'user'` for the path of `UserComponent`. +Use `'user'` for the path of `User`. </docs-step> @@ -47,13 +47,13 @@ In `app.routes.ts`, add the `title` property to the default route (`path: ''`) a <docs-code language="ts" highlight="[8]"> import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; +import {Home} from './home/home'; export const routes: Routes = [ { path: '', title: 'App Home Page', -component: HomeComponent, +component: Home, }, ]; </docs-code> diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.routes.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.routes.ts index 53f8b60b9954..c443a6de2c33 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.routes.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.routes.ts @@ -1,17 +1,17 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {UserComponent} from './user/user.component'; +import {Home} from './home/home'; +import {User} from './user/user'; export const routes: Routes = [ { path: '', title: 'App Home Page', - component: HomeComponent, + component: Home, }, { path: 'user', title: 'App User Page', - component: UserComponent, + component: User, }, ]; diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.ts index 8f67e3cd21f1..da5db0dde38f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/app.ts @@ -13,4 +13,4 @@ import {RouterOutlet} from '@angular/router'; `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.ts similarity index 80% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.ts index 58543721aef0..b86e87c406a8 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/home/home.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; <div>Home Page</div> `, }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.ts index 4540dca47572..377730b1e266 100644 --- a/adev/src/content/tutorials/learn-angular/steps/12-enable-routing/answer/src/app/user/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/app/user/user.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; <div>Username: {{ username }}</div> `, }) -export class UserComponent { +export class User { username = 'youngTech'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/config.json b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/config.json index 431e738a8ba2..fe8e6e654608 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.routes.ts", "src/app/home/home.component.ts"], + "openFiles": ["src/app/app.routes.ts", "src/app/home/home.ts"], "title": "Define a route", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.routes.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.routes.ts index 704109cab5ad..ffdfa77e451f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.routes.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.routes.ts @@ -1,5 +1,5 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {UserComponent} from './user/user.component'; +import {Home} from './home/home'; +import {User} from './user/user'; export const routes: Routes = []; diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.ts index 8f67e3cd21f1..da5db0dde38f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/app.ts @@ -13,4 +13,4 @@ import {RouterOutlet} from '@angular/router'; `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.ts similarity index 80% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.ts index 58543721aef0..b86e87c406a8 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/home/home.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; <div>Home Page</div> `, }) -export class HomeComponent {} +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.ts index 4540dca47572..377730b1e266 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/app/user/user.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; <div>Username: {{ username }}</div> `, }) -export class UserComponent { +export class User { username = 'youngTech'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/13-define-a-route/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/README.md b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/README.md index c3c486d70a2f..4d4032dff71e 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/README.md @@ -12,7 +12,7 @@ In this activity, you'll learn how to leverage the `RouterLink` directive to mak <docs-step title="Import `RouterLink` directive"> -In `app.component.ts` add the `RouterLink` directive import to the existing import statement from `@angular/router` and add it to the `imports` array of your component decorator. +In `app.ts` add the `RouterLink` directive import to the existing import statement from `@angular/router` and add it to the `imports` array of your component decorator. ```ts ... diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.routes.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.routes.ts index 53f8b60b9954..c443a6de2c33 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.routes.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.routes.ts @@ -1,17 +1,17 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {UserComponent} from './user/user.component'; +import {Home} from './home/home'; +import {User} from './user/user'; export const routes: Routes = [ { path: '', title: 'App Home Page', - component: HomeComponent, + component: Home, }, { path: 'user', title: 'App User Page', - component: UserComponent, + component: User, }, ]; diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.ts index 88b6b4d20120..a0e2241f0bb6 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/app.ts @@ -13,4 +13,4 @@ import {RouterOutlet, RouterLink} from '@angular/router'; `, imports: [RouterOutlet, RouterLink], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.component.ts deleted file mode 100644 index 58543721aef0..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-home', - template: ` - <div>Home Page</div> - `, -}) -export class HomeComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.ts new file mode 100644 index 000000000000..b86e87c406a8 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/home/home.ts @@ -0,0 +1,9 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-home', + template: ` + <div>Home Page</div> + `, +}) +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.component.ts deleted file mode 100644 index 4540dca47572..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-user', - template: ` - <div>Username: {{ username }}</div> - `, -}) -export class UserComponent { - username = 'youngTech'; -} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.ts new file mode 100644 index 000000000000..377730b1e266 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/app/user/user.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-user', + template: ` + <div>Username: {{ username }}</div> + `, +}) +export class User { + username = 'youngTech'; +} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/answer/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/config.json b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/config.json index da11eb0913b2..62fec669a8e5 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Link to a route with RouterLink", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.routes.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.routes.ts index 53f8b60b9954..c443a6de2c33 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.routes.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.routes.ts @@ -1,17 +1,17 @@ import {Routes} from '@angular/router'; -import {HomeComponent} from './home/home.component'; -import {UserComponent} from './user/user.component'; +import {Home} from './home/home'; +import {User} from './user/user'; export const routes: Routes = [ { path: '', title: 'App Home Page', - component: HomeComponent, + component: Home, }, { path: 'user', title: 'App User Page', - component: UserComponent, + component: User, }, ]; diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.ts similarity index 90% rename from adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.ts index e6797ef04e48..92ab881a771b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/app.ts @@ -13,4 +13,4 @@ import {RouterOutlet} from '@angular/router'; `, imports: [RouterOutlet], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.component.ts deleted file mode 100644 index 58543721aef0..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-home', - template: ` - <div>Home Page</div> - `, -}) -export class HomeComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.ts new file mode 100644 index 000000000000..b86e87c406a8 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/home/home.ts @@ -0,0 +1,9 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-home', + template: ` + <div>Home Page</div> + `, +}) +export class Home {} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.component.ts deleted file mode 100644 index 4540dca47572..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; - -@Component({ - selector: 'app-user', - template: ` - <div>Username: {{ username }}</div> - `, -}) -export class UserComponent { - username = 'youngTech'; -} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.ts new file mode 100644 index 000000000000..377730b1e266 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/app/user/user.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'app-user', + template: ` + <div>Username: {{ username }}</div> + `, +}) +export class User { + username = 'youngTech'; +} diff --git a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/main.ts b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/main.ts index bf030b9489d3..eb8f66500252 100644 --- a/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/main.ts +++ b/adev/src/content/tutorials/learn-angular/steps/14-routerLink/src/main.ts @@ -1,5 +1,5 @@ import {bootstrapApplication} from '@angular/platform-browser'; -import {AppComponent} from './app/app.component'; +import {App} from './app/app'; import {appConfig} from './app/app.config'; -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); +bootstrapApplication(App, appConfig).catch((err) => console.error(err)); diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/README.md b/adev/src/content/tutorials/learn-angular/steps/15-forms/README.md index dfba1b0fa1d6..e58201ad60ae 100644 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/README.md @@ -14,7 +14,7 @@ In this activity, you'll learn how to set up a form using a template-driven appr <docs-step title="Create an input field"> -In `user.component.ts`, update the template by adding a text input with the `id` set to `framework`, type set to `text`. +In `user.ts`, update the template by adding a text input with the `id` set to `framework`, type set to `text`. ```angular-html <label for="framework"> @@ -29,7 +29,7 @@ In `user.component.ts`, update the template by adding a text input with the `id` For this form to use Angular features that enable data binding to forms, you'll need to import the `FormsModule`. -Import the `FormsModule` from `@angular/forms` and add it to the `imports` array of the `UserComponent`. +Import the `FormsModule` from `@angular/forms` and add it to the `imports` array of the `User`. <docs-code language="ts" highlight="[2, 7]"> import {Component} from '@angular/core'; @@ -39,7 +39,7 @@ import {FormsModule} from '@angular/forms'; ... imports: [FormsModule], }) -export class UserComponent {} +export class User {} </docs-code> </docs-step> diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.ts similarity index 94% rename from adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.ts index bfd805d3453e..9aec27d92080 100644 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/answer/src/app/user.ts @@ -13,7 +13,7 @@ import {FormsModule} from '@angular/forms'; `, imports: [FormsModule], }) -export class UserComponent { +export class User { favoriteFramework = ''; username = 'youngTech'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/config.json b/adev/src/content/tutorials/learn-angular/steps/15-forms/config.json index 60b676958c1c..93aec312fc53 100644 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/user.component.ts"], + "openFiles": ["src/app/user.ts"], "title": "Forms", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.ts index 161d91fd0529..7ea190233dbf 100644 --- a/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/15-forms/src/app/user.ts @@ -9,7 +9,7 @@ import {Component} from '@angular/core'; `, imports: [], }) -export class UserComponent { +export class User { username = 'youngTech'; favoriteFramework = ''; } diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/README.md b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/README.md index b3e5c61593c2..c8ac0f1f84d1 100644 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/README.md @@ -26,7 +26,7 @@ To display the input value in a template, you can use the interpolation syntax ` </label> `, }) -export class UserComponent { +export class User { favoriteFramework = ''; } </docs-code> @@ -47,7 +47,7 @@ When you need to reference the input field value in the component class, you can `, ... }) -export class UserComponent { +export class User { favoriteFramework = ''; ... diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.ts similarity index 95% rename from adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.ts index b32e53362862..5389607220a0 100644 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/answer/src/app/user.ts @@ -14,7 +14,7 @@ import {FormsModule} from '@angular/forms'; `, imports: [FormsModule], }) -export class UserComponent { +export class User { favoriteFramework = ''; username = 'youngTech'; diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/config.json b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/config.json index 3e44ff94bd16..08423a226917 100644 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/user.component.ts"], + "openFiles": ["src/app/user.ts"], "title": "Getting form control values", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.ts similarity index 94% rename from adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.ts index a96361dc27e2..6fb463f7bb64 100644 --- a/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/16-form-control-values/src/app/user.ts @@ -14,7 +14,7 @@ import {FormsModule} from '@angular/forms'; `, imports: [FormsModule], }) -export class UserComponent { +export class User { favoriteFramework = ''; username = 'youngTech'; diff --git a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/README.md b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/README.md index 869337fb138e..067b7482cf8e 100644 --- a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/README.md @@ -12,7 +12,7 @@ In this activity, you'll learn how to set up reactive forms. <docs-step title="Import `ReactiveForms` module"> -In `app.component.ts`, import `ReactiveFormsModule` from `@angular/forms` and add it to the `imports` array of the component. +In `app.ts`, import `ReactiveFormsModule` from `@angular/forms` and add it to the `imports` array of the component. ```angular-ts import { ReactiveFormsModule } from '@angular/forms'; @@ -45,7 +45,7 @@ Add `FormControl` and `FormGroup` to the import from `@angular/forms` so that yo ```ts import {ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms'; ... -export class AppComponent { +export class App { profileForm = new FormGroup({ name: new FormControl(''), email: new FormControl(''), diff --git a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.ts similarity index 96% rename from adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.ts index 4f7e2653130c..90f83d22cfcd 100644 --- a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/answer/src/app/app.ts @@ -17,7 +17,7 @@ import {ReactiveFormsModule} from '@angular/forms'; `, imports: [ReactiveFormsModule], }) -export class AppComponent { +export class App { profileForm = new FormGroup({ name: new FormControl(''), email: new FormControl(''), diff --git a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/config.json b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/config.json index 094eae8233c9..552894d26717 100644 --- a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Reactive forms", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.ts similarity index 92% rename from adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.ts index 0dcb2c5a08d7..d5b39333727d 100644 --- a/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/17-reactive-forms/src/app/app.ts @@ -17,4 +17,4 @@ import {Component} from '@angular/core'; `, imports: [], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/README.md b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/README.md index bd60d766784d..0fa8efc70924 100644 --- a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/README.md @@ -18,7 +18,7 @@ Angular provides a set of validation tools. To use them, first update the compon import {ReactiveFormsModule, Validators} from '@angular/forms'; @Component({...}) -export class AppComponent {} +export class App {} </docs-code> </docs-step> diff --git a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.ts similarity index 96% rename from adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.ts index ff497c9c0065..d62d7e35369b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/answer/src/app/app.ts @@ -13,7 +13,7 @@ import {ReactiveFormsModule, Validators} from '@angular/forms'; `, imports: [ReactiveFormsModule], }) -export class AppComponent { +export class App { profileForm = new FormGroup({ name: new FormControl('', Validators.required), email: new FormControl('', [Validators.required, Validators.email]), diff --git a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/config.json b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/config.json index 5b6bd3f9499b..b53ad318d7b5 100644 --- a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Validating forms", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.ts similarity index 95% rename from adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.ts index 4cf3b2ec390c..699e690fbd14 100644 --- a/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/18-forms-validation/src/app/app.ts @@ -13,7 +13,7 @@ import {ReactiveFormsModule} from '@angular/forms'; `, imports: [ReactiveFormsModule], }) -export class AppComponent { +export class App { profileForm = new FormGroup({ name: new FormControl(''), email: new FormControl(''), diff --git a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.ts index 10cd1627ced5..66b3ff9a04d4 100644 --- a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/answer/src/app/app.ts @@ -5,6 +5,6 @@ import {CarService} from './car.service'; selector: 'app-root', template: '<p> {{ carService.getCars() }} </p>', }) -export class AppComponent { +export class App { carService = inject(CarService); } diff --git a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/config.json b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/config.json index 39c0797d029b..d159b97e4405 100644 --- a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/car.service.ts", "src/app/app.component.ts"], + "openFiles": ["src/app/car.service.ts", "src/app/app.ts"], "title": "Creating an injectable service", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.ts index 10cd1627ced5..66b3ff9a04d4 100644 --- a/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/19-creating-an-injectable-service/src/app/app.ts @@ -5,6 +5,6 @@ import {CarService} from './car.service'; selector: 'app-root', template: '<p> {{ carService.getCars() }} </p>', }) -export class AppComponent { +export class App { carService = inject(CarService); } diff --git a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/README.md b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/README.md index 66cb5fb0f284..9ad79e7c1116 100644 --- a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/README.md @@ -11,15 +11,15 @@ In this activity, you'll learn how to update the component class and how to use <docs-workflow> <docs-step title="Add a property called `city`"> -Update the component class by adding a property called `city` to the `AppComponent` class. +Update the component class by adding a property called `city` to the `App` class. ```ts -export class AppComponent { +export class App { city = 'San Francisco'; } ``` -The `city` property is of type `string` but you can omit the type because of [type inference in TypeScript](https://www.typescriptlang.org/docs/handbook/type-inference.html). The `city` property can be used in the `AppComponent` class and can be referenced in the component template. +The `city` property is of type `string` but you can omit the type because of [type inference in TypeScript](https://www.typescriptlang.org/docs/handbook/type-inference.html). The `city` property can be used in the `App` class and can be referenced in the component template. <br> diff --git a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.ts index f82200b73c26..33be61974962 100644 --- a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/answer/src/app/app.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; Hello {{ city }}, {{ 1 + 1 }} `, }) -export class AppComponent { +export class App { city = 'San Francisco'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/config.json b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/config.json index 0b57a203f6ce..22230d7ce68f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "type": "editor", "title": "Updating the component" } diff --git a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.ts similarity index 79% rename from adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.ts index ea90b58b7b07..f37d7bb29128 100644 --- a/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/2-updating-the-component-class/src/app/app.ts @@ -6,4 +6,4 @@ import {Component} from '@angular/core'; Hello `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/README.md b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/README.md index 5cb0ba47e981..6415d5e87112 100644 --- a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/README.md @@ -12,7 +12,7 @@ It is often helpful to initialize class properties with values provided by the D <docs-code language="ts" highlight="[3]"> @Component({...}) -class PetCareDashboardComponent { +class PetCareDashboard { petRosterService = inject(PetRosterService); } </docs-code> @@ -21,7 +21,7 @@ class PetCareDashboardComponent { <docs-step title="Inject the `CarService`"> -In `app.component.ts`, using the `inject()` function inject the `CarService` and assign it to a property called `carService` +In `app.ts`, using the `inject()` function inject the `CarService` and assign it to a property called `carService` NOTE: Notice the difference between the property `carService` and the class `CarService`. @@ -31,7 +31,7 @@ NOTE: Notice the difference between the property `carService` and the class `Car Calling `inject(CarService)` gave you an instance of the `CarService` that you can use in your application, stored in the `carService` property. -In the `constructor` function of the `AppComponent`, add the following implementation: +In the `constructor` function of the `App`, add the following implementation: ```ts constructor() { @@ -41,9 +41,9 @@ constructor() { </docs-step> -<docs-step title="Update the `AppComponent` template"> +<docs-step title="Update the `App` template"> -Update the component template in `app.component.ts` with the following code: +Update the component template in `app.ts` with the following code: ```ts template: `<p>Car Listing: {{ display }}</p>`, diff --git a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.ts similarity index 92% rename from adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.ts index dd28dbc8262c..d2e9a1ff475a 100644 --- a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/answer/src/app/app.ts @@ -7,7 +7,7 @@ import {CarService} from './car.service'; <p>Car Listing: {{ display }}</p> `, }) -export class AppComponent { +export class App { display = ''; carService = inject(CarService); diff --git a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/config.json b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/config.json index dbd92d54adc0..145c668c5b78 100644 --- a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/car.service.ts", "src/app/app.component.ts"], + "openFiles": ["src/app/car.service.ts", "src/app/app.ts"], "title": "Inject-based dependency injection", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.ts similarity index 86% rename from adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.ts index d28337c0441c..3133c85a3e07 100644 --- a/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/20-inject-based-di/src/app/app.ts @@ -5,7 +5,7 @@ import {CarService} from './car.service'; selector: 'app-root', template: ``, }) -export class AppComponent { +export class App { display = ''; constructor() {} diff --git a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/README.md b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/README.md index 7feda9c8698b..534dfd4a7d74 100644 --- a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/README.md @@ -14,7 +14,7 @@ To inject a service or some other injectable resource into your component use th <docs-code language="ts" highlight="[3]"> @Component({...}) -class PetCarDashboardComponent { +class PetCarDashboard { constructor(private petCareService: PetCareService) { ... } @@ -33,7 +33,7 @@ Alright, now you give this a try: <docs-step title="Update the code to use constructor-based DI"> -In `app.component.ts`, update the constructor code to match the code below: +In `app.ts`, update the constructor code to match the code below: TIP: Remember, if you get stuck refer to the example on this activity page. diff --git a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.ts index 2d49ddbec8e8..d1d00f97fe80 100644 --- a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/answer/src/app/app.ts @@ -7,7 +7,7 @@ import {CarService} from './car.service'; <p>Car Listing: {{ display }}</p> `, }) -export class AppComponent { +export class App { private carService = inject(CarService); display = this.carService.getCars().join(' ⭐️ '); diff --git a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/config.json b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/config.json index 04758f70a91c..03c1c2125fca 100644 --- a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/car.service.ts", "src/app/app.component.ts"], + "openFiles": ["src/app/car.service.ts", "src/app/app.ts"], "title": "Constructor-based dependency injection", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.ts similarity index 89% rename from adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.ts index 787b61d34344..5de845165a15 100644 --- a/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/21-constructor-based-di/src/app/app.ts @@ -7,7 +7,7 @@ import {CarService} from './car.service'; <p>Car Listing: {{ display }}</p> `, }) -export class AppComponent { +export class App { display = ''; constructor() {} diff --git a/adev/src/content/tutorials/learn-angular/steps/22-pipes/README.md b/adev/src/content/tutorials/learn-angular/steps/22-pipes/README.md index 0e5ee1d7765b..7ffde709cbb7 100644 --- a/adev/src/content/tutorials/learn-angular/steps/22-pipes/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/22-pipes/README.md @@ -18,7 +18,7 @@ import {UpperCasePipe} from '@angular/common'; template: `{{ loudMessage | uppercase }}`, imports: [UpperCasePipe], }) -class AppComponent { +class App { loudMessage = 'we think you are doing great!' } </docs-code> @@ -28,7 +28,7 @@ Now, it's your turn to give this a try: <docs-workflow> <docs-step title="Import the `LowerCase` pipe"> -First, update `app.component.ts` by adding the file level import for `LowerCasePipe` from `@angular/common`. +First, update `app.ts` by adding the file level import for `LowerCasePipe` from `@angular/common`. ```ts import { LowerCasePipe } from '@angular/common'; @@ -49,7 +49,7 @@ Next, update `@Component()` decorator `imports` to include a reference to `Lower </docs-step> <docs-step title="Add the pipe to the template"> -Finally, in `app.component.ts` update the template to include the `lowercase` pipe: +Finally, in `app.ts` update the template to include the `lowercase` pipe: ```ts template: `{{username | lowercase }}` diff --git a/adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.ts similarity index 89% rename from adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.ts index 36753ec1ef7e..6c03e3b3f2f7 100644 --- a/adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/22-pipes/answer/src/app/app.ts @@ -8,6 +8,6 @@ import {LowerCasePipe} from '@angular/common'; `, imports: [LowerCasePipe], }) -export class AppComponent { +export class App { username = 'yOunGTECh'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/22-pipes/config.json b/adev/src/content/tutorials/learn-angular/steps/22-pipes/config.json index 132b2ea912a2..227063759a2b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/22-pipes/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/22-pipes/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Pipes", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.ts index c8dd085eaf98..47d5f4d4637e 100644 --- a/adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/22-pipes/src/app/app.ts @@ -7,6 +7,6 @@ import {Component} from '@angular/core'; `, imports: [], }) -export class AppComponent { +export class App { username = 'yOunGTECh'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/README.md b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/README.md index 5582954aa382..b0df4b440c12 100644 --- a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/README.md @@ -22,7 +22,7 @@ Time to customize some pipe output: <docs-step title="Format a number with `DecimalPipe`"> -In `app.component.ts`, update the template to include parameter for the `decimal` pipe. +In `app.ts`, update the template to include parameter for the `decimal` pipe. <docs-code language="ts" highlight="[3]"> template: ` diff --git a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.ts similarity index 94% rename from adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.ts index 985b7175938c..1216cf06f7ff 100644 --- a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/answer/src/app/app.ts @@ -12,7 +12,7 @@ import {DecimalPipe, DatePipe, CurrencyPipe} from '@angular/common'; `, imports: [DecimalPipe, DatePipe, CurrencyPipe], }) -export class AppComponent { +export class App { num = 103.1234; birthday = new Date(2023, 3, 2); cost = 4560.34; diff --git a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/config.json b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/config.json index b6240ea04e51..b2dfe91f05cf 100644 --- a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Formatting data with pipes", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.ts similarity index 94% rename from adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.ts index 7381174f5317..6667619cccb0 100644 --- a/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/23-pipes-format-data/src/app/app.ts @@ -12,7 +12,7 @@ import {DecimalPipe, DatePipe, CurrencyPipe} from '@angular/common'; `, imports: [DecimalPipe, DatePipe, CurrencyPipe], }) -export class AppComponent { +export class App { num = 103.1234; birthday = new Date(2023, 3, 2); cost = 4560.34; diff --git a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/README.md b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/README.md index d24302989c3d..405669e79028 100644 --- a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/README.md @@ -66,7 +66,7 @@ export class ReversePipe implements PipeTransform { </docs-step> <docs-step title="Use the `ReversePipe` in the template"></docs-step> -With the pipe logic implemented, the final step is to use it in the template. In `app.component.ts` include the pipe in the template and add it to the component imports: +With the pipe logic implemented, the final step is to use it in the template. In `app.ts` include the pipe in the template and add it to the component imports: <docs-code language="angular-ts" highlight="[3,4]"> @Component({ diff --git a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.ts similarity index 89% rename from adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.ts index 208c6f8d405b..2950b1abeaea 100644 --- a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/answer/src/app/app.ts @@ -8,6 +8,6 @@ import {ReversePipe} from './reverse.pipe'; `, imports: [ReversePipe], }) -export class AppComponent { +export class App { word = 'You are a champion'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/config.json b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/config.json index eaa7f52ccabc..ef23e8fcf49d 100644 --- a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts", "src/app/reverse.pipe.ts"], + "openFiles": ["src/app/app.ts", "src/app/reverse.pipe.ts"], "title": "Create a pipe", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.ts index 71c0870cc94a..c6491f498272 100644 --- a/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/24-create-a-pipe/src/app/app.ts @@ -8,6 +8,6 @@ import {ReversePipe} from './reverse.pipe'; `, imports: [], }) -export class AppComponent { +export class App { word = 'You are a champion'; } diff --git a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/README.md b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/README.md index 2071c876131d..8d207f7c75c7 100644 --- a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/README.md @@ -10,23 +10,23 @@ In this activity, you'll learn how to compose components. <hr/> -In this example, there are two components `UserComponent` and `AppComponent`. +In this example, there are two components `User` and `App`. <docs-workflow> -<docs-step title="Add a reference to `UserComponent`"> -Update the `AppComponent` template to include a reference to the `UserComponent` which uses the selector `app-user`. Be sure to add `UserComponent` to the imports array of `AppComponent`, this makes it available for use in the `AppComponent` template. +<docs-step title="Add a reference to `User`"> +Update the `App` template to include a reference to the `User` which uses the selector `app-user`. Be sure to add `User` to the imports array of `App`, this makes it available for use in the `App` template. ```ts template: `<app-user />`, -imports: [UserComponent] +imports: [User] ``` The component now displays the message `Username: youngTech`. You can update the template code to include more markup. </docs-step> <docs-step title="Add more markup"> -Because you can use any HTML markup that you want in a template, try updating the template for `AppComponent` to also include more HTML elements. This example will add a `<section>` element as the parent of the `<app-user>` element. +Because you can use any HTML markup that you want in a template, try updating the template for `App` to also include more HTML elements. This example will add a `<section>` element as the parent of the `<app-user>` element. ```ts template: `<section><app-user /></section>`, diff --git a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.ts similarity index 75% rename from adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.ts index cfcf11d2e2f3..08edb6ed51d6 100644 --- a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/answer/src/app/app.ts @@ -6,7 +6,7 @@ import {Component} from '@angular/core'; Username: {{ username }} `, }) -export class UserComponent { +export class User { username = 'youngTech'; } @@ -17,6 +17,6 @@ export class UserComponent { <app-user /> </section> `, - imports: [UserComponent], + imports: [User], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/config.json b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/config.json index 07b0847fc2e1..09a6fb59268a 100644 --- a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "type": "editor", "title": "Component composition" } diff --git a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.ts similarity index 79% rename from adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.ts index 48a7c83cc3b7..f2cd974df2d5 100644 --- a/adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/3-composing-components/src/app/app.ts @@ -6,7 +6,7 @@ import {Component} from '@angular/core'; Username: {{ username }} `, }) -export class UserComponent { +export class User { username = 'youngTech'; } @@ -15,4 +15,4 @@ export class UserComponent { template: ``, imports: [], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/README.md b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/README.md index 8627de261835..4aa993494b2c 100644 --- a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/README.md @@ -23,7 +23,7 @@ Here's an example of how to use the `@if` syntax in a component: } `, }) -class AppComponent { +class App { isLoggedIn = true; } ``` @@ -36,7 +36,7 @@ Two things to take note of: <docs-workflow> <docs-step title="Create a property called `isServerRunning`"> -In the `AppComponent` class, add a `boolean` property called `isServerRunning`, set the initial value to `true`. +In the `App` class, add a `boolean` property called `isServerRunning`, set the initial value to `true`. </docs-step> <docs-step title="Use `@if` in the template"> diff --git a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.ts similarity index 90% rename from adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.ts index 1eeba7adc4d4..3350ef349ead 100644 --- a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/answer/src/app/app.ts @@ -10,6 +10,6 @@ import {Component} from '@angular/core'; } `, }) -export class AppComponent { +export class App { isServerRunning = true; } diff --git a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/config.json b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/config.json index e92cca6e35e3..d12317d190d3 100644 --- a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Control flow in components - @if", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.ts similarity index 86% rename from adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.ts index 1b55a78f5015..9ac26ef4caa1 100644 --- a/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/4-control-flow-if/src/app/app.ts @@ -6,6 +6,6 @@ import {Component} from '@angular/core'; <span>Yes, the server is running</span> `, }) -export class AppComponent { +export class App { // add the boolean property here } diff --git a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/README.md b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/README.md index 902ae9bdcbd3..57ca07d7651f 100644 --- a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/README.md @@ -21,7 +21,7 @@ Here's an example of how to use the `@for` syntax in a component: } `, }) -export class AppComponent { +export class App { operatingSystems = [{id: 'win', name: 'Windows'}, {id: 'osx', name: 'MacOS'}, {id: 'linux', name: 'Linux'}]; } ``` @@ -34,7 +34,7 @@ Two things to take note of: <docs-workflow> <docs-step title="Add the `users` property"> -In the `AppComponent` class, add a property called `users` that contains users and their names. +In the `App` class, add a property called `users` that contains users and their names. ```ts [{id: 0, name: 'Sarah'}, {id: 1, name: 'Amy'}, {id: 2, name: 'Rachel'}, {id: 3, name: 'Jessica'}, {id: 4, name: 'Poornima'}] diff --git a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.ts similarity index 92% rename from adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.ts index 4c2de7dece69..159ae820c2a9 100644 --- a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/answer/src/app/app.ts @@ -8,7 +8,7 @@ import {Component} from '@angular/core'; } `, }) -export class AppComponent { +export class App { users = [ {id: 0, name: 'Sarah'}, {id: 1, name: 'Amy'}, diff --git a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/config.json b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/config.json index 4ada9755c37f..06ab70289fb2 100644 --- a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Control flow - @for", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.ts similarity index 77% rename from adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.ts index 9db390f3a486..9e6d50d4742b 100644 --- a/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/5-control-flow-for/src/app/app.ts @@ -4,4 +4,4 @@ import {Component} from '@angular/core'; selector: 'app-root', template: ``, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/README.md b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/README.md index f661200ab5a3..a74f6791b2e5 100644 --- a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/README.md @@ -20,17 +20,17 @@ In this example, the value of the `src` attribute will be bound to the class pro <docs-workflow> -<docs-step title="Add a property called `isEditable`" header="app.component.ts" language="ts"> -Update the code in `app.component.ts` by adding a property to the `AppComponent` class called `isEditable` with the initial value set to `true`. +<docs-step title="Add a property called `isEditable`" header="app.ts" language="ts"> +Update the code in `app.ts` by adding a property to the `App` class called `isEditable` with the initial value set to `true`. <docs-code highlight="[2]"> -export class AppComponent { +export class App { isEditable = true; } </docs-code> </docs-step> -<docs-step title="Bind to `contentEditable`" header="app.component.ts" language="ts"> +<docs-step title="Bind to `contentEditable`" header="app.ts" language="ts"> Next, bind the `contentEditable` attribute of the `div` to the `isEditable` property by using the <code aria-label="square brackets">[]</code> syntax. <docs-code highlight="[3]" language="angular-ts"> diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.component.css b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.component.css rename to adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.css diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.ts similarity index 72% rename from adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.ts index a4b37d26a4a6..50358fe841d5 100644 --- a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/answer/src/app/app.ts @@ -2,11 +2,11 @@ import {Component} from '@angular/core'; @Component({ selector: 'app-root', - styleUrls: ['app.component.css'], + styleUrls: ['app.css'], template: ` <div [contentEditable]="isEditable"></div> `, }) -export class AppComponent { +export class App { isEditable = true; } diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/config.json b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/config.json index 41d1bb84625d..7d9c9770e502 100644 --- a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Property Binding", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.component.css b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.css similarity index 100% rename from adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.component.css rename to adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.css diff --git a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.ts similarity index 68% rename from adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.ts index b229abc83eb4..7f609f758a30 100644 --- a/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/6-property-binding/src/app/app.ts @@ -2,9 +2,9 @@ import {Component} from '@angular/core'; @Component({ selector: 'app-root', - styleUrls: ['app.component.css'], + styleUrls: ['app.css'], template: ` <div contentEditable="false"></div> `, }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/README.md b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/README.md index 21e774f002d4..19d59608ef77 100644 --- a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/README.md @@ -15,7 +15,7 @@ In Angular you bind to events with the parentheses syntax `()`. On a given eleme ... template: `<button (click)="greet()">` }) -class AppComponent { +class App { greet() { console.log('Hello, there 👋'); } @@ -29,7 +29,7 @@ Alright, your turn to give this a try: <docs-workflow> <docs-step title="Add an event handler"> -Add the `onMouseOver` event handler function in the `AppComponent` class. Use the following code as the implementation: +Add the `onMouseOver` event handler function in the `App` class. Use the following code as the implementation: ```ts onMouseOver() { @@ -40,7 +40,7 @@ onMouseOver() { </docs-step> <docs-step title="Bind to the template event"> -Update the template code in `app.component.ts` to bind to the `mouseover` event of the `section` element. +Update the template code in `app.ts` to bind to the `mouseover` event of the `section` element. ```angular-html <section (mouseover)="onMouseOver()"> diff --git a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.ts index 97b5579c78ac..2168136f5e1d 100644 --- a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/answer/src/app/app.ts @@ -9,7 +9,7 @@ import {Component} from '@angular/core'; </section> `, }) -export class AppComponent { +export class App { message = ''; onMouseOver() { diff --git a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/config.json b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/config.json index 758f57c7babc..3c3979210851 100644 --- a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/app.component.ts"], + "openFiles": ["src/app/app.ts"], "title": "Event handling", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.ts similarity index 89% rename from adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.ts index b446419af781..77bd4d970c95 100644 --- a/adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/7-event-handling/src/app/app.ts @@ -9,7 +9,7 @@ import {Component} from '@angular/core'; </section> `, }) -export class AppComponent { +export class App { message = ''; onMouseOver() {} diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/README.md b/adev/src/content/tutorials/learn-angular/steps/8-input/README.md index 2a950934adf2..5d115d07702c 100644 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/README.md @@ -12,25 +12,25 @@ In this activity, you'll learn how to use the `@Input` decorator to send informa To create an `Input` property, add the `@Input` decorator to a property of a component class: -<docs-code header="user.component.ts" language="ts"> -class UserComponent { +<docs-code header="user.ts" language="ts"> +class User { @Input() occupation = ''; } </docs-code> When you are ready to pass in a value through an `Input`, values can be set in templates using the attribute syntax. Here's an example: -<docs-code header="app.component.ts" language="angular-ts" highlight="[3]"> +<docs-code header="app.ts" language="angular-ts" highlight="[3]"> @Component({ ... template: `<app-user occupation="Angular Developer"></app-user>` }) -class AppComponent {} +class App {} </docs-code> -Make sure you bind the property `occupation` in your `UserComponent`. +Make sure you bind the property `occupation` in your `User`. -<docs-code header="user.component.ts" language="angular-ts"> +<docs-code header="user.ts" language="angular-ts"> @Component({ ... template: `<p>The user's occupation is {{occupation}}</p>` @@ -40,11 +40,11 @@ Make sure you bind the property `occupation` in your `UserComponent`. <docs-workflow> <docs-step title="Define an `@Input` property"> -Update the code in `user.component.ts` to define an `Input` property on the `UserComponent` called `name`. For now, set the initial value to `empty string`. Be sure to update the template to interpolate the `name` property at the end of the sentence. +Update the code in `user.ts` to define an `Input` property on the `User` called `name`. For now, set the initial value to `empty string`. Be sure to update the template to interpolate the `name` property at the end of the sentence. </docs-step> <docs-step title="Pass a value to the `@Input` property"> -Update the code in `app.component.ts` to send in the `name` property with a value of `"Simran"`. +Update the code in `app.ts` to send in the `name` property with a value of `"Simran"`. <br> When the code has been successfully updated, the app will display `The user's name is Simran`. diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.ts similarity index 55% rename from adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.ts index c89378aff2bd..1045ab35edcf 100644 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/app.ts @@ -1,11 +1,11 @@ import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; +import {User} from './user'; @Component({ selector: 'app-root', template: ` <app-user name="Simran" /> `, - imports: [UserComponent], + imports: [User], }) -export class AppComponent {} +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.ts similarity index 85% rename from adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.ts index 25e0cb630497..14f7530f2103 100644 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/answer/src/app/user.ts @@ -6,6 +6,6 @@ import {Component, Input} from '@angular/core'; <p>The user's name is {{ name }}</p> `, }) -export class UserComponent { +export class User { @Input() name = ''; } diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/config.json b/adev/src/content/tutorials/learn-angular/steps/8-input/config.json index 4f30e801ecb4..cf23ded83a10 100644 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/user.component.ts", "src/app/app.component.ts"], + "openFiles": ["src/app/user.ts", "src/app/app.ts"], "title": "Communicating with @Input", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.component.ts deleted file mode 100644 index eb3f15f9917a..000000000000 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Component} from '@angular/core'; -import {UserComponent} from './user.component'; - -@Component({ - selector: 'app-root', - template: ` - <app-user /> - `, - imports: [UserComponent], -}) -export class AppComponent {} diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.ts b/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.ts new file mode 100644 index 000000000000..6ad5866234c2 --- /dev/null +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/app.ts @@ -0,0 +1,11 @@ +import {Component} from '@angular/core'; +import {User} from './user'; + +@Component({ + selector: 'app-root', + template: ` + <app-user /> + `, + imports: [User], +}) +export class App {} diff --git a/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.component.ts b/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.ts similarity index 82% rename from adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.component.ts rename to adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.ts index 23a907db5382..eda4049b9f18 100644 --- a/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/8-input/src/app/user.ts @@ -6,4 +6,4 @@ import {Component, Input} from '@angular/core'; <p>The user's name is</p> `, }) -export class UserComponent {} +export class User {} diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/README.md b/adev/src/content/tutorials/learn-angular/steps/9-output/README.md index 69438c08d468..2a4fc48d5607 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/README.md +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/README.md @@ -12,17 +12,17 @@ In this activity, you'll learn how to use the `@Output` decorator and `EventEmit To create the communication path from child to parent components, use the `@Output` decorator on a class property and assign it a value of type `EventEmitter`: -<docs-code header="child.component.ts" language="ts"> +<docs-code header="child.ts" language="ts"> @Component({...}) -class ChildComponent { +class Child { @Output() incrementCountEvent = new EventEmitter<number>(); } </docs-code> Now the component can generate events that can be listened to by the parent component. Trigger events by calling the `emit` method: -<docs-code header="child.component.ts" language="ts"> -class ChildComponent { +<docs-code header="child.ts" language="ts"> +class Child { ... onClick() { @@ -40,13 +40,13 @@ Alright, your turn to give this a try. Complete the code by following these task <docs-workflow> <docs-step title="Add an `@Output` property"> -Update `child.component.ts` by adding an output property called `addItemEvent`, be sure to set the EventEmitter type to be `string`. +Update `child.ts` by adding an output property called `addItemEvent`, be sure to set the EventEmitter type to be `string`. </docs-step> <docs-step title="Complete `addItem` method"> -In `child.component.ts` update the `addItem` method; use the following code as the logic: +In `child.ts` update the `addItem` method; use the following code as the logic: -<docs-code header="child.component.ts" highlight="[2]" language="ts"> +<docs-code header="child.ts" highlight="[2]" language="ts"> addItem() { this.addItemEvent.emit('🐢'); } @@ -54,8 +54,8 @@ addItem() { </docs-step> -<docs-step title="Update the `AppComponent` template"> -In `app.component.ts` update the template to listen to the emitted event by adding the following code: +<docs-step title="Update the `App` template"> +In `app.ts` update the template to listen to the emitted event by adding the following code: ```angular-html <app-child (addItemEvent)="addItem($event)" /> diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.ts similarity index 72% rename from adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.ts index ce34e950fa78..3ffad6e2148d 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ChildComponent} from './child.component'; +import {Child} from './child'; @Component({ selector: 'app-root', @@ -7,9 +7,9 @@ import {ChildComponent} from './child.component'; <app-child (addItemEvent)="addItem($event)" /> <p>🐢 all the way down {{ items.length }}</p> `, - imports: [ChildComponent], + imports: [Child], }) -export class AppComponent { +export class App { items = new Array(); addItem(item: string) { diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.component.ts b/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.ts similarity index 91% rename from adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.component.ts rename to adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.ts index 5a3d1657ef53..199b4b82a548 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/answer/src/app/child.ts @@ -7,7 +7,7 @@ import {Component, Output, EventEmitter} from '@angular/core'; <button class="btn" (click)="addItem()">Add Item</button> `, }) -export class ChildComponent { +export class Child { @Output() addItemEvent = new EventEmitter<string>(); addItem() { diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/config.json b/adev/src/content/tutorials/learn-angular/steps/9-output/config.json index 5f0713577714..1b62d5443fc1 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/config.json +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/config.json @@ -1,5 +1,5 @@ { - "openFiles": ["src/app/child.component.ts", "src/app/app.component.ts"], + "openFiles": ["src/app/child.ts", "src/app/app.ts"], "title": "Communicating with @Output", "type": "editor" } diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.component.ts b/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.ts similarity index 70% rename from adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.component.ts rename to adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.ts index bab521435326..37fb6612218a 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/app.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {ChildComponent} from './child.component'; +import {Child} from './child'; @Component({ selector: 'app-root', @@ -7,9 +7,9 @@ import {ChildComponent} from './child.component'; <app-child /> <p>🐢 all the way down {{ items.length }}</p> `, - imports: [ChildComponent], + imports: [Child], }) -export class AppComponent { +export class App { items = new Array(); addItem(item: string) { diff --git a/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.component.ts b/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.ts similarity index 88% rename from adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.component.ts rename to adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.ts index e282c70cb7e3..be08950ff474 100644 --- a/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.component.ts +++ b/adev/src/content/tutorials/learn-angular/steps/9-output/src/app/child.ts @@ -7,6 +7,6 @@ import {Component, Output, EventEmitter} from '@angular/core'; <button class="btn" (click)="addItem()">Add Item</button> `, }) -export class ChildComponent { +export class Child { addItem() {} } diff --git a/adev/src/content/tutorials/playground/0-hello-world/src/main.ts b/adev/src/content/tutorials/playground/0-hello-world/src/main.ts index e6a992d40a92..42ac49fbaa46 100644 --- a/adev/src/content/tutorials/playground/0-hello-world/src/main.ts +++ b/adev/src/content/tutorials/playground/0-hello-world/src/main.ts @@ -7,6 +7,6 @@ import {bootstrapApplication} from '@angular/platform-browser'; Hello world! `, }) -export class PlaygroundComponent {} +export class Playground {} -bootstrapApplication(PlaygroundComponent); +bootstrapApplication(Playground); diff --git a/adev/src/content/tutorials/playground/2-control-flow/src/main.ts b/adev/src/content/tutorials/playground/2-control-flow/src/main.ts index 29e0c5d36b6a..9d59be05c97f 100644 --- a/adev/src/content/tutorials/playground/2-control-flow/src/main.ts +++ b/adev/src/content/tutorials/playground/2-control-flow/src/main.ts @@ -22,7 +22,7 @@ import {bootstrapApplication} from '@angular/platform-browser'; } `, }) -export class TodosComponent { +export class Todos { todos: Array<{done: boolean; text: string}> = []; add(text: string) { @@ -34,4 +34,4 @@ export class TodosComponent { } } -bootstrapApplication(TodosComponent); +bootstrapApplication(Todos); diff --git a/adev/src/content/tutorials/playground/3-minigame/src/main.ts b/adev/src/content/tutorials/playground/3-minigame/src/main.ts index 17a1d229cffa..9baed226862b 100644 --- a/adev/src/content/tutorials/playground/3-minigame/src/main.ts +++ b/adev/src/content/tutorials/playground/3-minigame/src/main.ts @@ -56,7 +56,7 @@ function getResultQuote(accuracy: number) { styleUrl: 'game.css', templateUrl: 'game.html', }) -export class PlaygroundComponent { +export class Playground { protected readonly isGuessModalOpen = signal(false); protected readonly isAccessiblePanelOpen = signal(false); protected readonly rotateVal = signal(40); @@ -208,7 +208,7 @@ export class PlaygroundComponent { for (let i = 0; i < 5; i++) { emojiAccuracy += roundedAcc >= 20 * (i + 1) ? '🟩' : '⬜️'; } - return encodeURIComponent( + return encodeURI( `📐 ${emojiAccuracy} \n My angles are ${roundedAcc}% accurate on level ${ this.gameStats().level }. \n\nHow @Angular are you? \nhttps://angular.dev/playground`, @@ -220,4 +220,4 @@ export class PlaygroundComponent { } } -bootstrapApplication(PlaygroundComponent); +bootstrapApplication(Playground); diff --git a/adev/test-main.ts b/adev/test-main.ts index 6a405f2771c8..1c4ba42ec158 100644 --- a/adev/test-main.ts +++ b/adev/test-main.ts @@ -6,22 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ErrorHandler, NgModule, provideZonelessChangeDetection} from '@angular/core'; +import {NgModule, provideZonelessChangeDetection} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {BrowserTestingModule, platformBrowserTesting} from '@angular/platform-browser/testing'; @NgModule({ - providers: [ - provideZonelessChangeDetection(), - { - provide: ErrorHandler, - useValue: { - handleError: (e: unknown) => { - throw e; - }, - }, - }, - ], + providers: [provideZonelessChangeDetection()], }) export class TestModule {} diff --git a/devtools/BUILD.bazel b/devtools/BUILD.bazel index 9e0065b59d36..7c7201f13192 100644 --- a/devtools/BUILD.bazel +++ b/devtools/BUILD.bazel @@ -1,4 +1,4 @@ -load("//tools:defaults.bzl", "ts_config") +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") package(default_visibility = ["//visibility:public"]) @@ -7,10 +7,15 @@ exports_files([ "cypress.json", ]) -ts_config( - name = "tsconfig_spec", - src = "tsconfig.spec.json", +rules_js_tsconfig( + name = "tsconfig_build", + src = "tsconfig.json", +) + +rules_js_tsconfig( + name = "tsconfig_test", + src = "tsconfig-test.json", deps = [ - "//devtools:tsconfig.json", + ":tsconfig_build", ], ) diff --git a/devtools/projects/demo-no-zone/src/BUILD.bazel b/devtools/projects/demo-no-zone/src/BUILD.bazel index 5017b207724c..9baa04531646 100644 --- a/devtools/projects/demo-no-zone/src/BUILD.bazel +++ b/devtools/projects/demo-no-zone/src/BUILD.bazel @@ -1,19 +1,20 @@ load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//tools:defaults.bzl", "esbuild", "http_server") package(default_visibility = ["//:__subpackages__"]) -ng_module( +ng_project( name = "src", srcs = ["main.ts"], - deps = [ - "//devtools/projects/demo-no-zone/src/app", + interop_deps = [ "//packages/common", "//packages/core", "//packages/platform-browser", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/demo-no-zone/src/app:app_rjs", ], ) diff --git a/devtools/projects/demo-no-zone/src/app/BUILD.bazel b/devtools/projects/demo-no-zone/src/app/BUILD.bazel index 2ac367bd6200..3649cb7f7dbe 100644 --- a/devtools/projects/demo-no-zone/src/app/BUILD.bazel +++ b/devtools/projects/demo-no-zone/src/app/BUILD.bazel @@ -1,17 +1,19 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "app", srcs = glob( include = ["*.ts"], ), angular_assets = ["app.component.html"], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", "//packages/platform-browser", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/devtools/projects/demo-standalone/src/BUILD.bazel b/devtools/projects/demo-standalone/src/BUILD.bazel index 1e8505323dbd..bf6943afa0f2 100644 --- a/devtools/projects/demo-standalone/src/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/BUILD.bazel @@ -1,7 +1,7 @@ load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools/esbuild:index.bzl", "LINKER_PROCESSED_FW_PACKAGES") load("//tools:defaults.bzl", "esbuild", "http_server") @@ -38,11 +38,10 @@ copy_to_directory( }, ) -ng_module( +ng_project( name = "demo", srcs = ["main.ts"], - deps = [ - "//devtools/projects/demo-standalone/src/app", + interop_deps = [ "//devtools/src:demo_application_environment", "//devtools/src:demo_application_operations", "//packages/common", @@ -50,8 +49,10 @@ ng_module( "//packages/core", "//packages/core/src/util", "//packages/platform-browser", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/demo-standalone/src/app:app_rjs", ], ) diff --git a/devtools/projects/demo-standalone/src/app/BUILD.bazel b/devtools/projects/demo-standalone/src/app/BUILD.bazel index 087551ad3999..ab9df75d0469 100644 --- a/devtools/projects/demo-standalone/src/app/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/BUILD.bazel @@ -1,19 +1,21 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "app", srcs = [ "app.component.ts", ], - deps = [ - "//devtools/projects/demo-standalone/src/app/demo-app", - "//devtools/projects/demo-standalone/src/app/devtools-app", - "//devtools/projects/ng-devtools", + interop_deps = [ "//packages/core", "//packages/platform-browser", "//packages/platform-browser/animations", "//packages/router", ], + deps = [ + "//devtools/projects/demo-standalone/src/app/demo-app:demo-app_rjs", + "//devtools/projects/demo-standalone/src/app/devtools-app:devtools-app_rjs", + "//devtools/projects/ng-devtools:ng-devtools_rjs", + ], ) diff --git a/devtools/projects/demo-standalone/src/app/demo-app/BUILD.bazel b/devtools/projects/demo-standalone/src/app/demo-app/BUILD.bazel index 5af1197e8d26..5bc9fc43a3b3 100644 --- a/devtools/projects/demo-standalone/src/app/demo-app/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/demo-app/BUILD.bazel @@ -1,5 +1,5 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary", "sass_library") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -19,7 +19,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "demo-app", srcs = [ "demo-app.component.ts", @@ -30,12 +30,14 @@ ng_module( "demo-app.component.html", ":demo_app_component_styles", ], - deps = [ - "//devtools/projects/demo-standalone/src/app/demo-app/todo", - "//devtools/projects/ng-devtools-backend", - "//devtools/src:zone-unaware-iframe_message_bus", + interop_deps = [ "//packages/core", "//packages/elements", "//packages/router", ], + deps = [ + "//devtools/projects/demo-standalone/src/app/demo-app/todo:todo_rjs", + "//devtools/projects/ng-devtools-backend:ng-devtools-backend_rjs", + "//devtools/src:zone-unaware-iframe_message_bus_rjs", + ], ) diff --git a/devtools/projects/demo-standalone/src/app/demo-app/demo-app.component.ts b/devtools/projects/demo-standalone/src/app/demo-app/demo-app.component.ts index 21c2e07f4e98..147168f9af0c 100644 --- a/devtools/projects/demo-standalone/src/app/demo-app/demo-app.component.ts +++ b/devtools/projects/demo-standalone/src/app/demo-app/demo-app.component.ts @@ -23,7 +23,7 @@ import { } from '@angular/core'; import {createCustomElement} from '@angular/elements'; import {RouterOutlet} from '@angular/router'; -import {initializeMessageBus} from 'ng-devtools-backend'; +import {initializeMessageBus} from '../../../../ng-devtools-backend'; import {ZoneUnawareIFrameMessageBus} from '../../../../../src/zone-unaware-iframe-message-bus'; diff --git a/devtools/projects/demo-standalone/src/app/demo-app/todo/BUILD.bazel b/devtools/projects/demo-standalone/src/app/demo-app/todo/BUILD.bazel index 10b72fee328d..4e4508e8edec 100644 --- a/devtools/projects/demo-standalone/src/app/demo-app/todo/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/demo-app/todo/BUILD.bazel @@ -1,20 +1,22 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "todo", srcs = [ "dialog.component.ts", "todo-app.component.ts", ], - deps = [ - "//devtools/projects/demo-standalone/src/app/demo-app/todo/about", - "//devtools/projects/demo-standalone/src/app/demo-app/todo/home", + interop_deps = [ "//packages/common", "//packages/core", "//packages/forms", "//packages/router", - "@npm//@angular/material", + ], + deps = [ + "//:node_modules/@angular/material", + "//devtools/projects/demo-standalone/src/app/demo-app/todo/about:about_rjs", + "//devtools/projects/demo-standalone/src/app/demo-app/todo/home:home_rjs", ], ) diff --git a/devtools/projects/demo-standalone/src/app/demo-app/todo/about/BUILD.bazel b/devtools/projects/demo-standalone/src/app/demo-app/todo/about/BUILD.bazel index e19d51b17c41..f961090d5979 100644 --- a/devtools/projects/demo-standalone/src/app/demo-app/todo/about/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/demo-app/todo/about/BUILD.bazel @@ -1,11 +1,11 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "about", srcs = ["about.component.ts"], - deps = [ + interop_deps = [ "//packages/core", "//packages/router", ], diff --git a/devtools/projects/demo-standalone/src/app/demo-app/todo/home/BUILD.bazel b/devtools/projects/demo-standalone/src/app/demo-app/todo/home/BUILD.bazel index 9a4703752459..ab663d9e4c18 100644 --- a/devtools/projects/demo-standalone/src/app/demo-app/todo/home/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/demo-app/todo/home/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "home", srcs = [ "sample.pipe.ts", @@ -10,7 +10,7 @@ ng_module( "todos.component.ts", "tooltip.directive.ts", ], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", "//packages/router", diff --git a/devtools/projects/demo-standalone/src/app/devtools-app/BUILD.bazel b/devtools/projects/demo-standalone/src/app/devtools-app/BUILD.bazel index 2d292a19b00f..71b2b22cbc27 100644 --- a/devtools/projects/demo-standalone/src/app/devtools-app/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/app/devtools-app/BUILD.bazel @@ -1,17 +1,19 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "devtools-app", srcs = ["devtools-app.component.ts"], - deps = [ - "//devtools/projects/ng-devtools", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/protocol", - "//devtools/src:iframe_message_bus", + interop_deps = [ "//packages/common", "//packages/core", "//packages/router", ], + deps = [ + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/src:iframe_message_bus_rjs", + ], ) diff --git a/devtools/projects/demo-standalone/src/app/devtools-app/devtools-app.component.ts b/devtools/projects/demo-standalone/src/app/devtools-app/devtools-app.component.ts index d414d51d6c57..31c12c2ff2fc 100644 --- a/devtools/projects/demo-standalone/src/app/devtools-app/devtools-app.component.ts +++ b/devtools/projects/demo-standalone/src/app/devtools-app/devtools-app.component.ts @@ -7,10 +7,10 @@ */ import {Component, ElementRef, ViewChild} from '@angular/core'; -import {Events, MessageBus, PriorityAwareMessageBus} from 'protocol'; +import {Events, MessageBus, PriorityAwareMessageBus} from '../../../../protocol'; import {IFrameMessageBus} from '../../../../../src/iframe-message-bus'; -import {DevToolsComponent} from 'ng-devtools'; +import {DevToolsComponent} from '../../../../ng-devtools'; import {FrameManager} from '../../../../../projects/ng-devtools/src/lib/application-services/frame_manager'; @Component({ diff --git a/devtools/projects/demo-standalone/src/environments/BUILD.bazel b/devtools/projects/demo-standalone/src/environments/BUILD.bazel index 47a65ebf6037..f141f82bbb91 100644 --- a/devtools/projects/demo-standalone/src/environments/BUILD.bazel +++ b/devtools/projects/demo-standalone/src/environments/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "environments", srcs = [ "environment.ts", diff --git a/devtools/projects/demo-standalone/src/main.ts b/devtools/projects/demo-standalone/src/main.ts index 55e95a412f5c..08d4e39021b5 100644 --- a/devtools/projects/demo-standalone/src/main.ts +++ b/devtools/projects/demo-standalone/src/main.ts @@ -9,7 +9,7 @@ import {bootstrapApplication} from '@angular/platform-browser'; import {provideAnimations} from '@angular/platform-browser/animations'; import {provideRouter} from '@angular/router'; -import {ApplicationEnvironment, ApplicationOperations} from 'ng-devtools'; +import {ApplicationEnvironment, ApplicationOperations} from '../../ng-devtools'; import {DemoApplicationEnvironment} from '../../../src/demo-application-environment'; import {DemoApplicationOperations} from '../../../src/demo-application-operations'; diff --git a/devtools/projects/ng-devtools-backend/BUILD.bazel b/devtools/projects/ng-devtools-backend/BUILD.bazel index 43f89e0b8c93..e74f2a529dea 100644 --- a/devtools/projects/ng-devtools-backend/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/BUILD.bazel @@ -1,18 +1,11 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( - name = "ng_devtools_backend_ts", +ts_project( + name = "ng-devtools-backend", srcs = ["index.ts"], deps = [ - "//devtools/projects/ng-devtools-backend/src", + "//devtools/projects/ng-devtools-backend/src:src_rjs", ], ) - -js_library( - name = "ng-devtools-backend", - package_name = "ng-devtools-backend", - deps = [":ng_devtools_backend_ts"], -) diff --git a/devtools/projects/ng-devtools-backend/src/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/BUILD.bazel index c6b5fc0990af..50ad51ec998b 100644 --- a/devtools/projects/ng-devtools-backend/src/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/BUILD.bazel @@ -1,12 +1,12 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "src", srcs = ["public-api.ts"], deps = [ - "//devtools/projects/ng-devtools-backend/src/lib", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", + "//devtools/projects/ng-devtools-backend/src/lib:lib_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/BUILD.bazel index 31bc02fe3ea8..993900dc5309 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/BUILD.bazel @@ -1,26 +1,28 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "lib", srcs = ["index.ts"], - deps = [ - ":client_event_subscribers", - "//devtools/projects/ng-devtools-backend/src/lib/component-inspector", - "//devtools/projects/ng-devtools-backend/src/lib/directive-forest", - "//devtools/projects/ng-devtools-backend/src/lib/hooks", + interop_deps = [ "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", "//devtools/projects/ng-devtools-backend/src/lib/state-serializer", - "//devtools/projects/protocol", + ], + deps = [ + ":client_event_subscribers_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-inspector:component-inspector_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/directive-forest:directive-forest_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:hooks_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) karma_web_test_suite( name = "highlighter_test", deps = [ - ":highlighter_test_lib", + ":highlighter_test_lib_rjs", ], ) @@ -29,47 +31,54 @@ ts_test_library( srcs = [ "highlighter.spec.ts", ], - deps = [ - ":highlighter", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + ":highlighter_rjs", ], ) -ts_library( +ts_project( name = "highlighter", srcs = ["highlighter.ts"], - deps = [ - "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", + "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", + ], + deps = [ + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "interfaces", srcs = ["interfaces.ts"], deps = [ - "//devtools/projects/protocol", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "property_mutation", srcs = ["property-mutation.ts"], - deps = [ - ":utils", + interop_deps = [ "//packages/core", ], + deps = [ + ":utils_rjs", + ], ) ts_test_library( name = "property_mutation_test_lib", srcs = ["property-mutation.spec.ts"], - deps = [ - ":property_mutation", + interop_deps = [ "//packages/core", ], + deps = [ + ":property_mutation_rjs", + ], ) karma_web_test_suite( @@ -89,44 +98,47 @@ ts_test_library( srcs = [ "router-tree.spec.ts", ], - deps = [ - ":router_tree", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", "//packages/router", - "@npm//@types", + ], + deps = [ + ":router_tree_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "router_tree", srcs = ["router-tree.ts"], - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/router", ], + deps = [ + "//devtools/projects/protocol:protocol_rjs", + ], ) -ts_library( +ts_project( name = "set_console_reference", srcs = ["set-console-reference.ts"], deps = [ - ":interfaces", - "//devtools/projects/protocol", - "//devtools/projects/shared-utils", + ":interfaces_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/projects/shared-utils:shared-utils_rjs", ], ) -ts_library( +ts_project( name = "utils", srcs = ["utils.ts"], - deps = [ - "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", + interop_deps = [ "//packages/core", + "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", ], ) -ts_library( +ts_project( name = "version", srcs = ["version.ts"], ) @@ -144,30 +156,32 @@ ts_test_library( "client-event-subscribers.spec.ts", ], deps = [ - ":client_event_subscribers", - "//devtools/projects/ng-devtools-backend/src/lib/hooks", - "//devtools/projects/protocol", - "//devtools/projects/shared-utils", - "@npm//rxjs", + ":client_event_subscribers_rjs", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:hooks_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/projects/shared-utils:shared-utils_rjs", ], ) -ts_library( +ts_project( name = "client_event_subscribers", srcs = ["client-event-subscribers.ts"], - deps = [ - ":highlighter", - ":interfaces", - ":router_tree", - ":set_console_reference", - ":utils", - "//devtools/projects/ng-devtools-backend/src/lib/component-inspector", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/ng-devtools-backend/src/lib/hooks", + interop_deps = [ "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", "//devtools/projects/ng-devtools-backend/src/lib/state-serializer", - "//devtools/projects/protocol", - "//devtools/projects/shared-utils", - "@npm//rxjs", + ], + deps = [ + ":highlighter_rjs", + ":interfaces_rjs", + ":router_tree_rjs", + ":set_console_reference_rjs", + ":utils_rjs", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-inspector:component-inspector_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:hooks_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/projects/shared-utils:shared-utils_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.spec.ts b/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.spec.ts index c5567f30ec23..7004ef22de0c 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.spec.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.spec.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus} from 'protocol'; +import {Events, MessageBus} from '../../../protocol'; import {subscribeToClientEvents} from './client-event-subscribers'; -import {appIsAngular, appIsAngularIvy, appIsSupportedAngularVersion} from 'shared-utils'; +import {appIsAngular, appIsAngularIvy, appIsSupportedAngularVersion} from '../../../shared-utils'; import {DirectiveForestHooks} from './hooks/hooks'; import {of} from 'rxjs'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.ts b/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.ts index 7bd128cf27a6..08358441f423 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/client-event-subscribers.ts @@ -19,7 +19,7 @@ import { Route, SerializedInjector, SerializedProviderRecord, -} from 'protocol'; +} from '../../../protocol'; import {debounceTime} from 'rxjs/operators'; import { appIsAngularInDevMode, @@ -27,7 +27,7 @@ import { appIsSupportedAngularVersion, getAngularVersion, isHydrationEnabled, -} from 'shared-utils'; +} from '../../../shared-utils'; import {ComponentInspector} from './component-inspector/component-inspector'; import { diff --git a/devtools/projects/ng-devtools-backend/src/lib/component-inspector/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/component-inspector/BUILD.bazel index a9ad723383a8..f5ab0291ead3 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/component-inspector/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/component-inspector/BUILD.bazel @@ -1,17 +1,17 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "component-inspector", srcs = ["component-inspector.ts"], deps = [ - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/ng-devtools-backend/src/lib/hooks", - "//devtools/projects/protocol", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:hooks_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -25,15 +25,16 @@ ts_test_library( srcs = [ "component-inspector.spec.ts", ], - deps = [ - ":component-inspector", - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib:utils", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/ng-devtools-backend/src/lib/hooks", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + ":component-inspector_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:hooks_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/component-inspector/component-inspector.ts b/devtools/projects/ng-devtools-backend/src/lib/component-inspector/component-inspector.ts index a762af0d7428..4412d5cc67f6 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/component-inspector/component-inspector.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/component-inspector/component-inspector.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementPosition, HydrationStatus} from 'protocol'; +import {ElementPosition, HydrationStatus} from '../../../../protocol'; import {findNodeInForest} from '../component-tree/component-tree'; import { diff --git a/devtools/projects/ng-devtools-backend/src/lib/component-tree/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/component-tree/BUILD.bazel index 5ebb53e9cd68..b79a1f0ae707 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/component-tree/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/component-tree/BUILD.bazel @@ -1,43 +1,47 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "get-roots", srcs = ["get-roots.ts"], ) -ts_library( +ts_project( name = "core-enums", srcs = ["core-enums.ts"], ) -ts_library( +ts_project( name = "component-tree", srcs = ["component-tree.ts"], - deps = [ - ":core-enums", - ":get-roots", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib:property_mutation", - "//devtools/projects/ng-devtools-backend/src/lib:utils", - "//devtools/projects/ng-devtools-backend/src/lib/directive-forest", + interop_deps = [ + "//packages/core", "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", "//devtools/projects/ng-devtools-backend/src/lib/state-serializer", - "//devtools/projects/protocol", - "//packages/core", + ], + deps = [ + ":core-enums_rjs", + ":get-roots_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:property_mutation_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/directive-forest:directive-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) ts_test_library( name = "test_lib", srcs = glob(["*.spec.ts"]), - deps = [ - ":component-tree", - ":get-roots", + interop_deps = [ "//packages/core", - "@npm//jasmine", + ], + deps = [ + ":component-tree_rjs", + ":get-roots_rjs", + "//:node_modules/jasmine", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/component-tree/component-tree.ts b/devtools/projects/ng-devtools-backend/src/lib/component-tree/component-tree.ts index c19ac0dcf764..6e0a8875edad 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/component-tree/component-tree.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/component-tree/component-tree.ts @@ -29,7 +29,7 @@ import { SerializedInjector, SerializedProviderRecord, UpdatedStateData, -} from 'protocol'; +} from '../../../../protocol'; import { buildDirectiveTree, getLViewFromDirectiveOrElementInstance, diff --git a/devtools/projects/ng-devtools-backend/src/lib/directive-forest/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/directive-forest/BUILD.bazel index d439369cf1d0..9b88f06c1a3d 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/directive-forest/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/directive-forest/BUILD.bazel @@ -1,23 +1,25 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "directive-forest", srcs = glob( include = ["*.ts"], exclude = ["*.spec.ts"], ), - deps = [ - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib:utils", - "//devtools/projects/ng-devtools-backend/src/lib:version", - "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//semver-dsl", + "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", + ], + deps = [ + "//:node_modules/semver-dsl", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:version_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -33,11 +35,12 @@ ts_test_library( srcs = [ "render-tree.spec.ts", ], - deps = [ - ":directive-forest", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib:utils", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + ":directive-forest_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/directive-forest/render-tree.ts b/devtools/projects/ng-devtools-backend/src/lib/directive-forest/render-tree.ts index d117bc41d432..58238e8b282f 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/directive-forest/render-tree.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/directive-forest/render-tree.ts @@ -11,7 +11,7 @@ import { ɵDeferBlockData as DeferBlockData, ɵHydratedNode as HydrationNode, } from '@angular/core'; -import {CurrentDeferBlock, HydrationStatus} from 'protocol'; +import {CurrentDeferBlock, HydrationStatus} from '../../../../protocol'; import {ComponentTreeNode} from '../interfaces'; import {ngDebugClient} from '../ng-debug-api/ng-debug-api'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/highlighter.ts b/devtools/projects/ng-devtools-backend/src/lib/highlighter.ts index 6a9f6bd4f25b..3aea68e940a8 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/highlighter.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/highlighter.ts @@ -7,7 +7,7 @@ */ import type {Type} from '@angular/core'; -import {HydrationStatus} from 'protocol'; +import {HydrationStatus} from '../../../protocol'; import {ngDebugClient} from './ng-debug-api/ng-debug-api'; let hydrationOverlayItems: HTMLElement[] = []; diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/hooks/BUILD.bazel index a155aa6cf481..9667c8cf48b3 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "hooks", srcs = glob( include = ["*.ts"], @@ -12,21 +12,21 @@ ts_library( ], ), deps = [ - ":identity_tracker", - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib:utils", - "//devtools/projects/ng-devtools-backend/src/lib/hooks/profiler", - "//devtools/projects/protocol", + ":identity_tracker_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks/profiler:profiler_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "identity_tracker", srcs = ["identity-tracker.ts"], deps = [ - "//devtools/projects/ng-devtools-backend/src/lib:interfaces", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/protocol", + "//devtools/projects/ng-devtools-backend/src/lib:interfaces_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/capture.ts b/devtools/projects/ng-devtools-backend/src/lib/hooks/capture.ts index bab8993f057c..96977b1c9add 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/capture.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/capture.ts @@ -12,7 +12,7 @@ import { ElementProfile, LifecycleProfile, ProfilerFrame, -} from 'protocol'; +} from '../../../../protocol'; import {getDirectiveName} from '../highlighter'; import {ComponentTreeNode} from '../interfaces'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/hooks.ts b/devtools/projects/ng-devtools-backend/src/lib/hooks/hooks.ts index 8710ff72feeb..01e21ed6ef52 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/hooks.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/hooks.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementPosition} from 'protocol'; +import {ElementPosition} from '../../../../protocol'; import {ComponentTreeNode} from '../interfaces'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/identity-tracker.ts b/devtools/projects/ng-devtools-backend/src/lib/hooks/identity-tracker.ts index cfe43a848452..eb86917edbda 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/identity-tracker.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/identity-tracker.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DevToolsNode, ElementPosition} from 'protocol'; +import {DevToolsNode, ElementPosition} from '../../../../protocol'; import {buildDirectiveForest} from '../component-tree/component-tree'; import {ComponentInstanceType, ComponentTreeNode, DirectiveInstanceType} from '../interfaces'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/index.ts b/devtools/projects/ng-devtools-backend/src/lib/hooks/index.ts index 7379b57b4f7e..1cec578c1ed9 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/index.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {LifecycleProfile} from 'protocol'; +import {LifecycleProfile} from '../../../../protocol'; import {getDirectiveName} from '../highlighter'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/BUILD.bazel index 1c24f7fd8ec4..3c031de53b28 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/BUILD.bazel @@ -1,20 +1,22 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "profiler", srcs = glob( include = ["*.ts"], exclude = ["*.spec.ts"], ), - deps = [ - "//devtools/projects/ng-devtools-backend/src/lib:utils", - "//devtools/projects/ng-devtools-backend/src/lib/directive-forest", - "//devtools/projects/ng-devtools-backend/src/lib/hooks:identity_tracker", - "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//rxjs", + "//devtools/projects/ng-devtools-backend/src/lib/ng-debug-api", + "//devtools/projects/ng-devtools-backend/src/lib/directive-forest", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools-backend/src/lib:utils_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/hooks:identity_tracker_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/shared.ts b/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/shared.ts index 888d7fcdeec6..faf8414c94ec 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/shared.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/hooks/profiler/shared.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementPosition, LifecycleProfile} from 'protocol'; +import {ElementPosition, LifecycleProfile} from '../../../../../protocol'; import {Subject} from 'rxjs'; import {NodeArray} from '../identity-tracker'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/index.ts b/devtools/projects/ng-devtools-backend/src/lib/index.ts index 1b24d4befa07..334e4c5f4a11 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/index.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus} from 'protocol'; +import {Events, MessageBus} from '../../../protocol'; import {subscribeToClientEvents} from './client-event-subscribers'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/interfaces.ts b/devtools/projects/ng-devtools-backend/src/lib/interfaces.ts index 066174091f92..9997676e8e79 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/interfaces.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/interfaces.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DevToolsNode} from 'protocol'; +import {DevToolsNode} from '../../../protocol'; export interface DebuggingAPI { getComponent(node: Node): any; diff --git a/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/BUILD.bazel index c9a341895d36..39e5dcbd7e57 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/BUILD.bazel @@ -1,31 +1,35 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "ng-debug-api", srcs = glob( include = ["*.ts"], exclude = ["*.spec.ts"], ), - deps = [ - "//devtools/projects/ng-devtools-backend/src/lib/component-tree:core-enums", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree:get-roots", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", ], + deps = [ + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:core-enums_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:get-roots_rjs", + "//devtools/projects/protocol:protocol_rjs", + ], ) ts_test_library( name = "ng-debug-api_test_lib", srcs = ["ng-debug-api.spec.ts"], - deps = [ - ":ng-debug-api", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree:core-enums", + interop_deps = [ "//packages/core", - "@npm//jasmine", + ":ng-debug-api", + ], + deps = [ + "//:node_modules/jasmine", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:core-enums_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/supported-apis.ts b/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/supported-apis.ts index a34f149867a0..131410e3a6f1 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/supported-apis.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/ng-debug-api/supported-apis.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {SupportedApis} from 'protocol'; +import {SupportedApis} from '../../../../protocol'; import { ngDebugDependencyInjectionApiIsSupported, ngDebugProfilerApiIsSupported, diff --git a/devtools/projects/ng-devtools-backend/src/lib/router-tree.ts b/devtools/projects/ng-devtools-backend/src/lib/router-tree.ts index 92c08971d569..1a46b3254fca 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/router-tree.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/router-tree.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Route} from 'protocol'; +import {Route} from '../../../protocol'; // todo(aleksanderbodurri): type these properly type AngularRoute = any; diff --git a/devtools/projects/ng-devtools-backend/src/lib/set-console-reference.ts b/devtools/projects/ng-devtools-backend/src/lib/set-console-reference.ts index b01fc27c7296..efd85e5086c0 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/set-console-reference.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/set-console-reference.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementPosition} from 'protocol'; -import {arrayEquals} from 'shared-utils'; +import {ElementPosition} from '../../../protocol'; +import {arrayEquals} from '../../../shared-utils'; import {ComponentTreeNode} from './interfaces'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/BUILD.bazel b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/BUILD.bazel index 8a2584e7f214..6468d9859fa7 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/BUILD.bazel +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/BUILD.bazel @@ -1,18 +1,18 @@ -load("//devtools/tools:typescript.bzl", "ts_test_library") -load("//devtools/tools:ng_module.bzl", "ng_module") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") +load("//devtools/tools:ng_project.bzl", "ng_project") +load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "state-serializer", srcs = glob( include = ["*.ts"], exclude = ["*.spec.ts"], ), deps = [ - "//devtools/projects/ng-devtools-backend/src/lib/directive-forest", - "//devtools/projects/protocol", + "//devtools/projects/ng-devtools-backend/src/lib/directive-forest:directive-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -29,9 +29,10 @@ ts_test_library( "prop-type.spec.ts", "state-serializer.spec.ts", ], - deps = [ + interop_deps = [ ":state-serializer", - "//devtools/projects/protocol", - "@npm//@types", + ], + deps = [ + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.spec.ts b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.spec.ts index 5833b01e2f1f..9643cde02c46 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.spec.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {PropType} from 'protocol'; +import {PropType} from '../../../../protocol'; import {getPropType} from './prop-type'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.ts b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.ts index 83319ba166f1..e6f7bf9ce7fa 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/prop-type.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {PropType} from 'protocol'; +import {PropType} from '../../../../protocol'; import {isSignal} from '../utils'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/serialized-descriptor-factory.ts b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/serialized-descriptor-factory.ts index e32507330ca0..ef06beb5c2e9 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/serialized-descriptor-factory.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/serialized-descriptor-factory.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ContainerType, Descriptor, NestedProp, PropType} from 'protocol'; +import {ContainerType, Descriptor, NestedProp, PropType} from '../../../../protocol'; import {isSignal, unwrapSignal} from '../utils'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.spec.ts b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.spec.ts index 9dc892de7a87..5424474b1166 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.spec.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {PropType} from 'protocol'; +import {PropType} from '../../../../protocol'; import {getDescriptor, getKeys} from './object-utils'; import {deeplySerializeSelectedProperties} from './state-serializer'; diff --git a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.ts b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.ts index 4123de640637..cd6c2147e52d 100644 --- a/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.ts +++ b/devtools/projects/ng-devtools-backend/src/lib/state-serializer/state-serializer.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ContainerType, Descriptor, NestedProp, PropType} from 'protocol'; -import type {Signal} from '@angular/core'; +import {ContainerType, Descriptor, NestedProp, PropType} from '../../../../protocol'; import {isSignal, unwrapSignal} from '../utils'; diff --git a/devtools/projects/ng-devtools/BUILD.bazel b/devtools/projects/ng-devtools/BUILD.bazel index 997db742c3d3..eca7b1b653ea 100644 --- a/devtools/projects/ng-devtools/BUILD.bazel +++ b/devtools/projects/ng-devtools/BUILD.bazel @@ -1,33 +1,28 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) exports_files(["tsconfig.lib.json"]) -ng_module( - name = "ng_devtools_ts", +ng_project( + name = "ng-devtools", srcs = ["index.ts"], - deps = [ - "//devtools/projects/ng-devtools/src", - "//devtools/projects/protocol", + interop_deps = [ "//packages/animations", "//packages/common", "//packages/core", "//packages/forms", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//d3", - "@npm//memo-decorator", - "@npm//ngx-flamegraph", - "@npm//rxjs", - "@npm//webtreemap", ], -) - -js_library( - name = "ng-devtools", - package_name = "ng-devtools", - deps = [":ng_devtools_ts"], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/@types/d3", + "//:node_modules/d3", + "//:node_modules/memo-decorator", + "//:node_modules/ngx-flamegraph", + "//:node_modules/rxjs", + "//:node_modules/webtreemap", + "//devtools/projects/ng-devtools/src:src_rjs", + "//devtools/projects/protocol:protocol_rjs", + ], ) diff --git a/devtools/projects/ng-devtools/src/BUILD.bazel b/devtools/projects/ng-devtools/src/BUILD.bazel index 0a19d60f713f..310353861f45 100644 --- a/devtools/projects/ng-devtools/src/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/BUILD.bazel @@ -1,13 +1,13 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "src", srcs = ["public-api.ts"], deps = [ - "//devtools/projects/ng-devtools/src/lib", - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/ng-devtools/src/lib/application-operations", + "//devtools/projects/ng-devtools/src/lib:lib_rjs", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/ng-devtools/src/lib/application-operations:application-operations_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/BUILD.bazel index 52304e15b2a9..81145534f774 100644 --- a/devtools/projects/ng-devtools/src/lib/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -13,7 +13,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "lib", srcs = glob( include = ["*.ts"], @@ -25,33 +25,37 @@ ng_module( "devtools.component.html", ":devtools_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-providers:window", - "//devtools/projects/ng-devtools/src/lib/application-services:browser_styles", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/ng-devtools/src/lib/application-services:theme", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs", - "//devtools/projects/protocol", + interop_deps = [ "//packages/animations", "//packages/core", "//packages/forms", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-providers:window_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:browser_styles_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:theme_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs:devtools-tabs_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) ts_test_library( name = "devtools_test", srcs = ["devtools_spec.ts"], - deps = [ - ":lib", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", "//packages/core/testing", + ":lib", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs:devtools-tabs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", + ], + deps = [ + "//:node_modules/tslib", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/application-environment/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/application-environment/BUILD.bazel index 0f90fadea267..171641180fa4 100644 --- a/devtools/projects/ng-devtools/src/lib/application-environment/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/application-environment/BUILD.bazel @@ -1,12 +1,11 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "application-environment", srcs = ["index.ts"], deps = [ - "//devtools/projects/protocol", - "@npm//@types", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/application-operations/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/application-operations/BUILD.bazel index c9a1c69bc736..539ba01d3f0b 100644 --- a/devtools/projects/ng-devtools/src/lib/application-operations/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/application-operations/BUILD.bazel @@ -1,13 +1,12 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "application-operations", srcs = ["index.ts"], deps = [ - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/protocol", - "@npm//@types", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/application-operations/index.ts b/devtools/projects/ng-devtools/src/lib/application-operations/index.ts index 456f49582c93..eb4f098fc5ec 100644 --- a/devtools/projects/ng-devtools/src/lib/application-operations/index.ts +++ b/devtools/projects/ng-devtools/src/lib/application-operations/index.ts @@ -7,7 +7,7 @@ */ import {Frame} from '../application-environment'; -import {DirectivePosition, ElementPosition} from 'protocol'; +import {DirectivePosition, ElementPosition} from '../../../../protocol'; export abstract class ApplicationOperations { abstract viewSource(position: ElementPosition, target: Frame, directiveIndex?: number): void; diff --git a/devtools/projects/ng-devtools/src/lib/application-providers/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/application-providers/BUILD.bazel index f4c3db266c8a..2ab890d20aaf 100644 --- a/devtools/projects/ng-devtools/src/lib/application-providers/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/application-providers/BUILD.bazel @@ -1,11 +1,11 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "window", srcs = ["window_provider.ts"], - deps = [ + interop_deps = [ "//packages/core", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/application-services/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/application-services/BUILD.bazel index ada3c0e7e2ff..b8ed7921412b 100644 --- a/devtools/projects/ng-devtools/src/lib/application-services/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/application-services/BUILD.bazel @@ -1,54 +1,62 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "browser_styles", srcs = ["browser_styles_service.ts"], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/cdk", + ], + deps = [ + "//:node_modules/@angular/cdk", ], ) -ng_module( +ng_project( name = "frame_manager", srcs = ["frame_manager.ts"], - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", ], + deps = [ + "//:node_modules/@types/chrome", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/protocol:protocol_rjs", + ], ) -ng_module( +ng_project( name = "theme", srcs = ["theme_service.ts"], - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-providers:window", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-providers:window_rjs", ], ) ts_test_library( name = "test_application_services_lib", srcs = glob(["*_spec.ts"]), - deps = [ + interop_deps = [ + "//packages/common", + "//packages/core/testing", ":browser_styles", ":frame_manager", ":theme", - "//devtools/projects/ng-devtools/src/lib/application-environment", "//devtools/projects/ng-devtools/src/lib/application-providers:window", - "//devtools/projects/protocol", - "//packages/common", - "//packages/core/testing", - "@npm//@angular/cdk", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/application-services/frame_manager.ts b/devtools/projects/ng-devtools/src/lib/application-services/frame_manager.ts index 61b62498da4e..aa564d30544e 100644 --- a/devtools/projects/ng-devtools/src/lib/application-services/frame_manager.ts +++ b/devtools/projects/ng-devtools/src/lib/application-services/frame_manager.ts @@ -6,8 +6,10 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference types="chrome"/> + import {Injectable, inject, signal, computed} from '@angular/core'; -import {Events, MessageBus} from 'protocol'; +import {Events, MessageBus} from '../../../../protocol'; import {Frame, TOP_LEVEL_FRAME_ID} from '../application-environment'; diff --git a/devtools/projects/ng-devtools/src/lib/application-services/frame_manager_spec.ts b/devtools/projects/ng-devtools/src/lib/application-services/frame_manager_spec.ts index e60a020f5fc4..14f3db2fba28 100644 --- a/devtools/projects/ng-devtools/src/lib/application-services/frame_manager_spec.ts +++ b/devtools/projects/ng-devtools/src/lib/application-services/frame_manager_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus} from 'protocol'; +import {Events, MessageBus} from '../../../../protocol'; import {FrameManager} from './frame_manager'; import {TestBed} from '@angular/core/testing'; import {Frame} from '../application-environment'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/BUILD.bazel index b37fa28db106..d96b804b183f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -13,7 +13,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "devtools-tabs", srcs = [ "devtools-tabs.component.ts", @@ -22,42 +22,47 @@ ng_module( "devtools-tabs.component.html", ":devtools_tabs_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/ng-devtools/src/lib/application-services:theme", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree:injector_tree", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", "//packages/core/src/util", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/@types/chrome", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:theme_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer:directive-explorer_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree:injector_tree_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler:profiler_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree:router-tree_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update:tab-update_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) ts_test_library( name = "devtools_tabs_test", srcs = ["devtools-tabs.spec.ts"], - deps = [ + interop_deps = [ + "//packages/core", ":devtools-tabs", - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/ng-devtools/src/lib/application-services:theme", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update", - "//devtools/projects/protocol", - "//packages/common", - "//packages/core", "//packages/core/src/util", "//packages/core/testing", - "@npm//@angular/material", - "@npm//rxjs", + "//packages/common", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", + "//devtools/projects/ng-devtools/src/lib/application-services:theme", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/BUILD.bazel index 213a52c72e6f..3fb8a18e50f1 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/BUILD.bazel @@ -1,15 +1,16 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "injector_tree_visualizer", srcs = ["injector-tree-visualizer.ts"], - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//d3", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@types/d3", + "//:node_modules/d3", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/injector-tree-visualizer.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/injector-tree-visualizer.ts index ae275783334e..bebe3390ec3a 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/injector-tree-visualizer.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/injector-tree-visualizer.ts @@ -7,7 +7,7 @@ */ import * as d3 from 'd3'; -import {SerializedInjector} from 'protocol'; +import {SerializedInjector} from '../../../../../protocol'; let arrowDefId = 0; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/BUILD.bazel index 05d2d1ea552a..e07ad8d9405d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//:__subpackages__"]) @@ -14,7 +14,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "resolution-path", srcs = [ "resolution-path.component.ts", @@ -23,24 +23,28 @@ ng_module( ":resolution-path.component.html", ":resolution_path_styles", ], - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", ], + deps = [ + "//devtools/projects/protocol:protocol_rjs", + ], ) ts_test_library( name = "resolution_path_test", srcs = ["resolution-path.component.spec.ts"], + interop_deps = [ + "//packages/core", + ":resolution-path", + "//packages/core/testing", + "//packages/platform-browser", + ], visibility = [ "//visibility:private", ], deps = [ - ":resolution-path", - "//devtools/projects/protocol", - "//packages/core", - "//packages/core/testing", - "//packages/platform-browser", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.spec.ts index 60db847d3656..892f03d2f660 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.spec.ts @@ -10,7 +10,7 @@ import {ComponentFixture, TestBed} from '@angular/core/testing'; import {By} from '@angular/platform-browser'; import {NODE_TYPE_CLASS_MAP, ResolutionPathComponent} from './resolution-path.component'; -import {SerializedInjector} from 'protocol'; +import {SerializedInjector} from '../../../../../../protocol'; describe('ResolutionPath', () => { let component: ResolutionPathComponent; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.ts index 0113421ea215..721cc374f9cb 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path/resolution-path.component.ts @@ -7,7 +7,7 @@ */ import {Component, computed, input} from '@angular/core'; -import {SerializedInjector} from 'protocol'; +import {SerializedInjector} from '../../../../../../protocol'; export const NODE_TYPE_CLASS_MAP: {[key in SerializedInjector['type']]: string} = { 'element': 'type-element', diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.component.ts index ca93fa911490..368228a16391 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.component.ts @@ -12,7 +12,7 @@ import {MatMenu, MatMenuItem, MatMenuTrigger} from '@angular/material/menu'; import {MatSlideToggle} from '@angular/material/slide-toggle'; import {MatTabLink, MatTabNav, MatTabNavPanel} from '@angular/material/tabs'; import {MatTooltip} from '@angular/material/tooltip'; -import {Events, MessageBus, Route, SupportedApis} from 'protocol'; +import {Events, MessageBus, Route, SupportedApis} from '../../../../protocol'; import {ApplicationEnvironment, Frame, TOP_LEVEL_FRAME_ID} from '../application-environment/index'; import {FrameManager} from '../application-services/frame_manager'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.spec.ts index 171c531d105b..fcbdcb8d9be4 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/devtools-tabs.spec.ts @@ -10,7 +10,7 @@ import {Component} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {MatMenuModule} from '@angular/material/menu'; import {MatTooltip} from '@angular/material/tooltip'; -import {Events, MessageBus} from 'protocol'; +import {Events, MessageBus} from '../../../../protocol'; import {Subject} from 'rxjs'; import {ApplicationEnvironment} from '../application-environment'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing/BUILD.bazel index b07a40c8716b..2d11dc4eadec 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing/BUILD.bazel @@ -1,17 +1,16 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "diffing", - srcs = glob( - include = [ - "index.ts", - ], - ), - deps = [ + srcs = [ + "index.ts", + ], + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/BUILD.bazel index 75ec58788897..7ea2ebd80ad1 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -10,7 +10,7 @@ sass_binary( src = "directive-explorer.component.scss", ) -ng_module( +ng_project( name = "directive-explorer", srcs = [ "directive-explorer.component.ts", @@ -19,42 +19,46 @@ ng_module( "directive-explorer.component.html", ":directive_explorer_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-operations", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab", - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-operations:application-operations_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest:directive-forest_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs:breadcrumbs_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver:property-resolver_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab:property-tab_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split:angular-split_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) ts_test_library( name = "directive_explorer_test", srcs = ["directive-explorer.spec.ts"], - deps = [ + interop_deps = [ + "//packages/core", ":directive-explorer", - "//devtools/projects/ng-devtools/src/lib/application-operations", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab", "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update", - "//devtools/projects/protocol", - "//packages/core", "//packages/core/testing", "//packages/platform-browser", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", + ], + deps = [ + "//:node_modules/tslib", + "//devtools/projects/ng-devtools/src/lib/application-operations:application-operations_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.component.ts index 98c479c87fe7..cabdfbc9d5ad 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.component.ts @@ -27,7 +27,7 @@ import { MessageBus, PropertyQuery, PropertyQueryTypes, -} from 'protocol'; +} from '../../../../../protocol'; import {SplitComponent} from '../../../lib/vendor/angular-split/public_api'; import {ApplicationOperations} from '../../application-operations/index'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.spec.ts index 5f7699f0b111..77948a68bbb0 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-explorer.spec.ts @@ -9,7 +9,7 @@ import {ComponentFixture, TestBed} from '@angular/core/testing'; import {ApplicationOperations} from '../../application-operations'; -import {DirectivePosition, MessageBus, PropType, PropertyQueryTypes} from 'protocol'; +import {DirectivePosition, MessageBus, PropType, PropertyQueryTypes} from '../../../../../protocol'; import {DirectiveExplorerComponent} from './directive-explorer.component'; import {DirectiveForestComponent} from './directive-forest/directive-forest.component'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/BUILD.bazel index e71ea195ca1b..a35044306794 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:ng_project.bzl", "ng_project") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -10,7 +10,7 @@ sass_binary( src = "directive-forest.component.scss", ) -ng_module( +ng_project( name = "directive-forest", srcs = [ "directive-forest.component.ts", @@ -19,27 +19,29 @@ ng_module( "directive-forest.component.html", ":directive_forest_component_styles", ], - deps = [ - ":directive_forest_utils", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@angular/cdk", + ], + deps = [ + ":directive_forest_utils_rjs", + "//:node_modules/@angular/cdk", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing:diffing_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs:breadcrumbs_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter:filter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node:tree-node_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update:tab-update_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "directive_forest_utils", srcs = ["directive-forest-utils.ts"], deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", - "@npm//@angular/cdk", + "//:node_modules/@angular/cdk", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", ], ) @@ -47,8 +49,8 @@ ts_test_library( name = "directive_forest_utils_test", srcs = ["directive-forest-utils.spec.ts"], deps = [ - ":directive_forest_utils", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", + ":directive_forest_utils_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs/BUILD.bazel index d83d2ba732ee..4bb4ac81048d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/breadcrumbs/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -11,7 +11,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "breadcrumbs", srcs = [ "breadcrumbs.component.ts", @@ -20,12 +20,13 @@ ng_module( "breadcrumbs.component.html", ":breadcrumbs_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/BUILD.bazel index 04032388abbe..8d3c9c735bd6 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/BUILD.bazel @@ -1,20 +1,22 @@ -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "component-data-source", srcs = ["index.ts"], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/@types", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing:diffing_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -22,9 +24,9 @@ ts_test_library( name = "component_data_source_test", srcs = glob(["**/*.spec.ts"]), deps = [ - ":component-data-source", - "//devtools/projects/protocol", - "@npm//@angular/cdk", + ":component-data-source_rjs", + "//:node_modules/@angular/cdk", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/component-data-source.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/component-data-source.spec.ts index 8ae877c284f4..d88619619e27 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/component-data-source.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/component-data-source.spec.ts @@ -7,7 +7,7 @@ */ import {FlatTreeControl} from '@angular/cdk/tree'; -import {DevToolsNode} from 'protocol'; +import {DevToolsNode} from '../../../../../../../protocol'; import {ComponentDataSource, FlatNode} from '.'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/index.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/index.ts index afd0773a5a58..1e437fd2cba8 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/index.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source/index.ts @@ -10,7 +10,7 @@ import {CollectionViewer, DataSource} from '@angular/cdk/collections'; import {FlatTreeControl} from '@angular/cdk/tree'; import {DefaultIterableDiffer, TrackByFunction} from '@angular/core'; import {MatTreeFlattener} from '@angular/material/tree'; -import {DeferInfo, DevToolsNode, HydrationStatus} from 'protocol'; +import {DeferInfo, DevToolsNode, HydrationStatus} from '../../../../../../../protocol'; import {BehaviorSubject, merge, Observable} from 'rxjs'; import {map} from 'rxjs/operators'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest-utils.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest-utils.ts index 32969888a0b1..567433921167 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest-utils.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest-utils.ts @@ -8,7 +8,7 @@ import {FlatTreeControl} from '@angular/cdk/tree'; -import {FlatNode} from './component-data-source'; +import {FlatNode} from './component-data-source/index'; export const isChildOf = (childPosition: number[], parentPosition: number[]) => { if (childPosition.length <= parentPosition.length) { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest.component.ts index 3122447540ef..c305c8fbd04f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/directive-forest.component.ts @@ -26,7 +26,7 @@ import { signal, viewChild, } from '@angular/core'; -import {DevToolsNode, ElementPosition, Events, MessageBus} from 'protocol'; +import {DevToolsNode, ElementPosition, Events, MessageBus} from '../../../../../../protocol'; import {TabUpdate} from '../../tab-update/index'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter/BUILD.bazel index 54a818ec32c0..08b924406a99 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/filter/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -10,7 +10,7 @@ sass_binary( src = "filter.component.scss", ) -ng_module( +ng_project( name = "filter", srcs = [ "filter.component.ts", @@ -19,22 +19,23 @@ ng_module( "filter.component.html", ":filter_component_styles", ], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", ], ) ts_test_library( name = "filter_test", srcs = ["filter.component.spec.ts"], - deps = [ - ":filter", + interop_deps = [ "//packages/core/testing", "//packages/platform-browser", + ":filter", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/BUILD.bazel index 0de50bb50254..fedc673871e4 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/BUILD.bazel @@ -1,14 +1,14 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "index-forest", srcs = ["index.ts"], deps = [ - "//devtools/projects/protocol", - "@npm//@angular/material", + "//:node_modules/@angular/material", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -16,8 +16,8 @@ ts_test_library( name = "index_forest_test", srcs = glob(["**/*.spec.ts"]), deps = [ - ":index-forest", - "//devtools/projects/protocol", + ":index-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index-forest.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index-forest.spec.ts index 267afcf96029..8863af89b6b5 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index-forest.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index-forest.spec.ts @@ -7,7 +7,7 @@ */ import {indexForest} from './'; -import {DevToolsNode} from 'protocol'; +import {DevToolsNode} from '../../../../../../../protocol'; describe('indexForest', () => { it('should work with an empty forest', () => { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index.ts index 438773e37450..629cb6896d21 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DevToolsNode, ElementPosition} from 'protocol'; +import {DevToolsNode, ElementPosition} from '../../../../../../../protocol'; export interface IndexedNode extends DevToolsNode { position: ElementPosition; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node/BUILD.bazel index 23ae93a0c4c9..065321c99675 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/tree-node/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//devtools:__subpackages__"]) @@ -13,7 +13,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "tree-node", srcs = [ "tree-node.component.ts", @@ -22,25 +22,29 @@ ng_module( "tree-node.component.html", ":tree_node_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest:directive_forest_utils", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/cdk", - "@npm//@angular/material", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest:directive_forest_utils_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", ], ) ts_test_library( name = "tree_node_test", srcs = ["tree-node.component.spec.ts"], - deps = [ + interop_deps = [ ":tree-node", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source", "//packages/core/testing", "//packages/platform-browser", - "@npm//@angular/cdk", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/component-data-source:component-data-source_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/BUILD.bazel index 1cc5f7cc402c..1f74797396f5 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/BUILD.bazel @@ -1,10 +1,10 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "property-resolver", srcs = [ "arrayify-props.ts", @@ -14,15 +14,16 @@ ng_module( "property-data-source.ts", "property-expanded-directive-properties.ts", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/diffing:diffing_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -34,13 +35,15 @@ ts_test_library( "element-property-resolver.spec.ts", "property-data-source.spec.ts", ], - deps = [ - ":property-resolver", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@angular/cdk", - "@npm//@angular/material", + ":property-resolver", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.spec.ts index 7ba9bf3a91e3..5bc1a247b555 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {PropType} from 'protocol'; +import {PropType} from '../../../../../../protocol'; import {arrayifyProps} from './arrayify-props'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.ts index 4c47230db779..5488404b5e94 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/arrayify-props.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Descriptor} from 'protocol'; +import {Descriptor} from '../../../../../../protocol'; import {Property} from './element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.spec.ts index 2814a76f51f7..ef2618ca359a 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.spec.ts @@ -7,7 +7,7 @@ */ import {ɵFramework as Framework} from '@angular/core'; -import {Properties, PropType} from 'protocol'; +import {Properties, PropType} from '../../../../../../protocol'; import {DirectivePropertyResolver} from './directive-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.ts index d5389507f00d..ae2b4e756d29 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/directive-property-resolver.ts @@ -15,7 +15,7 @@ import { MessageBus, NestedProp, Properties, -} from 'protocol'; +} from '../../../../../../protocol'; import {FlatNode, Property} from './element-property-resolver'; import {getTreeFlattener} from './flatten'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.spec.ts index 68d852abad56..79e682d8ed76 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Properties, PropType} from 'protocol'; +import {Properties, PropType} from '../../../../../../protocol'; import {IndexedNode} from '../directive-forest/index-forest'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.ts index 39b08687cbd1..09d5cf383957 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/element-property-resolver.ts @@ -14,7 +14,7 @@ import { DirectivesProperties, Events, MessageBus, -} from 'protocol'; +} from '../../../../../../protocol'; import {IndexedNode} from '../directive-forest/index-forest'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/flatten.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/flatten.ts index 0118982464c3..9fca59fc19d3 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/flatten.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/flatten.ts @@ -7,7 +7,7 @@ */ import {MatTreeFlattener} from '@angular/material/tree'; -import {Descriptor, PropType} from 'protocol'; +import {Descriptor, PropType} from '../../../../../../protocol'; import {Observable} from 'rxjs'; import {arrayifyProps} from './arrayify-props'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.spec.ts index 8487becebeab..da3b95a0b92c 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.spec.ts @@ -7,7 +7,7 @@ */ import {FlatTreeControl} from '@angular/cdk/tree'; -import {PropType} from 'protocol'; +import {PropType} from '../../../../../../protocol'; import {FlatNode} from './element-property-resolver'; import {getTreeFlattener} from './flatten'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.ts index 5c00f5e05971..b1b8276f557f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-data-source.ts @@ -10,7 +10,13 @@ import {CollectionViewer, DataSource, SelectionChange} from '@angular/cdk/collec import {FlatTreeControl} from '@angular/cdk/tree'; import {DefaultIterableDiffer, TrackByFunction} from '@angular/core'; import {MatTreeFlattener} from '@angular/material/tree'; -import {Descriptor, DirectivePosition, Events, MessageBus, Properties} from 'protocol'; +import { + Descriptor, + DirectivePosition, + Events, + MessageBus, + Properties, +} from '../../../../../../protocol'; import {BehaviorSubject, merge, Observable, Subscription} from 'rxjs'; import {map} from 'rxjs/operators'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-expanded-directive-properties.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-expanded-directive-properties.ts index 000a9b9a15eb..0907972bcd62 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-expanded-directive-properties.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver/property-expanded-directive-properties.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Descriptor, NestedProp, PropType} from 'protocol'; +import {Descriptor, NestedProp, PropType} from '../../../../../../protocol'; import {FlatNode} from './element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/BUILD.bazel index 5cacacde6d9d..5503796003ed 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -25,7 +25,7 @@ _STYLE_LABELS = [ for label, src in zip(_STYLE_LABELS, _STYLE_SRCS) ] -ng_module( +ng_project( name = "property-tab", srcs = [ "component-metadata.component.ts", @@ -37,16 +37,17 @@ ng_module( "property-tab-header.component.html", "component-metadata.component.html", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver:property-resolver_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view:defer-view_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view:property-view_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/component-metadata.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/component-metadata.component.ts index 7f8d88d2b7de..e5298ac6981a 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/component-metadata.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/component-metadata.component.ts @@ -14,7 +14,11 @@ import { inject, input, } from '@angular/core'; -import {AngularDirectiveMetadata, AcxDirectiveMetadata, ComponentType} from 'protocol'; +import { + AngularDirectiveMetadata, + AcxDirectiveMetadata, + ComponentType, +} from '../../../../../../protocol'; import {ElementPropertyResolver} from '../property-resolver/element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/BUILD.bazel index 980f0a5c174b..6db957a157cc 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -9,19 +9,21 @@ sass_binary( deps = ["//devtools/projects/ng-devtools/src/styles:typography"], ) -ng_module( +ng_project( name = "defer-view", srcs = [ "defer-view.component.ts", ], angular_assets = [ "defer-view.component.html", - ] + ["defer_view.component.scss_styles"], - deps = [ - "//devtools/projects/protocol", + "defer_view.component.scss_styles", + ], + interop_deps = [ "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/defer-view.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/defer-view.component.ts index 5bdc544d7cd3..ba3dc413bf14 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/defer-view.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/defer-view/defer-view.component.ts @@ -8,7 +8,7 @@ import {Component, computed, input} from '@angular/core'; import {MatToolbar} from '@angular/material/toolbar'; -import {DeferInfo} from 'protocol'; +import {DeferInfo} from '../../../../../../../protocol'; @Component({ templateUrl: './defer-view.component.html', diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-tab.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-tab.component.ts index 728079ba14e4..fe7d7edbc7ed 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-tab.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-tab.component.ts @@ -7,7 +7,7 @@ */ import {Component, input, output} from '@angular/core'; -import {DirectivePosition} from 'protocol'; +import {DirectivePosition} from '../../../../../../protocol'; import {IndexedNode} from '../directive-forest/index-forest'; import {FlatNode} from '../property-resolver/element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/BUILD.bazel index 5fff0a54b5bf..9e65cf485dd3 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -30,7 +30,7 @@ _STYLE_LABELS = [ for label, src in zip(_STYLE_LABELS, _STYLE_SRCS) ] -ng_module( +ng_project( name = "property-view", srcs = [ "dependency-viewer.component.ts", @@ -52,20 +52,21 @@ ng_module( "property-tab-body.component.html", "dependency-viewer.component.html", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-environment", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", "//packages/forms", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-environment:application-environment_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path:resolution-path_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/directive-forest/index-forest:index-forest_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-resolver:property-resolver_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/dependency-viewer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/dependency-viewer.component.ts index 525fadaba672..782d1448c9ef 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/dependency-viewer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/dependency-viewer.component.ts @@ -7,7 +7,7 @@ */ import {Component, input} from '@angular/core'; -import {SerializedInjectedService} from 'protocol'; +import {SerializedInjectedService} from '../../../../../../../protocol'; import {ResolutionPathComponent} from '../../../dependency-injection/resolution-path/resolution-path.component'; import {MatTooltip} from '@angular/material/tooltip'; import {MatExpansionModule} from '@angular/material/expansion'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-editor.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-editor.component.ts index b9994c12e28c..6eb1cd90d81f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-editor.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-editor.component.ts @@ -17,7 +17,7 @@ import { viewChild, } from '@angular/core'; import {FormsModule} from '@angular/forms'; -import {ContainerType} from 'protocol'; +import {ContainerType} from '../../../../../../../protocol'; type EditorType = string | number | boolean; type EditorResult = EditorType | Array<EditorType>; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-preview.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-preview.component.ts index 0c8ac06fe0c1..6fbd79f28bd2 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-preview.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-preview.component.ts @@ -7,7 +7,7 @@ */ import {Component, computed, input, output} from '@angular/core'; -import {PropType} from 'protocol'; +import {PropType} from '../../../../../../../protocol'; import {FlatNode} from '../../property-resolver/element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-tab-body.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-tab-body.component.ts index 583db0f2fd38..453ef6b9338b 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-tab-body.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-tab-body.component.ts @@ -7,7 +7,7 @@ */ import {Component, computed, input, output} from '@angular/core'; -import {DirectivePosition} from 'protocol'; +import {DirectivePosition} from '../../../../../../../protocol'; import {IndexedNode} from '../../directive-forest/index-forest'; import {FlatNode} from '../../property-resolver/element-property-resolver'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view-body.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view-body.component.ts index 5abccc3d2c54..152285a1e9b3 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view-body.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view-body.component.ts @@ -16,7 +16,7 @@ import { output, signal, } from '@angular/core'; -import {DirectivePosition, SerializedInjectedService} from 'protocol'; +import {DirectivePosition, SerializedInjectedService} from '../../../../../../../protocol'; import { DirectivePropertyResolver, diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view.component.ts index 3465374b7b4d..8126cd4a9128 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/directive-explorer/property-tab/property-view/property-view.component.ts @@ -7,7 +7,7 @@ */ import {Component, computed, inject, input, output} from '@angular/core'; -import {DirectivePosition} from 'protocol'; +import {DirectivePosition} from '../../../../../../../protocol'; import {ElementPropertyResolver, FlatNode} from '../../property-resolver/element-property-resolver'; import {PropertyViewBodyComponent} from './property-view-body.component'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/BUILD.bazel index 82c0845fce6d..8cbe165a201d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:ng_project.bzl", "ng_project") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//:__subpackages__"]) @@ -13,7 +13,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "injector_tree", srcs = [ "injector-tree.component.ts", @@ -22,20 +22,22 @@ ng_module( ":injector_tree_styles", "injector-tree.component.html", ], - deps = [ - ":injector_tree_fns", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host", - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//d3", - "@npm//rxjs", + ], + deps = [ + ":injector_tree_fns_rjs", + "//:node_modules/@angular/material", + "//:node_modules/@types/d3", + "//:node_modules/d3", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path:resolution-path_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers:injector-providers_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host:tree-visualizer-host_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split:angular-split_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -52,17 +54,17 @@ ts_test_library( "injector-tree-fns.spec.ts", ], deps = [ - ":injector_tree_fns", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer", - "//devtools/projects/protocol", + ":injector_tree_fns_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "injector_tree_fns", srcs = ["injector-tree-fns.ts"], deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer", - "//devtools/projects/protocol", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection:injector_tree_visualizer_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/BUILD.bazel index f1acdbf51de0..671970e4fa77 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -10,7 +10,7 @@ sass_binary( deps = ["//devtools/projects/ng-devtools/src/styles:typography"], ) -ng_module( +ng_project( name = "injector-providers", srcs = [ "injector-providers.component.ts", @@ -19,12 +19,14 @@ ng_module( "injector-providers.component.html", ":injector_providers_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path", - "//devtools/projects/protocol", + interop_deps = [ "//packages/animations", "//packages/common", "//packages/core", - "@npm//@angular/material", + ], + deps = [ + "//:node_modules/@angular/material", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/dependency-injection/resolution-path:resolution-path_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/injector-providers.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/injector-providers.component.ts index 1299a2c4ad5b..28c421da4f27 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/injector-providers.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-providers/injector-providers.component.ts @@ -14,7 +14,12 @@ import {MatInput} from '@angular/material/input'; import {MatSelect} from '@angular/material/select'; import {MatTableModule} from '@angular/material/table'; import {MatTooltip} from '@angular/material/tooltip'; -import {Events, MessageBus, SerializedInjector, SerializedProviderRecord} from 'protocol'; +import { + Events, + MessageBus, + SerializedInjector, + SerializedProviderRecord, +} from '../../../../../../protocol'; @Component({ selector: 'ng-injector-providers', diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.spec.ts index 5bc4100326a5..79ee4e99f833 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DevToolsNode, SerializedInjector} from 'protocol'; +import {DevToolsNode, SerializedInjector} from '../../../../../protocol'; import { InjectorTreeD3Node, InjectorTreeNode, diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.ts index 5a660444e4c2..1fa78a22590c 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree-fns.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DevToolsNode, SerializedInjector} from 'protocol'; +import {DevToolsNode, SerializedInjector} from '../../../../../protocol'; import { InjectorTreeD3Node, diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree.component.ts index 597fcbc1016f..7214536e3d2e 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/injector-tree/injector-tree.component.ts @@ -25,7 +25,7 @@ import { MessageBus, SerializedInjector, SerializedProviderRecord, -} from 'protocol'; +} from '../../../../../protocol'; import {SplitAreaDirective, SplitComponent} from '../../vendor/angular-split/public_api'; import { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/BUILD.bazel index f184fb0cecb0..c6c7d548aa29 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -24,7 +24,7 @@ _STYLE_LABELS = [ for label, src in zip(_STYLE_LABELS, _STYLE_SRCS) ] -ng_module( +ng_project( name = "profiler", srcs = [ "file-api-service.ts", @@ -35,13 +35,15 @@ ng_module( "profiler.component.html", "profiler-import-dialog.component.html", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", "//packages/forms", - "@npm//@angular/material", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline:timeline_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/profiler.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/profiler.component.ts index 1c1c35ddcd6e..ddbbf338697a 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/profiler.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/profiler.component.ts @@ -8,7 +8,7 @@ import {Component, inject, signal} from '@angular/core'; import {MatDialog} from '@angular/material/dialog'; -import {Events, MessageBus, ProfilerFrame} from 'protocol'; +import {Events, MessageBus, ProfilerFrame} from '../../../../../protocol'; import {Subject} from 'rxjs'; import {FileApiService} from './file-api-service'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/BUILD.bazel index 72ff68bcd45e..89b7d423d14b 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/BUILD.bazel @@ -1,6 +1,6 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -34,7 +34,7 @@ sass_binary( include_paths = ["node_modules"], ) -ng_module( +ng_project( name = "timeline", srcs = [ "filter.ts", @@ -52,19 +52,21 @@ ng_module( "frame-selector.component.html", ":recording_modal_styles", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", "//packages/forms", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//ngx-flamegraph", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/ngx-flamegraph", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer:recording-visualizer_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode:visualization-mode_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update:tab-update_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -74,7 +76,7 @@ ts_test_library( "filter.spec.ts", "timeline.component.spec.ts", ], - deps = [ + interop_deps = [ ":timeline", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/filter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/filter.ts index 35490cd76020..faed052667af 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/filter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/filter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../protocol'; import {GraphNode} from './record-formatter/record-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/frame-selector.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/frame-selector.component.ts index 6074c15ce6c2..50a706a3bac9 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/frame-selector.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/frame-selector.component.ts @@ -30,6 +30,7 @@ import {MatIcon} from '@angular/material/icon'; import {MatTooltip} from '@angular/material/tooltip'; import {MatCard} from '@angular/material/card'; import {NgStyle} from '@angular/common'; +import {MatIconButton} from '@angular/material/button'; const ITEM_WIDTH = 30; @@ -41,6 +42,7 @@ const ITEM_WIDTH = 30; MatCard, MatTooltip, MatIcon, + MatIconButton, CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf, diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/BUILD.bazel index 9a1b89cc5dd9..03dfe06e4ca1 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/BUILD.bazel @@ -1,9 +1,9 @@ -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "record-formatter", srcs = glob( include = [ @@ -15,23 +15,25 @@ ts_library( "frame-merger.spec.ts", ], ), - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "record_formatter_spec_constants", srcs = ["record-formatter-spec-constants.ts"], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -41,11 +43,13 @@ ts_test_library( "frame-merger.spec.ts", "record-formatter.spec.ts", ], - deps = [ - ":record-formatter", - ":record_formatter_spec_constants", + interop_deps = [ "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter", - "//devtools/projects/protocol", + ], + deps = [ + ":record-formatter_rjs", + ":record_formatter_spec_constants_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/BUILD.bazel index 1715c6d3ebf2..e9d379fa88c0 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/BUILD.bazel @@ -1,22 +1,24 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "bargraph-formatter", srcs = glob( include = [ "*.ts", ], ), - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-services:theme", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/ng-devtools/src/lib/vendor/memo-decorator", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//ngx-flamegraph", - "@npm//rxjs", + "//devtools/projects/ng-devtools/src/lib/application-services:theme", + ], + deps = [ + "//:node_modules/ngx-flamegraph", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/memo-decorator:memo-decorator_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/bargraph-formatter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/bargraph-formatter.ts index f1ba3dc622c9..baf875b953e2 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/bargraph-formatter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter/bargraph-formatter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DirectiveProfile, ElementProfile, ProfilerFrame} from 'protocol'; +import {DirectiveProfile, ElementProfile, ProfilerFrame} from '../../../../../../../../protocol'; import {memo} from '../../../../../vendor/memo-decorator'; import {RecordFormatter} from '../record-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/BUILD.bazel index 99719aa83325..64b6f79a27f9 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/BUILD.bazel @@ -1,10 +1,10 @@ load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools:typescript.bzl", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "flamegraph-formatter", srcs = glob( include = [ @@ -12,14 +12,15 @@ ng_module( ], exclude = ["flamegraph-formatter.spec.ts"], ), - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-services:theme", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//memo-decorator", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/memo-decorator", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-services:theme_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -28,11 +29,13 @@ ts_test_library( srcs = [ "flamegraph-formatter.spec.ts", ], - deps = [ + interop_deps = [ ":flamegraph-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record_formatter_spec_constants", - "//devtools/projects/protocol", + ], + deps = [ + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record_formatter_spec_constants_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/flamegraph-formatter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/flamegraph-formatter.ts index 17fa2193a22e..92ef6fa5c616 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/flamegraph-formatter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter/flamegraph-formatter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementProfile, ProfilerFrame} from 'protocol'; +import {ElementProfile, ProfilerFrame} from '../../../../../../../../protocol'; import {Theme} from '../../../../../application-services/theme_service'; import {RecordFormatter} from '../record-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.spec.ts index b7e19ab5bc3d..ea6e896e8c0f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementProfile, ProfilerFrame} from 'protocol'; +import {ElementProfile, ProfilerFrame} from '../../../../../../../protocol'; import {mergeFrames} from './frame-merger'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.ts index 10af236c62ab..9cff1f9079bd 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/frame-merger.ts @@ -6,7 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DirectiveProfile, ElementProfile, LifecycleProfile, ProfilerFrame} from 'protocol'; +import { + DirectiveProfile, + ElementProfile, + LifecycleProfile, + ProfilerFrame, +} from '../../../../../../../protocol'; const mergeProperty = (mergeInProp: number | undefined, value: number | undefined) => { if (mergeInProp === undefined) { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter-spec-constants.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter-spec-constants.ts index 7a4b21e9dbdc..39c6d30d4fb0 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter-spec-constants.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter-spec-constants.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementProfile} from 'protocol'; +import {ElementProfile} from '../../../../../../../protocol'; import {FlamegraphNode} from './flamegraph-formatter'; export const SIMPLE_RECORD = [ diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.spec.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.spec.ts index 44edc6d810ac..aa7a33bf2e8f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DirectiveProfile, ElementProfile, ProfilerFrame} from 'protocol'; +import {DirectiveProfile, ElementProfile, ProfilerFrame} from '../../../../../../../protocol'; import {RecordFormatter} from './record-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.ts index f43bf43f27d0..bc4582456cce 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/record-formatter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DirectiveProfile, ElementProfile, ProfilerFrame} from 'protocol'; +import {DirectiveProfile, ElementProfile, ProfilerFrame} from '../../../../../../../protocol'; export interface TimelineView<T> { timeline: AppEntry<T>[]; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/BUILD.bazel index c903f71e7902..5bf742e69b13 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/BUILD.bazel @@ -1,9 +1,9 @@ -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "tree-map-formatter", srcs = glob( include = [ @@ -14,9 +14,10 @@ ts_library( ], ), deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/ng-devtools/src/lib/vendor/memo-decorator", - "//devtools/projects/protocol", + "//:node_modules/tslib", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/memo-decorator:memo-decorator_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -26,10 +27,10 @@ ts_test_library( "tree-map-formatter.spec.ts", ], deps = [ - ":tree-map-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record_formatter_spec_constants", - "//devtools/projects/protocol", + ":tree-map-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter:record_formatter_spec_constants_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/tree-map-formatter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/tree-map-formatter.ts index c39a43d5d02e..050b9388a97d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/tree-map-formatter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter/tree-map-formatter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ElementProfile, ProfilerFrame} from 'protocol'; +import {ElementProfile, ProfilerFrame} from '../../../../../../../../protocol'; import {memo} from '../../../../../vendor/memo-decorator'; import {RecordFormatter} from '../record-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/BUILD.bazel index 4e9025433eac..ad3d6834700f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -28,7 +28,7 @@ _STYLE_LABELS = [ for label, src in zip(_STYLE_LABELS, _STYLE_SRCS) ] -ng_module( +ng_project( name = "recording-visualizer", srcs = [ "bar-chart.component.ts", @@ -47,22 +47,23 @@ ng_module( "bar-chart.component.html", "execution-details.component.html", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools/src/lib/application-services:theme", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter", - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode", - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split", - "//devtools/projects/ng-devtools/src/lib/vendor/webtreemap", - "//devtools/projects/protocol", + interop_deps = [ "//packages/animations", "//packages/common", "//packages/core", "//packages/core/rxjs-interop", - "@npm//@angular/material", - "@npm//@types", - "@npm//ngx-flamegraph", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/ngx-flamegraph", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/application-services:theme_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/bargraph-formatter:bargraph-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/flamegraph-formatter:flamegraph-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/record-formatter/tree-map-formatter:tree-map-formatter_rjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode:visualization-mode_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split:angular-split_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/webtreemap:webtreemap_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/bargraph-visualizer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/bargraph-visualizer.component.ts index 1c31cd7bc32f..151850b61c4d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/bargraph-visualizer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/bargraph-visualizer.component.ts @@ -7,7 +7,7 @@ */ import {ChangeDetectionStrategy, Component, computed, inject, input, output} from '@angular/core'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../../protocol'; import {ThemeService} from '../../../../application-services/theme_service'; import {BarGraphFormatter, BargraphNode} from '../record-formatter/bargraph-formatter/index'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/flamegraph-visualizer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/flamegraph-visualizer.component.ts index 18c236ceae44..33a4d3374c4c 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/flamegraph-visualizer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/flamegraph-visualizer.component.ts @@ -8,7 +8,7 @@ import {ChangeDetectionStrategy, Component, computed, inject, input, output} from '@angular/core'; import {Color, RawData} from 'ngx-flamegraph/lib/utils'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../../protocol'; import {ThemeService} from '../../../../application-services/theme_service'; import { diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/profile-formatter.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/profile-formatter.ts index f6f7779ed49e..03476eb9f460 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/profile-formatter.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/profile-formatter.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DirectiveProfile} from 'protocol'; +import {DirectiveProfile} from '../../../../../../../protocol'; import {SelectedDirective} from './timeline-visualizer.component'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/timeline-visualizer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/timeline-visualizer.component.ts index b1affb6a7ec2..71e77cad2167 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/timeline-visualizer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/timeline-visualizer.component.ts @@ -7,7 +7,7 @@ */ import {ChangeDetectionStrategy, Component, computed, input, linkedSignal} from '@angular/core'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../../protocol'; import {BargraphNode} from '../record-formatter/bargraph-formatter'; import {FlamegraphNode} from '../record-formatter/flamegraph-formatter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/tree-map-visualizer.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/tree-map-visualizer.component.ts index 935c03d52c8c..0a30d42df33d 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/tree-map-visualizer.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/recording-visualizer/tree-map-visualizer.component.ts @@ -19,7 +19,7 @@ import { OnDestroy, viewChild, } from '@angular/core'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../../protocol'; import {Subject, Subscription} from 'rxjs'; import {debounceTime} from 'rxjs/operators'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline-controls.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline-controls.component.ts index b56a11066961..dd73476da952 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline-controls.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline-controls.component.ts @@ -7,7 +7,7 @@ */ import {Component, input, model, output} from '@angular/core'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../protocol'; import {VisualizationMode} from './visualization-mode'; import {MatButton} from '@angular/material/button'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline.component.ts index 6f902ea7923b..71f5c88be4fe 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/timeline.component.ts @@ -7,7 +7,7 @@ */ import {Component, computed, effect, input, output, signal} from '@angular/core'; -import {ProfilerFrame} from 'protocol'; +import {ProfilerFrame} from '../../../../../../protocol'; import {Observable} from 'rxjs'; import {createFilter, Filter, noopFilter} from './filter'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode/BUILD.bazel index 99edb827ebbf..04de96a8eba4 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/profiler/timeline/visualization-mode/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "visualization-mode", srcs = ["index.ts"], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/BUILD.bazel index d803324cef2c..ce7c651da51f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//:__subpackages__"]) @@ -8,7 +8,7 @@ sass_binary( src = "router-tree.component.scss", ) -ng_module( +ng_project( name = "router-tree", srcs = [ "router-tree.component.ts", @@ -18,14 +18,16 @@ ng_module( ":router-tree.component.html", ":router_tree_styles", ], - deps = [ - "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host", - "//devtools/projects/protocol", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@angular/material", - "@npm//@types", - "@npm//d3", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/@angular/material", + "//:node_modules/@types/d3", + "//:node_modules/d3", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host:tree-visualizer-host_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree-visualizer.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree-visualizer.ts index 057318213f15..24354544a50f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree-visualizer.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree-visualizer.ts @@ -7,7 +7,7 @@ */ import * as d3 from 'd3'; -import {Route} from 'protocol'; +import {Route} from '../../../../../protocol'; let arrowDefId = 0; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.ts b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.ts index 2976a1da6317..9d85920f265f 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/router-tree/router-tree.component.ts @@ -9,7 +9,7 @@ import {CommonModule} from '@angular/common'; import {afterNextRender, Component, effect, input, viewChild} from '@angular/core'; import {MatInputModule} from '@angular/material/input'; -import {Route} from 'protocol'; +import {Route} from '../../../../../protocol'; import {RouterTreeVisualizer} from './router-tree-visualizer'; import {MatCheckboxModule} from '@angular/material/checkbox'; import {TreeVisualizerHostComponent} from '../tree-visualizer-host/tree-visualizer-host.component'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update/BUILD.bazel index e3ee2687fa35..c01d14c67ddb 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/tab-update/BUILD.bazel @@ -1,17 +1,16 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "tab-update", - srcs = glob( - include = [ - "index.ts", - ], - ), - deps = [ + srcs = [ + "index.ts", + ], + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host/BUILD.bazel index 39ea32946a34..5edb693c3155 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/devtools-tabs/tree-visualizer-host/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//:__subpackages__"]) @@ -9,7 +9,7 @@ sass_binary( deps = ["//devtools/projects/ng-devtools/src/styles:typography"], ) -ng_module( +ng_project( name = "tree-visualizer-host", srcs = [ "tree-visualizer-host.component.ts", @@ -17,7 +17,7 @@ ng_module( angular_assets = [ ":tree_visualizer_host_styles", ], - deps = [ + interop_deps = [ "//packages/core", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/devtools.component.ts b/devtools/projects/ng-devtools/src/lib/devtools.component.ts index fbfeac43e48d..94d7b38979e6 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools.component.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools.component.ts @@ -8,7 +8,7 @@ import {animate, style, transition, trigger} from '@angular/animations'; import {Component, computed, inject, OnDestroy, OnInit, signal} from '@angular/core'; -import {Events, MessageBus, SupportedApis} from 'protocol'; +import {Events, MessageBus, SupportedApis} from '../../../protocol'; import {interval} from 'rxjs'; import {FrameManager} from './application-services/frame_manager'; diff --git a/devtools/projects/ng-devtools/src/lib/devtools_spec.ts b/devtools/projects/ng-devtools/src/lib/devtools_spec.ts index c48f7e0843c6..12efc900c747 100644 --- a/devtools/projects/ng-devtools/src/lib/devtools_spec.ts +++ b/devtools/projects/ng-devtools/src/lib/devtools_spec.ts @@ -11,7 +11,7 @@ import {ComponentFixture, TestBed} from '@angular/core/testing'; import {FrameManager} from './application-services/frame_manager'; import {DevToolsComponent} from './devtools.component'; import {DevToolsTabsComponent} from './devtools-tabs/devtools-tabs.component'; -import {MessageBus} from 'protocol'; +import {MessageBus} from '../../../protocol'; @Component({ selector: 'ng-devtools-tabs', diff --git a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/BUILD.bazel index 04f5f0d6e19f..dfcda08dd2d8 100644 --- a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/BUILD.bazel @@ -1,15 +1,16 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "angular-split", srcs = ["public_api.ts"], - deps = [ - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib", - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component:split", + interop_deps = [ "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib:lib_rjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component:split_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/BUILD.bazel index 3be9251af79c..7fecf9e7db14 100644 --- a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/BUILD.bazel @@ -1,19 +1,20 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "lib", srcs = glob( include = [ "*.ts", ], ), - deps = [ - "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component:split", + interop_deps = [ "//packages/common", "//packages/core", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component:split_rjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component/BUILD.bazel index 9965fd0dbe67..4796086a048a 100644 --- a/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/vendor/angular-split/lib/component/BUILD.bazel @@ -1,5 +1,5 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//:__subpackages__"]) @@ -8,7 +8,7 @@ sass_binary( src = "split.component.scss", ) -ng_module( +ng_project( name = "split", srcs = [ "interface.ts", @@ -19,9 +19,11 @@ ng_module( angular_assets = [ ":split_styles", ], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/devtools/projects/ng-devtools/src/lib/vendor/memo-decorator/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/vendor/memo-decorator/BUILD.bazel index e40c82a17c30..5fecf95a2f39 100644 --- a/devtools/projects/ng-devtools/src/lib/vendor/memo-decorator/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/vendor/memo-decorator/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//:__subpackages__"]) -ts_library( +ts_project( name = "memo-decorator", srcs = ["index.ts"], ) diff --git a/devtools/projects/ng-devtools/src/lib/vendor/webtreemap/BUILD.bazel b/devtools/projects/ng-devtools/src/lib/vendor/webtreemap/BUILD.bazel index 70ecd18bb30e..088a6d04dc6e 100644 --- a/devtools/projects/ng-devtools/src/lib/vendor/webtreemap/BUILD.bazel +++ b/devtools/projects/ng-devtools/src/lib/vendor/webtreemap/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//:__subpackages__"]) -ts_library( +ts_project( name = "webtreemap", srcs = [ "tree.ts", diff --git a/devtools/projects/protocol/BUILD.bazel b/devtools/projects/protocol/BUILD.bazel index c1cc9ff3c9b3..6712dbe35361 100644 --- a/devtools/projects/protocol/BUILD.bazel +++ b/devtools/projects/protocol/BUILD.bazel @@ -1,6 +1,5 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) @@ -9,8 +8,8 @@ exports_files([ "tsconfig.spec.json", ]) -ts_library( - name = "protocol_ts", +ts_project( + name = "protocol", srcs = glob( ["**/*.ts"], exclude = [ @@ -18,8 +17,10 @@ ts_library( "src/test.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", + ], + deps = [ "@npm//@types", ], ) @@ -29,19 +30,15 @@ ts_test_library( srcs = glob( ["**/*.spec.ts"], ), - deps = [ - ":protocol_ts", + interop_deps = [ "//packages/core/testing", + ], + deps = [ + ":protocol_rjs", "@npm//@types", ], ) -js_library( - name = "protocol", - package_name = "protocol", - deps = [":protocol_ts"], -) - karma_web_test_suite( name = "test", deps = [ diff --git a/devtools/projects/shared-utils/BUILD.bazel b/devtools/projects/shared-utils/BUILD.bazel index 8a09265b3d4e..1d54946fa5bb 100644 --- a/devtools/projects/shared-utils/BUILD.bazel +++ b/devtools/projects/shared-utils/BUILD.bazel @@ -1,11 +1,10 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "js_library") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") package(default_visibility = ["//visibility:public"]) -ts_library( - name = "shared_utils_ts", +ts_project( + name = "shared-utils", srcs = glob( ["**/*.ts"], exclude = [ @@ -13,25 +12,19 @@ ts_library( "src/test.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", - "@npm//@types", ], ) -js_library( - name = "shared-utils", - package_name = "shared-utils", - deps = [":shared_utils_ts"], -) - ts_test_library( name = "shared_utils_test", srcs = glob(["**/*.spec.ts"]), - deps = [ - ":shared-utils", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + ":shared-utils_rjs", ], ) diff --git a/devtools/projects/shared-utils/src/lib/shared-utils.spec.ts b/devtools/projects/shared-utils/src/lib/shared-utils.spec.ts index 14daa5bd2be5..512cf0545fab 100644 --- a/devtools/projects/shared-utils/src/lib/shared-utils.spec.ts +++ b/devtools/projects/shared-utils/src/lib/shared-utils.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {arrayEquals} from 'shared-utils'; +import {arrayEquals} from '../../../shared-utils'; describe('arrayEquals', () => { let a: any; diff --git a/devtools/projects/shell-browser/src/BUILD.bazel b/devtools/projects/shell-browser/src/BUILD.bazel index a901d885d595..f23640c061b5 100644 --- a/devtools/projects/shell-browser/src/BUILD.bazel +++ b/devtools/projects/shell-browser/src/BUILD.bazel @@ -1,9 +1,9 @@ load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") load("@bazel_skylib//rules:common_settings.bzl", "string_flag") -load("@build_bazel_rules_nodejs//:index.bzl", "js_library", "pkg_web") +load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:ng_project.bzl", "ng_project") +load("//devtools/tools:typescript.bzl", "ts_project") load("//devtools/tools/esbuild:index.bzl", "LINKER_PROCESSED_FW_PACKAGES") load("//tools:defaults.bzl", "esbuild") @@ -40,34 +40,31 @@ copy_to_directory( }, ) -ts_library( - name = "devtools_ts", +ts_project( + name = "devtools", srcs = [ "devtools.ts", ], deps = [ - "@npm//@types/chrome", + "//:node_modules/@types/chrome", ], ) -js_library( - name = "devtools", - deps = [":devtools_ts"], -) - -ng_module( +ng_project( name = "src", srcs = [ "main.ts", ], - deps = [ - "//devtools/projects/ng-devtools", - "//devtools/projects/shell-browser/src/app", - "//devtools/projects/shell-browser/src/environments:environment", + interop_deps = [ "//packages/common", "//packages/common/http", "//packages/core", ], + deps = [ + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/projects/shell-browser/src/app:app_rjs", + "//devtools/projects/shell-browser/src/environments:environment_rjs", + ], ) esbuild( diff --git a/devtools/projects/shell-browser/src/app/BUILD.bazel b/devtools/projects/shell-browser/src/app/BUILD.bazel index 3a746e7f79ad..3dba09d8ed7c 100644 --- a/devtools/projects/shell-browser/src/app/BUILD.bazel +++ b/devtools/projects/shell-browser/src/app/BUILD.bazel @@ -1,7 +1,7 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") load("//devtools/tools:defaults.bzl", "karma_web_test_suite") -load("//devtools/tools:ng_module.bzl", "ng_module") -load("//devtools/tools:typescript.bzl", "ts_library", "ts_test_library") +load("//devtools/tools:ng_project.bzl", "ng_project") +load("//devtools/tools:typescript.bzl", "ts_project", "ts_test_library") load("//tools:defaults.bzl", "esbuild") package(default_visibility = ["//visibility:public"]) @@ -11,7 +11,7 @@ sass_binary( src = "app.component.scss", ) -ng_module( +ng_project( name = "app", srcs = [ "app.component.ts", @@ -21,132 +21,145 @@ ng_module( "app.component.html", ":app_component_styles", ], - deps = [ - ":chrome_application_environment", - ":chrome_application_operations", - ":zone_aware_chrome_message_bus", - "//devtools/projects/ng-devtools", - "//devtools/projects/ng-devtools-backend", - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/protocol", - "//devtools/projects/shell-browser/src/app:backend", - "//devtools/projects/shell-browser/src/app:background", + interop_deps = [ "//packages/core", "//packages/platform-browser", "//packages/platform-browser/animations", - "@npm//@angular/cdk", - "@npm//@angular/material", - "@npm//rxjs", + ], + deps = [ + ":chrome_application_environment_rjs", + ":chrome_application_operations_rjs", + ":zone_aware_chrome_message_bus_rjs", + "//:node_modules/@angular/cdk", + "//:node_modules/@angular/material", + "//:node_modules/@types/chrome", + "//:node_modules/rxjs", + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/projects/ng-devtools-backend:ng-devtools-backend_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", + "//devtools/projects/ng-devtools-backend/src/lib/component-tree:component-tree_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/projects/shell-browser/src/app:backend_rjs", + "//devtools/projects/shell-browser/src/app:background_rjs", ], ) -ts_library( +ts_project( name = "ng_validate", srcs = [ "ng-validate.ts", ], deps = [ - "@npm//@types/chrome", + "//:node_modules/@types/chrome", ], ) -ts_library( +ts_project( name = "chrome_window_extensions", srcs = [ "chrome-window-extensions.ts", ], - deps = [ - "//devtools/projects/ng-devtools-backend", + interop_deps = [ "//devtools/projects/ng-devtools-backend/src/lib/component-tree", - "//devtools/projects/protocol", - "@npm//@types", + ], + deps = [ + "//devtools/projects/ng-devtools-backend:ng-devtools-backend_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "chrome_application_environment", srcs = [ "chrome-application-environment.ts", ], + interop_deps = [ + "//devtools/projects/ng-devtools:ng-devtools", + ], deps = [ - "//devtools/projects/ng-devtools", - "//devtools/projects/shell-browser/src/environments:environment", - "@npm//@types", + "//devtools/projects/shell-browser/src/environments:environment_rjs", ], ) -ts_library( +ts_project( name = "chrome_application_operations", srcs = [ "chrome-application-operations.ts", ], - deps = [ - ":chrome_application_environment", - "//devtools/projects/ng-devtools", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@angular/cdk", - "@npm//@types", + "//devtools/projects/ng-devtools:ng-devtools", + ], + deps = [ + ":chrome_application_environment_rjs", + "//:node_modules/@angular/cdk", + "//:node_modules/@types/chrome", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "same_page_message_bus", srcs = [ "same-page-message-bus.ts", ], - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "zone_aware_chrome_message_bus", srcs = [ "zone-aware-chrome-message-bus.ts", ], - deps = [ - ":chrome_message_bus", - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + ":chrome_message_bus_rjs", + "//:node_modules/@types/chrome", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "chrome_message_bus", srcs = [ "chrome-message-bus.ts", ], - deps = [ - "//devtools/projects/protocol", + interop_deps = [ "//packages/core", - "@npm//@types", + ], + deps = [ + "//:node_modules/@types/chrome", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "background", srcs = [ "background.ts", ], deps = [ - ":tab_manager", - "//devtools/projects/protocol", - "//devtools/projects/shell-browser/src/app:detect_angular_for_extension_icon", + ":detect_angular_for_extension_icon_rjs", + ":tab_manager_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "tab_manager", srcs = [ "tab_manager.ts", ], deps = [ - "//devtools/projects/protocol", + "//:node_modules/@types/chrome", + "//devtools/projects/protocol:protocol_rjs", ], ) @@ -163,47 +176,45 @@ ts_test_library( "tab_manager_spec.ts", ], deps = [ - ":tab_manager", + ":tab_manager_rjs", + "//:node_modules/@types/chrome", ], ) -ts_library( +ts_project( name = "backend", srcs = [ "backend.ts", ], deps = [ - ":same_page_message_bus", - "//devtools/projects/ng-devtools-backend", - "//devtools/projects/ng-devtools-backend/src/lib:highlighter", - "//devtools/projects/shell-browser/src/app:chrome_window_extensions", - "@npm//@types", + ":chrome_window_extensions_rjs", + ":same_page_message_bus_rjs", + "//devtools/projects/ng-devtools-backend:ng-devtools-backend_rjs", + "//devtools/projects/ng-devtools-backend/src/lib:highlighter_rjs", ], ) -ts_library( +ts_project( name = "content_script", srcs = [ "content-script.ts", ], deps = [ - ":chrome_message_bus", - ":same_page_message_bus", - "//devtools/projects/protocol", - "@npm//@types", + ":chrome_message_bus_rjs", + ":same_page_message_bus_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ts_library( +ts_project( name = "detect_angular_for_extension_icon", srcs = [ "detect-angular-for-extension-icon.ts", ], deps = [ - ":same_page_message_bus", - "//devtools/projects/protocol", - "//devtools/projects/shared-utils", - "@npm//@types", + ":same_page_message_bus_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/projects/shared-utils:shared-utils_rjs", ], ) diff --git a/devtools/projects/shell-browser/src/app/app.component.spec.ts b/devtools/projects/shell-browser/src/app/app.component.spec.ts index 5ae503a74dc1..bc8ebc4481ca 100644 --- a/devtools/projects/shell-browser/src/app/app.component.spec.ts +++ b/devtools/projects/shell-browser/src/app/app.component.spec.ts @@ -8,7 +8,7 @@ import {TestBed, waitForAsync} from '@angular/core/testing'; import {RouterModule} from '@angular/router'; -import {ApplicationOperations} from 'ng-devtools'; +import {ApplicationOperations} from '../../../ng-devtools'; import {AppComponent} from './app.component'; diff --git a/devtools/projects/shell-browser/src/app/app.component.ts b/devtools/projects/shell-browser/src/app/app.component.ts index 772932fd2790..7034bdc76395 100644 --- a/devtools/projects/shell-browser/src/app/app.component.ts +++ b/devtools/projects/shell-browser/src/app/app.component.ts @@ -7,8 +7,8 @@ */ import {ChangeDetectorRef, Component, inject, OnInit} from '@angular/core'; -import {DevToolsComponent} from 'ng-devtools'; -import {Events, MessageBus} from 'protocol'; +import {DevToolsComponent} from '../../../ng-devtools'; +import {Events, MessageBus} from '../../../protocol'; @Component({ selector: 'app-root', diff --git a/devtools/projects/shell-browser/src/app/app.config.ts b/devtools/projects/shell-browser/src/app/app.config.ts index 03331a0aaf69..f63bcd637ebf 100644 --- a/devtools/projects/shell-browser/src/app/app.config.ts +++ b/devtools/projects/shell-browser/src/app/app.config.ts @@ -8,12 +8,12 @@ import {ApplicationConfig, inject, NgZone} from '@angular/core'; import {provideAnimations} from '@angular/platform-browser/animations'; -import {ApplicationEnvironment, ApplicationOperations} from 'ng-devtools'; +import {ApplicationEnvironment, ApplicationOperations} from '../../../ng-devtools'; import {ChromeApplicationEnvironment} from './chrome-application-environment'; import {ChromeApplicationOperations} from './chrome-application-operations'; import {ZoneAwareChromeMessageBus} from './zone-aware-chrome-message-bus'; -import {Events, MessageBus, PriorityAwareMessageBus} from 'protocol'; +import {Events, MessageBus, PriorityAwareMessageBus} from '../../../protocol'; import {FrameManager} from '../../../ng-devtools/src/lib/application-services/frame_manager'; import {Platform} from '@angular/cdk/platform'; diff --git a/devtools/projects/shell-browser/src/app/backend.ts b/devtools/projects/shell-browser/src/app/backend.ts index b65e9bdf5d06..0cd4ec4762cf 100644 --- a/devtools/projects/shell-browser/src/app/backend.ts +++ b/devtools/projects/shell-browser/src/app/backend.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {initializeMessageBus} from 'ng-devtools-backend'; +import {initializeMessageBus} from '../../../ng-devtools-backend'; import {unHighlight} from '../../../ng-devtools-backend/src/lib/highlighter'; diff --git a/devtools/projects/shell-browser/src/app/background.ts b/devtools/projects/shell-browser/src/app/background.ts index 8f61037a7a6d..c46a297e3675 100644 --- a/devtools/projects/shell-browser/src/app/background.ts +++ b/devtools/projects/shell-browser/src/app/background.ts @@ -8,7 +8,7 @@ /// <reference types="chrome"/> -import {AngularDetection} from 'protocol'; +import {AngularDetection} from '../../../protocol'; import {TabManager, Tabs} from './tab_manager'; function getPopUpName(ng: AngularDetection): string { diff --git a/devtools/projects/shell-browser/src/app/chrome-application-environment.ts b/devtools/projects/shell-browser/src/app/chrome-application-environment.ts index 8df9d20f70d4..5d82ac9e6ed1 100644 --- a/devtools/projects/shell-browser/src/app/chrome-application-environment.ts +++ b/devtools/projects/shell-browser/src/app/chrome-application-environment.ts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ApplicationEnvironment, Environment} from 'ng-devtools'; +import {ApplicationEnvironment, Environment} from '../../../ng-devtools'; import {environment} from '../environments/environment'; export class ChromeApplicationEnvironment extends ApplicationEnvironment { - frameSelectorEnabled = true; + override frameSelectorEnabled = true; override get environment(): Environment { return environment; diff --git a/devtools/projects/shell-browser/src/app/chrome-application-operations.ts b/devtools/projects/shell-browser/src/app/chrome-application-operations.ts index 8398094fb563..1f0dd75214b1 100644 --- a/devtools/projects/shell-browser/src/app/chrome-application-operations.ts +++ b/devtools/projects/shell-browser/src/app/chrome-application-operations.ts @@ -10,8 +10,8 @@ import {Platform} from '@angular/cdk/platform'; import {inject} from '@angular/core'; -import {ApplicationOperations, Frame, TOP_LEVEL_FRAME_ID} from 'ng-devtools'; -import {DirectivePosition, ElementPosition} from 'protocol'; +import {ApplicationOperations, Frame, TOP_LEVEL_FRAME_ID} from '../../../ng-devtools'; +import {DirectivePosition, ElementPosition} from '../../../protocol'; export class ChromeApplicationOperations extends ApplicationOperations { platform = inject(Platform); diff --git a/devtools/projects/shell-browser/src/app/chrome-message-bus.ts b/devtools/projects/shell-browser/src/app/chrome-message-bus.ts index bc67247ebe20..31a8a7b8196e 100644 --- a/devtools/projects/shell-browser/src/app/chrome-message-bus.ts +++ b/devtools/projects/shell-browser/src/app/chrome-message-bus.ts @@ -8,7 +8,7 @@ /// <reference types="chrome"/> -import {Events, MessageBus, Parameters} from 'protocol'; +import {Events, MessageBus, Parameters} from '../../../protocol'; interface ChromeMessage<T, K extends keyof T> { topic: K; diff --git a/devtools/projects/shell-browser/src/app/chrome-window-extensions.ts b/devtools/projects/shell-browser/src/app/chrome-window-extensions.ts index 9d0b329cac3c..98473128e148 100644 --- a/devtools/projects/shell-browser/src/app/chrome-window-extensions.ts +++ b/devtools/projects/shell-browser/src/app/chrome-window-extensions.ts @@ -6,14 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ -import {findNodeFromSerializedPosition} from 'ng-devtools-backend'; +import {findNodeFromSerializedPosition} from '../../../ng-devtools-backend'; import { buildDirectiveForest, queryDirectiveForest, } from '../../../ng-devtools-backend/src/lib/component-tree/component-tree'; -import {ElementPosition} from 'protocol'; +import {ElementPosition} from '../../../protocol'; export const initializeExtendedWindowOperations = () => { extendWindowOperations(globalThis, {inspectedApplication: chromeWindowExtensions}); diff --git a/devtools/projects/shell-browser/src/app/content-script.ts b/devtools/projects/shell-browser/src/app/content-script.ts index f25e2b46356c..0c28baa7d44a 100644 --- a/devtools/projects/shell-browser/src/app/content-script.ts +++ b/devtools/projects/shell-browser/src/app/content-script.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference types="chrome"/> + import {ChromeMessageBus} from './chrome-message-bus'; import {SamePageMessageBus} from './same-page-message-bus'; diff --git a/devtools/projects/shell-browser/src/app/detect-angular-for-extension-icon.ts b/devtools/projects/shell-browser/src/app/detect-angular-for-extension-icon.ts index 8582b8ab9af8..24a3a304ffd3 100644 --- a/devtools/projects/shell-browser/src/app/detect-angular-for-extension-icon.ts +++ b/devtools/projects/shell-browser/src/app/detect-angular-for-extension-icon.ts @@ -6,13 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import {AngularDetection} from 'protocol'; +import {AngularDetection} from '../../../protocol'; import { appIsAngular, appIsAngularInDevMode, appIsAngularIvy, appIsSupportedAngularVersion, -} from 'shared-utils'; +} from '../../../shared-utils'; import {SamePageMessageBus} from './same-page-message-bus'; diff --git a/devtools/projects/shell-browser/src/app/same-page-message-bus.ts b/devtools/projects/shell-browser/src/app/same-page-message-bus.ts index 30d1e0686a9c..87c6c75d7385 100644 --- a/devtools/projects/shell-browser/src/app/same-page-message-bus.ts +++ b/devtools/projects/shell-browser/src/app/same-page-message-bus.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus, Parameters} from 'protocol'; +import {Events, MessageBus, Parameters} from '../../../protocol'; type AnyEventCallback<Ev> = <E extends keyof Ev>(topic: E, args: Parameters<Ev[E]>) => void; diff --git a/devtools/projects/shell-browser/src/app/tab_manager.ts b/devtools/projects/shell-browser/src/app/tab_manager.ts index 17464af7e6ac..bd2d73c63ffa 100644 --- a/devtools/projects/shell-browser/src/app/tab_manager.ts +++ b/devtools/projects/shell-browser/src/app/tab_manager.ts @@ -8,7 +8,7 @@ /// <reference types="chrome"/> -import {Events, Topic} from 'protocol'; +import {Events, Topic} from '../../../protocol'; export interface ContentScriptConnection { port: chrome.runtime.Port | null; diff --git a/devtools/projects/shell-browser/src/app/tab_manager_spec.ts b/devtools/projects/shell-browser/src/app/tab_manager_spec.ts index b96d5d9fab13..5094ebd85eba 100644 --- a/devtools/projects/shell-browser/src/app/tab_manager_spec.ts +++ b/devtools/projects/shell-browser/src/app/tab_manager_spec.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference types="chrome"/> + import {DevToolsConnection, TabManager, Tabs} from './tab_manager'; interface MockSender { diff --git a/devtools/projects/shell-browser/src/app/zone-aware-chrome-message-bus.ts b/devtools/projects/shell-browser/src/app/zone-aware-chrome-message-bus.ts index c26d66924b2a..c3bc9d141143 100644 --- a/devtools/projects/shell-browser/src/app/zone-aware-chrome-message-bus.ts +++ b/devtools/projects/shell-browser/src/app/zone-aware-chrome-message-bus.ts @@ -6,8 +6,10 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference types="chrome"/> + import {NgZone} from '@angular/core'; -import {Events, MessageBus, Parameters} from 'protocol'; +import {Events, MessageBus, Parameters} from '../../../protocol'; import {ChromeMessageBus} from './chrome-message-bus'; diff --git a/devtools/projects/shell-browser/src/environments/BUILD.bazel b/devtools/projects/shell-browser/src/environments/BUILD.bazel index 64ac97236e06..7a473bb4a41d 100644 --- a/devtools/projects/shell-browser/src/environments/BUILD.bazel +++ b/devtools/projects/shell-browser/src/environments/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "environment", srcs = [ "environment.ts", diff --git a/devtools/src/BUILD.bazel b/devtools/src/BUILD.bazel index 326ef5df35f5..43b424b4ed6d 100644 --- a/devtools/src/BUILD.bazel +++ b/devtools/src/BUILD.bazel @@ -1,7 +1,7 @@ load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") load("@build_bazel_rules_nodejs//:index.bzl", "pkg_web") load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") load("//devtools/tools/esbuild:index.bzl", "LINKER_PROCESSED_FW_PACKAGES") load("//tools:defaults.bzl", "esbuild", "http_server") @@ -38,18 +38,19 @@ copy_to_directory( }, ) -ng_module( +ng_project( name = "demo", srcs = ["main.ts"], - deps = [ - "//devtools/src/app", + interop_deps = [ "//packages/common", "//packages/common/http", "//packages/core", "//packages/core/src/util", "//packages/platform-browser", - "@npm//@types", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//devtools/src/app:app_rjs", ], ) @@ -99,37 +100,37 @@ http_server( ], ) -ng_module( +ng_project( name = "demo_application_environment", srcs = ["demo-application-environment.ts"], deps = [ - "//devtools/projects/ng-devtools", - "//devtools/src/environments", + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/src/environments:environments_rjs", ], ) -ng_module( +ng_project( name = "demo_application_operations", srcs = ["demo-application-operations.ts"], deps = [ - "//devtools/projects/ng-devtools", - "//devtools/projects/protocol", + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) -ng_module( +ng_project( name = "iframe_message_bus", srcs = ["iframe-message-bus.ts"], deps = [ - "//devtools/projects/protocol", + "//devtools/projects/protocol:protocol_rjs", ], ) -ng_module( +ng_project( name = "zone-unaware-iframe_message_bus", srcs = ["zone-unaware-iframe-message-bus.ts"], deps = [ - ":iframe_message_bus", - "//devtools/projects/protocol", + ":iframe_message_bus_rjs", + "//devtools/projects/protocol:protocol_rjs", ], ) diff --git a/devtools/src/app/BUILD.bazel b/devtools/src/app/BUILD.bazel index 8acca8228b3a..5190a9dce146 100644 --- a/devtools/src/app/BUILD.bazel +++ b/devtools/src/app/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -8,7 +8,7 @@ sass_binary( src = "app.component.scss", ) -ng_module( +ng_project( name = "app", srcs = [ "app.component.ts", @@ -18,15 +18,17 @@ ng_module( "app.component.html", ":app_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools", - "//devtools/src:demo_application_environment", - "//devtools/src:demo_application_operations", - "//devtools/src/app/demo-app", - "//devtools/src/app/devtools-app", + interop_deps = [ "//packages/core", "//packages/platform-browser", "//packages/platform-browser/animations", "//packages/router", ], + deps = [ + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/src:demo_application_environment_rjs", + "//devtools/src:demo_application_operations_rjs", + "//devtools/src/app/demo-app:demo-app_rjs", + "//devtools/src/app/devtools-app:devtools-app_rjs", + ], ) diff --git a/devtools/src/app/app.config.ts b/devtools/src/app/app.config.ts index d7e3a27e058e..2282ceafae2f 100644 --- a/devtools/src/app/app.config.ts +++ b/devtools/src/app/app.config.ts @@ -9,7 +9,7 @@ import {ApplicationConfig} from '@angular/core'; import {provideAnimations} from '@angular/platform-browser/animations'; import {provideRouter} from '@angular/router'; -import {ApplicationEnvironment, ApplicationOperations} from 'ng-devtools'; +import {ApplicationEnvironment, ApplicationOperations} from '../../projects/ng-devtools'; import {DemoApplicationEnvironment} from '../demo-application-environment'; import {DemoApplicationOperations} from '../demo-application-operations'; diff --git a/devtools/src/app/demo-app/BUILD.bazel b/devtools/src/app/demo-app/BUILD.bazel index df40fc9fea3b..a37e81450e52 100644 --- a/devtools/src/app/demo-app/BUILD.bazel +++ b/devtools/src/app/demo-app/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary", "sass_library") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -37,7 +37,7 @@ sass_binary( ], ) -ng_module( +ng_project( name = "demo-app", srcs = [ "demo-app.component.ts", @@ -53,12 +53,14 @@ ng_module( "zippy.component.html", ":demo_app_component_styles", ] + _STYLE_LABELS, - deps = [ - "//devtools/projects/ng-devtools-backend", - "//devtools/src:zone-unaware-iframe_message_bus", - "//devtools/src/app/demo-app/todo", + interop_deps = [ "//packages/core", "//packages/elements", "//packages/router", ], + deps = [ + "//devtools/projects/ng-devtools-backend:ng-devtools-backend_rjs", + "//devtools/src:zone-unaware-iframe_message_bus_rjs", + "//devtools/src/app/demo-app/todo:todo_rjs", + ], ) diff --git a/devtools/src/app/demo-app/demo-app.routes.ts b/devtools/src/app/demo-app/demo-app.routes.ts index f9533c8ad699..b9dcd3e63897 100644 --- a/devtools/src/app/demo-app/demo-app.routes.ts +++ b/devtools/src/app/demo-app/demo-app.routes.ts @@ -9,7 +9,7 @@ import {inject, Injector, provideEnvironmentInitializer} from '@angular/core'; import {createCustomElement} from '@angular/elements'; import {Routes} from '@angular/router'; -import {initializeMessageBus} from 'ng-devtools-backend'; +import {initializeMessageBus} from '../../../projects/ng-devtools-backend'; import {ZoneUnawareIFrameMessageBus} from '../../zone-unaware-iframe-message-bus'; diff --git a/devtools/src/app/demo-app/todo/BUILD.bazel b/devtools/src/app/demo-app/todo/BUILD.bazel index 9334c46f9951..3d83d7f65109 100644 --- a/devtools/src/app/demo-app/todo/BUILD.bazel +++ b/devtools/src/app/demo-app/todo/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -8,7 +8,7 @@ sass_binary( src = "app-todo.component.scss", ) -ng_module( +ng_project( name = "todo", srcs = [ "app.module.ts", @@ -20,14 +20,16 @@ ng_module( "dialog.component.html", ":app_todo_component_styles", ], - deps = [ - "//devtools/src/app/demo-app/todo/about", - "//devtools/src/app/demo-app/todo/home", - "//devtools/src/app/demo-app/todo/routes", + interop_deps = [ "//packages/common", "//packages/core", "//packages/forms", "//packages/router", - "@npm//@angular/material", + ], + deps = [ + "//:node_modules/@angular/material", + "//devtools/src/app/demo-app/todo/about:about_rjs", + "//devtools/src/app/demo-app/todo/home:home_rjs", + "//devtools/src/app/demo-app/todo/routes:routes_rjs", ], ) diff --git a/devtools/src/app/demo-app/todo/about/BUILD.bazel b/devtools/src/app/demo-app/todo/about/BUILD.bazel index 4d4c558eab58..91882d051bb0 100644 --- a/devtools/src/app/demo-app/todo/about/BUILD.bazel +++ b/devtools/src/app/demo-app/todo/about/BUILD.bazel @@ -1,14 +1,14 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "about", srcs = [ "about.component.ts", "about.routes.ts", ], - deps = [ + interop_deps = [ "//packages/core", "//packages/router", ], diff --git a/devtools/src/app/demo-app/todo/home/BUILD.bazel b/devtools/src/app/demo-app/todo/home/BUILD.bazel index eaa2669fe56b..2fbc555d3633 100644 --- a/devtools/src/app/demo-app/todo/home/BUILD.bazel +++ b/devtools/src/app/demo-app/todo/home/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -8,7 +8,7 @@ sass_binary( src = "todo.component.scss", ) -ng_module( +ng_project( name = "home", srcs = [ "home.routes.ts", @@ -25,7 +25,7 @@ ng_module( "todo.component.html", ":home_styles", ], - deps = [ + interop_deps = [ "//packages/common", "//packages/core", "//packages/router", diff --git a/devtools/src/app/demo-app/todo/routes/BUILD.bazel b/devtools/src/app/demo-app/todo/routes/BUILD.bazel index 12027902fcaf..0d1aaaccc690 100644 --- a/devtools/src/app/demo-app/todo/routes/BUILD.bazel +++ b/devtools/src/app/demo-app/todo/routes/BUILD.bazel @@ -1,14 +1,14 @@ -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "routes", srcs = [ "routes.component.ts", "routes.module.ts", ], - deps = [ + interop_deps = [ "//packages/core", "//packages/router", ], diff --git a/devtools/src/app/devtools-app/BUILD.bazel b/devtools/src/app/devtools-app/BUILD.bazel index 67fecc3ec09c..dffa53ad644a 100644 --- a/devtools/src/app/devtools-app/BUILD.bazel +++ b/devtools/src/app/devtools-app/BUILD.bazel @@ -1,5 +1,5 @@ load("@io_bazel_rules_sass//:defs.bzl", "sass_binary") -load("//devtools/tools:ng_module.bzl", "ng_module") +load("//devtools/tools:ng_project.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -8,7 +8,7 @@ sass_binary( src = "devtools-app.component.scss", ) -ng_module( +ng_project( name = "devtools-app", srcs = [ "devtools-app.component.ts", @@ -18,13 +18,15 @@ ng_module( "devtools-app.component.html", ":devtools_app_component_styles", ], - deps = [ - "//devtools/projects/ng-devtools", - "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager", - "//devtools/projects/protocol", - "//devtools/src:iframe_message_bus", + interop_deps = [ "//packages/common", "//packages/core", "//packages/router", ], + deps = [ + "//devtools/projects/ng-devtools:ng-devtools_rjs", + "//devtools/projects/ng-devtools/src/lib/application-services:frame_manager_rjs", + "//devtools/projects/protocol:protocol_rjs", + "//devtools/src:iframe_message_bus_rjs", + ], ) diff --git a/devtools/src/app/devtools-app/devtools-app.component.ts b/devtools/src/app/devtools-app/devtools-app.component.ts index d61065188804..ccfaae1b2ba8 100644 --- a/devtools/src/app/devtools-app/devtools-app.component.ts +++ b/devtools/src/app/devtools-app/devtools-app.component.ts @@ -9,7 +9,7 @@ import {Component, ElementRef, viewChild} from '@angular/core'; import {IFrameMessageBus} from '../../iframe-message-bus'; -import {DevToolsComponent} from 'ng-devtools'; +import {DevToolsComponent} from '../../../projects/ng-devtools'; import {SplitAreaDirective} from '../../../projects/ng-devtools/src/lib/vendor/angular-split/lib/component/splitArea.directive'; import {SplitComponent} from '../../../projects/ng-devtools/src/lib/vendor/angular-split/lib/component/split.component'; diff --git a/devtools/src/app/devtools-app/devtools-app.routes.ts b/devtools/src/app/devtools-app/devtools-app.routes.ts index 8ef8b847e3b6..73f31713660c 100644 --- a/devtools/src/app/devtools-app/devtools-app.routes.ts +++ b/devtools/src/app/devtools-app/devtools-app.routes.ts @@ -10,7 +10,7 @@ import {Routes} from '@angular/router'; import {AppDevToolsComponent} from './devtools-app.component'; import {FrameManager} from '../../../projects/ng-devtools/src/lib/application-services/frame_manager'; -import {Events, MessageBus, PriorityAwareMessageBus} from 'protocol'; +import {Events, MessageBus, PriorityAwareMessageBus} from '../../../projects/protocol'; import {IFrameMessageBus} from '../../iframe-message-bus'; export const DEVTOOL_ROUTES: Routes = [ diff --git a/devtools/src/demo-application-environment.ts b/devtools/src/demo-application-environment.ts index 5b1aec0cc15b..f2a66bc4c637 100644 --- a/devtools/src/demo-application-environment.ts +++ b/devtools/src/demo-application-environment.ts @@ -6,12 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ApplicationEnvironment, Environment} from 'ng-devtools'; +import {ApplicationEnvironment, Environment} from '../projects/ng-devtools'; import {environment} from './environments/environment'; export class DemoApplicationEnvironment extends ApplicationEnvironment { - frameSelectorEnabled = false; + override frameSelectorEnabled = false; + override get environment(): Environment { return environment; } diff --git a/devtools/src/demo-application-operations.ts b/devtools/src/demo-application-operations.ts index ebf89f760dab..346924a2bc22 100644 --- a/devtools/src/demo-application-operations.ts +++ b/devtools/src/demo-application-operations.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {ApplicationOperations} from 'ng-devtools'; -import {DirectivePosition, ElementPosition} from 'protocol'; +import {ApplicationOperations} from '../projects/ng-devtools'; +import {DirectivePosition, ElementPosition} from '../projects/protocol'; export class DemoApplicationOperations extends ApplicationOperations { override viewSource(position: ElementPosition): void { diff --git a/devtools/src/environments/BUILD.bazel b/devtools/src/environments/BUILD.bazel index 47a65ebf6037..f141f82bbb91 100644 --- a/devtools/src/environments/BUILD.bazel +++ b/devtools/src/environments/BUILD.bazel @@ -1,8 +1,8 @@ -load("//devtools/tools:typescript.bzl", "ts_library") +load("//devtools/tools:typescript.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "environments", srcs = [ "environment.ts", diff --git a/devtools/src/iframe-message-bus.ts b/devtools/src/iframe-message-bus.ts index 085f366cb98a..8e7d03ecf8c8 100644 --- a/devtools/src/iframe-message-bus.ts +++ b/devtools/src/iframe-message-bus.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus, Parameters} from 'protocol'; +import {Events, MessageBus, Parameters} from '../projects/protocol'; type AnyEventCallback<Ev> = <E extends keyof Ev>(topic: E, args: Parameters<Ev[E]>) => void; diff --git a/devtools/src/zone-unaware-iframe-message-bus.ts b/devtools/src/zone-unaware-iframe-message-bus.ts index 4da37ea4e50c..91da85099ad7 100644 --- a/devtools/src/zone-unaware-iframe-message-bus.ts +++ b/devtools/src/zone-unaware-iframe-message-bus.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Events, MessageBus, Parameters} from 'protocol'; +import {Events, MessageBus, Parameters} from '../projects/protocol'; import {IFrameMessageBus} from './iframe-message-bus'; diff --git a/devtools/tools/esbuild/BUILD.bazel b/devtools/tools/esbuild/BUILD.bazel index 28fdb38a1337..21363b81551b 100644 --- a/devtools/tools/esbuild/BUILD.bazel +++ b/devtools/tools/esbuild/BUILD.bazel @@ -7,6 +7,7 @@ js_library( name = "esbuild_base", srcs = ["esbuild-base.config.mjs"], deps = [ + "//packages:package_json", "//packages/compiler-cli/private", "@npm//@angular/build-tooling/shared-scripts/angular-optimization:js_lib", ], diff --git a/devtools/tools/esbuild/esbuild-base.config.mjs b/devtools/tools/esbuild/esbuild-base.config.mjs index 82b9d2d9976d..097036a2d2a4 100644 --- a/devtools/tools/esbuild/esbuild-base.config.mjs +++ b/devtools/tools/esbuild/esbuild-base.config.mjs @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import {createEsbuildAngularOptimizePlugin} from '@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs'; -import {GLOBAL_DEFS_FOR_TERSER_WITH_AOT} from '@angular/compiler-cli/private/tooling.js'; +import {createEsbuildAngularOptimizePlugin} from '@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin'; +import {GLOBAL_DEFS_FOR_TERSER_WITH_AOT} from '@angular/compiler-cli/private/tooling'; /** Converts an object to a string dictionary. */ function convertObjectToStringDictionary(value) { diff --git a/devtools/tools/linking/BUILD.bazel b/devtools/tools/linking/BUILD.bazel index df6fe819b369..48697c4fbd7e 100644 --- a/devtools/tools/linking/BUILD.bazel +++ b/devtools/tools/linking/BUILD.bazel @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") load("//tools:defaults.bzl", "nodejs_binary") copy_to_bin( @@ -10,6 +10,7 @@ nodejs_binary( name = "linker_bin", data = [ ":linker_srcs", + "//packages:package_json", "//packages/compiler-cli/linker/babel", "@npm//@babel/core", "@npm//@nginfra/angular-linking", diff --git a/devtools/tools/ng_module.bzl b/devtools/tools/ng_module.bzl deleted file mode 100644 index 169d01182744..000000000000 --- a/devtools/tools/ng_module.bzl +++ /dev/null @@ -1,10 +0,0 @@ -load("//tools:defaults.bzl", _ng_module = "ng_module") - -def ng_module(name, tsconfig = "//devtools:tsconfig.json", srcs = [], angular_assets = [], **kwargs): - _ng_module( - name = name, - tsconfig = tsconfig, - srcs = srcs, - assets = angular_assets, - **kwargs - ) diff --git a/devtools/tools/ng_project.bzl b/devtools/tools/ng_project.bzl new file mode 100644 index 000000000000..47d308d98803 --- /dev/null +++ b/devtools/tools/ng_project.bzl @@ -0,0 +1,15 @@ +load("//tools:defaults2.bzl", _ng_project = "ng_project") + +def ng_project(name, srcs = [], angular_assets = [], **kwargs): + deps = kwargs.pop("deps", []) + [ + "//:node_modules/tslib", + ] + + _ng_project( + name = name, + tsconfig = "//devtools:tsconfig_build", + srcs = srcs, + assets = angular_assets, + deps = deps, + **kwargs + ) diff --git a/devtools/tools/typescript.bzl b/devtools/tools/typescript.bzl index 77954cb34775..a23e8c9a6d7e 100644 --- a/devtools/tools/typescript.bzl +++ b/devtools/tools/typescript.bzl @@ -1,19 +1,21 @@ """Helper macros for compiling typescript with consistent config""" -load("//tools:defaults.bzl", _ts_library = "ts_library") +load("//tools:defaults2.bzl", _ts_project = "ts_project") -def ts_library(name, tsconfig = "//devtools:tsconfig.json", **kwargs): - _ts_library( +def ts_project(name, **kwargs): + _ts_project( name = name, - tsconfig = tsconfig, + tsconfig = "//devtools:tsconfig_build", **kwargs ) -def ts_test_library(name, tsconfig = "//devtools:tsconfig_spec", deps = [], **kwargs): - _ts_library( +def ts_test_library(name, deps = [], **kwargs): + _ts_project( name = name, - tsconfig = tsconfig, + tsconfig = "//devtools:tsconfig_test", testonly = 1, - deps = deps, + deps = deps + [ + "//:node_modules/@types/jasmine", + ], **kwargs ) diff --git a/devtools/tsconfig.spec.json b/devtools/tsconfig-test.json similarity index 90% rename from devtools/tsconfig.spec.json rename to devtools/tsconfig-test.json index 9e8f927471a2..efde9e3caa3a 100644 --- a/devtools/tsconfig.spec.json +++ b/devtools/tsconfig-test.json @@ -9,7 +9,6 @@ ] } ], - "sourceMap": false, "types": ["jasmine", "node"], } } \ No newline at end of file diff --git a/devtools/tsconfig.json b/devtools/tsconfig.json index 7d9a57dd18eb..1e699279b0b8 100644 --- a/devtools/tsconfig.json +++ b/devtools/tsconfig.json @@ -1,8 +1,5 @@ { - "compileOnSave": false, "compilerOptions": { - "baseUrl": "../", - "outDir": "bazel-out/darwin-fastbuild/bin", "sourceMap": true, "declaration": true, "strict": true, @@ -17,31 +14,11 @@ "importHelpers": true, "target": "es2020", "lib": ["es2020", "dom", "dom.iterable"], - "typeRoots": [ - "./devtools/node_modules/@types", - ], - "types": [ - "angular", - "jasmine", - "node" - ], + "types": ["chrome"], "paths": { "@angular/*": [ - "./packages/*", - "./dist/bin/packages/*" + "../packages/*", ], - "ng-devtools": [ - "./devtools/projects/ng-devtools/src/public-api.ts", - ], - "ng-devtools-backend": [ - "./devtools/projects/ng-devtools-backend/src/public-api.ts", - ], - "protocol": [ - "./devtools/projects/protocol/src/public-api.ts", - ], - "shared-utils": [ - "./devtools/projects/shared-utils/src/public-api.ts", - ] }, }, "angularCompilerOptions": { diff --git a/goldens/public-api/common/index.api.md b/goldens/public-api/common/index.api.md index 79cd5504ee03..fa399abb00ef 100644 --- a/goldens/public-api/common/index.api.md +++ b/goldens/public-api/common/index.api.md @@ -270,7 +270,6 @@ export class HashLocationStrategy extends LocationStrategy implements OnDestroy getState(): unknown; // (undocumented) historyGo(relativePosition?: number): void; - // (undocumented) ngOnDestroy(): void; // (undocumented) onPopState(fn: LocationChangeListener): void; @@ -396,7 +395,6 @@ class Location_2 implements OnDestroy { historyGo(relativePosition?: number): void; isCurrentPathEqualTo(path: string, query?: string): boolean; static joinWithSlash: (start: string, end: string) => string; - // (undocumented) ngOnDestroy(): void; normalize(url: string): string; static normalizeQueryParams: (params: string) => string; @@ -504,11 +502,8 @@ export class NgComponentOutlet<T = any> implements OnChanges, DoCheck, OnDestroy ngComponentOutletNgModule?: Type<any>; // @deprecated (undocumented) ngComponentOutletNgModuleFactory?: NgModuleFactory<any>; - // (undocumented) ngDoCheck(): void; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; // (undocumented) static ɵdir: i0.ɵɵDirectiveDeclaration<NgComponentOutlet<any>, "[ngComponentOutlet]", ["ngComponentOutlet"], { "ngComponentOutlet": { "alias": "ngComponentOutlet"; "required": false; }; "ngComponentOutletInputs": { "alias": "ngComponentOutletInputs"; "required": false; }; "ngComponentOutletInjector": { "alias": "ngComponentOutletInjector"; "required": false; }; "ngComponentOutletContent": { "alias": "ngComponentOutletContent"; "required": false; }; "ngComponentOutletNgModule": { "alias": "ngComponentOutletNgModule"; "required": false; }; "ngComponentOutletNgModuleFactory": { "alias": "ngComponentOutletNgModuleFactory"; "required": false; }; }, {}, never, never, true, never>; @@ -630,9 +625,7 @@ export class NgOptimizedImage implements OnInit, OnChanges { static ngAcceptInputType_priority: unknown; // (undocumented) static ngAcceptInputType_width: unknown; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnInit(): void; ngSrc: string; ngSrcset: string; @@ -778,7 +771,6 @@ export class PathLocationStrategy extends LocationStrategy implements OnDestroy getState(): unknown; // (undocumented) historyGo(relativePosition?: number): void; - // (undocumented) ngOnDestroy(): void; // (undocumented) onPopState(fn: LocationChangeListener): void; @@ -882,16 +874,16 @@ export { PopStateEvent_2 as PopStateEvent } export const PRECONNECT_CHECK_BLOCKLIST: InjectionToken<(string | string[])[]>; // @public -export const provideCloudflareLoader: (path: string) => i0.Provider[]; +export const provideCloudflareLoader: (path: string) => Provider[]; // @public -export const provideCloudinaryLoader: (path: string) => i0.Provider[]; +export const provideCloudinaryLoader: (path: string) => Provider[]; // @public -export const provideImageKitLoader: (path: string) => i0.Provider[]; +export const provideImageKitLoader: (path: string) => Provider[]; // @public -export const provideImgixLoader: (path: string) => i0.Provider[]; +export const provideImgixLoader: (path: string) => Provider[]; // @public export function provideNetlifyLoader(path?: string): Provider[]; diff --git a/goldens/public-api/common/testing/index.api.md b/goldens/public-api/common/testing/index.api.md index e52c72cf6c07..e4d40d0e8325 100644 --- a/goldens/public-api/common/testing/index.api.md +++ b/goldens/public-api/common/testing/index.api.md @@ -121,7 +121,6 @@ export class SpyLocation implements Location_2 { historyGo(relativePosition?: number): void; // (undocumented) isCurrentPathEqualTo(path: string, query?: string): boolean; - // (undocumented) ngOnDestroy(): void; // (undocumented) normalize(url: string): string; diff --git a/goldens/public-api/forms/index.api.md b/goldens/public-api/forms/index.api.md index 28b645592db6..800cc0419d09 100644 --- a/goldens/public-api/forms/index.api.md +++ b/goldens/public-api/forms/index.api.md @@ -143,9 +143,7 @@ export interface AbstractControlOptions { export class AbstractFormGroupDirective extends ControlContainer implements OnInit, OnDestroy { get control(): FormGroup; get formDirective(): Form | null; - // (undocumented) ngOnDestroy(): void; - // (undocumented) ngOnInit(): void; get path(): string[]; // (undocumented) @@ -225,7 +223,6 @@ export class DefaultValueAccessor extends BaseControlValueAccessor implements Co // @public export class EmailValidator extends AbstractValidatorDirective { email: boolean | string; - // (undocumented) enabled(input: boolean): boolean; // (undocumented) static ɵdir: i0.ɵɵDirectiveDeclaration<EmailValidator, "[email][formControlName],[email][formControl],[email][ngModel]", never, { "email": { "alias": "email"; "required": false; }; }, {}, never, never, false, never>; @@ -363,9 +360,7 @@ export class FormControlDirective extends NgControl implements OnChanges, OnDest set isDisabled(isDisabled: boolean); // @deprecated (undocumented) model: any; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; get path(): string[]; // @deprecated (undocumented) @@ -387,9 +382,7 @@ export class FormControlName extends NgControl implements OnChanges, OnDestroy { // @deprecated (undocumented) model: any; name: string | number | null; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; get path(): string[]; // @deprecated (undocumented) @@ -494,9 +487,7 @@ export class FormGroupDirective extends ControlContainer implements Form, OnChan getControl(dir: FormControlName): FormControl; getFormArray(dir: FormArrayName): FormArray; getFormGroup(dir: FormGroupName): FormGroup; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; ngSubmit: EventEmitter<any>; onReset(): void; @@ -691,7 +682,6 @@ export class NgForm extends ControlContainer implements Form, AfterViewInit { get formDirective(): Form; getControl(dir: NgModel): FormControl; getFormGroup(dir: NgModelGroup): FormGroup; - // (undocumented) ngAfterViewInit(): void; ngSubmit: EventEmitter<any>; onReset(): void; @@ -723,11 +713,8 @@ export class NgModel extends NgControl implements OnChanges, OnDestroy { isDisabled: boolean; model: any; name: string; - // (undocumented) static ngAcceptInputType_isDisabled: boolean | string; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; options: { name?: string; @@ -758,7 +745,6 @@ export class NgModelGroup extends AbstractFormGroupDirective implements OnInit, export class NgSelectOption implements OnDestroy { constructor(_element: ElementRef, _renderer: Renderer2, _select: SelectControlValueAccessor); id: string; - // (undocumented) ngOnDestroy(): void; set ngValue(value: any); set value(value: any); @@ -816,13 +802,10 @@ export class RadioControlValueAccessor extends BuiltInControlValueAccessor imple fireUncheck(value: any): void; formControlName: string; name: string; - // (undocumented) ngOnDestroy(): void; - // (undocumented) ngOnInit(): void; onChange: () => void; registerOnChange(fn: (_: any) => {}): void; - // (undocumented) setDisabledState(isDisabled: boolean): void; value: any; writeValue(value: any): void; @@ -858,7 +841,6 @@ export class ReactiveFormsModule { // @public export class RequiredValidator extends AbstractValidatorDirective { - // (undocumented) enabled(input: boolean): boolean; required: boolean | string; // (undocumented) @@ -871,7 +853,6 @@ export class RequiredValidator extends AbstractValidatorDirective { export class SelectControlValueAccessor extends BuiltInControlValueAccessor implements ControlValueAccessor { set compareWith(fn: (o1: any, o2: any) => boolean); registerOnChange(fn: (value: any) => any): void; - // (undocumented) value: any; writeValue(value: any): void; // (undocumented) diff --git a/goldens/public-api/localize/index.api.md b/goldens/public-api/localize/index.api.md index 7cc1ae3839f6..1ce588cb7e1e 100644 --- a/goldens/public-api/localize/index.api.md +++ b/goldens/public-api/localize/index.api.md @@ -19,7 +19,7 @@ export type TargetMessage = string; // @public export const ɵ$localize: ɵLocalizeFn; -// @public (undocumented) +// @public export interface ɵLocalizeFn { // (undocumented) (messageParts: TemplateStringsArray, ...expressions: readonly any[]): string; @@ -27,7 +27,7 @@ export interface ɵLocalizeFn { translate?: ɵTranslateFn; } -// @public (undocumented) +// @public export interface ɵTranslateFn { // (undocumented) (messageParts: TemplateStringsArray, expressions: readonly any[]): [TemplateStringsArray, readonly any[]]; diff --git a/goldens/public-api/localize/init/index.api.md b/goldens/public-api/localize/init/index.api.md index 8b21f13e32a9..1e91f6500c66 100644 --- a/goldens/public-api/localize/init/index.api.md +++ b/goldens/public-api/localize/init/index.api.md @@ -8,7 +8,7 @@ const $localize_2: LocalizeFn; export { $localize_2 as $localize } -// @public (undocumented) +// @public export interface LocalizeFn { // (undocumented) (messageParts: TemplateStringsArray, ...expressions: readonly any[]): string; @@ -16,7 +16,7 @@ export interface LocalizeFn { translate?: TranslateFn; } -// @public (undocumented) +// @public export interface TranslateFn { // (undocumented) (messageParts: TemplateStringsArray, expressions: readonly any[]): [TemplateStringsArray, readonly any[]]; diff --git a/goldens/public-api/platform-browser-dynamic/index.api.md b/goldens/public-api/platform-browser-dynamic/index.api.md index cc5f45d1fad5..5129e504dff6 100644 --- a/goldens/public-api/platform-browser-dynamic/index.api.md +++ b/goldens/public-api/platform-browser-dynamic/index.api.md @@ -7,7 +7,7 @@ import { Compiler } from '@angular/core'; import { CompilerFactory } from '@angular/core'; import { CompilerOptions } from '@angular/core'; -import * as i0 from '@angular/core'; +import { PlatformRef } from '@angular/core'; import { StaticProvider } from '@angular/core'; import { Version } from '@angular/core'; @@ -18,7 +18,7 @@ export class JitCompilerFactory implements CompilerFactory { } // @public (undocumented) -export const platformBrowserDynamic: (extraProviders?: StaticProvider[]) => i0.PlatformRef; +export const platformBrowserDynamic: (extraProviders?: StaticProvider[]) => PlatformRef; // @public (undocumented) export const VERSION: Version; diff --git a/goldens/public-api/platform-browser/testing/index.api.md b/goldens/public-api/platform-browser/testing/index.api.md index aef5cb156646..b4c362b05a2d 100644 --- a/goldens/public-api/platform-browser/testing/index.api.md +++ b/goldens/public-api/platform-browser/testing/index.api.md @@ -6,6 +6,7 @@ import * as i0 from '@angular/core'; import * as i1 from '@angular/common'; +import { PlatformRef } from '@angular/core'; import { StaticProvider } from '@angular/core'; // @public @@ -19,7 +20,7 @@ export class BrowserTestingModule { } // @public -export const platformBrowserTesting: (extraProviders?: StaticProvider[]) => i0.PlatformRef; +export const platformBrowserTesting: (extraProviders?: StaticProvider[]) => PlatformRef; // (No @packageDocumentation comment for this package) diff --git a/goldens/public-api/platform-server/testing/index.api.md b/goldens/public-api/platform-server/testing/index.api.md index d63645904450..74b226cdcba9 100644 --- a/goldens/public-api/platform-server/testing/index.api.md +++ b/goldens/public-api/platform-server/testing/index.api.md @@ -6,10 +6,11 @@ import * as i0 from '@angular/core'; import * as i1 from '@angular/platform-browser-dynamic/testing'; +import { PlatformRef } from '@angular/core'; import { StaticProvider } from '@angular/core'; // @public @deprecated -export const platformServerTesting: (extraProviders?: StaticProvider[]) => i0.PlatformRef; +export const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef; // @public @deprecated export class ServerTestingModule { diff --git a/goldens/public-api/router/index.api.md b/goldens/public-api/router/index.api.md index 8fade13d9985..f173ce3bcdd3 100644 --- a/goldens/public-api/router/index.api.md +++ b/goldens/public-api/router/index.api.md @@ -5,7 +5,6 @@ ```ts import { AfterContentInit } from '@angular/core'; -import * as _angular_router from '@angular/router'; import { ChangeDetectorRef } from '@angular/core'; import { ComponentRef } from '@angular/core'; import { ElementRef } from '@angular/core'; @@ -721,7 +720,6 @@ export class Router { navigate(commands: readonly any[], extras?: NavigationExtras): Promise<boolean>; navigateByUrl(url: string | UrlTree, extras?: NavigationBehaviorOptions): Promise<boolean>; navigated: boolean; - // (undocumented) ngOnDestroy(): void; // @deprecated onSameUrlNavigation: OnSameUrlNavigation; @@ -729,7 +727,7 @@ export class Router { resetConfig(config: Routes): void; // @deprecated routeReuseStrategy: RouteReuseStrategy; - get routerState(): _angular_router.RouterState; + get routerState(): RouterState; serializeUrl(url: UrlTree): string; setUpLocationChangeListener(): void; get url(): string; @@ -801,7 +799,8 @@ export type RouterHashLocationFeature = RouterFeature<RouterFeatureKind.RouterHa class RouterLink implements OnChanges, OnDestroy { constructor(router: Router, route: ActivatedRoute, tabIndexAttribute: string | null | undefined, renderer: Renderer2, el: ElementRef, locationStrategy?: LocationStrategy | undefined); fragment?: string; - href: string | null; + get href(): string | null; + set href(value: string | null); info?: unknown; // (undocumented) static ngAcceptInputType_preserveFragment: unknown; @@ -809,15 +808,14 @@ class RouterLink implements OnChanges, OnDestroy { static ngAcceptInputType_replaceUrl: unknown; // (undocumented) static ngAcceptInputType_skipLocationChange: unknown; - // (undocumented) ngOnChanges(changes?: SimpleChanges): void; - // (undocumented) ngOnDestroy(): any; - // (undocumented) onClick(button: number, ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean): boolean; preserveFragment: boolean; queryParams?: Params | null; queryParamsHandling?: QueryParamsHandling | null; + // (undocumented) + protected readonly reactiveHref: i0.WritableSignal<string | null>; relativeTo?: ActivatedRoute | null; replaceUrl: boolean; set routerLink(commandsOrUrlTree: readonly any[] | string | UrlTree | null | undefined); @@ -845,11 +843,8 @@ export class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit readonly isActiveChange: EventEmitter<boolean>; // (undocumented) links: QueryList<RouterLink>; - // (undocumented) ngAfterContentInit(): void; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; // (undocumented) set routerLinkActive(data: string[] | string); @@ -898,14 +893,10 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { // (undocumented) get isActivated(): boolean; name: string; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; - // (undocumented) ngOnInit(): void; readonly routerOutletData: i0.InputSignal<unknown>; - // (undocumented) readonly supportsBindingToComponentInputs = true; // (undocumented) static ɵdir: i0.ɵɵDirectiveDeclaration<RouterOutlet, "router-outlet", ["outlet"], { "name": { "alias": "name"; "required": false; }; "routerOutletData": { "alias": "routerOutletData"; "required": false; "isSignal": true; }; }, { "activateEvents": "activate"; "deactivateEvents": "deactivate"; "attachEvents": "attach"; "detachEvents": "detach"; }, never, never, true, never>; @@ -933,7 +924,6 @@ export interface RouterOutletContract { // @public export class RouterPreloader implements OnDestroy { constructor(router: Router, injector: EnvironmentInjector, preloadingStrategy: PreloadingStrategy, loader: RouterConfigLoader); - // (undocumented) ngOnDestroy(): void; // (undocumented) preload(): Observable<any>; diff --git a/goldens/public-api/router/testing/index.api.md b/goldens/public-api/router/testing/index.api.md index 0fcfb7d61275..7a08536ca435 100644 --- a/goldens/public-api/router/testing/index.api.md +++ b/goldens/public-api/router/testing/index.api.md @@ -5,7 +5,6 @@ ```ts import { AfterContentInit } from '@angular/core'; -import * as _angular_router from '@angular/router'; import { ChangeDetectorRef } from '@angular/core'; import { ComponentFixture } from '@angular/core/testing'; import { ComponentRef } from '@angular/core'; diff --git a/goldens/public-api/upgrade/static/index.api.md b/goldens/public-api/upgrade/static/index.api.md index 3426122281bc..4921e1b2d627 100644 --- a/goldens/public-api/upgrade/static/index.api.md +++ b/goldens/public-api/upgrade/static/index.api.md @@ -54,13 +54,9 @@ export function setAngularLib(ng: any): void; // @public export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy { constructor(name: string, elementRef: ElementRef, injector: Injector); - // (undocumented) ngDoCheck(): void; - // (undocumented) ngOnChanges(changes: SimpleChanges): void; - // (undocumented) ngOnDestroy(): void; - // (undocumented) ngOnInit(): void; // (undocumented) static ɵdir: i0.ɵɵDirectiveDeclaration<UpgradeComponent, never, never, {}, {}, never, never, true, never>; diff --git a/integration/ng-modules-importability/BUILD.bazel b/integration/ng-modules-importability/BUILD.bazel index 9e2d8bc0e55f..796d358a2cac 100644 --- a/integration/ng-modules-importability/BUILD.bazel +++ b/integration/ng-modules-importability/BUILD.bazel @@ -5,6 +5,9 @@ ts_library( name = "test_lib", testonly = True, srcs = glob(["*.ts"]), + data = [ + "//packages:package_json", + ], deps = [ "//packages/compiler-cli", "@npm//typescript", diff --git a/integration/ng-modules-importability/index.ts b/integration/ng-modules-importability/index.ts index cd60fcdea34d..572551025deb 100644 --- a/integration/ng-modules-importability/index.ts +++ b/integration/ng-modules-importability/index.ts @@ -1,4 +1,4 @@ -import {performCompilation} from '@angular/compiler-cli'; +import {performCompilation} from '../../packages/compiler-cli'; import * as fs from 'fs/promises'; import * as path from 'path'; import * as os from 'os'; diff --git a/integration/platform-server-hydration/src/app/app.component.spec.ts b/integration/platform-server-hydration/src/app/app.component.spec.ts index 815a036258d7..3f29166a4fbd 100644 --- a/integration/platform-server-hydration/src/app/app.component.spec.ts +++ b/integration/platform-server-hydration/src/app/app.component.spec.ts @@ -2,10 +2,10 @@ import {TestBed} from '@angular/core/testing'; import {AppComponent} from './app.component'; describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ + beforeEach(() => { + TestBed.configureTestingModule({ imports: [AppComponent], - }).compileComponents(); + }); }); it('should create the app', () => { diff --git a/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-on-init-spec.ts b/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-on-init-spec.ts index a3d9b3494af8..f83658d3bceb 100644 --- a/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-on-init-spec.ts +++ b/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-on-init-spec.ts @@ -9,7 +9,6 @@ import {browser, by, element} from 'protractor'; import {bootstrapClientApp, navigateTo, verifyNoBrowserErrors} from './util'; -// TODO: this does not work with zoneless describe('Http TransferState Lazy On Init', () => { beforeEach(async () => { // Don't wait for Angular since it is not bootstrapped automatically. diff --git a/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-spec.ts b/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-spec.ts index 4707f35065e6..6bda07e5e941 100644 --- a/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-spec.ts +++ b/integration/platform-server-zoneless/e2e/src/http-transferstate-lazy-spec.ts @@ -9,7 +9,6 @@ import {browser, by, element} from 'protractor'; import {bootstrapClientApp, navigateTo, verifyNoBrowserErrors} from './util'; -// TODO: this does not work with zoneless describe('Http TransferState Lazy', () => { beforeEach(async () => { // Don't wait for Angular since it is not bootstrapped automatically. diff --git a/integration/trusted-types/src/app/app.component.spec.ts b/integration/trusted-types/src/app/app.component.spec.ts index 4d08fbb920be..22d685b89071 100644 --- a/integration/trusted-types/src/app/app.component.spec.ts +++ b/integration/trusted-types/src/app/app.component.spec.ts @@ -3,11 +3,11 @@ import {RouterModule} from '@angular/router'; import {AppComponent} from './app.component'; describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ + beforeEach(() => { + TestBed.configureTestingModule({ imports: [RouterModule.forRoot([])], declarations: [AppComponent], - }).compileComponents(); + }); }); it('should create the app', () => { diff --git a/modules/benchmarks/src/change_detection/util.ts b/modules/benchmarks/src/change_detection/util.ts index 4d6cb8dc4752..73dca9147782 100644 --- a/modules/benchmarks/src/change_detection/util.ts +++ b/modules/benchmarks/src/change_detection/util.ts @@ -8,7 +8,7 @@ import {getIntParameter} from '../util'; -export const numViews = getIntParameter('viewCount'); +export const numViews: number = getIntParameter('viewCount'); export function newArray<T = any>(size: number): T[]; export function newArray<T>(size: number, value: T): T[]; diff --git a/modules/ssr-benchmarks/src/app/app.config.server.ts b/modules/ssr-benchmarks/src/app/app.config.server.ts index 5fd016867059..4f60c86bfd52 100644 --- a/modules/ssr-benchmarks/src/app/app.config.server.ts +++ b/modules/ssr-benchmarks/src/app/app.config.server.ts @@ -14,4 +14,4 @@ const serverConfig: ApplicationConfig = { providers: [provideServerRendering()], }; -export const config = mergeApplicationConfig(appConfig, serverConfig); +export const config: ApplicationConfig = mergeApplicationConfig(appConfig, serverConfig); diff --git a/package.json b/package.json index b78e3ee9e3ce..c0adf4268ec7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-srcs", - "version": "20.0.0-rc.0", + "version": "20.0.0-rc.1", "private": true, "description": "Angular - a web framework for modern web apps", "homepage": "https://github.com/angular/angular", @@ -44,21 +44,22 @@ "devtools:test": "bazelisk test --//devtools/projects/shell-browser/src:flag_browser=chrome -- //devtools/...", "docs": "[[ -n $CI ]] && echo 'Cannot run this yarn script on CI' && exit 1 || yarn ibazel run //adev:serve", "docs:build": "[[ -n $CI ]] && echo 'Cannot run this yarn script on CI' && exit 1 || yarn bazel build //adev:build", - "benchmarks": "tsx --tsconfig=scripts/tsconfig.json scripts/benchmarks/index.mts" + "benchmarks": "tsx --tsconfig=scripts/tsconfig.json scripts/benchmarks/index.mts", + "diff-release-package": "tsx --tsconfig=scripts/tsconfig.json scripts/diff-release-package.mts" }, "// 1": "dependencies are used locally and by bazel", "dependencies": { - "@angular-devkit/build-angular": "20.0.0-next.9", - "@angular-devkit/core": "20.0.0-next.9", - "@angular-devkit/schematics": "20.0.0-next.9", - "@angular/build": "20.0.0-next.9", - "@angular/cdk": "20.0.0-next.10", - "@angular/cli": "20.0.0-next.9", - "@angular/material": "20.0.0-next.10", - "@angular/ssr": "20.0.0-next.9", - "@babel/cli": "7.27.0", - "@babel/core": "7.26.10", - "@babel/generator": "7.27.0", + "@angular-devkit/build-angular": "20.0.0-rc.0", + "@angular-devkit/core": "20.0.0-rc.0", + "@angular-devkit/schematics": "20.0.0-rc.0", + "@angular/build": "20.0.0-rc.0", + "@angular/cdk": "20.0.0-rc.0", + "@angular/cli": "20.0.0-rc.0", + "@angular/material": "20.0.0-rc.0", + "@angular/ssr": "20.0.0-rc.0", + "@babel/cli": "7.27.2", + "@babel/core": "7.27.1", + "@babel/generator": "7.27.1", "@bazel/concatjs": "5.8.1", "@bazel/esbuild": "5.8.1", "@bazel/jasmine": "5.8.1", @@ -71,14 +72,14 @@ "@microsoft/api-extractor": "^7.24.2", "@rollup/plugin-babel": "^6.0.0", "@rollup/plugin-commonjs": "^28.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", - "@schematics/angular": "20.0.0-next.9", + "@rollup/plugin-node-resolve": "^16.0.0", + "@schematics/angular": "20.0.0-rc.0", "@stackblitz/sdk": "^1.11.0", "@types/angular": "^1.6.47", "@types/babel__core": "7.20.5", "@types/babel__generator": "7.27.0", "@types/bluebird": "^3.5.27", - "@types/chrome": "^0.0.317", + "@types/chrome": "^0.0.322", "@types/convert-source-map": "^2.0.0", "@types/diff": "^7.0.0", "@types/dom-navigation": "^1.0.5", @@ -111,12 +112,13 @@ "convert-source-map": "^1.5.1", "d3": "^7.0.0", "diff": "^7.0.0", - "domino": "https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af", + "domino": "https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b", "hammerjs": "~2.0.8", "http-server": "^14.0.0", "jasmine": "~5.7.0", "jasmine-ajax": "^4.0.0", "jasmine-core": "^5.0.0", + "jasmine-reporters": "^2.5.2", "karma": "~6.4.0", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.0", @@ -131,15 +133,15 @@ "protractor": "^7.0.0", "reflect-metadata": "^0.2.0", "requirejs": "^2.3.6", - "rollup": "4.35.0", + "rollup": "4.40.2", "rollup-plugin-dts": "^6.1.1", "rollup-plugin-preserve-shebang": "^1.0.1", "rollup-plugin-sourcemaps": "^0.6.3", "rxjs": "^7.0.0", "selenium-webdriver": "3.5.0", - "selenium-webdriver4": "npm:selenium-webdriver@4.31.0", + "selenium-webdriver4": "npm:selenium-webdriver@4.32.0", "semver-dsl": "^1.0.1", - "shelljs": "^0.9.0", + "shelljs": "^0.10.0", "source-map": "0.7.4", "source-map-support": "0.5.21", "systemjs": "0.18.10", @@ -160,13 +162,13 @@ "devDependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.0", - "@angular-devkit/architect-cli": "0.2000.0-next.9", + "@angular-devkit/architect-cli": "0.2000.0-rc.0", "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1a12d97905f4af88ccc0b582864907729d23e23e", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#a871c115e04a76587fcd418107ad985752610ccf", "@babel/plugin-proposal-async-generator-functions": "7.20.7", "@bazel/bazelisk": "^1.7.5", "@bazel/buildifier": "^8.0.0", - "@bazel/ibazel": "0.16.2", + "@bazel/ibazel": "0.25.0", "@codemirror/autocomplete": "^6.11.1", "@codemirror/commands": "^6.3.2", "@codemirror/lang-angular": "^0.1.2", @@ -212,7 +214,6 @@ "karma-jasmine-html-reporter": "^2.1.0", "karma-sauce-launcher": "^4.3.6", "live-server": "^1.2.2", - "madge": "^8.0.0", "marked": "^15.0.0", "mermaid": "^11.0.0", "patch-package": "^7.0.0", diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index befd74ca1e9e..50614852d01e 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -1,7 +1,8 @@ +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") load("//:packages.bzl", "DOCS_ENTRYPOINTS") -load("//adev/shared-docs/pipeline/api-gen/manifest:generate_api_manifest.bzl", "generate_api_manifest") -load("//tools:defaults.bzl", "ts_config", "ts_library") +load("//tools:defaults.bzl", "ts_config") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) @@ -10,12 +11,28 @@ exports_files([ "tsconfig.json", ]) -ts_library( +copy_to_bin( + name = "package_json", + srcs = ["package.json"], +) + +ts_project( + name = "goog_types", + srcs = ["goog.d.ts"], +) + +ts_project( name = "types", - srcs = glob(["*.ts"]), - deps = [ + srcs = glob( + ["*.ts"], + exclude = ["goog.d.ts"], + ), + interop_deps = [ "//packages/zone.js/lib:zone_d_ts", - "@npm//@types/hammerjs", + ], + deps = [ + ":goog_types_rjs", + "//:node_modules/@types/hammerjs", ], ) @@ -35,7 +52,7 @@ ts_config( ) rules_js_tsconfig( - name = "build-tsconfig", + name = "tsconfig_build", src = "tsconfig-build.json", deps = [ "//:node_modules/tslib", @@ -43,11 +60,12 @@ rules_js_tsconfig( ) rules_js_tsconfig( - name = "test-tsconfig", + name = "tsconfig_test", src = "tsconfig-test.json", deps = [ - ":build-tsconfig", + ":tsconfig_build", "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", ], ) @@ -86,8 +104,8 @@ filegroup( ], ) -generate_api_manifest( - name = "docs_api_manifest", +filegroup( + name = "docs_extracted_apis", srcs = [ "//packages/animations:animations_docs_extraction", "//packages/animations/browser:animations_browser_docs_extraction", @@ -125,4 +143,5 @@ generate_api_manifest( "//tools/manual_api_docs/blocks", "//tools/manual_api_docs/elements", ], + visibility = ["//visibility:public"], ) diff --git a/packages/animations/browser/test/BUILD.bazel b/packages/animations/browser/test/BUILD.bazel index 1554864d3120..fb4b650788cd 100644 --- a/packages/animations/browser/test/BUILD.bazel +++ b/packages/animations/browser/test/BUILD.bazel @@ -1,17 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/animations/browser/index.mjs", - deps = ["//packages/animations/browser"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/animations/browser/testing/index.mjs", - deps = ["//packages/animations/browser/testing"], -) ts_library( name = "test_lib", diff --git a/packages/animations/test/BUILD.bazel b/packages/animations/test/BUILD.bazel index 27c2aa39791c..2caca81f8345 100644 --- a/packages/animations/test/BUILD.bazel +++ b/packages/animations/test/BUILD.bazel @@ -1,13 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/animations/index.mjs", - deps = [ - "//packages/animations", - ], -) ts_library( name = "test_lib", diff --git a/packages/bazel/package.json b/packages/bazel/package.json index accaf2d3fb43..7e81da0bc40d 100644 --- a/packages/bazel/package.json +++ b/packages/bazel/package.json @@ -31,10 +31,10 @@ "@bazel/concatjs": "^5.3.0", "@bazel/worker": "^5.3.0", "@rollup/plugin-commonjs": "^28.0.0", - "@rollup/plugin-node-resolve": "^13.0.4", + "@rollup/plugin-node-resolve": "^16.0.0", "rollup-plugin-dts": "^6.1.1", "rollup-plugin-sourcemaps": "^0.6.3", - "rollup": "4.35.0", + "rollup": "4.40.2", "terser": "^5.9.0", "typescript": ">=5.8 <5.9" }, diff --git a/packages/bazel/src/ng_package/rollup.config.js b/packages/bazel/src/ng_package/rollup.config.js index 22a4d89fb9b1..ee99e3f3cf94 100644 --- a/packages/bazel/src/ng_package/rollup.config.js +++ b/packages/bazel/src/ng_package/rollup.config.js @@ -188,7 +188,7 @@ if (dtsMode) { nodeResolve({ mainFields: ['es2020', 'es2015', 'module', 'browser'], jail: process.cwd(), - customResolveOptions: {moduleDirectory: nodeModulesRoot}, + modulePaths: [nodeModulesRoot], }), commonjs({ignoreGlobal: true}), sourcemaps(), diff --git a/packages/bazel/src/ngc-wrapped/BUILD.bazel b/packages/bazel/src/ngc-wrapped/BUILD.bazel index 03e6dbb19e9e..5b6112fa95d0 100644 --- a/packages/bazel/src/ngc-wrapped/BUILD.bazel +++ b/packages/bazel/src/ngc-wrapped/BUILD.bazel @@ -29,6 +29,10 @@ nodejs_binary( data = [ ":ngc_lib", "//packages/bazel/third_party/github.com/bazelbuild/bazel/src/main/protobuf:worker_protocol.proto", + # Ensure compiler-cli `ts_project` `.js` files are picked up as ESM. + # Notably this is temporary and compiler raw sources are not valid ESM anyway. + # That is because there is no explicit import extensions. + "//packages:package_json", ], entry_point = ":ngc-wrapped-main.ts", # Disables the Bazel node modules linker. The node module linker is unreliable for the diff --git a/packages/bazel/test/ngc-wrapped/BUILD.bazel b/packages/bazel/test/ngc-wrapped/BUILD.bazel index 42f3a1a2843e..59173e5f534d 100644 --- a/packages/bazel/test/ngc-wrapped/BUILD.bazel +++ b/packages/bazel/test/ngc-wrapped/BUILD.bazel @@ -21,7 +21,8 @@ ts_library( # .d.ts files (by default, jasmine_node_test would get the .js files). filegroup( name = "angular_core", - srcs = ["//packages/core"], + srcs = ["//packages/core:core_rjs"], + output_group = "types", ) jasmine_node_test( diff --git a/packages/common/http/test/BUILD.bazel b/packages/common/http/test/BUILD.bazel index 43b06d8a0f81..b2be289bbda0 100644 --- a/packages/common/http/test/BUILD.bazel +++ b/packages/common/http/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/common/http/index.mjs", - deps = ["//packages/common/http"], -) ts_library( name = "test_lib", diff --git a/packages/common/http/testing/test/BUILD.bazel b/packages/common/http/testing/test/BUILD.bazel index 94cd911300fa..d1f256a3fd23 100644 --- a/packages/common/http/testing/test/BUILD.bazel +++ b/packages/common/http/testing/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/common/http/testing/index.mjs", - deps = ["//packages/common/http/testing"], -) ts_library( name = "test_lib", diff --git a/packages/common/src/directives/ng_component_outlet.ts b/packages/common/src/directives/ng_component_outlet.ts index 943e26d6394d..c43312ddedac 100644 --- a/packages/common/src/directives/ng_component_outlet.ts +++ b/packages/common/src/directives/ng_component_outlet.ts @@ -153,7 +153,7 @@ export class NgComponentOutlet<T = any> implements OnChanges, DoCheck, OnDestroy ); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges) { if (this._needToReCreateComponentInstance(changes)) { this._viewContainerRef.clear(); @@ -189,7 +189,7 @@ export class NgComponentOutlet<T = any> implements OnChanges, DoCheck, OnDestroy } } - /** @nodoc */ + /** @docs-private */ ngDoCheck() { if (this._componentRef) { if (this.ngComponentOutletInputs) { @@ -202,7 +202,7 @@ export class NgComponentOutlet<T = any> implements OnChanges, DoCheck, OnDestroy } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy() { this._moduleRef?.destroy(); } diff --git a/packages/common/src/directives/ng_for_of.ts b/packages/common/src/directives/ng_for_of.ts index 1084f6d56471..d90b247c8f35 100644 --- a/packages/common/src/directives/ng_for_of.ts +++ b/packages/common/src/directives/ng_for_of.ts @@ -16,10 +16,10 @@ import { IterableDiffer, IterableDiffers, NgIterable, + ɵRuntimeError as RuntimeError, TemplateRef, TrackByFunction, ViewContainerRef, - ɵRuntimeError as RuntimeError, } from '@angular/core'; import {RuntimeErrorCode} from '../errors'; @@ -249,7 +249,7 @@ export class NgForOf<T, U extends NgIterable<T> = NgIterable<T>> implements DoCh /** * Applies the changes when needed. - * @nodoc + * @docs-private */ ngDoCheck(): void { if (this._ngForOfDirty) { diff --git a/packages/common/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.ts b/packages/common/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.ts index 8508a5349a2f..5e5a25939ea8 100644 --- a/packages/common/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.ts +++ b/packages/common/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Provider} from '@angular/core'; import {PLACEHOLDER_QUALITY} from './constants'; import {createImageLoader, ImageLoaderConfig} from './image_loader'; @@ -20,7 +21,7 @@ import {createImageLoader, ImageLoaderConfig} from './image_loader'; * * @publicApi */ -export const provideCloudflareLoader = createImageLoader( +export const provideCloudflareLoader: (path: string) => Provider[] = createImageLoader( createCloudflareUrl, ngDevMode ? ['https://<ZONE>/cdn-cgi/image/<OPTIONS>/<SOURCE-IMAGE>'] : undefined, ); diff --git a/packages/common/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.ts b/packages/common/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.ts index f3a6b8528049..cfee85bf9fa1 100644 --- a/packages/common/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.ts +++ b/packages/common/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Provider} from '@angular/core'; import {createImageLoader, ImageLoaderConfig, ImageLoaderInfo} from './image_loader'; /** @@ -36,7 +37,7 @@ function isCloudinaryUrl(url: string): boolean { * * @publicApi */ -export const provideCloudinaryLoader = createImageLoader( +export const provideCloudinaryLoader: (path: string) => Provider[] = createImageLoader( createCloudinaryUrl, ngDevMode ? [ diff --git a/packages/common/src/directives/ng_optimized_image/image_loaders/imagekit_loader.ts b/packages/common/src/directives/ng_optimized_image/image_loaders/imagekit_loader.ts index af50ff5223c4..341cf4cf8f4a 100644 --- a/packages/common/src/directives/ng_optimized_image/image_loaders/imagekit_loader.ts +++ b/packages/common/src/directives/ng_optimized_image/image_loaders/imagekit_loader.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Provider} from '@angular/core'; import {PLACEHOLDER_QUALITY} from './constants'; import {createImageLoader, ImageLoaderConfig, ImageLoaderInfo} from './image_loader'; @@ -36,7 +37,7 @@ function isImageKitUrl(url: string): boolean { * * @publicApi */ -export const provideImageKitLoader = createImageLoader( +export const provideImageKitLoader: (path: string) => Provider[] = createImageLoader( createImagekitUrl, ngDevMode ? ['https://ik.imagekit.io/mysite', 'https://subdomain.mysite.com'] : undefined, ); diff --git a/packages/common/src/directives/ng_optimized_image/image_loaders/imgix_loader.ts b/packages/common/src/directives/ng_optimized_image/image_loaders/imgix_loader.ts index 6830404441ed..561437cb9031 100644 --- a/packages/common/src/directives/ng_optimized_image/image_loaders/imgix_loader.ts +++ b/packages/common/src/directives/ng_optimized_image/image_loaders/imgix_loader.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Provider} from '@angular/core'; import {PLACEHOLDER_QUALITY} from './constants'; import {createImageLoader, ImageLoaderConfig, ImageLoaderInfo} from './image_loader'; @@ -34,7 +35,7 @@ function isImgixUrl(url: string): boolean { * * @publicApi */ -export const provideImgixLoader = createImageLoader( +export const provideImgixLoader: (path: string) => Provider[] = createImageLoader( createImgixUrl, ngDevMode ? ['https://somepath.imgix.net/'] : undefined, ); diff --git a/packages/common/src/directives/ng_optimized_image/ng_optimized_image.ts b/packages/common/src/directives/ng_optimized_image/ng_optimized_image.ts index 8390433b8ae7..ca0e0b5a8ad3 100644 --- a/packages/common/src/directives/ng_optimized_image/ng_optimized_image.ts +++ b/packages/common/src/directives/ng_optimized_image/ng_optimized_image.ts @@ -7,9 +7,16 @@ */ import { + ApplicationRef, booleanAttribute, + ChangeDetectorRef, + DestroyRef, Directive, ElementRef, + ɵformatRuntimeError as formatRuntimeError, + ɵIMAGE_CONFIG as IMAGE_CONFIG, + ɵIMAGE_CONFIG_DEFAULTS as IMAGE_CONFIG_DEFAULTS, + ɵImageConfig as ImageConfig, inject, Injector, Input, @@ -17,19 +24,12 @@ import { numberAttribute, OnChanges, OnInit, - Renderer2, - SimpleChanges, - ɵformatRuntimeError as formatRuntimeError, - ɵIMAGE_CONFIG as IMAGE_CONFIG, - ɵIMAGE_CONFIG_DEFAULTS as IMAGE_CONFIG_DEFAULTS, - ɵImageConfig as ImageConfig, ɵperformanceMarkFeature as performanceMarkFeature, + Renderer2, ɵRuntimeError as RuntimeError, ɵSafeValue as SafeValue, + SimpleChanges, ɵunwrapSafeValue as unwrapSafeValue, - ChangeDetectorRef, - ApplicationRef, - DestroyRef, } from '@angular/core'; import {RuntimeErrorCode} from '../../errors'; @@ -408,7 +408,7 @@ export class NgOptimizedImage implements OnInit, OnChanges { } } - /** @nodoc */ + /** @docs-private */ ngOnInit() { performanceMarkFeature('NgOptimizedImage'); @@ -520,7 +520,7 @@ export class NgOptimizedImage implements OnInit, OnChanges { } } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges) { if (ngDevMode) { assertNoPostInitInputChange(this, changes, [ diff --git a/packages/common/src/directives/ng_switch.ts b/packages/common/src/directives/ng_switch.ts index 97baf4143515..4c65462e68cc 100644 --- a/packages/common/src/directives/ng_switch.ts +++ b/packages/common/src/directives/ng_switch.ts @@ -12,9 +12,9 @@ import { Host, Input, Optional, + ɵRuntimeError as RuntimeError, TemplateRef, ViewContainerRef, - ɵRuntimeError as RuntimeError, } from '@angular/core'; import {RuntimeErrorCode} from '../errors'; @@ -228,7 +228,7 @@ export class NgSwitchCase implements DoCheck { /** * Performs case matching. For internal use only. - * @nodoc + * @docs-private */ ngDoCheck() { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); diff --git a/packages/common/src/location/hash_location_strategy.ts b/packages/common/src/location/hash_location_strategy.ts index b69b76dd8613..fda862f7b34c 100644 --- a/packages/common/src/location/hash_location_strategy.ts +++ b/packages/common/src/location/hash_location_strategy.ts @@ -45,7 +45,7 @@ export class HashLocationStrategy extends LocationStrategy implements OnDestroy } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { while (this._removeListenerFns.length) { this._removeListenerFns.pop()!(); diff --git a/packages/common/src/location/location.ts b/packages/common/src/location/location.ts index b7abff148dac..0815ff5333a5 100644 --- a/packages/common/src/location/location.ts +++ b/packages/common/src/location/location.ts @@ -84,7 +84,7 @@ export class Location implements OnDestroy { }); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this._urlChangeSubscription?.unsubscribe(); this._urlChangeListeners = []; diff --git a/packages/common/src/location/location_strategy.ts b/packages/common/src/location/location_strategy.ts index ee549ff4863c..672190c2b2b5 100644 --- a/packages/common/src/location/location_strategy.ts +++ b/packages/common/src/location/location_strategy.ts @@ -7,13 +7,13 @@ */ import { + DOCUMENT, Inject, inject, Injectable, InjectionToken, OnDestroy, Optional, - DOCUMENT, } from '@angular/core'; import {LocationChangeListener, PlatformLocation} from './platform_location'; @@ -126,7 +126,7 @@ export class PathLocationStrategy extends LocationStrategy implements OnDestroy ''; } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { while (this._removeListenerFns.length) { this._removeListenerFns.pop()!(); diff --git a/packages/common/test/BUILD.bazel b/packages/common/test/BUILD.bazel index b8369824900d..66e2b5191c3e 100644 --- a/packages/common/test/BUILD.bazel +++ b/packages/common/test/BUILD.bazel @@ -1,17 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/common/index.mjs", - deps = ["//packages/common"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/common/testing/index.mjs", - deps = ["//packages/common/testing"], -) ts_library( name = "test_lib", diff --git a/packages/common/testing/src/location_mock.ts b/packages/common/testing/src/location_mock.ts index 38f5a5eaf069..01df5829f649 100644 --- a/packages/common/testing/src/location_mock.ts +++ b/packages/common/testing/src/location_mock.ts @@ -36,7 +36,7 @@ export class SpyLocation implements Location { /** @internal */ _urlChangeSubscription: SubscriptionLike | null = null; - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this._urlChangeSubscription?.unsubscribe(); this._urlChangeListeners = []; diff --git a/packages/common/upgrade/test/BUILD.bazel b/packages/common/upgrade/test/BUILD.bazel index 13a3c8e857ed..d0fe5e857ad7 100644 --- a/packages/common/upgrade/test/BUILD.bazel +++ b/packages/common/upgrade/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/common/upgrade/index.mjs", - deps = ["//packages/common/upgrade"], -) ts_library( name = "test_lib", diff --git a/packages/compiler-cli/BUILD.bazel b/packages/compiler-cli/BUILD.bazel index 3398cc587486..dc0208af8588 100644 --- a/packages/compiler-cli/BUILD.bazel +++ b/packages/compiler-cli/BUILD.bazel @@ -1,6 +1,8 @@ load("@npm//@bazel/esbuild:index.bzl", "esbuild", "esbuild_config") +load("@npm2//:defs.bzl", "npm_link_all_packages") load("//packages/bazel/src:ng_perf.bzl", "ng_perf_flag") -load("//tools:defaults.bzl", "api_golden_test", "extract_types", "pkg_npm", "ts_config", "ts_library") +load("//tools:defaults.bzl", "api_golden_test", "extract_types", "pkg_npm", "ts_library") +load("//tools:defaults2.bzl", "npm_package", "ts_config") package(default_visibility = ["//visibility:public"]) @@ -11,6 +13,27 @@ PUBLIC_TARGETS = [ "//packages/compiler-cli/linker/babel", ] +npm_link_all_packages() + +ts_config( + name = "tsconfig_build", + src = "tsconfig.json", + deps = [ + "//:node_modules/@types/node", + "//packages:tsconfig_build", + ], +) + +ts_config( + name = "tsconfig_test", + testonly = True, + src = "tsconfig-test.json", + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasmine", + ], +) + esbuild_config( name = "esbuild_config", config_file = "esbuild.config.js", @@ -49,12 +72,6 @@ esbuild( deps = PUBLIC_TARGETS, ) -ts_config( - name = "tsconfig", - src = "tsconfig-build.json", - deps = ["//packages:tsconfig-build.json"], -) - ts_library( name = "compiler-cli", srcs = glob( @@ -66,7 +83,6 @@ ts_library( "src/integrationtest/**/*.ts", ], ), - tsconfig = ":tsconfig", deps = [ "//packages/compiler", "//packages/compiler-cli/private", @@ -110,13 +126,17 @@ pkg_npm( tags = [ "release-with-framework", ], - # Do not add more to this list. - # Dependencies on the full npm_package cause long re-builds. visibility = [ "//adev:__pkg__", + "//adev/shared-docs/pipeline/api-gen:__subpackages__", "//integration:__subpackages__", + "//modules/benchmarks:__subpackages__", + "//modules/playground:__subpackages__", "//modules/ssr-benchmarks:__subpackages__", "//packages/compiler-cli/integrationtest:__pkg__", + "//packages/core/test/bundling:__subpackages__", + "//packages/core/test/playground/zone-signal-input:__pkg__", + "@npm//@angular/build-tooling/shared-scripts:__subpackages__", ], deps = [ ":api_type_definitions", @@ -124,6 +144,21 @@ pkg_npm( ], ) +# TODO(devversion): Temporary early `npm_package` for making compiler-cli usable in `rules_angular`. +# Long-term, `pkg_npm` will be migrated to `npm_package` in general. +npm_package( + name = "pkg", + srcs = [":npm_package"], + data = [ + # Needed because compiler is a dev dependency (to satisfy the peer dependency) + # and `rules_js` only makes transitive production dependencies available. + ":node_modules/@angular/compiler", + ], + replace_prefixes = { + "npm_package/": "", + }, +) + api_golden_test( name = "error_code_api", data = [ diff --git a/packages/compiler-cli/index.ts b/packages/compiler-cli/index.ts index 420851b6eb13..1b0d9a9c793b 100644 --- a/packages/compiler-cli/index.ts +++ b/packages/compiler-cli/index.ts @@ -38,7 +38,6 @@ export {ConsoleLogger, Logger, LogLevel} from './src/ngtsc/logging'; export {NodeJSFileSystem, absoluteFrom} from './src/ngtsc/file_system'; // Export documentation entities for Angular-internal API doc generation. -export * from './src/ngtsc/docs/src/entities'; export * from './src/ngtsc/docs'; // Exposed for usage in 1P Angular plugin. diff --git a/packages/compiler-cli/package.json b/packages/compiler-cli/package.json index 6d3351b4572d..4be783c07be8 100644 --- a/packages/compiler-cli/package.json +++ b/packages/compiler-cli/package.json @@ -42,7 +42,7 @@ } }, "dependencies": { - "@babel/core": "7.26.10", + "@babel/core": "7.27.1", "@jridgewell/sourcemap-codec": "^1.4.14", "reflect-metadata": "^0.2.0", "chokidar": "^4.0.0", @@ -55,6 +55,9 @@ "@angular/compiler": "0.0.0-PLACEHOLDER", "typescript": ">=5.8 <5.9" }, + "devDependencies": { + "@angular/compiler": "workspace:*" + }, "repository": { "type": "git", "url": "https://github.com/angular/angular.git", diff --git a/packages/compiler-cli/src/ngtsc/annotations/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/BUILD.bazel index 883ce26466d0..dd7b9eb502fe 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "annotations", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", "//packages/compiler-cli/src/ngtsc/annotations/component", @@ -32,7 +32,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", "//packages/compiler-cli/src/ngtsc/util", "//packages/compiler-cli/src/ngtsc/xi18n", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/common/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/common/BUILD.bazel index 0c9ac4e9a70a..6ac99a5a61f0 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/common/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/common/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "common", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/imports", @@ -17,7 +17,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/scope", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/common/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/common/test/BUILD.bazel index b91d51700be1..ebfdf820d81c 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/common/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/common/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", @@ -19,7 +20,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/translator", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/component/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/component/BUILD.bazel index 15c599421311..2fc061a2899e 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/component/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/component/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "component", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", "//packages/compiler-cli/src/ngtsc/annotations/directive", @@ -32,7 +32,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api", "//packages/compiler-cli/src/ngtsc/util", "//packages/compiler-cli/src/ngtsc/xi18n", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/component/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/component/test/BUILD.bazel index b70453f4c6f8..a804c1416a94 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/component/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/component/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", @@ -25,7 +26,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/scope", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/directive/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/directive/BUILD.bazel index 32ddfbc7e734..758deda1a93e 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/directive/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/directive/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "directive", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -22,7 +22,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/translator", "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/directive/src/query_functions.ts b/packages/compiler-cli/src/ngtsc/annotations/directive/src/query_functions.ts index 28520770c86c..e3e3b7236815 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/directive/src/query_functions.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/directive/src/query_functions.ts @@ -26,7 +26,7 @@ import { import {tryUnwrapForwardRef} from '../../common'; import {validateAccessOfInitializerApiMember} from './initializer_function_access'; -import {tryParseInitializerApi} from './initializer_functions'; +import {InitializerApiFunction, tryParseInitializerApi} from './initializer_functions'; /** Possible query initializer API functions. */ export type QueryFunctionName = 'viewChild' | 'contentChild' | 'viewChildren' | 'contentChildren'; @@ -40,20 +40,21 @@ const queryFunctionNames: QueryFunctionName[] = [ ]; /** Possible query initializer API functions. */ -export const QUERY_INITIALIZER_FNS = queryFunctionNames.map((fnName) => ({ - functionName: fnName, - owningModule: '@angular/core' as const, - // Queries are accessed from within static blocks, via the query definition functions. - // Conceptually, the fields could access private members— even ES private fields. - // Support for ES private fields requires special caution and complexity when partial - // output is linked— hence not supported. TS private members are allowed in static blocks. - allowedAccessLevels: [ - ClassMemberAccessLevel.PublicWritable, - ClassMemberAccessLevel.PublicReadonly, - ClassMemberAccessLevel.Protected, - ClassMemberAccessLevel.Private, - ], -})); +export const QUERY_INITIALIZER_FNS: (InitializerApiFunction & {functionName: QueryFunctionName})[] = + queryFunctionNames.map((fnName) => ({ + functionName: fnName, + owningModule: '@angular/core' as const, + // Queries are accessed from within static blocks, via the query definition functions. + // Conceptually, the fields could access private members— even ES private fields. + // Support for ES private fields requires special caution and complexity when partial + // output is linked— hence not supported. TS private members are allowed in static blocks. + allowedAccessLevels: [ + ClassMemberAccessLevel.PublicWritable, + ClassMemberAccessLevel.PublicReadonly, + ClassMemberAccessLevel.Protected, + ClassMemberAccessLevel.Private, + ], + })); // The `descendants` option is enabled by default, except for content children. const defaultDescendantsValue = (type: QueryFunctionName) => type !== 'contentChildren'; diff --git a/packages/compiler-cli/src/ngtsc/annotations/directive/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/directive/test/BUILD.bazel index 720d4be5c575..cff4b10dc35e 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/directive/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/directive/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", @@ -24,7 +25,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/scope", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/ng_module/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/ng_module/BUILD.bazel index 41ef612aabc4..dd5dff933668 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/ng_module/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/ng_module/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "ng_module", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -22,7 +22,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/shims:api", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/ng_module/src/handler.ts b/packages/compiler-cli/src/ngtsc/annotations/ng_module/src/handler.ts index 9c70fcd11bc0..673038301ff7 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/ng_module/src/handler.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/ng_module/src/handler.ts @@ -466,10 +466,26 @@ export class NgModuleDecoratorHandler } } - const schemas = - this.compilationMode !== CompilationMode.LOCAL && ngModule.has('schemas') - ? extractSchemas(ngModule.get('schemas')!, this.evaluator, 'NgModule') - : []; + let schemas: SchemaMetadata[] | undefined; + try { + schemas = + this.compilationMode !== CompilationMode.LOCAL && ngModule.has('schemas') + ? extractSchemas(ngModule.get('schemas')!, this.evaluator, 'NgModule') + : []; + } catch (e) { + if (e instanceof FatalDiagnosticError) { + diagnostics.push(e.toDiagnostic()); + + // Use an empty schema array if schema extract fails. + // A build will still fail in this case. However, for the language service, + // this allows the module to exist in the compiler registry and prevents + // cascading diagnostics within an IDE due to "missing" components. The + // originating schema related errors will still be reported in the IDE. + schemas = []; + } else { + throw e; + } + } let id: Expression | null = null; if (ngModule.has('id')) { diff --git a/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/BUILD.bazel index 566c9503eeac..a8f2a5edc5b0 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", @@ -23,7 +24,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/scope", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/ng_module_spec.ts b/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/ng_module_spec.ts index 68509f384dcc..8ee71d759dab 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/ng_module_spec.ts +++ b/packages/compiler-cli/src/ngtsc/annotations/ng_module/test/ng_module_spec.ts @@ -5,8 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ -import {R3NgModuleMetadataGlobal, WrappedNodeExpr} from '@angular/compiler'; -import {R3Reference} from '@angular/compiler/src/compiler'; +import {R3NgModuleMetadataGlobal, WrappedNodeExpr, R3Reference} from '@angular/compiler'; import ts from 'typescript'; import {absoluteFrom} from '../../../file_system'; diff --git a/packages/compiler-cli/src/ngtsc/annotations/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/annotations/test/BUILD.bazel index eccec0c51b59..ccfc1ef9f9e9 100644 --- a/packages/compiler-cli/src/ngtsc/annotations/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/annotations/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations", @@ -27,7 +28,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/translator", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/core/BUILD.bazel b/packages/compiler-cli/src/ngtsc/core/BUILD.bazel index 756baa008d50..d70f07f99e30 100644 --- a/packages/compiler-cli/src/ngtsc/core/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/core/BUILD.bazel @@ -1,14 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "core", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/core", - deps = [ + interop_deps = [ ":api", "//packages:types", "//packages/compiler", @@ -45,19 +44,24 @@ ts_library( "//packages/compiler-cli/src/ngtsc/util", "//packages/compiler-cli/src/ngtsc/validation", "//packages/compiler-cli/src/ngtsc/xi18n", - "@npm//@types/semver", - "@npm//semver", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/core", + deps = [ + "//:node_modules/@types/semver", + "//:node_modules/semver", + "//:node_modules/typescript", ], ) -ts_library( +ts_project( name = "api", srcs = glob(["api/**/*.ts"]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/shims:api", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/core/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/core/test/BUILD.bazel index 43ca4fca3852..22d5828e0295 100644 --- a/packages/compiler-cli/src/ngtsc/core/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/core/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/core", "//packages/compiler-cli/src/ngtsc/core:api", @@ -19,7 +20,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/cycles/BUILD.bazel b/packages/compiler-cli/src/ngtsc/cycles/BUILD.bazel index b17665f899d4..4ec52ba1b6d4 100644 --- a/packages/compiler-cli/src/ngtsc/cycles/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/cycles/BUILD.bazel @@ -1,15 +1,17 @@ -package(default_visibility = ["//visibility:public"]) +load("//tools:defaults2.bzl", "ts_project") -load("//tools:defaults.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "cycles", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), + interop_deps = [ + "//packages/compiler-cli/src/ngtsc/perf", + ], module_name = "@angular/compiler-cli/src/ngtsc/cycles", deps = [ - "//packages/compiler-cli/src/ngtsc/perf", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/cycles/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/cycles/test/BUILD.bazel index b30504ef16a8..5f89dffa8ac4 100644 --- a/packages/compiler-cli/src/ngtsc/cycles/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/cycles/test/BUILD.bazel @@ -1,21 +1,24 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/cycles", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/perf", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/diagnostics/BUILD.bazel b/packages/compiler-cli/src/ngtsc/diagnostics/BUILD.bazel index d7ccf63c58cb..5c8649202aa2 100644 --- a/packages/compiler-cli/src/ngtsc/diagnostics/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/diagnostics/BUILD.bazel @@ -1,14 +1,16 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "diagnostics", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/docs/BUILD.bazel b/packages/compiler-cli/src/ngtsc/docs/BUILD.bazel index f2d6073e60e1..451c5bea24f3 100644 --- a/packages/compiler-cli/src/ngtsc/docs/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/docs/BUILD.bazel @@ -1,20 +1,22 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) # Compiler code pertaining to extracting data for generating API reference documentation. -ts_library( +ts_project( name = "docs", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/docs", - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/docs", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/docs/index.ts b/packages/compiler-cli/src/ngtsc/docs/index.ts index 6dc6deb27a72..a87cff58b7b3 100644 --- a/packages/compiler-cli/src/ngtsc/docs/index.ts +++ b/packages/compiler-cli/src/ngtsc/docs/index.ts @@ -6,5 +6,5 @@ * found in the LICENSE file at https://angular.dev/license */ -export {DocEntry} from './src/entities'; +export * from './src/entities'; export {DocsExtractor} from './src/extractor'; diff --git a/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel b/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel index 6c22d2b90227..2192aa51febb 100644 --- a/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/entry_point/BUILD.bazel @@ -1,20 +1,22 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "entry_point", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/entry_point", - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/shims:api", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/entry_point", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/entry_point/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/entry_point/test/BUILD.bazel index 6701c1b04f47..8788f448d976 100644 --- a/packages/compiler-cli/src/ngtsc/entry_point/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/entry_point/test/BUILD.bazel @@ -1,19 +1,22 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/entry_point", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/file_system/BUILD.bazel b/packages/compiler-cli/src/ngtsc/file_system/BUILD.bazel index 1dc56c80e760..cd56ef573bfa 100644 --- a/packages/compiler-cli/src/ngtsc/file_system/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/file_system/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "file_system", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), + interop_deps = [], deps = [ - "@npm//@types/node", - "@npm//typescript", + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/file_system/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/file_system/test/BUILD.bazel index ae15d5b03a57..103367307d69 100644 --- a/packages/compiler-cli/src/ngtsc/file_system/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/file_system/test/BUILD.bazel @@ -1,17 +1,20 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/file_system/testing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/file_system/testing/BUILD.bazel index e308d5844950..34fa2535368e 100644 --- a/packages/compiler-cli/src/ngtsc/file_system/testing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/file_system/testing/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "testing", srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", - "@npm//@types/jasmine", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/file_system/testing/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/file_system/testing/test/BUILD.bazel index 51fea27c7171..6c185aad1434 100644 --- a/packages/compiler-cli/src/ngtsc/file_system/testing/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/file_system/testing/test/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", ], + deps = [], ) jasmine_node_test( diff --git a/packages/compiler-cli/src/ngtsc/hmr/BUILD.bazel b/packages/compiler-cli/src/ngtsc/hmr/BUILD.bazel index 4eedd865328a..51c0bcb4668a 100644 --- a/packages/compiler-cli/src/ngtsc/hmr/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/hmr/BUILD.bazel @@ -1,20 +1,22 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "hmr", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/partial_evaluator", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/translator", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/imports/BUILD.bazel b/packages/compiler-cli/src/ngtsc/imports/BUILD.bazel index 02288da57d2a..89a2fcebec7b 100644 --- a/packages/compiler-cli/src/ngtsc/imports/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/imports/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "imports", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", @@ -15,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/imports/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/imports/test/BUILD.bazel index eac4c29dbc06..1843e599cb16 100644 --- a/packages/compiler-cli/src/ngtsc/imports/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/imports/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", @@ -17,7 +18,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/incremental/BUILD.bazel b/packages/compiler-cli/src/ngtsc/incremental/BUILD.bazel index 78f507401163..e5e5926c0187 100644 --- a/packages/compiler-cli/src/ngtsc/incremental/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/incremental/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "incremental", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ ":api", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/imports", @@ -21,16 +21,20 @@ ts_library( "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) -ts_library( +ts_project( name = "api", srcs = ["api.ts"], - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/reflection", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/incremental/semantic_graph/BUILD.bazel b/packages/compiler-cli/src/ngtsc/incremental/semantic_graph/BUILD.bazel index 65b262b6b7d5..88e163e81d2a 100644 --- a/packages/compiler-cli/src/ngtsc/incremental/semantic_graph/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/incremental/semantic_graph/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "semantic_graph", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/reflection", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/incremental/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/incremental/test/BUILD.bazel index 425e4a86a90f..b92f03bf7cfa 100644 --- a/packages/compiler-cli/src/ngtsc/incremental/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/incremental/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", @@ -17,7 +18,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/perf", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/indexer/BUILD.bazel b/packages/compiler-cli/src/ngtsc/indexer/BUILD.bazel index 630216cc7de7..69fbe987f619 100644 --- a/packages/compiler-cli/src/ngtsc/indexer/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/indexer/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "indexer", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/indexer/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/indexer/test/BUILD.bazel index 666400014f21..6352d33b52cb 100644 --- a/packages/compiler-cli/src/ngtsc/indexer/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/indexer/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", @@ -17,7 +18,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/logging/BUILD.bazel b/packages/compiler-cli/src/ngtsc/logging/BUILD.bazel index b8929013b193..3c06e1ee1777 100644 --- a/packages/compiler-cli/src/ngtsc/logging/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/logging/BUILD.bazel @@ -1,13 +1,14 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "logging", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), + interop_deps = [], deps = [ - "@npm//@types/node", + "//:node_modules/@types/node", ], ) diff --git a/packages/compiler-cli/src/ngtsc/logging/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/logging/test/BUILD.bazel index 535cff838ca8..7ffbce067185 100644 --- a/packages/compiler-cli/src/ngtsc/logging/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/logging/test/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/logging", ], + deps = [], ) jasmine_node_test( diff --git a/packages/compiler-cli/src/ngtsc/logging/testing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/logging/testing/BUILD.bazel index 9c1ed58644e9..d12ab8e63f59 100644 --- a/packages/compiler-cli/src/ngtsc/logging/testing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/logging/testing/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "testing", srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/logging", ], ) diff --git a/packages/compiler-cli/src/ngtsc/metadata/BUILD.bazel b/packages/compiler-cli/src/ngtsc/metadata/BUILD.bazel index 2cf789018626..d19a43d30122 100644 --- a/packages/compiler-cli/src/ngtsc/metadata/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/metadata/BUILD.bazel @@ -1,18 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "metadata", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/metadata/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/metadata/test/BUILD.bazel index 756c86219ae2..2b942eee8c8a 100644 --- a/packages/compiler-cli/src/ngtsc/metadata/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/metadata/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = + interop_deps = [ "//packages:types", "//packages/compiler", @@ -18,8 +19,10 @@ ts_library( "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", ], + deps = [ + "//:node_modules/typescript", + ], ) jasmine_node_test( diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/BUILD.bazel b/packages/compiler-cli/src/ngtsc/partial_evaluator/BUILD.bazel index 48e6b1e71f2a..feb125473cea 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/BUILD.bazel @@ -1,14 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "partial_evaluator", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/partial_evaluator", - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -16,7 +15,10 @@ ts_library( "//packages/compiler-cli/src/ngtsc/incremental:api", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/partial_evaluator", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/partial_evaluator/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/partial_evaluator/test/BUILD.bazel index 16415a53e2d3..e960b93f3392 100644 --- a/packages/compiler-cli/src/ngtsc/partial_evaluator/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/partial_evaluator/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", @@ -18,7 +19,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/partial_evaluator", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/perf/BUILD.bazel b/packages/compiler-cli/src/ngtsc/perf/BUILD.bazel index 53af9b1c4ff2..d6a338dc2086 100644 --- a/packages/compiler-cli/src/ngtsc/perf/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/perf/BUILD.bazel @@ -1,15 +1,17 @@ -package(default_visibility = ["//visibility:public"]) +load("//tools:defaults2.bzl", "ts_project") -load("//tools:defaults.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "perf", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/program_driver/BUILD.bazel b/packages/compiler-cli/src/ngtsc/program_driver/BUILD.bazel index cc52a9128951..4190c3d791d6 100644 --- a/packages/compiler-cli/src/ngtsc/program_driver/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/program_driver/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "program_driver", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/program_driver", - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/shims", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/program_driver", + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/program_driver/src/api.ts b/packages/compiler-cli/src/ngtsc/program_driver/src/api.ts index 5e4f9b9dfbef..8a388df6aa41 100644 --- a/packages/compiler-cli/src/ngtsc/program_driver/src/api.ts +++ b/packages/compiler-cli/src/ngtsc/program_driver/src/api.ts @@ -22,7 +22,7 @@ export interface FileUpdate { originalFile: ts.SourceFile | null; } -export const NgOriginalFile = Symbol('NgOriginalFile'); +export const NgOriginalFile: unique symbol = Symbol('NgOriginalFile'); /** * If an updated file has an associated original source file, then the original source file diff --git a/packages/compiler-cli/src/ngtsc/reflection/BUILD.bazel b/packages/compiler-cli/src/ngtsc/reflection/BUILD.bazel index df0f2af0f35f..0ede66184892 100644 --- a/packages/compiler-cli/src/ngtsc/reflection/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/reflection/BUILD.bazel @@ -1,13 +1,14 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "reflection", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), + interop_deps = [], deps = [ - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/reflection/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/reflection/test/BUILD.bazel index 125d5daa7e85..e680f6509045 100644 --- a/packages/compiler-cli/src/ngtsc/reflection/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/reflection/test/BUILD.bazel @@ -1,20 +1,23 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/resource/BUILD.bazel b/packages/compiler-cli/src/ngtsc/resource/BUILD.bazel index bc36525bb929..9561cc2d331d 100644 --- a/packages/compiler-cli/src/ngtsc/resource/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/resource/BUILD.bazel @@ -1,19 +1,21 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "resource", srcs = ["index.ts"] + glob([ "src/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/resource", - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/annotations", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/resource", + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/scope/BUILD.bazel b/packages/compiler-cli/src/ngtsc/scope/BUILD.bazel index 2662e5b47ff2..794a0a2345c2 100644 --- a/packages/compiler-cli/src/ngtsc/scope/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/scope/BUILD.bazel @@ -1,19 +1,21 @@ -package(default_visibility = ["//visibility:public"]) +load("//tools:defaults2.bzl", "ts_project") -load("//tools:defaults.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "scope", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/scope/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/scope/test/BUILD.bazel index 005549f43e1a..6a59278cdaaf 100644 --- a/packages/compiler-cli/src/ngtsc/scope/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/scope/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", @@ -19,7 +20,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/scope", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/shims/BUILD.bazel b/packages/compiler-cli/src/ngtsc/shims/BUILD.bazel index 8e31e9e79ce0..14afd4b849ad 100644 --- a/packages/compiler-cli/src/ngtsc/shims/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/shims/BUILD.bazel @@ -1,28 +1,32 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "api", srcs = ["api.ts"], - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) -ts_library( +ts_project( name = "shims", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ ":api", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/shims/src/expando.ts b/packages/compiler-cli/src/ngtsc/shims/src/expando.ts index 2a58bcd8b67d..91a1fac1608d 100644 --- a/packages/compiler-cli/src/ngtsc/shims/src/expando.ts +++ b/packages/compiler-cli/src/ngtsc/shims/src/expando.ts @@ -13,7 +13,7 @@ import {AbsoluteFsPath} from '../../file_system'; /** * A `Symbol` which is used to patch extension data onto `ts.SourceFile`s. */ -export const NgExtension = Symbol('NgExtension'); +export const NgExtension: unique symbol = Symbol('NgExtension'); /** * Contents of the `NgExtension` property of a `ts.SourceFile`. diff --git a/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel index 99bfb0854919..687277165fe2 100644 --- a/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/shims/test/BUILD.bazel @@ -1,21 +1,24 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/shims", "//packages/compiler-cli/src/ngtsc/shims:api", "//packages/compiler-cli/src/ngtsc/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/sourcemaps/BUILD.bazel b/packages/compiler-cli/src/ngtsc/sourcemaps/BUILD.bazel index 8269493fd347..5a1b64d11366 100644 --- a/packages/compiler-cli/src/ngtsc/sourcemaps/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/sourcemaps/BUILD.bazel @@ -1,18 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "sourcemaps", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/logging", - "@npm//@jridgewell/sourcemap-codec", - "@npm//@types/convert-source-map", - "@npm//@types/node", - "@npm//convert-source-map", + ], + deps = [ + "//:node_modules/@jridgewell/sourcemap-codec", + "//:node_modules/@types/convert-source-map", + "//:node_modules/@types/node", + "//:node_modules/convert-source-map", ], ) diff --git a/packages/compiler-cli/src/ngtsc/sourcemaps/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/sourcemaps/test/BUILD.bazel index 7d5830cc83aa..4abea934c2be 100644 --- a/packages/compiler-cli/src/ngtsc/sourcemaps/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/sourcemaps/test/BUILD.bazel @@ -1,21 +1,24 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/logging/testing", "//packages/compiler-cli/src/ngtsc/sourcemaps", - "@npm//@jridgewell/sourcemap-codec", - "@npm//@types/convert-source-map", - "@npm//convert-source-map", + ], + deps = [ + "//:node_modules/@jridgewell/sourcemap-codec", + "//:node_modules/@types/convert-source-map", + "//:node_modules/convert-source-map", ], ) diff --git a/packages/compiler-cli/src/ngtsc/testing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/testing/BUILD.bazel index be931746adcd..30c166804a2e 100644 --- a/packages/compiler-cli/src/ngtsc/testing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/testing/BUILD.bazel @@ -1,21 +1,23 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "testing", testonly = True, srcs = glob([ "**/*.ts", ]), - module_name = "@angular/compiler-cli/src/ngtsc/testing", - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@bazel/runfiles", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/testing", + deps = [ + "//:node_modules/@bazel/runfiles", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel b/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel index 5b76205becaa..6f95d432c9f1 100644 --- a/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel @@ -1,16 +1,17 @@ -load("//tools:defaults.bzl", "ng_package", "ts_library") +load("//tools:defaults.bzl", "ng_package") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "fake_common", srcs = [ "index.ts", ], - module_name = "@angular/common", - deps = [ + interop_deps = [ "//packages/core", ], + module_name = "@angular/common", ) ng_package( diff --git a/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel b/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel index ecfd4ddd4e3e..beb2aa620a87 100644 --- a/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/transform/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "transform", srcs = ["index.ts"] + glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -24,6 +24,8 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api", "//packages/compiler-cli/src/ngtsc/util", "//packages/compiler-cli/src/ngtsc/xi18n", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/transform/jit/BUILD.bazel b/packages/compiler-cli/src/ngtsc/transform/jit/BUILD.bazel index 8eaf55c2bc07..30fae12471cd 100644 --- a/packages/compiler-cli/src/ngtsc/transform/jit/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/transform/jit/BUILD.bazel @@ -1,11 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "jit", srcs = glob(["**/*.ts"]), - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations", "//packages/compiler-cli/src/ngtsc/imports", @@ -13,6 +13,8 @@ ts_library( "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/translator", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/transform/jit/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/transform/jit/test/BUILD.bazel index b90082c6e000..2c998feeef11 100644 --- a/packages/compiler-cli/src/ngtsc/transform/jit/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/transform/jit/test/BUILD.bazel @@ -1,6 +1,7 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = [ @@ -8,13 +9,15 @@ ts_library( "initializer_api_transforms_spec.ts", "signal_queries_metadata_transform_spec.ts", ], - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/partial_evaluator", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/transform/jit", "//packages/compiler-cli/test:test_utils", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/transform/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/transform/test/BUILD.bazel index a69ba237dd43..399142d8cf65 100644 --- a/packages/compiler-cli/src/ngtsc/transform/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/transform/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", @@ -19,7 +20,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/transform", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/transform/test/compilation_spec.ts b/packages/compiler-cli/src/ngtsc/transform/test/compilation_spec.ts index daa13c132809..c9d6b0c822e8 100644 --- a/packages/compiler-cli/src/ngtsc/transform/test/compilation_spec.ts +++ b/packages/compiler-cli/src/ngtsc/transform/test/compilation_spec.ts @@ -5,8 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ -import {ConstantPool} from '@angular/compiler'; -import * as o from '@angular/compiler/src/output/output_ast'; +import {ConstantPool, outputAst as o} from '@angular/compiler'; import {absoluteFrom} from '../../file_system'; import {runInEachFileSystem} from '../../file_system/testing'; diff --git a/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel b/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel index 966e62bcbb51..f364372ae2f4 100644 --- a/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/translator/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "translator", srcs = glob(["**/*.ts"]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/translator/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/translator/test/BUILD.bazel index 58e79860f380..0eb506e8ddec 100644 --- a/packages/compiler-cli/src/ngtsc/translator/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/translator/test/BUILD.bazel @@ -1,21 +1,24 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/translator", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/BUILD.bazel index 121442856b1c..ff088b044f56 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/BUILD.bazel @@ -1,13 +1,13 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "typecheck", srcs = glob( ["**/*.ts"], ), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/annotations/common", @@ -26,8 +26,10 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/diagnostics", "//packages/compiler-cli/src/ngtsc/util", - "@npm//@types/node", - "@npm//magic-string", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/magic-string", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/api/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/api/BUILD.bazel index ef61fe05f119..bd5ae0742b16 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/api/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/api/BUILD.bazel @@ -1,12 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "api", srcs = glob(["**/*.ts"]), - module_name = "@angular/compiler-cli/src/ngtsc/typecheck/api", - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -15,6 +14,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/metadata", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/typecheck/api", + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/diagnostics/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/diagnostics/BUILD.bazel index 361964e5d8d2..73d173b1e1dc 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/diagnostics/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/diagnostics/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "diagnostics", srcs = glob(["**/*.ts"]), - module_name = "@angular/compiler-cli/src/ngtsc/typecheck/diagnostics", - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//typescript", + ], + module_name = "@angular/compiler-cli/src/ngtsc/typecheck/diagnostics", + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/BUILD.bazel index 32228438a17d..770e416c6f66 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/BUILD.bazel @@ -1,12 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "extended", srcs = glob( ["**/*.ts"], ), - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -26,6 +25,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/api/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/api/BUILD.bazel index 8b2ad8e1b5e1..a4a503db8b40 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/api/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/api/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "api", srcs = glob( ["**/*.ts"], ), - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/interpolated_signal_not_invoked/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/interpolated_signal_not_invoked/BUILD.bazel index db17f1b1642b..c1dc40e7c796 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/interpolated_signal_not_invoked/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/interpolated_signal_not_invoked/BUILD.bazel @@ -1,18 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "interpolated_signal_not_invoked", srcs = ["index.ts"], - visibility = [ - "//packages/compiler-cli/src/ngtsc:__subpackages__", - "//packages/compiler-cli/test/ngtsc:__pkg__", - ], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = [ + "//packages/compiler-cli/src/ngtsc:__subpackages__", + "//packages/compiler-cli/test/ngtsc:__pkg__", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/BUILD.bazel index a8d9fe22cf8e..510dc160b8e8 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "invalid_banana_in_box", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_control_flow_directive/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_control_flow_directive/BUILD.bazel index d3471e56fafc..2f96b26fa4a1 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_control_flow_directive/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_control_flow_directive/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "missing_control_flow_directive", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_ngforof_let/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_ngforof_let/BUILD.bazel index 7403a86983fc..4701f823a3b4 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_ngforof_let/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_ngforof_let/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "missing_ngforof_let", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_structural_directive/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_structural_directive/BUILD.bazel index a8e517f1d7c2..e75a7fca2e8f 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_structural_directive/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_structural_directive/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "missing_structural_directive", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/BUILD.bazel index 58d4c7597cec..64dbf03a288d 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "nullish_coalescing_not_nullable", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/optional_chain_not_nullable/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/optional_chain_not_nullable/BUILD.bazel index 12ef6aa30bbc..5d5a89b4fbed 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/optional_chain_not_nullable/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/optional_chain_not_nullable/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "optional_chain_not_nullable", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/skip_hydration_not_static/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/skip_hydration_not_static/BUILD.bazel index 01555351c9b3..542a91b19978 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/skip_hydration_not_static/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/skip_hydration_not_static/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "skip_hydration_not_static", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/suffix_not_supported/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/suffix_not_supported/BUILD.bazel index 157e446f0880..b5b927b149ed 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/suffix_not_supported/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/suffix_not_supported/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "suffix_not_supported", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/text_attribute_not_binding/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/text_attribute_not_binding/BUILD.bazel index 45e05ab4f338..dc9cf7e2afac 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/text_attribute_not_binding/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/text_attribute_not_binding/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "text_attribute_not_binding", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_function_in_event_binding/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_function_in_event_binding/BUILD.bazel index 2b254f0054f0..3f4119fa76c6 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_function_in_event_binding/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_function_in_event_binding/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "uninvoked_function_in_event_binding", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function/BUILD.bazel index 0ca9bbe3e31d..81903dbb8223 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "uninvoked_track_function", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing/BUILD.bazel index 73014d1fbc2f..a092c66448bc 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing/BUILD.bazel @@ -1,14 +1,16 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "unparenthesized_nullish_coalescing", srcs = ["index.ts"], - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration/BUILD.bazel index 75824d705dfb..37960a8e8c8a 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration/BUILD.bazel @@ -1,17 +1,19 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "unused_let_declaration", srcs = ["index.ts"], + interop_deps = [ + "//packages/compiler", + "//packages/compiler-cli/src/ngtsc/diagnostics", + "//packages/compiler-cli/src/ngtsc/typecheck/api", + "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", + ], visibility = [ "//packages/compiler-cli/src/ngtsc:__subpackages__", "//packages/compiler-cli/test/ngtsc:__pkg__", ], deps = [ - "//packages/compiler", - "//packages/compiler-cli/src/ngtsc/diagnostics", - "//packages/compiler-cli/src/ngtsc/typecheck/api", - "//packages/compiler-cli/src/ngtsc/typecheck/extended/api", - "@npm//typescript", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/interpolated_signal_not_invoked/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/interpolated_signal_not_invoked/BUILD.bazel index 7e32d08d7edd..d8e35428d0eb 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/interpolated_signal_not_invoked/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/interpolated_signal_not_invoked/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["interpolated_signal_not_invoked_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/interpolated_signal_not_invoked", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/invalid_banana_in_box/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/invalid_banana_in_box/BUILD.bazel index 12fec6ad210e..e381595641f2 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/invalid_banana_in_box/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/invalid_banana_in_box/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["invalid_banana_in_box_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_control_flow_directive/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_control_flow_directive/BUILD.bazel index 0669647616ba..55b012f3084f 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_control_flow_directive/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_control_flow_directive/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["missing_control_flow_directive_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_control_flow_directive", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_ngforof_let/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_ngforof_let/BUILD.bazel index ed0b3ce89b73..49d34bea290e 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_ngforof_let/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_ngforof_let/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["missing_ngforof_let_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_ngforof_let", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_structural_directive/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_structural_directive/BUILD.bazel index ee8b71e077cd..3967e72ecb5c 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_structural_directive/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/missing_structural_directive/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["missing_structural_directive_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/file_system", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/missing_structural_directive", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/nullish_coalescing_not_nullable/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/nullish_coalescing_not_nullable/BUILD.bazel index 547c99cc310a..7a4f1c1606be 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/nullish_coalescing_not_nullable/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/nullish_coalescing_not_nullable/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["nullish_coalescing_not_nullable_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/optional_chain_not_nullable/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/optional_chain_not_nullable/BUILD.bazel index c10b69d54e77..b8076ba15ec2 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/optional_chain_not_nullable/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/optional_chain_not_nullable/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["optional_chain_not_nullable_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/optional_chain_not_nullable", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/skip_hydration_not_static/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/skip_hydration_not_static/BUILD.bazel index 89b673953228..d8b250fe2721 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/skip_hydration_not_static/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/skip_hydration_not_static/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["skip_hydration_not_static_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/skip_hydration_not_static", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/suffix_not_supported/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/suffix_not_supported/BUILD.bazel index 7d35b382cc82..5cd1fb812a7c 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/suffix_not_supported/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/suffix_not_supported/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["suffix_not_supported_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/suffix_not_supported", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/text_attribute_not_binding/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/text_attribute_not_binding/BUILD.bazel index b02509d9966c..bdd4ad5a6010 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/text_attribute_not_binding/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/text_attribute_not_binding/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["text_attribute_not_binding_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/text_attribute_not_binding", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_function_in_event_binding/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_function_in_event_binding/BUILD.bazel index 469821d47393..971c46c1890f 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_function_in_event_binding/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_function_in_event_binding/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["uninvoked_function_in_event_binding_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_function_in_event_binding", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_track_function/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_track_function/BUILD.bazel index 122170a82a37..5d9476cbb140 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_track_function/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/uninvoked_track_function/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["uninvoked_track_function.spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/uninvoked_track_function", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unparenthesized_nullish_coalescing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unparenthesized_nullish_coalescing/BUILD.bazel index 06938cfee062..537e1129eedb 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unparenthesized_nullish_coalescing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unparenthesized_nullish_coalescing/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["unparenthesized_nullish_coalescing_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unparenthesized_nullish_coalescing", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unused_let_declaration/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unused_let_declaration/BUILD.bazel index a194ca517680..162ce030c01d 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unused_let_declaration/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/extended/test/checks/unused_let_declaration/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = ["unused_let_declaration_spec.ts"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", @@ -14,7 +15,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/extended", "//packages/compiler-cli/src/ngtsc/typecheck/extended/checks/unused_let_declaration", "//packages/compiler-cli/src/ngtsc/typecheck/testing", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/expression.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/expression.ts index 3f8ae8ce0f91..3ea7b6d06bbb 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/src/expression.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/src/expression.ts @@ -54,7 +54,7 @@ import {tsCastToAny, tsNumericExpression} from './ts_util'; * - Some flavor of function call, like `isNan(0) as any` - requires even more characters than the * NaN option and has the same issue with `noLib`. */ -export const ANY_EXPRESSION = ts.factory.createAsExpression( +export const ANY_EXPRESSION: ts.AsExpression = ts.factory.createAsExpression( ts.factory.createNumericLiteral('0'), ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword), ); diff --git a/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/BUILD.bazel index eb04f3fff199..03707cbddf9c 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/BUILD.bazel @@ -1,18 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "template_semantics", srcs = glob( ["**/*.ts"], ), - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api/BUILD.bazel index 8b2ad8e1b5e1..a4a503db8b40 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/template_semantics/api/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "api", srcs = glob( ["**/*.ts"], ), - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core:api", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/test/BUILD.bazel index 25ba8d6b88ae..4878bd4d6d19 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/test/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core", @@ -29,7 +30,9 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck/diagnostics", "//packages/compiler-cli/src/ngtsc/typecheck/testing", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/typecheck/testing/BUILD.bazel b/packages/compiler-cli/src/ngtsc/typecheck/testing/BUILD.bazel index 71ec9e658b3e..91140414d493 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/testing/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/typecheck/testing/BUILD.bazel @@ -1,13 +1,12 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "testing", testonly = True, srcs = glob([ "**/*.ts", ]), - visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], - deps = [ + interop_deps = [ "//packages/compiler", "//packages/compiler-cli/src/ngtsc/core", "//packages/compiler-cli/src/ngtsc/file_system", @@ -24,7 +23,10 @@ ts_library( "//packages/compiler-cli/src/ngtsc/typecheck", "//packages/compiler-cli/src/ngtsc/typecheck/api", "//packages/compiler-cli/src/ngtsc/util", - "@npm//tinyglobby", - "@npm//typescript", + ], + visibility = ["//packages/compiler-cli/src/ngtsc:__subpackages__"], + deps = [ + "//:node_modules/tinyglobby", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/util/BUILD.bazel b/packages/compiler-cli/src/ngtsc/util/BUILD.bazel index cb06267fdbaa..c6aece637fab 100644 --- a/packages/compiler-cli/src/ngtsc/util/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/util/BUILD.bazel @@ -1,18 +1,20 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "util", srcs = glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/incremental:api", "//packages/compiler-cli/src/ngtsc/reflection", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/util/test/BUILD.bazel b/packages/compiler-cli/src/ngtsc/util/test/BUILD.bazel index 462e11cdf170..d959c54a148e 100644 --- a/packages/compiler-cli/src/ngtsc/util/test/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/util/test/BUILD.bazel @@ -1,20 +1,23 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages:types", "//packages/compiler-cli/src/ngtsc/file_system", "//packages/compiler-cli/src/ngtsc/file_system/testing", "//packages/compiler-cli/src/ngtsc/testing", "//packages/compiler-cli/src/ngtsc/util", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/validation/BUILD.bazel b/packages/compiler-cli/src/ngtsc/validation/BUILD.bazel index fe862ea541a9..160d11c1dc1f 100644 --- a/packages/compiler-cli/src/ngtsc/validation/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/validation/BUILD.bazel @@ -1,19 +1,21 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "validation", srcs = glob( ["**/*.ts"], ), - deps = [ + interop_deps = [ "//packages/compiler-cli/src/ngtsc/annotations", "//packages/compiler-cli/src/ngtsc/diagnostics", "//packages/compiler-cli/src/ngtsc/imports", "//packages/compiler-cli/src/ngtsc/reflection", "//packages/compiler-cli/src/ngtsc/typecheck/api", - "@npm//@types/node", - "@npm//typescript", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/src/ngtsc/xi18n/BUILD.bazel b/packages/compiler-cli/src/ngtsc/xi18n/BUILD.bazel index 4097839c1515..e7f8322ad5c9 100644 --- a/packages/compiler-cli/src/ngtsc/xi18n/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/xi18n/BUILD.bazel @@ -1,15 +1,17 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "xi18n", srcs = glob([ "*.ts", "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/compiler", - "@npm//typescript", + ], + deps = [ + "//:node_modules/typescript", ], ) diff --git a/packages/compiler-cli/test/compliance/partial/cli.ts b/packages/compiler-cli/test/compliance/partial/cli.ts index b55524a943dd..2be4c53934f3 100644 --- a/packages/compiler-cli/test/compliance/partial/cli.ts +++ b/packages/compiler-cli/test/compliance/partial/cli.ts @@ -10,9 +10,5 @@ import {fs} from '../test_helpers/get_compliance_tests'; import {generateGoldenPartial} from './generate_golden_partial'; -// TODO(devversion): Remove this when RBE issues are resolved. -// tslint:disable-next-line -console.log('TEMPORARY FOR DEBUGGING: Building golden partial:', process.argv.slice(2)); - const [testTsconfigPath, outputPath] = process.argv.slice(2); generateGoldenPartial(fs.resolve(testTsconfigPath), fs.resolve(outputPath)); diff --git a/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl b/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl index bae7e7bc0cb5..5cd5fcbfc945 100644 --- a/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl +++ b/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl @@ -11,6 +11,7 @@ def partial_compliance_golden(filePath): data = [ "//packages/compiler-cli/test/compliance/partial:generate_golden_partial_lib", "//packages/core:npm_package", + "//packages:package_json", filePath, ] + native.glob(["%s/*.ts" % path, "%s/**/*.html" % path, "%s/**/*.css" % path]) diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_compiler_compliance/components_and_directives/value_composition/template_literals.js b/packages/compiler-cli/test/compliance/test_cases/r3_compiler_compliance/components_and_directives/value_composition/template_literals.js index 835cee887e78..b77c2c4e0eb9 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_compiler_compliance/components_and_directives/value_composition/template_literals.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_compiler_compliance/components_and_directives/value_composition/template_literals.js @@ -6,6 +6,6 @@ if (rf & 2) { $r3$.ɵɵadvance(2); $r3$.ɵɵtextInterpolate1("With pipe: ", $r3$.ɵɵpipeBind1(6, 4, `hello ${ctx.name}`)); const $insideLet_r1$ = `Hello ${ctx.name}`; - $r3$.ɵɵadvance(4); + $r3$.ɵɵadvance(3); $r3$.ɵɵtextInterpolate1(" Inside let: ", $insideLet_r1$); } diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/GOLDEN_PARTIAL.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/GOLDEN_PARTIAL.js index dacc2e4b543b..bafe8f7befb4 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/GOLDEN_PARTIAL.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/GOLDEN_PARTIAL.js @@ -737,3 +737,214 @@ export declare class MyApp { static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; } +/**************************************************************************************************** + * PARTIAL FILE: let_with_pipe_optimization.js + ****************************************************************************************************/ +import { Component, Pipe } from '@angular/core'; +import * as i0 from "@angular/core"; +export class DoublePipe { + transform(value) { + return value * 2; + } +} +DoublePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: DoublePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); +DoublePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: DoublePipe, isStandalone: true, name: "double" }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: DoublePipe, decorators: [{ + type: Pipe, + args: [{ + name: 'double', + }] + }] }); +export class MyApp { + constructor() { + this.value = 1; + } +} +MyApp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); +MyApp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: MyApp, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` + @let foo = (value | double) + 3; + {{foo}} + `, isInline: true, dependencies: [{ kind: "pipe", type: DoublePipe, name: "double" }] }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, decorators: [{ + type: Component, + args: [{ + template: ` + @let foo = (value | double) + 3; + {{foo}} + `, + imports: [DoublePipe], + }] + }] }); + +/**************************************************************************************************** + * PARTIAL FILE: let_with_pipe_optimization.d.ts + ****************************************************************************************************/ +import { PipeTransform } from '@angular/core'; +import * as i0 from "@angular/core"; +export declare class DoublePipe implements PipeTransform { + transform(value: number): number; + static ɵfac: i0.ɵɵFactoryDeclaration<DoublePipe, never>; + static ɵpipe: i0.ɵɵPipeDeclaration<DoublePipe, "double", true>; +} +export declare class MyApp { + value: number; + static ɵfac: i0.ɵɵFactoryDeclaration<MyApp, never>; + static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; +} + +/**************************************************************************************************** + * PARTIAL FILE: let_in_i18n.js + ****************************************************************************************************/ +import { Component } from '@angular/core'; +import * as i0 from "@angular/core"; +export class MyApp { + constructor() { + this.value = 1; + } +} +MyApp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); +MyApp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: MyApp, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + </div> + `, isInline: true }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, decorators: [{ + type: Component, + args: [{ + template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + </div> + `, + }] + }] }); + +/**************************************************************************************************** + * PARTIAL FILE: let_in_i18n.d.ts + ****************************************************************************************************/ +import * as i0 from "@angular/core"; +export declare class MyApp { + value: number; + static ɵfac: i0.ɵɵFactoryDeclaration<MyApp, never>; + static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; +} + +/**************************************************************************************************** + * PARTIAL FILE: let_in_child_view_inside_i18n.js + ****************************************************************************************************/ +import { Component } from '@angular/core'; +import * as i0 from "@angular/core"; +export class MyApp { + constructor() { + this.value = 1; + } +} +MyApp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); +MyApp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: MyApp, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` + <div i18n> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + </div> + `, isInline: true }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, decorators: [{ + type: Component, + args: [{ + template: ` + <div i18n> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + </div> + `, + }] + }] }); + +/**************************************************************************************************** + * PARTIAL FILE: let_in_child_view_inside_i18n.d.ts + ****************************************************************************************************/ +import * as i0 from "@angular/core"; +export declare class MyApp { + value: number; + static ɵfac: i0.ɵɵFactoryDeclaration<MyApp, never>; + static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; +} + +/**************************************************************************************************** + * PARTIAL FILE: let_in_i18n_and_child_view.js + ****************************************************************************************************/ +import { Component } from '@angular/core'; +import * as i0 from "@angular/core"; +export class MyApp { + constructor() { + this.value = 1; + } +} +MyApp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); +MyApp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: MyApp, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + <ng-template>To repeat, the result is {{result}}</ng-template> + </div> + `, isInline: true }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, decorators: [{ + type: Component, + args: [{ + template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + <ng-template>To repeat, the result is {{result}}</ng-template> + </div> + `, + }] + }] }); + +/**************************************************************************************************** + * PARTIAL FILE: let_in_i18n_and_child_view.d.ts + ****************************************************************************************************/ +import * as i0 from "@angular/core"; +export declare class MyApp { + value: number; + static ɵfac: i0.ɵɵFactoryDeclaration<MyApp, never>; + static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; +} + +/**************************************************************************************************** + * PARTIAL FILE: let_preceded_by_i18n.js + ****************************************************************************************************/ +import { Component } from '@angular/core'; +import * as i0 from "@angular/core"; +export class MyApp { + constructor() { + this.value = 1; + } +} +MyApp.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, deps: [], target: i0.ɵɵFactoryTarget.Component }); +MyApp.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "0.0.0-PLACEHOLDER", type: MyApp, isStandalone: true, selector: "ng-component", ngImport: i0, template: ` + <div i18n>Hello {{value}}</div> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + `, isInline: true }); +i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0-PLACEHOLDER", ngImport: i0, type: MyApp, decorators: [{ + type: Component, + args: [{ + template: ` + <div i18n>Hello {{value}}</div> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + `, + }] + }] }); + +/**************************************************************************************************** + * PARTIAL FILE: let_preceded_by_i18n.d.ts + ****************************************************************************************************/ +import * as i0 from "@angular/core"; +export declare class MyApp { + value: number; + static ɵfac: i0.ɵɵFactoryDeclaration<MyApp, never>; + static ɵcmp: i0.ɵɵComponentDeclaration<MyApp, "ng-component", never, {}, {}, never, never, true, never>; +} + diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/TEST_CASES.json b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/TEST_CASES.json index 01b360b965c2..1f1b4980d200 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/TEST_CASES.json +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/TEST_CASES.json @@ -292,6 +292,91 @@ "failureMessage": "Incorrect template" } ] + }, + { + "description": "should not optimize away declareLet if expression is using a pipe", + "inputFiles": [ + "let_with_pipe_optimization.ts" + ], + "expectations": [ + { + "files": [ + { + "expected": "let_with_pipe_optimization_template.js", + "generated": "let_with_pipe_optimization.js" + } + ], + "failureMessage": "Incorrect template" + } + ] + }, + { + "description": "should handle an @let used only directly inside i18n", + "inputFiles": [ + "let_in_i18n.ts" + ], + "expectations": [ + { + "files": [ + { + "expected": "let_in_i18n_template.js", + "generated": "let_in_i18n.js" + } + ], + "failureMessage": "Incorrect template" + } + ] + }, + { + "description": "should handle an @let referenced inside a child view inside i18n", + "inputFiles": [ + "let_in_child_view_inside_i18n.ts" + ], + "expectations": [ + { + "files": [ + { + "expected": "let_in_child_view_inside_i18n_template.js", + "generated": "let_in_child_view_inside_i18n.js" + } + ], + "failureMessage": "Incorrect template" + } + ] + }, + { + "description": "should handle an @let referenced inside i18n and in a child view", + "inputFiles": [ + "let_in_i18n_and_child_view.ts" + ], + "expectations": [ + { + "files": [ + { + "expected": "let_in_i18n_and_child_view_template.js", + "generated": "let_in_i18n_and_child_view.js" + } + ], + "failureMessage": "Incorrect template" + } + ] + }, + { + "description": "should handle an @let preceded by an element with i18n", + "inputFiles": [ + "let_preceded_by_i18n.ts" + ], + "expectations": [ + { + "files": [ + { + "expected": "let_preceded_by_i18n_template.js", + "generated": "let_preceded_by_i18n.js" + } + ], + "failureMessage": "Incorrect template" + } + ] } ] } diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_for_loop_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_for_loop_template.js index bea004f803bc..cf8eac2deda8 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_for_loop_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_for_loop_template.js @@ -1,14 +1,12 @@ function MyApp_For_1_For_2_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵtext(1); + $r3$.ɵɵtext(0); } if (rf & 2) { const ɵ$index_3_r1 = ctx.$index; $r3$.ɵɵnextContext(); const $outerFirst_1$ = $r3$.ɵɵreadContextLet(0); const $innerFirst_2$ = ɵ$index_3_r1 === 0; - $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", $outerFirst_1$ || $innerFirst_2$, " "); } } @@ -18,7 +16,7 @@ function MyApp_For_1_For_2_Template(rf, ctx) { function MyApp_For_1_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵrepeaterCreate(1, MyApp_For_1_For_2_Template, 2, 1, null, null, $r3$.ɵɵrepeaterTrackByIdentity); + $r3$.ɵɵrepeaterCreate(1, MyApp_For_1_For_2_Template, 1, 1, null, null, $r3$.ɵɵrepeaterTrackByIdentity); } if (rf & 2) { const $item_r4$ = ctx.$implicit; diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n.ts new file mode 100644 index 000000000000..e8ffbee850fe --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n.ts @@ -0,0 +1,13 @@ +import {Component} from '@angular/core'; + +@Component({ + template: ` + <div i18n> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + </div> + `, +}) +export class MyApp { + value = 1; +} diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n_template.js new file mode 100644 index 000000000000..a3824b7b76d7 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_inside_i18n_template.js @@ -0,0 +1,57 @@ +function MyApp_ng_template_3_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵi18n(0, 0, 1); + } + if (rf & 2) { + $r3$.ɵɵnextContext(); + const $result_r1$ = $r3$.ɵɵreadContextLet(2); + $r3$.ɵɵi18nExp($result_r1$); + $r3$.ɵɵi18nApply(0); + } +} + +… + +$r3$.ɵɵdefineComponent({ + … + decls: 4, + vars: 1, + consts: () => { + let $i18n_0$; + if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { + /** + * @suppress {msgDescriptions} + */ + const $MSG_ID_WITH_SUFFIX$ = goog.getMsg("{$startTagNgTemplate}The result is {$interpolation}{$closeTagNgTemplate}", { + "closeTagNgTemplate": "\uFFFD/*3:1\uFFFD", + "interpolation": "\uFFFD0:1\uFFFD", + "startTagNgTemplate": "\uFFFD*3:1\uFFFD" + }, { + original_code: { + "closeTagNgTemplate": "</ng-template>", + "interpolation": "{{result}}", + "startTagNgTemplate": "<ng-template>" + } + }); + $i18n_0$ = $MSG_ID_WITH_SUFFIX$; + } else { + $i18n_0$ = $localize `${"\uFFFD*3:1\uFFFD"}:START_TAG_NG_TEMPLATE:The result is ${"\uFFFD0:1\uFFFD"}:INTERPOLATION:${"\uFFFD/*3:1\uFFFD"}:CLOSE_TAG_NG_TEMPLATE:`; + } + return [$i18n_0$]; + }, + template: function MyApp_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵelementStart(0, "div"); + $r3$.ɵɵi18nStart(1, 0); + $r3$.ɵɵdeclareLet(2); + $r3$.ɵɵtemplate(3, MyApp_ng_template_3_Template, 1, 1, "ng-template"); + $r3$.ɵɵi18nEnd(); + $r3$.ɵɵelementEnd(); + } + if (rf & 2) { + $r3$.ɵɵadvance(2); + $r3$.ɵɵstoreLet(ctx.value * 2); + } + }, + … +}); diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_template.js index ca794d628274..e8f38af91b63 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_child_view_template.js @@ -1,13 +1,11 @@ function MyApp_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵtext(1); + $r3$.ɵɵtext(0); } if (rf & 2) { $r3$.ɵɵnextContext(); const $two_0$ = $r3$.ɵɵreadContextLet(1); const $three_1$ = $two_0$ + 1; - $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", $three_1$, " "); } } @@ -16,7 +14,7 @@ function MyApp_Conditional_0_Conditional_0_Template(rf, ctx) { function MyApp_Conditional_0_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵconditionalCreate(0, MyApp_Conditional_0_Conditional_0_Template, 2, 1); + $r3$.ɵɵconditionalCreate(0, MyApp_Conditional_0_Conditional_0_Template, 1, 1); $r3$.ɵɵdeclareLet(1); } if (rf & 2) { diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n.ts new file mode 100644 index 000000000000..d58a95ccfcc5 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n.ts @@ -0,0 +1,13 @@ +import {Component} from '@angular/core'; + +@Component({ + template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + </div> + `, +}) +export class MyApp { + value = 1; +} diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view.ts new file mode 100644 index 000000000000..99abfcc60d78 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view.ts @@ -0,0 +1,14 @@ +import {Component} from '@angular/core'; + +@Component({ + template: ` + <div i18n> + @let result = value * 2; + The result is {{result}} + <ng-template>To repeat, the result is {{result}}</ng-template> + </div> + `, +}) +export class MyApp { + value = 1; +} diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view_template.js new file mode 100644 index 000000000000..9a353b45fe65 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_and_child_view_template.js @@ -0,0 +1,61 @@ +function MyApp_ng_template_3_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵi18n(0, 0, 1); + } + if (rf & 2) { + $r3$.ɵɵnextContext(); + const $result_r1$ = $r3$.ɵɵreadContextLet(2); + $r3$.ɵɵi18nExp($result_r1$); + $r3$.ɵɵi18nApply(0); + } +} + +… + +$r3$.ɵɵdefineComponent({ + … + decls: 4, + vars: 2, + consts: () => { + let $i18n_0$; + if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { + /** + * @suppress {msgDescriptions} + */ + const $MSG_ID_WITH_SUFFIX$ = goog.getMsg(" The result is {$interpolation} {$startTagNgTemplate}To repeat, the result is {$interpolation}{$closeTagNgTemplate}", { + "closeTagNgTemplate": "\uFFFD/*3:1\uFFFD", + "interpolation": "[\uFFFD0\uFFFD|\uFFFD0:1\uFFFD]", + "startTagNgTemplate": "\uFFFD*3:1\uFFFD" + }, { + original_code: { + "closeTagNgTemplate": "</ng-template>", + "interpolation": "{{result}}", + "startTagNgTemplate": "<ng-template>" + } + }); + $i18n_0$ = $MSG_ID_WITH_SUFFIX$; + } else { + $i18n_0$ = $localize ` The result is ${"[\uFFFD0\uFFFD|\uFFFD0:1\uFFFD]"}:INTERPOLATION: ${"\uFFFD*3:1\uFFFD"}:START_TAG_NG_TEMPLATE:To repeat, the result is ${"[\uFFFD0\uFFFD|\uFFFD0:1\uFFFD]"}:INTERPOLATION:${"\uFFFD/*3:1\uFFFD"}:CLOSE_TAG_NG_TEMPLATE:`; + } + $i18n_0$ = $r3$.ɵɵi18nPostprocess($i18n_0$); + return [$i18n_0$]; + }, + template: function MyApp_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵelementStart(0, "div"); + $r3$.ɵɵi18nStart(1, 0); + $r3$.ɵɵdeclareLet(2); + $r3$.ɵɵtemplate(3, MyApp_ng_template_3_Template, 1, 1, "ng-template"); + $r3$.ɵɵi18nEnd(); + $r3$.ɵɵelementEnd(); + } + if (rf & 2) { + $r3$.ɵɵadvance(2); + const $result_r2$ = $r3$.ɵɵstoreLet(ctx.value * 2); + $r3$.ɵɵadvance(); + $r3$.ɵɵi18nExp($result_r2$); + $r3$.ɵɵi18nApply(1); + } + }, + … +}); diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_template.js new file mode 100644 index 000000000000..e4134d696c13 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_in_i18n_template.js @@ -0,0 +1,36 @@ +$r3$.ɵɵdefineComponent({ + … + decls: 2, + vars: 1, + consts: () => { + let $i18n_0$; + if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { + /** + * @suppress {msgDescriptions} + */ + const $MSG_ID_WITH_SUFFIX$ = goog.getMsg(" The result is {$interpolation} ", { + "interpolation": "\uFFFD0\uFFFD" + }, { + original_code: { "interpolation": "{{result}}" } + }); + $i18n_0$ = $MSG_ID_WITH_SUFFIX$; + } else { + $i18n_0$ = $localize ` The result is ${"\uFFFD0\uFFFD"}:INTERPOLATION: `; + } + return [$i18n_0$]; + }, + template: function MyApp_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵelementStart(0, "div"); + $r3$.ɵɵi18n(1, 0); + $r3$.ɵɵelementEnd(); + } + if (rf & 2) { + const result_r1 = ctx.value * 2; + $r3$.ɵɵadvance(); + $r3$.ɵɵi18nExp(result_r1); + $r3$.ɵɵi18nApply(1); + } + }, + … +}); diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_invalid_forward_ref_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_invalid_forward_ref_template.js index 70018726307d..513c2dc21ff9 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_invalid_forward_ref_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_invalid_forward_ref_template.js @@ -1,7 +1,6 @@ function MyApp_ng_template_0_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1); } if (rf & 2) { const $ctx_r0$ = $r3$.ɵɵnextContext(); @@ -14,6 +13,6 @@ function MyApp_ng_template_0_Template(rf, ctx) { function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵtemplate(0, MyApp_ng_template_0_Template, 2, 1, "ng-template"); + $r3$.ɵɵtemplate(0, MyApp_ng_template_0_Template, 1, 1, "ng-template"); } } diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_forward_refs_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_forward_refs_template.js index 2357d55fa198..5276c7722fcf 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_forward_refs_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_forward_refs_template.js @@ -1,18 +1,16 @@ $r3$.ɵɵdefineComponent({ … - decls: 4, + decls: 3, vars: 1, … template: function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵtext(1); - $r3$.ɵɵelement(2, "input", null, 0); + $r3$.ɵɵtext(0); + $r3$.ɵɵelement(1, "input", null, 0); } if (rf & 2) { - const $name_r1$ = $r3$.ɵɵreference(3); + const $name_r1$ = $r3$.ɵɵreference(2); const $message_1$ = "Hello, " + $name_r1$.value; - $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", $message_1$, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_refs_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_refs_template.js index adc8cbaaa8ff..f28a44120a50 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_refs_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_local_refs_template.js @@ -1,19 +1,18 @@ $r3$.ɵɵdefineComponent({ … - decls: 6, + decls: 5, vars: 1, … template: function MyApp_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵelement(0, "input", null, 0)(2, "input", null, 1); - $r3$.ɵɵdeclareLet(4); - $r3$.ɵɵtext(5); + $r3$.ɵɵtext(4); } if (rf & 2) { const $name_r1$ = $r3$.ɵɵreference(1); const $lastName_r2$ = $r3$.ɵɵreference(3); const $fullName_2$ = $name_r1$.value + " " + $lastName_r2$.value; - $r3$.ɵɵadvance(5); + $r3$.ɵɵadvance(4); $r3$.ɵɵtextInterpolate1(" Hello, ", $fullName_2$, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_multiple_optimization_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_multiple_optimization_template.js index 77f8859f7fc2..781e70cfae74 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_multiple_optimization_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_multiple_optimization_template.js @@ -1,12 +1,11 @@ $r3$.ɵɵdefineComponent({ … - decls: 6, + decls: 2, vars: 2, template: function MyApp_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1)(2)(3)(4); - $r3$.ɵɵtext(5); + $r3$.ɵɵtext(1); } if (rf & 2) { $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); @@ -14,7 +13,7 @@ $r3$.ɵɵdefineComponent({ const $two_2$ = $one_1$ + 1; const $three_3$ = $two_2$ + 1; $three_3$ + 1; - $r3$.ɵɵadvance(5); + $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_child_view_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_child_view_template.js index 8af84eeeb79f..9d8f71d7d5a2 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_child_view_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_child_view_template.js @@ -1,10 +1,10 @@ -function MyApp_Conditional_6_Template(rf, ctx) { +function MyApp_Conditional_3_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); } if (rf & 2) { $r3$.ɵɵnextContext(); - const $three_0$ = $r3$.ɵɵreadContextLet(3); + const $three_0$ = $r3$.ɵɵreadContextLet(1); $r3$.ɵɵtextInterpolate1(" ", $three_0$, " "); } } @@ -13,26 +13,26 @@ function MyApp_Conditional_6_Template(rf, ctx) { $r3$.ɵɵdefineComponent({ … - decls: 7, + decls: 4, vars: 4, template: function MyApp_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1)(2)(3)(4); - $r3$.ɵɵtext(5); - $r3$.ɵɵconditionalCreate(6, MyApp_Conditional_6_Template, 1, 1); + $r3$.ɵɵdeclareLet(1); + $r3$.ɵɵtext(2); + $r3$.ɵɵconditionalCreate(3, MyApp_Conditional_3_Template, 1, 1); } if (rf & 2) { $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); const $one_1$ = ctx.value + 1; const $two_2$ = $one_1$ + 1; - $r3$.ɵɵadvance(3); + $r3$.ɵɵadvance(); const $three_3$ = i0.ɵɵstoreLet($two_2$ + 1); $three_3$ + 1; - $r3$.ɵɵadvance(2); + $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); $r3$.ɵɵadvance(); - $r3$.ɵɵconditional(true ? 6 : -1); + $r3$.ɵɵconditional(true ? 3 : -1); } }, … diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_listener_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_listener_template.js index 987c10c04c32..160e65e0c2f2 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_listener_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_optimization_listener_template.js @@ -1,18 +1,18 @@ $r3$.ɵɵdefineComponent({ … - decls: 7, + decls: 4, vars: 3, … template: function MyApp_Template(rf, ctx) { if (rf & 1) { const $_r1$ = $r3$.ɵɵgetCurrentView(); $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1)(2)(3)(4); - $r3$.ɵɵtext(5); - $r3$.ɵɵelementStart(6, "button", 0); - $r3$.ɵɵlistener("click", function MyApp_Template_button_click_6_listener() { + $r3$.ɵɵdeclareLet(1); + $r3$.ɵɵtext(2); + $r3$.ɵɵelementStart(3, "button", 0); + $r3$.ɵɵlistener("click", function MyApp_Template_button_click_3_listener() { $r3$.ɵɵrestoreView($_r1$); - const $three_1$ = $r3$.ɵɵreadContextLet(3); + const $three_1$ = $r3$.ɵɵreadContextLet(1); return $r3$.ɵɵresetView(ctx.callback($three_1$)); }); $r3$.ɵɵelementEnd(); @@ -21,10 +21,10 @@ $r3$.ɵɵdefineComponent({ $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); const $one_2$ = ctx.value + 1; const $two_3$ = $one_2$ + 1; - $r3$.ɵɵadvance(3); + $r3$.ɵɵadvance(); const $three_5$ = $r3$.ɵɵstoreLet($two_3$ + 1); $three_5$ + 1; - $r3$.ɵɵadvance(2); + $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_partial_optimization_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_partial_optimization_template.js index a0433ca20084..0f1ba0151d9e 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_partial_optimization_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_partial_optimization_template.js @@ -1,12 +1,11 @@ $r3$.ɵɵdefineComponent({ … - decls: 6, + decls: 2, vars: 2, template: function MyApp_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1)(2)(3)(4); - $r3$.ɵɵtext(5); + $r3$.ɵɵtext(1); } if (rf & 2) { $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); @@ -14,7 +13,7 @@ $r3$.ɵɵdefineComponent({ const $two_1$ = $one_0$ + 1; const $three_2$ = $two_1$ + 1; $three_2$ + 1; - $r3$.ɵɵadvance(5); + $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", $two_1$, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n.ts new file mode 100644 index 000000000000..12995a828624 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n.ts @@ -0,0 +1,12 @@ +import {Component} from '@angular/core'; + +@Component({ + template: ` + <div i18n>Hello {{value}}</div> + @let result = value * 2; + <ng-template>The result is {{result}}</ng-template> + `, +}) +export class MyApp { + value = 1; +} diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n_template.js new file mode 100644 index 000000000000..9e82c8b0e6b9 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_preceded_by_i18n_template.js @@ -0,0 +1,52 @@ +function MyApp_ng_template_3_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵtext(0); + } + if (rf & 2) { + $r3$.ɵɵnextContext(); + const $result_r1$ = $r3$.ɵɵreadContextLet(2); + $r3$.ɵɵtextInterpolate1("The result is ", $result_r1$); + } +} + +… + +$r3$.ɵɵdefineComponent({ + … + decls: 4, + vars: 2, + consts: () => { + let $i18n_0$; + if (typeof ngI18nClosureMode !== "undefined" && ngI18nClosureMode) { + /** + * @suppress {msgDescriptions} + */ + const $MSG_ID_WITH_SUFFIX$ = goog.getMsg("Hello {$interpolation}", { + "interpolation": "\uFFFD0\uFFFD" + }, { + original_code: { "interpolation": "{{value}}" } + }); + $i18n_0$ = $MSG_ID_WITH_SUFFIX$; + } else { + $i18n_0$ = $localize `Hello ${"\uFFFD0\uFFFD"}:INTERPOLATION:`; + } + return [$i18n_0$]; + }, + template: function MyApp_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵelementStart(0, "div"); + $r3$.ɵɵi18n(1, 0); + $r3$.ɵɵelementEnd(); + $r3$.ɵɵdeclareLet(2); + $r3$.ɵɵtemplate(3, MyApp_ng_template_3_Template, 1, 1, "ng-template"); + } + if (rf & 2) { + $r3$.ɵɵadvance(); + $r3$.ɵɵi18nExp(ctx.value); + $r3$.ɵɵi18nApply(1); + $r3$.ɵɵadvance(); + $r3$.ɵɵstoreLet(ctx.value * 2); + } + }, + … +}); diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_single_optimization_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_single_optimization_template.js index bb1c2d7d1c12..014fa4c11fb3 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_single_optimization_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_single_optimization_template.js @@ -1,17 +1,16 @@ $r3$.ɵɵdefineComponent({ … - decls: 3, + decls: 2, vars: 2, template: function MyApp_Template(rf, ctx) { if (rf & 1) { $r3$.ɵɵtext(0); - $r3$.ɵɵdeclareLet(1); - $r3$.ɵɵtext(2); + $r3$.ɵɵtext(1); } if (rf & 2) { $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); ctx.value * 2; - $r3$.ɵɵadvance(2); + $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" ", ctx.value, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization.ts b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization.ts new file mode 100644 index 000000000000..b13d69cfe6a9 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization.ts @@ -0,0 +1,21 @@ +import {Component, Pipe, PipeTransform} from '@angular/core'; + +@Pipe({ + name: 'double', +}) +export class DoublePipe implements PipeTransform { + transform(value: number) { + return value * 2; + } +} + +@Component({ + template: ` + @let foo = (value | double) + 3; + {{foo}} + `, + imports: [DoublePipe], +}) +export class MyApp { + value = 1; +} diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization_template.js new file mode 100644 index 000000000000..fc68633bf142 --- /dev/null +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_optimization_template.js @@ -0,0 +1,18 @@ +$r3$.ɵɵdefineComponent({ + … + decls: 3, + vars: 3, + template: function MyApp_Template(rf, ctx) { + if (rf & 1) { + $r3$.ɵɵdeclareLet(0); + $r3$.ɵɵpipe(1, "double"); + $r3$.ɵɵtext(2); + } + if (rf & 2) { + const $foo_r1$ = $r3$.ɵɵpipeBind1(1, 1, ctx.value) + 3; + $r3$.ɵɵadvance(2); + $r3$.ɵɵtextInterpolate1(" ", $foo_r1$, " "); + } + }, + … +}); diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_template.js index eee169658cfc..b29cf3f52c84 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/let_with_pipe_template.js @@ -1,17 +1,17 @@ $r3$.ɵɵdefineComponent({ … - decls: 4, + decls: 3, vars: 3, template: function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0)(1); - $r3$.ɵɵpipe(2, "double"); - $r3$.ɵɵtext(3); + $r3$.ɵɵdeclareLet(0); + $r3$.ɵɵpipe(1, "double"); + $r3$.ɵɵtext(2); } if (rf & 2) { const $one_0$ = ctx.value + 1; - const $result_1$ = $r3$.ɵɵpipeBind1(2, 1, $one_0$); - $r3$.ɵɵadvance(3); + const $result_1$ = $r3$.ɵɵpipeBind1(1, 1, $one_0$); + $r3$.ɵɵadvance(2); $r3$.ɵɵtextInterpolate1(" The result is ", $result_1$, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/multiple_let_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/multiple_let_template.js index 4aa7e827b732..b0258b180533 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/multiple_let_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/multiple_let_template.js @@ -1,17 +1,15 @@ $r3$.ɵɵdefineComponent({ … - decls: 4, + decls: 1, vars: 1, template: function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0)(1)(2); - $r3$.ɵɵtext(3); + $r3$.ɵɵtext(0); } if (rf & 2) { const $one_0$ = ctx.value + 1; const $two_1$ = $one_0$ + 1; const $result_2$ = $two_1$ + 1; - $r3$.ɵɵadvance(3); $r3$.ɵɵtextInterpolate1(" The result is ", $result_2$, " "); } }, diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/shadowed_let_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/shadowed_let_template.js index 52bc21a1b553..22a8d0e82a98 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/shadowed_let_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/shadowed_let_template.js @@ -1,11 +1,9 @@ -function MyApp_Conditional_1_Template(rf, ctx) { +function MyApp_Conditional_0_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵtext(1); + $r3$.ɵɵtext(0); } if (rf & 2) { const $value_r1$ = "local"; - $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" The value comes from ", $value_r1$, " "); } } @@ -14,17 +12,15 @@ function MyApp_Conditional_1_Template(rf, ctx) { $r3$.ɵɵdefineComponent({ … - decls: 2, + decls: 1, vars: 1, template: function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵconditionalCreate(1, MyApp_Conditional_1_Template, 2, 1); + $r3$.ɵɵconditionalCreate(0, MyApp_Conditional_0_Template, 1, 1); } if (rf & 2) { "parent"; - $r3$.ɵɵadvance(); - $r3$.ɵɵconditional(true ? 1 : -1); + $r3$.ɵɵconditional(true ? 0 : -1); } }, … diff --git a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/simple_let_template.js b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/simple_let_template.js index 8a33a74e60f9..aa24a681a361 100644 --- a/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/simple_let_template.js +++ b/packages/compiler-cli/test/compliance/test_cases/r3_view_compiler_let/simple_let_template.js @@ -1,15 +1,13 @@ $r3$.ɵɵdefineComponent({ … - decls: 2, + decls: 1, vars: 1, template: function MyApp_Template(rf, ctx) { if (rf & 1) { - $r3$.ɵɵdeclareLet(0); - $r3$.ɵɵtext(1); + $r3$.ɵɵtext(0); } if (rf & 2) { const $result_0$ = ctx.value * 2; - $r3$.ɵɵadvance(); $r3$.ɵɵtextInterpolate1(" The result is ", $result_0$, " "); } }, diff --git a/packages/compiler-cli/tsconfig-build.json b/packages/compiler-cli/tsconfig-build.json deleted file mode 100644 index 22a034f607d4..000000000000 --- a/packages/compiler-cli/tsconfig-build.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "extends": "../tsconfig-build.json", - - "compilerOptions": { - "module": "es2020", - "stripInternal": false, - "target": "es2020", - "lib": [ - "es2020" - ], - "baseUrl": ".", - "rootDir": ".", - "paths": { - "@angular/compiler": ["../../dist/packages/compiler"] - }, - "strict": true, - "types": [ - "node" - ], - "outDir": "../../dist/packages/compiler-cli" - }, - "bazelOptions": { - "suppressTsconfigOverrideWarnings": true - }, - - "exclude": [ - "integrationtest" - ], - - "files": [ - "index.ts", - "src/main.ts", - "src/extract_i18n.ts", - "../../node_modules/@types/node/index.d.ts", - "../../node_modules/@types/jasmine/index.d.ts" - ] -} diff --git a/packages/compiler-cli/tsconfig-test.json b/packages/compiler-cli/tsconfig-test.json new file mode 100644 index 000000000000..ace6b03bd1a8 --- /dev/null +++ b/packages/compiler-cli/tsconfig-test.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": ["jasmine", "node"] + } +} diff --git a/packages/compiler-cli/tsconfig.json b/packages/compiler-cli/tsconfig.json index d3e4c1d4d7a8..3238d684be65 100644 --- a/packages/compiler-cli/tsconfig.json +++ b/packages/compiler-cli/tsconfig.json @@ -1,14 +1,6 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig-build.json", "compilerOptions": { - "target": "es2020", - "module": "es2020", - "lib": [ - "es2020" - ], - "strict": true, - "types": [ - "jasmine" - ] + "types": ["node"] } } diff --git a/packages/compiler/BUILD.bazel b/packages/compiler/BUILD.bazel index 42fb6c9be78a..15e9277968f9 100644 --- a/packages/compiler/BUILD.bazel +++ b/packages/compiler/BUILD.bazel @@ -1,4 +1,5 @@ load("//tools:defaults.bzl", "ng_package", "ts_library", "tsec_test") +load("//tools:defaults2.bzl", "npm_package") package(default_visibility = ["//visibility:public"]) @@ -43,6 +44,16 @@ ng_package( ], ) +# TODO(devversion): Temporary early `npm_package` for making compiler usable in `rules_angular`. +# Long-term, `pkg_npm` will be migrated to `npm_package` in general. +npm_package( + name = "pkg", + srcs = [":npm_package"], + replace_prefixes = { + "npm_package/": "", + }, +) + filegroup( name = "files_for_docgen", srcs = glob([ diff --git a/packages/compiler/src/template/pipeline/ir/src/traits.ts b/packages/compiler/src/template/pipeline/ir/src/traits.ts index a5783de7434e..8da07824794a 100644 --- a/packages/compiler/src/template/pipeline/ir/src/traits.ts +++ b/packages/compiler/src/template/pipeline/ir/src/traits.ts @@ -15,22 +15,22 @@ import {SlotHandle} from './handle'; /** * Marker symbol for `ConsumesSlotOpTrait`. */ -export const ConsumesSlot = Symbol('ConsumesSlot'); +export const ConsumesSlot: unique symbol = Symbol('ConsumesSlot'); /** * Marker symbol for `DependsOnSlotContextOpTrait`. */ -export const DependsOnSlotContext = Symbol('DependsOnSlotContext'); +export const DependsOnSlotContext: unique symbol = Symbol('DependsOnSlotContext'); /** * Marker symbol for `ConsumesVars` trait. */ -export const ConsumesVarsTrait = Symbol('ConsumesVars'); +export const ConsumesVarsTrait: unique symbol = Symbol('ConsumesVars'); /** * Marker symbol for `UsesVarOffset` trait. */ -export const UsesVarOffset = Symbol('UsesVarOffset'); +export const UsesVarOffset: unique symbol = Symbol('UsesVarOffset'); /** * Marks an operation as requiring allocation of one or more data slots for storage. diff --git a/packages/compiler/src/template/pipeline/src/emit.ts b/packages/compiler/src/template/pipeline/src/emit.ts index 7bbac71abde7..2916262f9c69 100644 --- a/packages/compiler/src/template/pipeline/src/emit.ts +++ b/packages/compiler/src/template/pipeline/src/emit.ts @@ -116,11 +116,6 @@ const phases: Phase[] = [ {kind: Kind.Tmpl, fn: generateConditionalExpressions}, {kind: Kind.Tmpl, fn: createPipes}, {kind: Kind.Tmpl, fn: configureDeferInstructions}, - {kind: Kind.Tmpl, fn: convertI18nText}, - {kind: Kind.Tmpl, fn: convertI18nBindings}, - {kind: Kind.Tmpl, fn: removeUnusedI18nAttributesOps}, - {kind: Kind.Tmpl, fn: assignI18nSlotDependencies}, - {kind: Kind.Tmpl, fn: applyI18nExpressions}, {kind: Kind.Tmpl, fn: createVariadicPipes}, {kind: Kind.Both, fn: generatePureLiteralStructures}, {kind: Kind.Tmpl, fn: generateProjectionDefs}, @@ -143,6 +138,11 @@ const phases: Phase[] = [ {kind: Kind.Both, fn: generateTemporaryVariables}, {kind: Kind.Both, fn: optimizeVariables}, {kind: Kind.Both, fn: optimizeStoreLet}, + {kind: Kind.Tmpl, fn: convertI18nText}, + {kind: Kind.Tmpl, fn: convertI18nBindings}, + {kind: Kind.Tmpl, fn: removeUnusedI18nAttributesOps}, + {kind: Kind.Tmpl, fn: assignI18nSlotDependencies}, + {kind: Kind.Tmpl, fn: applyI18nExpressions}, {kind: Kind.Tmpl, fn: allocateSlots}, {kind: Kind.Tmpl, fn: resolveI18nElementPlaceholders}, {kind: Kind.Tmpl, fn: resolveI18nExpressionPlaceholders}, diff --git a/packages/compiler/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.ts b/packages/compiler/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.ts index 794c5d5fe849..99138ef5b1af 100644 --- a/packages/compiler/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.ts +++ b/packages/compiler/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.ts @@ -67,7 +67,26 @@ export function assignI18nSlotDependencies(job: CompilationJob) { continue; } + let hasDifferentTarget = false; if (ir.hasDependsOnSlotContextTrait(updateOp) && updateOp.target !== createOp.xref) { + hasDifferentTarget = true; + } else if ( + // Some expressions may consume slots as well (e.g. `storeLet`). + updateOp.kind === ir.OpKind.Statement || + updateOp.kind === ir.OpKind.Variable + ) { + ir.visitExpressionsInOp(updateOp, (expr) => { + if ( + !hasDifferentTarget && + ir.hasDependsOnSlotContextTrait(expr) && + expr.target !== createOp.xref + ) { + hasDifferentTarget = true; + } + }); + } + + if (hasDifferentTarget) { break; } diff --git a/packages/compiler/src/template/pipeline/src/phases/store_let_optimization.ts b/packages/compiler/src/template/pipeline/src/phases/store_let_optimization.ts index c546b4d028d5..7470f997ca4e 100644 --- a/packages/compiler/src/template/pipeline/src/phases/store_let_optimization.ts +++ b/packages/compiler/src/template/pipeline/src/phases/store_let_optimization.ts @@ -6,7 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as o from '../../../../output/output_ast'; import * as ir from '../../ir'; import {CompilationJob} from '../compilation'; @@ -15,12 +14,18 @@ import {CompilationJob} from '../compilation'; */ export function optimizeStoreLet(job: CompilationJob): void { const letUsedExternally = new Set<ir.XrefId>(); + const declareLetOps = new Map<ir.XrefId, ir.DeclareLetOp>(); // Since `@let` declarations can be referenced in child views, both in // the creation block (via listeners) and in the update block, we have // to look through all the ops to find the references. for (const unit of job.units) { for (const op of unit.ops()) { + // Take advantage that we're already looking through all the ops and track some more info. + if (op.kind === ir.OpKind.DeclareLet) { + declareLetOps.set(op.xref, op); + } + ir.visitExpressionsInOp(op, (expr) => { if (expr instanceof ir.ContextLetReferenceExpr) { letUsedExternally.add(expr.target); @@ -29,17 +34,43 @@ export function optimizeStoreLet(job: CompilationJob): void { } } - // TODO(crisbeto): potentially remove the unused calls completely, pending discussion. for (const unit of job.units) { for (const op of unit.update) { ir.transformExpressionsInOp( op, - (expression) => - expression instanceof ir.StoreLetExpr && !letUsedExternally.has(expression.target) - ? expression.value - : expression, + (expr) => { + // If a @let isn't used in other views, we don't have to store its value. + if (expr instanceof ir.StoreLetExpr && !letUsedExternally.has(expr.target)) { + // Furthermore, if the @let isn't using pipes, we can also drop its declareLet op. + // We need to keep the declareLet if there are pipes, because they can use DI which + // requires the TNode created by declareLet. + if (!hasPipe(expr)) { + ir.OpList.remove<ir.CreateOp>(declareLetOps.get(expr.target)!); + } + return expr.value; + } + return expr; + }, ir.VisitorContextFlag.None, ); } } } + +/** Determines if a `storeLet` expression contains a pipe. */ +function hasPipe(root: ir.StoreLetExpr): boolean { + let result = false; + + ir.transformExpressionsInExpression( + root, + (expr) => { + if (expr instanceof ir.PipeBindingExpr || expr instanceof ir.PipeBindingVariadicExpr) { + result = true; + } + return expr; + }, + ir.VisitorContextFlag.None, + ); + + return result; +} diff --git a/packages/compiler/test/BUILD.bazel b/packages/compiler/test/BUILD.bazel index bad7acb0a619..270a737e7c90 100644 --- a/packages/compiler/test/BUILD.bazel +++ b/packages/compiler/test/BUILD.bazel @@ -1,5 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") # Test that should only be run in node NODE_ONLY = [ @@ -7,12 +6,6 @@ NODE_ONLY = [ "aot/**/*.ts", ] -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/compiler/index.mjs", - deps = ["//packages/compiler"], -) - ts_library( name = "test_lib", testonly = True, diff --git a/packages/core/BUILD.bazel b/packages/core/BUILD.bazel index 7a48a99d3d66..eea42df04b0d 100644 --- a/packages/core/BUILD.bazel +++ b/packages/core/BUILD.bazel @@ -1,7 +1,8 @@ load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") load("//adev/shared-docs/pipeline/api-gen:generate_api_docs.bzl", "generate_api_docs") load("//packages/common/locales:index.bzl", "generate_base_locale_file") -load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "ng_module", "ng_package", "tsec_test") +load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "ng_package", "tsec_test") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -20,7 +21,7 @@ generated_file_test( generated = ":base_locale_file_generated", ) -ng_module( +ng_project( name = "core", srcs = glob( [ @@ -28,19 +29,21 @@ ng_module( "src/**/*.ts", ], ), - deps = [ - "//packages:types", + interop_deps = [ "//packages/core/primitives/di", "//packages/core/primitives/dom-navigation", "//packages/core/primitives/event-dispatch", - "//packages/core/primitives/signals", - "//packages/core/src/compiler", - "//packages/core/src/di/interface", - "//packages/core/src/interface", - "//packages/core/src/reflection", - "//packages/core/src/util", "//packages/zone.js/lib:zone_d_ts", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//packages:goog_types_rjs", + "//packages/core/primitives/signals:signals_rjs", + "//packages/core/src/compiler:compiler_rjs", + "//packages/core/src/di/interface:interface_rjs", + "//packages/core/src/interface:interface_rjs", + "//packages/core/src/reflection:reflection_rjs", + "//packages/core/src/util:util_rjs", ], ) diff --git a/packages/core/index.ts b/packages/core/index.ts index b74f643640e8..1c4f8030896c 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -6,10 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -/* This file is not used to build this module. It is only used during editing - * by the TypeScript language service and during build for verification. `ngc` - * replaces this file with production index.ts when it rewrites private symbol - * names. - */ +// Note: This is needed so that dependent compilations relying on inferred types properly +// emit module names instead of relative imports. Previously, Bazel auto-inserted this. +// TODO: Consider removing this and enforcing proper explicit types. +/// <amd-module name="@angular/core" /> export * from './public_api'; diff --git a/packages/core/primitives/event-dispatch/src/event_dispatcher.ts b/packages/core/primitives/event-dispatch/src/event_dispatcher.ts index 839d2d8a111e..27f32a1d7aca 100644 --- a/packages/core/primitives/event-dispatch/src/event_dispatcher.ts +++ b/packages/core/primitives/event-dispatch/src/event_dispatcher.ts @@ -13,13 +13,17 @@ import {isCaptureEventType} from './event_type'; import {UnrenamedEventContract} from './eventcontract'; import {Restriction} from './restriction'; +// Necessary to make the `ngDevMode` global types available. +import '../../../src/util/ng_dev_mode'; + /** * A replayer is a function that is called when there are queued events, from the `EventContract`. */ export type Replayer = (eventInfoWrappers: Event[]) => void; /** An internal symbol used to indicate whether propagation should be stopped or not. */ -export const PROPAGATION_STOPPED_SYMBOL = /* @__PURE__ */ Symbol.for('propagationStopped'); +export const PROPAGATION_STOPPED_SYMBOL: unique symbol = + /* @__PURE__ */ Symbol.for('propagationStopped'); /** Extra event phases beyond what the browser provides. */ export const EventPhase = { diff --git a/packages/core/primitives/signals/BUILD.bazel b/packages/core/primitives/signals/BUILD.bazel index 437b45044437..fd9cce00aa24 100644 --- a/packages/core/primitives/signals/BUILD.bazel +++ b/packages/core/primitives/signals/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//packages:__pkg__", @@ -7,7 +8,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "signals", srcs = glob( [ diff --git a/packages/core/primitives/signals/src/graph.ts b/packages/core/primitives/signals/src/graph.ts index 52667b34116f..40e1bc4a58c6 100644 --- a/packages/core/primitives/signals/src/graph.ts +++ b/packages/core/primitives/signals/src/graph.ts @@ -37,7 +37,7 @@ let postProducerCreatedFn: ReactiveHookFn | null = null; * * This can be used to auto-unwrap signals in various cases, or to auto-wrap non-signal values. */ -export const SIGNAL = /* @__PURE__ */ Symbol('SIGNAL'); +export const SIGNAL: unique symbol = /* @__PURE__ */ Symbol('SIGNAL'); export function setActiveConsumer(consumer: ReactiveNode | null): ReactiveNode | null { const prev = activeConsumer; diff --git a/packages/core/primitives/signals/src/linked_signal.ts b/packages/core/primitives/signals/src/linked_signal.ts index 9f9409926901..230c1b85ddb7 100644 --- a/packages/core/primitives/signals/src/linked_signal.ts +++ b/packages/core/primitives/signals/src/linked_signal.ts @@ -119,7 +119,7 @@ export function linkedSignalUpdateFn<S, D>( // Note: Using an IIFE here to ensure that the spread assignment is not considered // a side-effect, ending up preserving `LINKED_SIGNAL_NODE` and `REACTIVE_NODE`. // TODO: remove when https://github.com/evanw/esbuild/issues/3392 is resolved. -export const LINKED_SIGNAL_NODE = /* @__PURE__ */ (() => { +export const LINKED_SIGNAL_NODE: object = /* @__PURE__ */ (() => { return { ...REACTIVE_NODE, value: UNSET, diff --git a/packages/core/rxjs-interop/test/BUILD.bazel b/packages/core/rxjs-interop/test/BUILD.bazel index 53ed5f7bf1f3..a60005fc739a 100644 --- a/packages/core/rxjs-interop/test/BUILD.bazel +++ b/packages/core/rxjs-interop/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/core/rxjs-interop/index.mjs", - deps = ["//packages/core/rxjs-interop"], -) ts_library( name = "test_lib", diff --git a/packages/core/schematics/BUILD.bazel b/packages/core/schematics/BUILD.bazel index 5bbdb55523cc..5c5c71b65058 100644 --- a/packages/core/schematics/BUILD.bazel +++ b/packages/core/schematics/BUILD.bazel @@ -1,3 +1,4 @@ +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") load("//tools:defaults.bzl", "pkg_npm") @@ -7,6 +8,12 @@ exports_files([ "collection.json", ]) +copy_to_bin( + name = "package_json", + srcs = ["package.json"], + visibility = ["//packages/core/schematics/test:__subpackages__"], +) + pkg_npm( name = "npm_package", srcs = [ diff --git a/packages/core/schematics/migrations/control-flow-migration/BUILD.bazel b/packages/core/schematics/migrations/control-flow-migration/BUILD.bazel index 1ceb022b139a..d55c367fbd39 100644 --- a/packages/core/schematics/migrations/control-flow-migration/BUILD.bazel +++ b/packages/core/schematics/migrations/control-flow-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/migrations/document-core/BUILD.bazel b/packages/core/schematics/migrations/document-core/BUILD.bazel index bbb119d28cb1..9c31e7d9f45b 100644 --- a/packages/core/schematics/migrations/document-core/BUILD.bazel +++ b/packages/core/schematics/migrations/document-core/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/migrations/document-core/document_core_migration.ts b/packages/core/schematics/migrations/document-core/document_core_migration.ts index 63a2253af1de..4fb71f3b473d 100644 --- a/packages/core/schematics/migrations/document-core/document_core_migration.ts +++ b/packages/core/schematics/migrations/document-core/document_core_migration.ts @@ -91,6 +91,6 @@ export class DocumentCoreMigration extends TsurgeFunnelMigration< } override async stats() { - return {counters: {}}; + return confirmAsSerializable({}); } } diff --git a/packages/core/schematics/migrations/google3/BUILD.bazel b/packages/core/schematics/migrations/google3/BUILD.bazel deleted file mode 100644 index b4ee726449a7..000000000000 --- a/packages/core/schematics/migrations/google3/BUILD.bazel +++ /dev/null @@ -1,30 +0,0 @@ -load("//tools:defaults.bzl", "esbuild", "ts_library") - -ts_library( - name = "google3", - srcs = glob(["**/*.ts"]), - tsconfig = "//packages/core/schematics:tsconfig.json", - deps = [ - "//packages/core/schematics/utils", - "//packages/core/schematics/utils/tslint", - "@npm//tslint", - "@npm//typescript", - ], -) - -esbuild( - name = "wait_for_async_rule_cjs", - entry_point = ":waitForAsyncRule.ts", - format = "cjs", - output = "waitForAsyncCjsRule.js", - platform = "node", - deps = [":google3"], -) - -filegroup( - name = "google3_cjs", - srcs = [ - ":wait_for_async_rule_cjs", - ], - visibility = ["//packages/core/schematics/test/google3:__pkg__"], -) diff --git a/packages/core/schematics/migrations/google3/waitForAsyncRule.ts b/packages/core/schematics/migrations/google3/waitForAsyncRule.ts deleted file mode 100644 index 1bb3cdb05715..000000000000 --- a/packages/core/schematics/migrations/google3/waitForAsyncRule.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {Replacement, RuleFailure, Rules} from 'tslint'; -import ts from 'typescript'; - -import {getImportSpecifier, replaceImport} from '../../utils/typescript/imports'; -import {closestNode} from '../../utils/typescript/nodes'; -import {isReferenceToImport} from '../../utils/typescript/symbol'; - -// This rule is also used inside of Google by Typescript linting. - -/** Name of the deprecated function that we're removing. */ -const deprecatedFunction = 'async'; - -/** Name of the function that will replace the deprecated one. */ -const newFunction = 'waitForAsync'; - -/** TSLint rule that migrates from `async` to `waitForAsync`. */ -export class Rule extends Rules.TypedRule { - override applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): RuleFailure[] { - const failures: RuleFailure[] = []; - const asyncImportSpecifier = getImportSpecifier( - sourceFile, - '@angular/core/testing', - deprecatedFunction, - ); - const asyncImport = asyncImportSpecifier - ? closestNode(asyncImportSpecifier, ts.isNamedImports) - : null; - - // If there are no imports of `async`, we can exit early. - if (asyncImportSpecifier && asyncImport) { - const typeChecker = program.getTypeChecker(); - const printer = ts.createPrinter(); - failures.push(this._getNamedImportsFailure(asyncImport, sourceFile, printer)); - this.findAsyncReferences(sourceFile, typeChecker, asyncImportSpecifier).forEach((node) => - failures.push(this._getIdentifierNodeFailure(node, sourceFile)), - ); - } - - return failures; - } - - /** Gets a failure for an import of the `async` function. */ - private _getNamedImportsFailure( - node: ts.NamedImports, - sourceFile: ts.SourceFile, - printer: ts.Printer, - ): RuleFailure { - const replacementText = printer.printNode( - ts.EmitHint.Unspecified, - replaceImport(node, deprecatedFunction, newFunction), - sourceFile, - ); - - return new RuleFailure( - sourceFile, - node.getStart(), - node.getEnd(), - `Imports of the deprecated ${deprecatedFunction} function are not allowed. Use ${newFunction} instead.`, - this.ruleName, - new Replacement(node.getStart(), node.getWidth(), replacementText), - ); - } - - /** Gets a failure for an identifier node. */ - private _getIdentifierNodeFailure(node: ts.Identifier, sourceFile: ts.SourceFile): RuleFailure { - return new RuleFailure( - sourceFile, - node.getStart(), - node.getEnd(), - `References to the deprecated ${deprecatedFunction} function are not allowed. Use ${newFunction} instead.`, - this.ruleName, - new Replacement(node.getStart(), node.getWidth(), newFunction), - ); - } - - /** Finds calls to the `async` function. */ - private findAsyncReferences( - sourceFile: ts.SourceFile, - typeChecker: ts.TypeChecker, - asyncImportSpecifier: ts.ImportSpecifier, - ) { - const results = new Set<ts.Identifier>(); - ts.forEachChild(sourceFile, function visitNode(node: ts.Node) { - if ( - ts.isCallExpression(node) && - ts.isIdentifier(node.expression) && - node.expression.text === deprecatedFunction && - isReferenceToImport(typeChecker, node.expression, asyncImportSpecifier) - ) { - results.add(node.expression); - } - - ts.forEachChild(node, visitNode); - }); - - return results; - } -} diff --git a/packages/core/schematics/migrations/inject-flags/BUILD.bazel b/packages/core/schematics/migrations/inject-flags/BUILD.bazel index 25cc85eeaa1b..d33b3b61cee9 100644 --- a/packages/core/schematics/migrations/inject-flags/BUILD.bazel +++ b/packages/core/schematics/migrations/inject-flags/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/migrations/inject-flags/inject_flags_migration.ts b/packages/core/schematics/migrations/inject-flags/inject_flags_migration.ts index 9de9d3a39cd8..ce46ebefdcbd 100644 --- a/packages/core/schematics/migrations/inject-flags/inject_flags_migration.ts +++ b/packages/core/schematics/migrations/inject-flags/inject_flags_migration.ts @@ -153,7 +153,7 @@ export class InjectFlagsMigration extends TsurgeFunnelMigration< } override async stats() { - return {counters: {}}; + return confirmAsSerializable({}); } } diff --git a/packages/core/schematics/migrations/output-migration/output-migration.spec.ts b/packages/core/schematics/migrations/output-migration/output-migration.spec.ts index fc9f059c8ee5..fd29b798d56f 100644 --- a/packages/core/schematics/migrations/output-migration/output-migration.spec.ts +++ b/packages/core/schematics/migrations/output-migration/output-migration.spec.ts @@ -678,9 +678,9 @@ describe('outputs', () => { ]); const stats = await runResults.getStatistics(); - expect(stats.counters['detectedOutputs']).toBe(4); - expect(stats.counters['problematicOutputs']).toBe(2); - expect(stats.counters['successRate']).toBe(0.5); + expect(stats['detectedOutputs']).toBe(4); + expect(stats['problematicOutputs']).toBe(2); + expect(stats['successRate']).toBe(0.5); }); it('should capture migration statistics without problematic usages', async () => { @@ -696,9 +696,9 @@ describe('outputs', () => { ]); const stats = await runResults.getStatistics(); - expect(stats.counters['detectedOutputs']).toBe(2); - expect(stats.counters['problematicOutputs']).toBe(0); - expect(stats.counters['successRate']).toBe(1); + expect(stats['detectedOutputs']).toBe(2); + expect(stats['problematicOutputs']).toBe(0); + expect(stats['successRate']).toBe(1); }); }); diff --git a/packages/core/schematics/migrations/output-migration/output-migration.ts b/packages/core/schematics/migrations/output-migration/output-migration.ts index 3a34dca85b68..fd2c376f17dc 100644 --- a/packages/core/schematics/migrations/output-migration/output-migration.ts +++ b/packages/core/schematics/migrations/output-migration/output-migration.ts @@ -9,7 +9,6 @@ import ts from 'typescript'; import { confirmAsSerializable, - MigrationStats, ProgramInfo, projectFile, ProjectFile, @@ -384,7 +383,7 @@ export class OutputMigration extends TsurgeFunnelMigration< return confirmAsSerializable(combinedData); } - override async stats(globalMetadata: CompilationUnitData): Promise<MigrationStats> { + override async stats(globalMetadata: CompilationUnitData) { const detectedOutputs = new Set(Object.keys(globalMetadata.outputFields)).size + globalMetadata.problematicDeclarationCount; @@ -395,13 +394,11 @@ export class OutputMigration extends TsurgeFunnelMigration< const successRate = detectedOutputs > 0 ? (detectedOutputs - problematicOutputs) / detectedOutputs : 1; - return { - counters: { - detectedOutputs, - problematicOutputs, - successRate, - }, - }; + return confirmAsSerializable({ + detectedOutputs, + problematicOutputs, + successRate, + }); } override async migrate(globalData: CompilationUnitData) { diff --git a/packages/core/schematics/migrations/self-closing-tags-migration/self-closing-tags-migration.ts b/packages/core/schematics/migrations/self-closing-tags-migration/self-closing-tags-migration.ts index e3ffe0f5e10f..8191c066cbc1 100644 --- a/packages/core/schematics/migrations/self-closing-tags-migration/self-closing-tags-migration.ts +++ b/packages/core/schematics/migrations/self-closing-tags-migration/self-closing-tags-migration.ts @@ -9,7 +9,6 @@ import ts from 'typescript'; import { confirmAsSerializable, - MigrationStats, ProgramInfo, projectFile, ProjectFile, @@ -128,21 +127,17 @@ export class SelfClosingTagsMigration extends TsurgeFunnelMigration< return confirmAsSerializable(globalMeta); } - override async stats( - globalMetadata: SelfClosingTagsCompilationUnitData, - ): Promise<MigrationStats> { + override async stats(globalMetadata: SelfClosingTagsCompilationUnitData) { const touchedFilesCount = globalMetadata.tagReplacements.length; const replacementCount = globalMetadata.tagReplacements.reduce( (acc, cur) => acc + cur.replacementCount, 0, ); - return { - counters: { - touchedFilesCount, - replacementCount, - }, - }; + return confirmAsSerializable({ + touchedFilesCount, + replacementCount, + }); } override async migrate(globalData: SelfClosingTagsCompilationUnitData) { diff --git a/packages/core/schematics/migrations/signal-migration/src/migration.ts b/packages/core/schematics/migrations/signal-migration/src/migration.ts index 476b7d0eedc4..ccd5c48ac7d6 100644 --- a/packages/core/schematics/migrations/signal-migration/src/migration.ts +++ b/packages/core/schematics/migrations/signal-migration/src/migration.ts @@ -231,15 +231,13 @@ export class SignalInputMigration extends TsurgeComplexMigration< } } - return { - counters: { - fullCompilationInputs, - sourceInputs, - incompatibleInputs, - ...fieldIncompatibleCounts, - ...classIncompatibleCounts, - }, - }; + return confirmAsSerializable({ + fullCompilationInputs, + sourceInputs, + incompatibleInputs, + ...fieldIncompatibleCounts, + ...classIncompatibleCounts, + }); } } diff --git a/packages/core/schematics/migrations/signal-migration/src/utils/is_identifier_free_in_scope.ts b/packages/core/schematics/migrations/signal-migration/src/utils/is_identifier_free_in_scope.ts index ea5ed640c5ae..d483e21ec31e 100644 --- a/packages/core/schematics/migrations/signal-migration/src/utils/is_identifier_free_in_scope.ts +++ b/packages/core/schematics/migrations/signal-migration/src/utils/is_identifier_free_in_scope.ts @@ -11,7 +11,7 @@ import ts from 'typescript'; import {isNodeDescendantOf} from './is_descendant_of'; /** Symbol that can be used to mark a variable as reserved, synthetically. */ -export const ReservedMarker = Symbol(); +export const ReservedMarker: unique symbol = Symbol(); // typescript/stable/src/compiler/types.ts;l=967;rcl=651008033 export interface LocalsContainer extends ts.Node { diff --git a/packages/core/schematics/migrations/signal-migration/test/BUILD.bazel b/packages/core/schematics/migrations/signal-migration/test/BUILD.bazel index 989d53f952fb..b97750f5cd03 100644 --- a/packages/core/schematics/migrations/signal-migration/test/BUILD.bazel +++ b/packages/core/schematics/migrations/signal-migration/test/BUILD.bazel @@ -42,6 +42,7 @@ integration_test( ], data = [ ":golden_test_runner", + "//packages:package_json", "//packages/core/schematics/migrations/signal-migration/src:bin", ], environment = { @@ -64,6 +65,7 @@ integration_test( ], data = [ ":golden_test_runner", + "//packages:package_json", "//packages/core/schematics/migrations/signal-migration/src:bin", "@npm_ts_versions//%s" % version, ], @@ -87,6 +89,7 @@ integration_test( ], data = [ ":golden_test_runner", + "//packages:package_json", "//packages/core/schematics/migrations/signal-migration/src:bin", ], environment = { @@ -111,6 +114,7 @@ integration_test( data = [ ":batch_runner", ":golden_test_runner", + "//packages:package_json", "//packages/core/schematics/migrations/signal-migration/src:batch_test_bin", "//packages/core/schematics/migrations/signal-migration/src:bin", ], diff --git a/packages/core/schematics/migrations/signal-queries-migration/migration.spec.ts b/packages/core/schematics/migrations/signal-queries-migration/migration.spec.ts index a6bdc549ef2d..93f017b285ee 100644 --- a/packages/core/schematics/migrations/signal-queries-migration/migration.spec.ts +++ b/packages/core/schematics/migrations/signal-queries-migration/migration.spec.ts @@ -1586,14 +1586,14 @@ describe('signal queries migration', () => { ], ); - expect(await getStatistics()).toEqual({ - counters: { - queriesCount: 3, - multiQueries: 2, - incompatibleQueries: 2, - 'incompat-field-Accessor': 1, - 'incompat-field-WriteAssignment': 1, - }, + // Cast as we dynamically add fields to the stats. This can be improved in follow-ups + // when stats for this migration are leveraging more complex data structures. + expect((await getStatistics()) as object).toEqual({ + queriesCount: 3, + multiQueries: 2, + incompatibleQueries: 2, + 'incompat-field-Accessor': 1, + 'incompat-field-WriteAssignment': 1, }); }); diff --git a/packages/core/schematics/migrations/signal-queries-migration/migration.ts b/packages/core/schematics/migrations/signal-queries-migration/migration.ts index 94473c363605..0defafc61101 100644 --- a/packages/core/schematics/migrations/signal-queries-migration/migration.ts +++ b/packages/core/schematics/migrations/signal-queries-migration/migration.ts @@ -644,15 +644,13 @@ export class SignalQueriesMigration extends TsurgeComplexMigration< } } - return { - counters: { - queriesCount, - multiQueries, - incompatibleQueries, - ...fieldIncompatibleCounts, - ...classIncompatibleCounts, - }, - }; + return confirmAsSerializable({ + queriesCount, + multiQueries, + incompatibleQueries, + ...fieldIncompatibleCounts, + ...classIncompatibleCounts, + }); } } diff --git a/packages/core/schematics/migrations/test-bed-get/BUILD.bazel b/packages/core/schematics/migrations/test-bed-get/BUILD.bazel index b8e354c7492e..96f4cbc766ba 100644 --- a/packages/core/schematics/migrations/test-bed-get/BUILD.bazel +++ b/packages/core/schematics/migrations/test-bed-get/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/migrations/test-bed-get/test_bed_get_migration.ts b/packages/core/schematics/migrations/test-bed-get/test_bed_get_migration.ts index e252eae2dc83..64e8554733f1 100644 --- a/packages/core/schematics/migrations/test-bed-get/test_bed_get_migration.ts +++ b/packages/core/schematics/migrations/test-bed-get/test_bed_get_migration.ts @@ -110,6 +110,6 @@ export class TestBedGetMigration extends TsurgeFunnelMigration< } override async stats() { - return {counters: {}}; + return confirmAsSerializable({}); } } diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel b/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel index 3b057f58ab65..634e87b3331f 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts b/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts index b04e3b2cf015..9f35647d9a4a 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/index.ts @@ -28,8 +28,7 @@ export function migrate(): Rule { afterAnalysisFailure: () => { context.logger.error('Schematic failed unexpectedly with no analysis data'); }, - whenDone: (stats) => { - const {removedImports, changedFiles} = stats.counters; + whenDone: ({removedImports, changedFiles}) => { let statsMessage: string; if (removedImports === 0) { diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts b/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts index 924ed5380bec..e17a6ebc6f46 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts @@ -10,7 +10,6 @@ import ts from 'typescript'; import { BaseProgramInfo, confirmAsSerializable, - MigrationStats, ProgramInfo, projectFile, ProjectFileID, @@ -163,13 +162,11 @@ export class UnusedImportsMigration extends TsurgeFunnelMigration< return confirmAsSerializable(combinedData); } - override async stats(globalMetadata: CompilationUnitData): Promise<MigrationStats> { - return { - counters: { - removedImports: globalMetadata.removedIdentifiers.length, - changedFiles: globalMetadata.changedFiles, - }, - }; + override async stats(globalMetadata: CompilationUnitData) { + return confirmAsSerializable({ + removedImports: globalMetadata.removedIdentifiers.length, + changedFiles: globalMetadata.changedFiles, + }); } /** Gets an ID that can be used to look up a node based on its location. */ diff --git a/packages/core/schematics/ng-generate/inject-migration/BUILD.bazel b/packages/core/schematics/ng-generate/inject-migration/BUILD.bazel index 4d8b6d40afdb..0a586699cef0 100644 --- a/packages/core/schematics/ng-generate/inject-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/inject-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/ng-generate/output-migration/BUILD.bazel b/packages/core/schematics/ng-generate/output-migration/BUILD.bazel index 8c4f80d96d2d..0977b8572093 100644 --- a/packages/core/schematics/ng-generate/output-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/output-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/ng-generate/signals:__pkg__", "//packages/core/schematics/test:__pkg__", ], diff --git a/packages/core/schematics/ng-generate/output-migration/index.ts b/packages/core/schematics/ng-generate/output-migration/index.ts index 9f7c2613c014..9293b4daa5a7 100644 --- a/packages/core/schematics/ng-generate/output-migration/index.ts +++ b/packages/core/schematics/ng-generate/output-migration/index.ts @@ -57,8 +57,7 @@ export function migrate(options: Options): Rule { afterAnalysisFailure: () => { context.logger.error('Migration failed unexpectedly with no analysis data'); }, - whenDone: ({counters}) => { - const {detectedOutputs, problematicOutputs, successRate} = counters; + whenDone: ({detectedOutputs, problematicOutputs, successRate}) => { const migratedOutputs = detectedOutputs - problematicOutputs; const successRatePercent = (successRate * 100).toFixed(2); diff --git a/packages/core/schematics/ng-generate/route-lazy-loading/BUILD.bazel b/packages/core/schematics/ng-generate/route-lazy-loading/BUILD.bazel index b65aff989215..b0041404ed0a 100644 --- a/packages/core/schematics/ng-generate/route-lazy-loading/BUILD.bazel +++ b/packages/core/schematics/ng-generate/route-lazy-loading/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/ng-generate/self-closing-tags-migration/BUILD.bazel b/packages/core/schematics/ng-generate/self-closing-tags-migration/BUILD.bazel index 88ed0defa647..c0bc89bd3154 100644 --- a/packages/core/schematics/ng-generate/self-closing-tags-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/self-closing-tags-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts b/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts index 5b9109b12ff4..789852800f6c 100644 --- a/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts +++ b/packages/core/schematics/ng-generate/self-closing-tags-migration/index.ts @@ -46,8 +46,7 @@ export function migrate(options: Options): Rule { afterAnalysisFailure: () => { context.logger.error('Migration failed unexpectedly with no analysis data'); }, - whenDone: ({counters}) => { - const {touchedFilesCount, replacementCount} = counters; + whenDone: ({touchedFilesCount, replacementCount}) => { context.logger.info(''); context.logger.info(`Successfully migrated to self-closing tags 🎉`); context.logger.info( diff --git a/packages/core/schematics/ng-generate/signal-input-migration/BUILD.bazel b/packages/core/schematics/ng-generate/signal-input-migration/BUILD.bazel index b13e73a158a0..2d165c19c663 100644 --- a/packages/core/schematics/ng-generate/signal-input-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/signal-input-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/ng-generate/signals:__pkg__", "//packages/core/schematics/test:__pkg__", ], diff --git a/packages/core/schematics/ng-generate/signal-input-migration/index.ts b/packages/core/schematics/ng-generate/signal-input-migration/index.ts index e6a49fd8a1b5..8330d732a9d2 100644 --- a/packages/core/schematics/ng-generate/signal-input-migration/index.ts +++ b/packages/core/schematics/ng-generate/signal-input-migration/index.ts @@ -61,8 +61,7 @@ export function migrate(options: Options): Rule { afterAnalysisFailure: () => { context.logger.error('Migration failed unexpectedly with no analysis data'); }, - whenDone: ({counters}) => { - const {sourceInputs, incompatibleInputs} = counters; + whenDone: ({sourceInputs, incompatibleInputs}) => { const migratedInputs = sourceInputs - incompatibleInputs; context.logger.info(''); diff --git a/packages/core/schematics/ng-generate/signal-queries-migration/BUILD.bazel b/packages/core/schematics/ng-generate/signal-queries-migration/BUILD.bazel index 5a070b03f0b5..e5681ca88a01 100644 --- a/packages/core/schematics/ng-generate/signal-queries-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/signal-queries-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/ng-generate/signals:__pkg__", "//packages/core/schematics/test:__pkg__", ], diff --git a/packages/core/schematics/ng-generate/signal-queries-migration/index.ts b/packages/core/schematics/ng-generate/signal-queries-migration/index.ts index b13fa85aa156..ac0b63515bcf 100644 --- a/packages/core/schematics/ng-generate/signal-queries-migration/index.ts +++ b/packages/core/schematics/ng-generate/signal-queries-migration/index.ts @@ -61,11 +61,10 @@ export function migrate(options: Options): Rule { context.logger.info(`Processing analysis data between targets...`); context.logger.info(``); }, - whenDone: ({counters}) => { + whenDone: ({queriesCount, incompatibleQueries}) => { context.logger.info(''); context.logger.info(`Successfully migrated to signal queries 🎉`); - const {queriesCount, incompatibleQueries} = counters; const migratedQueries = queriesCount - incompatibleQueries; context.logger.info(''); diff --git a/packages/core/schematics/ng-generate/signals/BUILD.bazel b/packages/core/schematics/ng-generate/signals/BUILD.bazel index a3baf449d9bb..f0ba97402e66 100644 --- a/packages/core/schematics/ng-generate/signals/BUILD.bazel +++ b/packages/core/schematics/ng-generate/signals/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/ng-generate/standalone-migration/BUILD.bazel b/packages/core/schematics/ng-generate/standalone-migration/BUILD.bazel index 5e68b8c969e9..b2951db0be7f 100644 --- a/packages/core/schematics/ng-generate/standalone-migration/BUILD.bazel +++ b/packages/core/schematics/ng-generate/standalone-migration/BUILD.bazel @@ -3,7 +3,6 @@ load("//tools:defaults.bzl", "ts_library") package( default_visibility = [ "//packages/core/schematics:__pkg__", - "//packages/core/schematics/migrations/google3:__pkg__", "//packages/core/schematics/test:__pkg__", ], ) diff --git a/packages/core/schematics/test/BUILD.bazel b/packages/core/schematics/test/BUILD.bazel index c5579f3786a4..d41b8309bcc7 100644 --- a/packages/core/schematics/test/BUILD.bazel +++ b/packages/core/schematics/test/BUILD.bazel @@ -21,6 +21,7 @@ jasmine_node_test( "//packages/core/schematics:bundles", "//packages/core/schematics:collection.json", "//packages/core/schematics:migrations.json", + "//packages/core/schematics:package_json", "//packages/core/schematics/ng-generate/cleanup-unused-imports:static_files", "//packages/core/schematics/ng-generate/inject-migration:static_files", "//packages/core/schematics/ng-generate/output-migration:static_files", @@ -31,6 +32,7 @@ jasmine_node_test( "//packages/core/schematics/ng-generate/signals:static_files", "//packages/core/schematics/ng-generate/standalone-migration:static_files", ], + shard_count = 4, deps = [ ":test_lib", "@npm//shelljs", diff --git a/packages/core/schematics/test/google3/BUILD.bazel b/packages/core/schematics/test/google3/BUILD.bazel deleted file mode 100644 index 081aaa5c5eb9..000000000000 --- a/packages/core/schematics/test/google3/BUILD.bazel +++ /dev/null @@ -1,24 +0,0 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") - -ts_library( - name = "test_lib", - testonly = True, - srcs = glob(["**/*.ts"]), - deps = [ - "@npm//@bazel/runfiles", - "@npm//@types/shelljs", - "@npm//tslint", - ], -) - -jasmine_node_test( - name = "google3", - data = [ - "//packages/core/schematics/migrations/google3:google3_cjs", - ], - templated_args = ["--nobazel_run_linker"], - deps = [ - ":test_lib", - "@npm//shelljs", - ], -) diff --git a/packages/core/schematics/test/google3/wait_for_async_spec.ts b/packages/core/schematics/test/google3/wait_for_async_spec.ts deleted file mode 100644 index 4989ff9e89b6..000000000000 --- a/packages/core/schematics/test/google3/wait_for_async_spec.ts +++ /dev/null @@ -1,215 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import {runfiles} from '@bazel/runfiles'; -import {readFileSync, writeFileSync} from 'fs'; -import {dirname, join} from 'path'; -import shx from 'shelljs'; -import {Configuration, Linter} from 'tslint'; - -describe('Google3 waitForAsync TSLint rule', () => { - const rulesDirectory = dirname( - runfiles.resolvePackageRelative('../../migrations/google3/waitForAsyncCjsRule.js'), - ); - - let tmpDir: string; - - beforeEach(() => { - tmpDir = join(process.env['TEST_TMPDIR']!, 'google3-test'); - shx.mkdir('-p', tmpDir); - - // We need to declare the Angular symbols we're testing for, otherwise type checking won't work. - writeFile( - 'testing.d.ts', - ` - export declare function async(fn: Function): any; - `, - ); - - writeFile( - 'tsconfig.json', - JSON.stringify({ - compilerOptions: { - module: 'es2015', - baseUrl: './', - paths: { - '@angular/core/testing': ['testing.d.ts'], - }, - }, - }), - ); - }); - - afterEach(() => shx.rm('-r', tmpDir)); - - function runTSLint(fix: boolean) { - const program = Linter.createProgram(join(tmpDir, 'tsconfig.json')); - const linter = new Linter({fix, rulesDirectory: [rulesDirectory]}, program); - const config = Configuration.parseConfigFile({rules: {'wait-for-async-cjs': true}}); - - program.getRootFileNames().forEach((fileName) => { - linter.lint(fileName, program.getSourceFile(fileName)!.getFullText(), config); - }); - - return linter; - } - - function writeFile(fileName: string, content: string) { - writeFileSync(join(tmpDir, fileName), content); - } - - function getFile(fileName: string) { - return readFileSync(join(tmpDir, fileName), 'utf8'); - } - - it('should flag async imports and usages', () => { - writeFile( - '/index.ts', - ` - import { async, inject } from '@angular/core/testing'; - - it('should work', async(() => { - expect(inject('foo')).toBe('foo'); - })); - - it('should also work', async(() => { - expect(inject('bar')).toBe('bar'); - })); - `, - ); - - const linter = runTSLint(false); - const failures = linter.getResult().failures.map((failure) => failure.getFailure()); - expect(failures.length).toBe(3); - expect(failures[0]).toMatch(/Imports of the deprecated async function are not allowed/); - expect(failures[1]).toMatch(/References to the deprecated async function are not allowed/); - expect(failures[2]).toMatch(/References to the deprecated async function are not allowed/); - }); - - it('should change async imports to waitForAsync', () => { - writeFile( - '/index.ts', - ` - import { async, inject } from '@angular/core/testing'; - - it('should work', async(() => { - expect(inject('foo')).toBe('foo'); - })); - `, - ); - - runTSLint(true); - expect(getFile('/index.ts')).toContain( - `import { inject, waitForAsync } from '@angular/core/testing';`, - ); - }); - - it('should change aliased async imports to waitForAsync', () => { - writeFile( - '/index.ts', - ` - import { async as renamedAsync, inject } from '@angular/core/testing'; - - it('should work', renamedAsync(() => { - expect(inject('foo')).toBe('foo'); - })); - `, - ); - - runTSLint(true); - expect(getFile('/index.ts')).toContain( - `import { inject, waitForAsync as renamedAsync } from '@angular/core/testing';`, - ); - }); - - it('should not change async imports if they are not from @angular/core/testing', () => { - writeFile( - '/index.ts', - ` - import { inject } from '@angular/core/testing'; - import { async } from './my-test-library'; - - it('should work', async(() => { - expect(inject('foo')).toBe('foo'); - })); - `, - ); - - runTSLint(true); - const content = getFile('/index.ts'); - expect(content).toContain(`import { inject } from '@angular/core/testing';`); - expect(content).toContain(`import { async } from './my-test-library';`); - }); - - it('should not change imports if waitForAsync was already imported', () => { - writeFile( - '/index.ts', - ` - import { async, inject, waitForAsync } from '@angular/core/testing'; - - it('should work', async(() => { - expect(inject('foo')).toBe('foo'); - })); - - it('should also work', waitForAsync(() => { - expect(inject('bar')).toBe('bar'); - })); - `, - ); - - runTSLint(true); - expect(getFile('/index.ts')).toContain( - `import { async, inject, waitForAsync } from '@angular/core/testing';`, - ); - }); - - it('should change calls from `async` to `waitForAsync`', () => { - writeFile( - '/index.ts', - ` - import { async, inject } from '@angular/core/testing'; - - it('should work', async(() => { - expect(inject('foo')).toBe('foo'); - })); - - it('should also work', async(() => { - expect(inject('bar')).toBe('bar'); - })); - `, - ); - - runTSLint(true); - - const content = getFile('/index.ts'); - expect(content).toContain(`import { inject, waitForAsync } from '@angular/core/testing';`); - expect(content).toContain(`it('should work', waitForAsync(() => {`); - expect(content).toContain(`it('should also work', waitForAsync(() => {`); - }); - - it('should not change aliased calls', () => { - writeFile( - '/index.ts', - ` - import { async as renamedAsync, inject } from '@angular/core/testing'; - - it('should work', renamedAsync(() => { - expect(inject('foo')).toBe('foo'); - })); - `, - ); - - runTSLint(true); - - const content = getFile('/index.ts'); - expect(content).toContain( - `import { inject, waitForAsync as renamedAsync } from '@angular/core/testing';`, - ); - expect(content).toContain(`it('should work', renamedAsync(() => {`); - }); -}); diff --git a/packages/core/schematics/utils/tslint/BUILD.bazel b/packages/core/schematics/utils/tslint/BUILD.bazel deleted file mode 100644 index 73b96009d12e..000000000000 --- a/packages/core/schematics/utils/tslint/BUILD.bazel +++ /dev/null @@ -1,11 +0,0 @@ -load("//tools:defaults.bzl", "ts_library") - -ts_library( - name = "tslint", - srcs = glob(["**/*.ts"]), - tsconfig = "//packages/core/schematics:tsconfig.json", - visibility = [ - "//packages/core/schematics/migrations/google3:__pkg__", - ], - deps = ["@npm//typescript"], -) diff --git a/packages/core/schematics/utils/tslint/tslint_html_source_file.ts b/packages/core/schematics/utils/tslint/tslint_html_source_file.ts deleted file mode 100644 index 28bb2ff04b04..000000000000 --- a/packages/core/schematics/utils/tslint/tslint_html_source_file.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import ts from 'typescript'; - -/** - * Creates a fake TypeScript source file that can contain content of templates or stylesheets. - * The fake TypeScript source file then can be passed to TSLint in combination with a rule failure. - */ -export function createHtmlSourceFile(filePath: string, content: string): ts.SourceFile { - const sourceFile = ts.createSourceFile(filePath, `\`${content}\``, ts.ScriptTarget.ES5); - - // Subtract two characters because the string literal quotes are only needed for parsing - // and are not part of the actual source file. - (sourceFile.end as number) = sourceFile.end - 2; - - // Note: This does not affect the way TSLint applies replacements for external resource files. - // At the time of writing, TSLint loads files manually if the actual rule source file is not - // equal to the source file of the replacement. This means that the replacements need proper - // offsets without the string literal quote symbols. - sourceFile.getFullText = function () { - return sourceFile.text.substring(1, sourceFile.text.length - 1); - }; - - sourceFile.getText = sourceFile.getFullText; - - // Update the "text" property to be set to the template content without quotes. This is - // necessary so that the TypeScript line starts map is properly computed. - sourceFile.text = sourceFile.getFullText(); - - return sourceFile; -} diff --git a/packages/core/schematics/utils/tsurge/base_migration.ts b/packages/core/schematics/utils/tsurge/base_migration.ts index 516d5cf9d9ff..f01dbc83e73a 100644 --- a/packages/core/schematics/utils/tsurge/base_migration.ts +++ b/packages/core/schematics/utils/tsurge/base_migration.ts @@ -14,15 +14,9 @@ import {BaseProgramInfo, ProgramInfo} from './program_info'; import {Serializable} from './helpers/serializable'; import {createBaseProgramInfo} from './helpers/create_program'; -/** - * Type describing statistics that could be tracked - * by migrations. - * - * Statistics may be tracked depending on the runner. - */ -export interface MigrationStats { - counters: Record<string, number>; -} +/** Type helper extracting the stats type of a migration. */ +export type MigrationStats<T> = + T extends TsurgeBaseMigration<unknown, unknown, infer Stats> ? Stats : never; /** * @private @@ -32,7 +26,12 @@ export interface MigrationStats { * For example, this class exposes methods to conveniently create * TypeScript programs, while also allowing migration authors to override. */ -export abstract class TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> { +export abstract class TsurgeBaseMigration< + UnitAnalysisMetadata, + CombinedGlobalMetadata, + // Note: Even when optional, they can be inferred from implementations. + Stats = unknown, +> { /** * Advanced Tsurge users can override this method, but most of the time, * overriding {@link prepareProgram} is more desirable. @@ -103,5 +102,5 @@ export abstract class TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMe ): Promise<Serializable<CombinedGlobalMetadata>>; /** Extract statistics based on the global metadata. */ - abstract stats(globalMetadata: CombinedGlobalMetadata): Promise<MigrationStats>; + abstract stats(globalMetadata: CombinedGlobalMetadata): Promise<Serializable<Stats>>; } diff --git a/packages/core/schematics/utils/tsurge/beam_pipeline/read_units_blob.ts b/packages/core/schematics/utils/tsurge/beam_pipeline/read_units_blob.ts deleted file mode 100644 index eec8c1e9e573..000000000000 --- a/packages/core/schematics/utils/tsurge/beam_pipeline/read_units_blob.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import * as fs from 'fs'; -import * as readline from 'readline'; -import {TsurgeMigration} from '../migration'; - -/** - * Integrating a `Tsurge` migration requires the "merging" of all - * compilation unit data into a single "global migration data". - * - * This is achieved in a Beam pipeline by having a pipeline stage that - * takes all compilation unit worker data and writing it into a single - * buffer, delimited by new lines (`\n`). - * - * This "merged bytes files", containing all unit data, one per line, can - * then be parsed by this function and fed into the migration merge logic. - * - * @returns All compilation unit data for the migration. - */ -export function readCompilationUnitBlob<UnitData, GlobalData>( - _migrationForTypeSafety: TsurgeMigration<UnitData, GlobalData>, - mergedUnitDataByteAbsFilePath: string, -): Promise<UnitData[]> { - return new Promise((resolve, reject) => { - const rl = readline.createInterface({ - input: fs.createReadStream(mergedUnitDataByteAbsFilePath, 'utf8'), - crlfDelay: Infinity, - }); - - const unitData: UnitData[] = []; - let failed = false; - rl.on('line', (line) => { - const trimmedLine = line.trim(); - if (trimmedLine === '') { - return; - } - - try { - const parsed = JSON.parse(trimmedLine) as UnitData; - unitData.push(parsed); - } catch (e) { - failed = true; - reject(new Error(`Could not parse data line: ${e} — ${trimmedLine}`)); - rl.close(); - } - }); - - rl.on('close', async () => { - if (!failed) { - resolve(unitData); - } - }); - }); -} diff --git a/packages/core/schematics/utils/tsurge/executors/analyze_exec.ts b/packages/core/schematics/utils/tsurge/executors/analyze_exec.ts index 892dece28a74..5f51b302cc6e 100644 --- a/packages/core/schematics/utils/tsurge/executors/analyze_exec.ts +++ b/packages/core/schematics/utils/tsurge/executors/analyze_exec.ts @@ -16,7 +16,7 @@ import {Serializable} from '../helpers/serializable'; * @returns the serializable migration unit data. */ export async function executeAnalyzePhase<UnitData, GlobalData>( - migration: TsurgeMigration<UnitData, GlobalData>, + migration: TsurgeMigration<UnitData, GlobalData, unknown>, tsconfigAbsolutePath: string, ): Promise<Serializable<UnitData>> { const baseInfo = migration.createProgram(tsconfigAbsolutePath); diff --git a/packages/core/schematics/utils/tsurge/executors/combine_exec.ts b/packages/core/schematics/utils/tsurge/executors/combine_exec.ts index 09c21477997d..bc354e83f29f 100644 --- a/packages/core/schematics/utils/tsurge/executors/combine_exec.ts +++ b/packages/core/schematics/utils/tsurge/executors/combine_exec.ts @@ -16,7 +16,7 @@ import {TsurgeMigration} from '../migration'; * @returns the serializable combined unit data. */ export async function executeCombinePhase<UnitData, GlobalData>( - migration: TsurgeMigration<UnitData, GlobalData>, + migration: TsurgeMigration<UnitData, GlobalData, unknown>, unitA: UnitData, unitB: UnitData, ): Promise<Serializable<UnitData>> { diff --git a/packages/core/schematics/utils/tsurge/executors/global_meta_exec.ts b/packages/core/schematics/utils/tsurge/executors/global_meta_exec.ts index 950f0ebcb3ac..0566b85ad684 100644 --- a/packages/core/schematics/utils/tsurge/executors/global_meta_exec.ts +++ b/packages/core/schematics/utils/tsurge/executors/global_meta_exec.ts @@ -16,7 +16,7 @@ import {TsurgeMigration} from '../migration'; * @returns the serializable global meta. */ export async function executeGlobalMetaPhase<UnitData, GlobalData>( - migration: TsurgeMigration<UnitData, GlobalData>, + migration: TsurgeMigration<UnitData, GlobalData, unknown>, combinedUnitData: UnitData, ): Promise<Serializable<GlobalData>> { return await migration.globalMeta(combinedUnitData); diff --git a/packages/core/schematics/utils/tsurge/executors/migrate_exec.ts b/packages/core/schematics/utils/tsurge/executors/migrate_exec.ts index 3a64e820415b..268eba950692 100644 --- a/packages/core/schematics/utils/tsurge/executors/migrate_exec.ts +++ b/packages/core/schematics/utils/tsurge/executors/migrate_exec.ts @@ -21,7 +21,7 @@ import {Replacement} from '../replacement'; * absolute project directory path (to allow for applying). */ export async function executeMigratePhase<UnitData, GlobalData>( - migration: TsurgeMigration<UnitData, GlobalData>, + migration: TsurgeMigration<UnitData, GlobalData, unknown>, globalMetadata: GlobalData, tsconfigAbsolutePath: string, ): Promise<{replacements: Replacement[]; projectRoot: AbsoluteFsPath}> { diff --git a/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts b/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts index 8b4f51566e8e..8c231969db94 100644 --- a/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts +++ b/packages/core/schematics/utils/tsurge/helpers/angular_devkit/run_in_devkit.ts @@ -27,9 +27,9 @@ export enum MigrationStage { } /** Information necessary to run a Tsurge migration in the devkit. */ -export interface TsurgeDevkitMigration { +export interface TsurgeDevkitMigration<Stats> { /** Instantiates the migration. */ - getMigration: (fs: FileSystem) => TsurgeMigration<unknown, unknown>; + getMigration: (fs: FileSystem) => TsurgeMigration<unknown, unknown, Stats>; /** File tree of the schematic. */ tree: Tree; @@ -53,11 +53,13 @@ export interface TsurgeDevkitMigration { afterAnalysisFailure?: () => void; /** Called when the migration is done running and stats are available. Useful for logging. */ - whenDone?: (stats: MigrationStats) => void; + whenDone?: (stats: Stats) => void; } /** Runs a Tsurge within an Angular Devkit context. */ -export async function runMigrationInDevkit(config: TsurgeDevkitMigration): Promise<void> { +export async function runMigrationInDevkit<Stats>( + config: TsurgeDevkitMigration<Stats>, +): Promise<void> { const {buildPaths, testPaths} = await getProjectTsConfigPaths(config.tree); if (!buildPaths.length && !testPaths.length) { diff --git a/packages/core/schematics/utils/tsurge/helpers/combine_units.ts b/packages/core/schematics/utils/tsurge/helpers/combine_units.ts index 2405dfb6a394..10ae8b280dd2 100644 --- a/packages/core/schematics/utils/tsurge/helpers/combine_units.ts +++ b/packages/core/schematics/utils/tsurge/helpers/combine_units.ts @@ -16,7 +16,7 @@ import {TsurgeMigration} from '../migration'; * prefer parallel execution of combining via e.g. Beam combiners. */ export async function synchronouslyCombineUnitData<UnitData>( - migration: TsurgeMigration<UnitData, unknown>, + migration: TsurgeMigration<UnitData, unknown, unknown>, unitDatas: UnitData[], ): Promise<UnitData | null> { if (unitDatas.length === 0) { diff --git a/packages/core/schematics/utils/tsurge/migration.ts b/packages/core/schematics/utils/tsurge/migration.ts index 3787977d921c..3a074841d292 100644 --- a/packages/core/schematics/utils/tsurge/migration.ts +++ b/packages/core/schematics/utils/tsurge/migration.ts @@ -39,9 +39,9 @@ interface MigrateResult { * * TODO: Link design doc */ -export type TsurgeMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> = - | TsurgeComplexMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> - | TsurgeFunnelMigration<UnitAnalysisMetadata, CombinedGlobalMetadata>; +export type TsurgeMigration<UnitAnalysisMetadata, CombinedGlobalMetadata, Stats> = + | TsurgeComplexMigration<UnitAnalysisMetadata, CombinedGlobalMetadata, Stats> + | TsurgeFunnelMigration<UnitAnalysisMetadata, CombinedGlobalMetadata, Stats>; /** * A simpler variant of a {@link TsurgeComplexMigration} that does not @@ -58,7 +58,8 @@ export type TsurgeMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> = export abstract class TsurgeFunnelMigration< UnitAnalysisMetadata, CombinedGlobalMetadata, -> extends TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> { + Stats = unknown, +> extends TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMetadata, Stats> { /** * Finalizes the migration result. * @@ -83,7 +84,8 @@ export abstract class TsurgeFunnelMigration< export abstract class TsurgeComplexMigration< UnitAnalysisMetadata, CombinedGlobalMetadata, -> extends TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMetadata> { + Stats = unknown, +> extends TsurgeBaseMigration<UnitAnalysisMetadata, CombinedGlobalMetadata, Stats> { /** * Migration phase. Workers will be started for every compilation unit again, * instantiating a new program for every unit to compute the final migration diff --git a/packages/core/schematics/utils/tsurge/test/output_migration.spec.ts b/packages/core/schematics/utils/tsurge/test/output_migration.spec.ts index 7ad37460af5b..39a766243ab8 100644 --- a/packages/core/schematics/utils/tsurge/test/output_migration.spec.ts +++ b/packages/core/schematics/utils/tsurge/test/output_migration.spec.ts @@ -97,10 +97,8 @@ describe('output migration', () => { ]); expect(await getStatistics()).toEqual({ - counters: { - allOutputs: 2, - migratedOutputs: 1, - }, + allOutputs: 2, + migratedOutputs: 1, }); }); }); diff --git a/packages/core/schematics/utils/tsurge/test/output_migration.ts b/packages/core/schematics/utils/tsurge/test/output_migration.ts index 24f6d4be6ac1..00296110d757 100644 --- a/packages/core/schematics/utils/tsurge/test/output_migration.ts +++ b/packages/core/schematics/utils/tsurge/test/output_migration.ts @@ -14,7 +14,6 @@ import {ProgramInfo} from '../program_info'; import {Replacement, TextUpdate} from '../replacement'; import {findOutputDeclarationsAndReferences, OutputID} from './output_helpers'; import {projectFile} from '../project_paths'; -import {MigrationStats} from '../base_migration'; type AnalysisUnit = {[id: OutputID]: {seenProblematicUsage: boolean}}; type GlobalMetadata = {[id: OutputID]: {canBeMigrated: boolean}}; @@ -120,7 +119,7 @@ export class OutputMigration extends TsurgeComplexMigration<AnalysisUnit, Global return {replacements}; } - override async stats(globalMetadata: GlobalMetadata): Promise<MigrationStats> { + override async stats(globalMetadata: GlobalMetadata) { let allOutputs = 0; let migratedOutputs = 0; @@ -131,11 +130,9 @@ export class OutputMigration extends TsurgeComplexMigration<AnalysisUnit, Global } } - return { - counters: { - allOutputs, - migratedOutputs, - }, - }; + return confirmAsSerializable({ + allOutputs, + migratedOutputs, + }); } } diff --git a/packages/core/schematics/utils/tsurge/testing/run_single.ts b/packages/core/schematics/utils/tsurge/testing/run_single.ts index 1e5a1c5271e2..6c7eb02be214 100644 --- a/packages/core/schematics/utils/tsurge/testing/run_single.ts +++ b/packages/core/schematics/utils/tsurge/testing/run_single.ts @@ -29,11 +29,11 @@ import {TestRun} from './test_run'; * * @returns a mock file system with the applied replacements of the migration. */ -export async function runTsurgeMigration<UnitData, GlobalData>( - migration: TsurgeMigration<UnitData, GlobalData>, +export async function runTsurgeMigration<Stats>( + migration: TsurgeMigration<unknown, unknown, Stats>, files: {name: AbsoluteFsPath; contents: string; isProgramRootFile?: boolean}[], compilerOptions: ts.CompilerOptions = {}, -): Promise<TestRun> { +): Promise<TestRun<Stats>> { const mockFs = getFileSystem(); if (!(mockFs instanceof MockFileSystem)) { throw new Error('Expected a mock file system for `runTsurgeMigration`.'); diff --git a/packages/core/schematics/utils/tsurge/testing/test_run.ts b/packages/core/schematics/utils/tsurge/testing/test_run.ts index 45a0eebfe0d9..3be526ce6f96 100644 --- a/packages/core/schematics/utils/tsurge/testing/test_run.ts +++ b/packages/core/schematics/utils/tsurge/testing/test_run.ts @@ -7,12 +7,11 @@ */ import {MockFileSystem} from '../../../../../compiler-cli/src/ngtsc/file_system/testing'; -import {MigrationStats} from '../base_migration'; /** Type describing results of a Tsurge migration test run. */ -export interface TestRun { +export interface TestRun<Stats> { /** File system that can be used to read migrated file contents. */ fs: MockFileSystem; /** Function that can be invoked to compute migration statistics. */ - getStatistics: () => Promise<MigrationStats>; + getStatistics: () => Promise<Stats>; } diff --git a/packages/core/src/authoring/input/input_signal.ts b/packages/core/src/authoring/input/input_signal.ts index 70cc3ebbbccd..42e702254872 100644 --- a/packages/core/src/authoring/input/input_signal.ts +++ b/packages/core/src/authoring/input/input_signal.ts @@ -57,8 +57,8 @@ export type InputOptionsWithTransform<T, TransformT> = Required< > & InputOptions<T, TransformT>; -export const ɵINPUT_SIGNAL_BRAND_READ_TYPE = /* @__PURE__ */ Symbol(); -export const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE = /* @__PURE__ */ Symbol(); +export const ɵINPUT_SIGNAL_BRAND_READ_TYPE: unique symbol = /* @__PURE__ */ Symbol(); +export const ɵINPUT_SIGNAL_BRAND_WRITE_TYPE: unique symbol = /* @__PURE__ */ Symbol(); /** * `InputSignalWithTransform` represents a special `Signal` for a diff --git a/packages/core/src/authoring/input/input_signal_node.ts b/packages/core/src/authoring/input/input_signal_node.ts index ed1bbdc20e0e..b521545b1a3e 100644 --- a/packages/core/src/authoring/input/input_signal_node.ts +++ b/packages/core/src/authoring/input/input_signal_node.ts @@ -8,7 +8,7 @@ import {SIGNAL_NODE, SignalNode, signalSetFn} from '../../../primitives/signals'; -export const REQUIRED_UNSET_VALUE = /* @__PURE__ */ Symbol('InputSignalNode#UNSET'); +export const REQUIRED_UNSET_VALUE: unique symbol = /* @__PURE__ */ Symbol('InputSignalNode#UNSET'); /** * Reactive node type for an input signal. An input signal extends a signal. diff --git a/packages/core/src/compiler/BUILD.bazel b/packages/core/src/compiler/BUILD.bazel index 7e37047c7df9..d2b32d81cb04 100644 --- a/packages/core/src/compiler/BUILD.bazel +++ b/packages/core/src/compiler/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//packages:__pkg__", @@ -7,7 +8,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "compiler", srcs = glob( [ @@ -15,7 +16,7 @@ ts_library( ], ), deps = [ - "//packages/core/src/util", + "//packages/core/src/util:util_rjs", ], ) diff --git a/packages/core/src/core_render3_private_export.ts b/packages/core/src/core_render3_private_export.ts index bc79d6e8cd0e..75d3b9bea680 100644 --- a/packages/core/src/core_render3_private_export.ts +++ b/packages/core/src/core_render3_private_export.ts @@ -320,10 +320,7 @@ export { export {ɵɵvalidateIframeAttribute} from './sanitization/iframe_attrs_validation'; export {noSideEffects as ɵnoSideEffects} from './util/closure'; export {AfterRenderManager as ɵAfterRenderManager} from './render3/after_render/manager'; -export { - depsTracker as ɵdepsTracker, - USE_RUNTIME_DEPS_TRACKER_FOR_JIT as ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT, -} from './render3/deps_tracker/deps_tracker'; +export {depsTracker as ɵdepsTracker} from './render3/deps_tracker/deps_tracker'; export {generateStandaloneInDeclarationsError as ɵgenerateStandaloneInDeclarationsError} from './render3/jit/module'; export {getAsyncClassMetadataFn as ɵgetAsyncClassMetadataFn} from './render3/metadata'; export {DeferBlockData as ɵDeferBlockData} from './render3/util/defer'; diff --git a/packages/core/src/di/interface/BUILD.bazel b/packages/core/src/di/interface/BUILD.bazel index e7853656a94a..8f32973bffbe 100644 --- a/packages/core/src/di/interface/BUILD.bazel +++ b/packages/core/src/di/interface/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//devtools:__subpackages__", @@ -7,7 +8,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "interface", srcs = glob( [ @@ -15,9 +16,9 @@ ts_library( ], ), deps = [ - "//packages/core/src/interface", - "//packages/core/src/util", - "@npm//rxjs", + "//:node_modules/rxjs", + "//packages/core/src/interface:interface_rjs", + "//packages/core/src/util:util_rjs", ], ) diff --git a/packages/core/src/di/interface/defs.ts b/packages/core/src/di/interface/defs.ts index f45c6c7224ea..f90ac24249b3 100644 --- a/packages/core/src/di/interface/defs.ts +++ b/packages/core/src/di/interface/defs.ts @@ -261,5 +261,5 @@ export function getInjectorDef<T>(type: any): ɵɵInjectorDef<T> | null { return type && type.hasOwnProperty(NG_INJ_DEF) ? (type as any)[NG_INJ_DEF] : null; } -export const NG_PROV_DEF = getClosureSafeProperty({ɵprov: getClosureSafeProperty}); -export const NG_INJ_DEF = getClosureSafeProperty({ɵinj: getClosureSafeProperty}); +export const NG_PROV_DEF: string = getClosureSafeProperty({ɵprov: getClosureSafeProperty}); +export const NG_INJ_DEF: string = getClosureSafeProperty({ɵinj: getClosureSafeProperty}); diff --git a/packages/core/src/di/provider_collection.ts b/packages/core/src/di/provider_collection.ts index 4a81ae0e6c20..9e13eb2aa457 100644 --- a/packages/core/src/di/provider_collection.ts +++ b/packages/core/src/di/provider_collection.ts @@ -403,7 +403,7 @@ function deepForEachProvider( } } -export const USE_VALUE = getClosureSafeProperty<ValueProvider>({ +export const USE_VALUE: string = getClosureSafeProperty<ValueProvider>({ provide: String, useValue: getClosureSafeProperty, }); diff --git a/packages/core/src/event_delegation_utils.ts b/packages/core/src/event_delegation_utils.ts index efe1a36ece16..30252c9a6175 100644 --- a/packages/core/src/event_delegation_utils.ts +++ b/packages/core/src/event_delegation_utils.ts @@ -7,10 +7,12 @@ */ // tslint:disable:no-duplicate-imports -import {EventContract} from '../primitives/event-dispatch'; +import type {EventContract} from '../primitives/event-dispatch'; import {Attribute} from '../primitives/event-dispatch'; +import {APP_ID} from './application/application_tokens'; import {InjectionToken} from './di'; -import {RElement} from './render3/interfaces/renderer_dom'; +import type {RElement, RNode} from './render3/interfaces/renderer_dom'; +import {INJECTOR, type LView} from './render3/interfaces/view'; export const DEFER_BLOCK_SSR_ID_ATTRIBUTE = 'ngb'; @@ -109,3 +111,89 @@ export function invokeListeners(event: Event, currentTarget: Element | null) { handler(event); } } + +/** Shorthand for an event listener callback function to reduce duplication. */ +export type EventCallback = (event?: any) => any; + +/** Utility type used to make it harder to swap a wrapped and unwrapped callback. */ +export type WrappedEventCallback = EventCallback & {__wrapped: boolean}; + +/** + * Represents a signature of a function that disables event replay feature + * for server-side rendered applications. This function is overridden with + * an actual implementation when the event replay feature is enabled via + * `withEventReplay()` call. + */ +type StashEventListener = (el: RNode, eventName: string, listenerFn: EventCallback) => void; + +const stashEventListeners = new Map<string, StashEventListener>(); + +/** + * Registers a stashing function for a specific application ID. + * + * @param appId The unique identifier for the application instance. + * @param fn The stashing function to associate with this app ID. + * @returns A cleanup function that removes the stashing function when called. + */ +export function setStashFn(appId: string, fn: StashEventListener) { + stashEventListeners.set(appId, fn); + return () => stashEventListeners.delete(appId); +} + +/** + * Indicates whether the stashing code was added, prevents adding it multiple times. + */ +let isStashEventListenerImplEnabled = false; + +let _stashEventListenerImpl = ( + lView: LView, + target: RElement | EventTarget, + eventName: string, + wrappedListener: WrappedEventCallback, +) => {}; + +/** + * Optionally stashes an event listener for later replay during hydration. + * + * This function delegates to an internal `_stashEventListenerImpl`, which may + * be a no-op unless the event replay feature is enabled. When active, this + * allows capturing event listener metadata before hydration completes, so that + * user interactions during SSR can be replayed. + * + * @param lView The logical view (LView) where the listener is being registered. + * @param target The DOM element or event target the listener is attached to. + * @param eventName The name of the event being listened for (e.g., 'click'). + * @param wrappedListener The event handler that was registered. + */ +export function stashEventListenerImpl( + lView: LView, + target: RElement | EventTarget, + eventName: string, + wrappedListener: WrappedEventCallback, +): void { + _stashEventListenerImpl(lView, target, eventName, wrappedListener); +} + +/** + * Enables the event listener stashing logic in a tree-shakable way. + * + * This function lazily sets the implementation of `_stashEventListenerImpl` + * so that it becomes active only when `withEventReplay` is invoked. This ensures + * that the stashing logic is excluded from production builds unless needed. + */ +export function enableStashEventListenerImpl(): void { + if (!isStashEventListenerImplEnabled) { + _stashEventListenerImpl = ( + lView: LView, + target: RElement | EventTarget, + eventName: string, + wrappedListener: EventCallback, + ) => { + const appId = lView[INJECTOR].get(APP_ID); + const stashEventListener = stashEventListeners.get(appId); + stashEventListener?.(target as RElement, eventName, wrappedListener); + }; + + isStashEventListenerImplEnabled = true; + } +} diff --git a/packages/core/src/hydration/event_replay.ts b/packages/core/src/hydration/event_replay.ts index f9018f0a4dfd..3b9e36e9d79a 100644 --- a/packages/core/src/hydration/event_replay.ts +++ b/packages/core/src/hydration/event_replay.ts @@ -39,12 +39,13 @@ import { JSACTION_EVENT_CONTRACT, invokeListeners, removeListeners, + enableStashEventListenerImpl, + setStashFn, } from '../event_delegation_utils'; import {APP_ID} from '../application/application_tokens'; import {performanceMarkFeature} from '../util/performance'; import {triggerHydrationFromBlockName} from '../defer/triggering'; import {isIncrementalHydrationEnabled} from './utils'; -import {clearStashFn, setStashFn} from '../render3/view/listeners'; /** Apps in which we've enabled event replay. * This is to prevent initializing event replay more than once per app. @@ -106,15 +107,23 @@ export function withEventReplay(): Provider[] { if (!appsWithEventReplay.has(appRef)) { const jsActionMap = inject(JSACTION_BLOCK_ELEMENT_MAP); if (shouldEnableEventReplay(injector)) { + enableStashEventListenerImpl(); const appId = injector.get(APP_ID); - setStashFn(appId, (rEl: RNode, eventName: string, listenerFn: VoidFunction) => { - // If a user binds to a ng-container and uses a directive that binds using a host listener, - // this element could be a comment node. So we need to ensure we have an actual element - // node before stashing anything. - if ((rEl as Node).nodeType !== Node.ELEMENT_NODE) return; - sharedStashFunction(rEl as RElement, eventName, listenerFn); - sharedMapFunction(rEl as RElement, jsActionMap); - }); + const clearStashFn = setStashFn( + appId, + (rEl: RNode, eventName: string, listenerFn: VoidFunction) => { + // If a user binds to a ng-container and uses a directive that binds using a host listener, + // this element could be a comment node. So we need to ensure we have an actual element + // node before stashing anything. + if ((rEl as Node).nodeType !== Node.ELEMENT_NODE) return; + sharedStashFunction(rEl as RElement, eventName, listenerFn); + sharedMapFunction(rEl as RElement, jsActionMap); + }, + ); + // Clean up the reference to the function set by the environment initializer, + // as the function closure may capture injected elements and prevent them + // from being properly garbage collected. + appRef.onDestroy(clearStashFn); } } }, @@ -145,10 +154,6 @@ export function withEventReplay(): Provider[] { // no elements are still captured in the global list and are not prevented // from being garbage collected. clearAppScopedEarlyEventContract(appId); - // Clean up the reference to the function set by the environment initializer, - // as the function closure may capture injected elements and prevent them - // from being properly garbage collected. - clearStashFn(appId); } }); diff --git a/packages/core/src/hydration/utils.ts b/packages/core/src/hydration/utils.ts index 672b5e9e48c1..c0ec8f33d046 100644 --- a/packages/core/src/hydration/utils.ts +++ b/packages/core/src/hydration/utils.ts @@ -14,7 +14,7 @@ import {getDocument} from '../render3/interfaces/document'; import {RElement, RNode} from '../render3/interfaces/renderer_dom'; import {isRootView} from '../render3/interfaces/type_checks'; import {HEADER_OFFSET, LView, TVIEW, TViewType} from '../render3/interfaces/view'; -import {makeStateKey, TransferState} from '../transfer_state'; +import {makeStateKey, StateKey, TransferState} from '../transfer_state'; import {assertDefined, assertEqual} from '../util/assert'; import type {HydrationContext} from './annotate'; @@ -49,7 +49,8 @@ const TRANSFER_STATE_TOKEN_ID = '__nghData__'; /** * Lookup key used to reference DOM hydration data (ngh) in `TransferState`. */ -export const NGH_DATA_KEY = makeStateKey<Array<SerializedView>>(TRANSFER_STATE_TOKEN_ID); +export const NGH_DATA_KEY: StateKey<SerializedView[]> = + makeStateKey<Array<SerializedView>>(TRANSFER_STATE_TOKEN_ID); /** * The name of the key used in the TransferState collection, @@ -60,9 +61,9 @@ export const TRANSFER_STATE_DEFER_BLOCKS_INFO = '__nghDeferData__'; /** * Lookup key used to retrieve defer block datain `TransferState`. */ -export const NGH_DEFER_BLOCKS_KEY = makeStateKey<{[key: string]: SerializedDeferBlock}>( - TRANSFER_STATE_DEFER_BLOCKS_INFO, -); +export const NGH_DEFER_BLOCKS_KEY: StateKey<{[key: string]: SerializedDeferBlock}> = makeStateKey<{ + [key: string]: SerializedDeferBlock; +}>(TRANSFER_STATE_DEFER_BLOCKS_INFO); /** * The name of the attribute that would be added to host component diff --git a/packages/core/src/i18n/tokens.ts b/packages/core/src/i18n/tokens.ts index be11cce5e294..3224ce70250f 100644 --- a/packages/core/src/i18n/tokens.ts +++ b/packages/core/src/i18n/tokens.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference path="../../../goog.d.ts" /> + import {InjectionToken} from '../di/injection_token'; import {inject} from '../di/injector_compatibility'; diff --git a/packages/core/src/interface/BUILD.bazel b/packages/core/src/interface/BUILD.bazel index 9495d9e9b757..97d5bdad7dcb 100644 --- a/packages/core/src/interface/BUILD.bazel +++ b/packages/core/src/interface/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//packages:__pkg__", @@ -6,7 +7,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "interface", srcs = glob( [ diff --git a/packages/core/src/reflection/BUILD.bazel b/packages/core/src/reflection/BUILD.bazel index 7939478ddad5..6ec905fa969f 100644 --- a/packages/core/src/reflection/BUILD.bazel +++ b/packages/core/src/reflection/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//packages:__pkg__", @@ -6,7 +7,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "reflection", srcs = glob( [ @@ -14,8 +15,8 @@ ts_library( ], ), deps = [ - "//packages/core/src/interface", - "//packages/core/src/util", + "//packages/core/src/interface:interface_rjs", + "//packages/core/src/util:util_rjs", ], ) diff --git a/packages/core/src/render3/after_render/manager.ts b/packages/core/src/render3/after_render/manager.ts index 79c5264eec9e..9a4e4e563951 100644 --- a/packages/core/src/render3/after_render/manager.ts +++ b/packages/core/src/render3/after_render/manager.ts @@ -37,7 +37,7 @@ export class AfterRenderManager { }); } -export const AFTER_RENDER_PHASES = /* @__PURE__ **/ (() => +export const AFTER_RENDER_PHASES: AfterRenderPhase[] = /* @__PURE__ **/ (() => [ AfterRenderPhase.EarlyRead, AfterRenderPhase.Write, diff --git a/packages/core/src/render3/deps_tracker/deps_tracker.ts b/packages/core/src/render3/deps_tracker/deps_tracker.ts index 05909ab7b515..73d0ded223ee 100644 --- a/packages/core/src/render3/deps_tracker/deps_tracker.ts +++ b/packages/core/src/render3/deps_tracker/deps_tracker.ts @@ -27,15 +27,6 @@ import { StandaloneComponentScope, } from './api'; -/** - * Indicates whether to use the runtime dependency tracker for scope calculation in JIT compilation. - * The value "false" means the old code path based on patching scope info into the types will be - * used. - * - * @deprecated For migration purposes only, to be removed soon. - */ -export const USE_RUNTIME_DEPS_TRACKER_FOR_JIT = true; - /** * An implementation of DepsTrackerApi which will be used for JIT and local compilation. */ diff --git a/packages/core/src/render3/dynamic_bindings.ts b/packages/core/src/render3/dynamic_bindings.ts index ba925c18b338..6f887a97fe58 100644 --- a/packages/core/src/render3/dynamic_bindings.ts +++ b/packages/core/src/render3/dynamic_bindings.ts @@ -18,7 +18,7 @@ import {stringifyForError} from './util/stringify_utils'; import {createOutputListener} from './view/directive_outputs'; /** Symbol used to store and retrieve metadata about a binding. */ -export const BINDING = /* @__PURE__ */ Symbol('BINDING'); +export const BINDING: unique symbol = /* @__PURE__ */ Symbol('BINDING'); /** * A dynamically-defined binding targeting. diff --git a/packages/core/src/render3/fields.ts b/packages/core/src/render3/fields.ts index a6792d4d9274..9e840ebb48fc 100644 --- a/packages/core/src/render3/fields.ts +++ b/packages/core/src/render3/fields.ts @@ -8,11 +8,11 @@ import {getClosureSafeProperty} from '../util/property'; -export const NG_COMP_DEF = getClosureSafeProperty({ɵcmp: getClosureSafeProperty}); -export const NG_DIR_DEF = getClosureSafeProperty({ɵdir: getClosureSafeProperty}); -export const NG_PIPE_DEF = getClosureSafeProperty({ɵpipe: getClosureSafeProperty}); -export const NG_MOD_DEF = getClosureSafeProperty({ɵmod: getClosureSafeProperty}); -export const NG_FACTORY_DEF = getClosureSafeProperty({ɵfac: getClosureSafeProperty}); +export const NG_COMP_DEF: string = getClosureSafeProperty({ɵcmp: getClosureSafeProperty}); +export const NG_DIR_DEF: string = getClosureSafeProperty({ɵdir: getClosureSafeProperty}); +export const NG_PIPE_DEF: string = getClosureSafeProperty({ɵpipe: getClosureSafeProperty}); +export const NG_MOD_DEF: string = getClosureSafeProperty({ɵmod: getClosureSafeProperty}); +export const NG_FACTORY_DEF: string = getClosureSafeProperty({ɵfac: getClosureSafeProperty}); /** * If a directive is diPublic, bloomAdd sets a property on the type with this constant as @@ -20,7 +20,9 @@ export const NG_FACTORY_DEF = getClosureSafeProperty({ɵfac: getClosureSafePrope * bloom filter bit for DI. */ // TODO(misko): This is wrong. The NG_ELEMENT_ID should never be minified. -export const NG_ELEMENT_ID = getClosureSafeProperty({__NG_ELEMENT_ID__: getClosureSafeProperty}); +export const NG_ELEMENT_ID: string = getClosureSafeProperty({ + __NG_ELEMENT_ID__: getClosureSafeProperty, +}); /** * The `NG_ENV_ID` field on a DI token indicates special processing in the `EnvironmentInjector`: @@ -30,4 +32,4 @@ export const NG_ELEMENT_ID = getClosureSafeProperty({__NG_ELEMENT_ID__: getClosu * This particular retrieval of DI tokens is mostly done to eliminate circular dependencies and * improve tree-shaking. */ -export const NG_ENV_ID = getClosureSafeProperty({__NG_ENV_ID__: getClosureSafeProperty}); +export const NG_ENV_ID: string = getClosureSafeProperty({__NG_ENV_ID__: getClosureSafeProperty}); diff --git a/packages/core/src/render3/instructions/listener.ts b/packages/core/src/render3/instructions/listener.ts index 7afda1b23b80..6a6119ba3f11 100644 --- a/packages/core/src/render3/instructions/listener.ts +++ b/packages/core/src/render3/instructions/listener.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import type {EventCallback, WrappedEventCallback} from '../../event_delegation_utils'; import {TNode, TNodeType} from '../interfaces/node'; import {GlobalTargetResolver, Renderer} from '../interfaces/renderer'; import {LView, RENDERER, TView} from '../interfaces/view'; @@ -13,12 +14,7 @@ import {assertTNodeType} from '../node_assert'; import {getCurrentDirectiveDef, getCurrentTNode, getLView, getTView} from '../state'; import {listenToOutput} from '../view/directive_outputs'; -import { - EventCallback, - listenToDomEvent, - wrapListener, - WrappedEventCallback, -} from '../view/listeners'; +import {listenToDomEvent, wrapListener} from '../view/listeners'; import {loadComponentRenderer} from './shared'; /** diff --git a/packages/core/src/render3/instructions/two_way.ts b/packages/core/src/render3/instructions/two_way.ts index 3f6934e25aee..90c22ea36933 100644 --- a/packages/core/src/render3/instructions/two_way.ts +++ b/packages/core/src/render3/instructions/two_way.ts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ +import type {EventCallback} from '../../event_delegation_utils'; import {bindingUpdated} from '../bindings'; import {SanitizerFn} from '../interfaces/sanitization'; import {RENDERER} from '../interfaces/view'; import {isWritableSignal, WritableSignal} from '../reactivity/signal'; import {getCurrentTNode, getLView, getSelectedTNode, getTView, nextBindingIndex} from '../state'; -import {EventCallback} from '../view/listeners'; import {listenerInternal} from './listener'; import {setPropertyAndInputs, storePropertyBindingMetadata} from './shared'; diff --git a/packages/core/src/render3/jit/directive.ts b/packages/core/src/render3/jit/directive.ts index f51c2f25ea28..4b4f76009a4a 100644 --- a/packages/core/src/render3/jit/directive.ts +++ b/packages/core/src/render3/jit/directive.ts @@ -29,7 +29,7 @@ import {flatten} from '../../util/array_utils'; import {EMPTY_ARRAY, EMPTY_OBJ} from '../../util/empty'; import {initNgDevMode} from '../../util/ng_dev_mode'; import {getComponentDef, getDirectiveDef, getNgModuleDef, getPipeDef} from '../def_getters'; -import {depsTracker, USE_RUNTIME_DEPS_TRACKER_FOR_JIT} from '../deps_tracker/deps_tracker'; +import {depsTracker} from '../deps_tracker/deps_tracker'; import {NG_COMP_DEF, NG_DIR_DEF, NG_FACTORY_DEF} from '../fields'; import {ComponentDef, ComponentType, DirectiveDefList, PipeDefList} from '../interfaces/definition'; import {stringifyForError} from '../util/stringify_utils'; @@ -235,105 +235,37 @@ function getStandaloneDefFunctions( let cachedDirectiveDefs: DirectiveDefList | null = null; let cachedPipeDefs: PipeDefList | null = null; const directiveDefs = () => { - if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - if (cachedDirectiveDefs === null) { - // Standalone components are always able to self-reference, so include the component's own - // definition in its `directiveDefs`. - cachedDirectiveDefs = [getComponentDef(type)!]; - const seen = new Set<Type<unknown>>([type]); - - for (const rawDep of imports) { - ngDevMode && verifyStandaloneImport(rawDep, type); - - const dep = resolveForwardRef(rawDep); - if (seen.has(dep)) { - continue; - } - seen.add(dep); - - if (!!getNgModuleDef(dep)) { - const scope = transitiveScopesFor(dep); - for (const dir of scope.exported.directives) { - const def = getComponentDef(dir) || getDirectiveDef(dir); - if (def && !seen.has(dir)) { - seen.add(dir); - cachedDirectiveDefs.push(def); - } - } - } else { - const def = getComponentDef(dep) || getDirectiveDef(dep); - if (def) { - cachedDirectiveDefs.push(def); - } - } - } - } - return cachedDirectiveDefs; - } else { - if (ngDevMode) { - for (const rawDep of imports) { - verifyStandaloneImport(rawDep, type); - } + if (ngDevMode) { + for (const rawDep of imports) { + verifyStandaloneImport(rawDep, type); } + } - if (!isComponent(type)) { - return []; - } + if (!isComponent(type)) { + return []; + } - const scope = depsTracker.getStandaloneComponentScope(type, imports); + const scope = depsTracker.getStandaloneComponentScope(type, imports); - return [...scope.compilation.directives] - .map((p) => (getComponentDef(p) || getDirectiveDef(p))!) - .filter((d) => d !== null); - } + return [...scope.compilation.directives] + .map((p) => (getComponentDef(p) || getDirectiveDef(p))!) + .filter((d) => d !== null); }; const pipeDefs = () => { - if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - if (cachedPipeDefs === null) { - cachedPipeDefs = []; - const seen = new Set<Type<unknown>>(); - - for (const rawDep of imports) { - const dep = resolveForwardRef(rawDep); - if (seen.has(dep)) { - continue; - } - seen.add(dep); - - if (!!getNgModuleDef(dep)) { - const scope = transitiveScopesFor(dep); - for (const pipe of scope.exported.pipes) { - const def = getPipeDef(pipe); - if (def && !seen.has(pipe)) { - seen.add(pipe); - cachedPipeDefs.push(def); - } - } - } else { - const def = getPipeDef(dep); - if (def) { - cachedPipeDefs.push(def); - } - } - } - } - return cachedPipeDefs; - } else { - if (ngDevMode) { - for (const rawDep of imports) { - verifyStandaloneImport(rawDep, type); - } + if (ngDevMode) { + for (const rawDep of imports) { + verifyStandaloneImport(rawDep, type); } + } - if (!isComponent(type)) { - return []; - } + if (!isComponent(type)) { + return []; + } - const scope = depsTracker.getStandaloneComponentScope(type, imports); + const scope = depsTracker.getStandaloneComponentScope(type, imports); - return [...scope.compilation.pipes].map((p) => getPipeDef(p)!).filter((d) => d !== null); - } + return [...scope.compilation.pipes].map((p) => getPipeDef(p)!).filter((d) => d !== null); }; return { diff --git a/packages/core/src/render3/jit/module.ts b/packages/core/src/render3/jit/module.ts index aaef7dcabc30..06d79131e179 100644 --- a/packages/core/src/render3/jit/module.ts +++ b/packages/core/src/render3/jit/module.ts @@ -35,7 +35,7 @@ import { getPipeDef, isStandalone, } from '../def_getters'; -import {depsTracker, USE_RUNTIME_DEPS_TRACKER_FOR_JIT} from '../deps_tracker/deps_tracker'; +import {depsTracker} from '../deps_tracker/deps_tracker'; import {NG_COMP_DEF, NG_DIR_DEF, NG_FACTORY_DEF, NG_MOD_DEF, NG_PIPE_DEF} from '../fields'; import type {ComponentDef} from '../interfaces/definition'; import {maybeUnwrapFn} from '../util/misc_utils'; @@ -552,16 +552,12 @@ export function patchComponentDefWithScope<C>( */ export function transitiveScopesFor<T>(type: Type<T>): NgModuleTransitiveScopes { if (isNgModule(type)) { - if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - const scope = depsTracker.getNgModuleScope(type); - const def = getNgModuleDefOrThrow(type); - return { - schemas: def.schemas || null, - ...scope, - }; - } else { - return transitiveScopesForNgModule(type); - } + const scope = depsTracker.getNgModuleScope(type); + const def = getNgModuleDefOrThrow(type); + return { + schemas: def.schemas || null, + ...scope, + }; } else if (isStandalone(type)) { const directiveDef = getComponentDef(type) || getDirectiveDef(type); if (directiveDef !== null) { diff --git a/packages/core/src/render3/reactivity/signal.ts b/packages/core/src/render3/reactivity/signal.ts index b62f89ecce73..10fad915b20c 100644 --- a/packages/core/src/render3/reactivity/signal.ts +++ b/packages/core/src/render3/reactivity/signal.ts @@ -18,7 +18,7 @@ import { import {isSignal, Signal, ValueEqualityFn} from './api'; /** Symbol used distinguish `WritableSignal` from other non-writable signals and functions. */ -export const ɵWRITABLE_SIGNAL = /* @__PURE__ */ Symbol('WRITABLE_SIGNAL'); +export const ɵWRITABLE_SIGNAL: unique symbol = /* @__PURE__ */ Symbol('WRITABLE_SIGNAL'); /** * A `Signal` with a value that can be mutated via a setter interface. diff --git a/packages/core/src/render3/util/global_utils.ts b/packages/core/src/render3/util/global_utils.ts index ecab83778cd1..4e9f157ead21 100644 --- a/packages/core/src/render3/util/global_utils.ts +++ b/packages/core/src/render3/util/global_utils.ts @@ -5,6 +5,9 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ + +/// <reference path="../../../../goog.d.ts" /> + import {assertDefined} from '../../util/assert'; import {global} from '../../util/global'; import {setupFrameworkInjectorProfiler} from '../debug/framework_injector_profiler'; diff --git a/packages/core/src/render3/view/directive_outputs.ts b/packages/core/src/render3/view/directive_outputs.ts index 40f80fd83145..1c14f2a1c454 100644 --- a/packages/core/src/render3/view/directive_outputs.ts +++ b/packages/core/src/render3/view/directive_outputs.ts @@ -7,12 +7,13 @@ */ import {RuntimeError, RuntimeErrorCode} from '../../errors'; +import type {EventCallback, WrappedEventCallback} from '../../event_delegation_utils'; import {assertIndexInRange} from '../../util/assert'; import {DirectiveDef} from '../interfaces/definition'; import {TNode} from '../interfaces/node'; import {LView, TVIEW} from '../interfaces/view'; import {stringifyForError} from '../util/stringify_utils'; -import {EventCallback, storeListenerCleanup, wrapListener, WrappedEventCallback} from './listeners'; +import {storeListenerCleanup, wrapListener} from './listeners'; /** Describes a subscribable output field value. */ interface SubscribableOutput<T> { diff --git a/packages/core/src/render3/view/listeners.ts b/packages/core/src/render3/view/listeners.ts index d3fa1daca0e3..3fcb4b39bc0a 100644 --- a/packages/core/src/render3/view/listeners.ts +++ b/packages/core/src/render3/view/listeners.ts @@ -9,9 +9,9 @@ import {setActiveConsumer} from '@angular/core/primitives/signals'; import {NotificationSource} from '../../change_detection/scheduling/zoneless_scheduling'; -import {TNode} from '../interfaces/node'; +import type {TNode} from '../interfaces/node'; import {isComponentHost, isDirectiveHost} from '../interfaces/type_checks'; -import {CLEANUP, CONTEXT, INJECTOR, LView, TView} from '../interfaces/view'; +import {CLEANUP, CONTEXT, type LView, type TView} from '../interfaces/view'; import { getComponentLViewByIndex, getNativeByTNode, @@ -22,35 +22,15 @@ import { import {profiler} from '../profiler'; import {ProfilerEvent} from '../profiler_types'; import {markViewDirty} from '../instructions/mark_view_dirty'; -import {RElement, RNode} from '../interfaces/renderer_dom'; -import {GlobalTargetResolver, Renderer} from '../interfaces/renderer'; +import type {RElement} from '../interfaces/renderer_dom'; +import type {GlobalTargetResolver, Renderer} from '../interfaces/renderer'; import {assertNotSame} from '../../util/assert'; import {handleUncaughtError} from '../instructions/shared'; -import {APP_ID} from '../../application/application_tokens'; - -/** Shorthand for an event listener callback function to reduce duplication. */ -export type EventCallback = (event?: any) => any; - -/** Utility type used to make it harder to swap a wrapped and unwrapped callback. */ -export type WrappedEventCallback = EventCallback & {__wrapped: boolean}; - -/** - * Represents a signature of a function that disables event replay feature - * for server-side rendered applications. This function is overridden with - * an actual implementation when the event replay feature is enabled via - * `withEventReplay()` call. - */ -type StashEventListener = (el: RNode, eventName: string, listenerFn: EventCallback) => void; - -const stashEventListeners = new Map<string, StashEventListener>(); - -export function setStashFn(appId: string, fn: StashEventListener) { - stashEventListeners.set(appId, fn); -} - -export function clearStashFn(appId: string) { - stashEventListeners.delete(appId); -} +import { + type EventCallback, + stashEventListenerImpl, + type WrappedEventCallback, +} from '../../event_delegation_utils'; /** * Wraps an event listener with a function that marks ancestors dirty and prevents default behavior, @@ -179,9 +159,8 @@ export function listenToDomEvent( } else { const native = getNativeByTNode(tNode, lView) as RElement; const target = eventTargetResolver ? eventTargetResolver(native) : native; - const appId = lView[INJECTOR].get(APP_ID); - const stashEventListener = stashEventListeners.get(appId); - stashEventListener?.(target as RElement, eventName, wrappedListener); + + stashEventListenerImpl(lView, target, eventName, wrappedListener); const cleanupFn = renderer.listen(target as RElement, eventName, wrappedListener); const idxOrTargetGetter = eventTargetResolver diff --git a/packages/core/src/sanitization/html_sanitizer.ts b/packages/core/src/sanitization/html_sanitizer.ts index ab0b1377c12f..e2f5a72bedba 100644 --- a/packages/core/src/sanitization/html_sanitizer.ts +++ b/packages/core/src/sanitization/html_sanitizer.ts @@ -66,7 +66,7 @@ const INLINE_ELEMENTS = merge( ), ); -export const VALID_ELEMENTS = merge( +export const VALID_ELEMENTS: {[k: string]: boolean} = merge( VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, @@ -74,7 +74,9 @@ export const VALID_ELEMENTS = merge( ); // Attributes that have href and hence need to be sanitized -export const URI_ATTRS = tagSet('background,cite,href,itemtype,longdesc,poster,src,xlink:href'); +export const URI_ATTRS: {[k: string]: boolean} = tagSet( + 'background,cite,href,itemtype,longdesc,poster,src,xlink:href', +); const HTML_ATTRS = tagSet( 'abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' + @@ -103,7 +105,7 @@ const ARIA_ATTRS = tagSet( // can be sanitized, but they increase security surface area without a legitimate use case, so they // are left out here. -export const VALID_ATTRS = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS); +export const VALID_ATTRS: {[k: string]: boolean} = merge(URI_ATTRS, HTML_ATTRS, ARIA_ATTRS); // Elements whose content should not be traversed/preserved, if the elements themselves are invalid. // diff --git a/packages/core/src/util/BUILD.bazel b/packages/core/src/util/BUILD.bazel index 66562db0ebb5..f061b1ac51a0 100644 --- a/packages/core/src/util/BUILD.bazel +++ b/packages/core/src/util/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "ts_library", "tsec_test") +load("//tools:defaults.bzl", "tsec_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//devtools:__subpackages__", @@ -7,7 +8,7 @@ package(default_visibility = [ "//tools/public_api_guard:__pkg__", ]) -ts_library( +ts_project( name = "util", srcs = glob( [ @@ -15,11 +16,10 @@ ts_library( ], ), deps = [ - "//packages:types", - "//packages/core/primitives/signals", - "//packages/core/src/interface", - "//packages/zone.js/lib:zone_d_ts", - "@npm//rxjs", + "//:node_modules/rxjs", + "//packages:goog_types_rjs", + "//packages/core/primitives/signals:signals_rjs", + "//packages/core/src/interface:interface_rjs", ], ) diff --git a/packages/core/src/util/ng_i18n_closure_mode.ts b/packages/core/src/util/ng_i18n_closure_mode.ts index ed9ad457898a..7d54bcac110d 100644 --- a/packages/core/src/util/ng_i18n_closure_mode.ts +++ b/packages/core/src/util/ng_i18n_closure_mode.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference path="../../../goog.d.ts" /> + import {global} from './global'; declare global { diff --git a/packages/core/src/zone/ng_zone.ts b/packages/core/src/zone/ng_zone.ts index ec7e6d03664a..6ef171863248 100644 --- a/packages/core/src/zone/ng_zone.ts +++ b/packages/core/src/zone/ng_zone.ts @@ -6,6 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ +// Needed for the global `Zone` ambient types to be available. +import type {} from 'zone.js'; + import {SCHEDULE_IN_ROOT_ZONE_DEFAULT} from '../change_detection/scheduling/flags'; import {RuntimeError, RuntimeErrorCode} from '../errors'; import {EventEmitter} from '../event_emitter'; diff --git a/packages/core/test/BUILD.bazel b/packages/core/test/BUILD.bazel index d8cf7ff663cd..cb296095c578 100644 --- a/packages/core/test/BUILD.bazel +++ b/packages/core/test/BUILD.bazel @@ -1,20 +1,7 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") package(default_visibility = ["//visibility:public"]) -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/core/index.mjs", - deps = ["//packages/core"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/core/testing/index.mjs", - deps = ["//packages/core/testing"], -) - genrule( name = "downleveled_es5_fixture", srcs = ["reflection/es2015_inheritance_fixture.ts"], diff --git a/packages/core/test/acceptance/authoring/BUILD.bazel b/packages/core/test/acceptance/authoring/BUILD.bazel index 0d130a0f60cf..34ad35964d2b 100644 --- a/packages/core/test/acceptance/authoring/BUILD.bazel +++ b/packages/core/test/acceptance/authoring/BUILD.bazel @@ -33,7 +33,10 @@ ts_library( nodejs_binary( name = "test_compiler", testonly = True, - data = [":test_compiler_lib"], + data = [ + ":test_compiler_lib", + "//packages:package_json", + ], entry_point = ":authoring_test_compiler.ts", ) diff --git a/packages/core/test/acceptance/signal_debug_spec.ts b/packages/core/test/acceptance/signal_debug_spec.ts index 3f6d86397d5b..af4dd6f324ae 100644 --- a/packages/core/test/acceptance/signal_debug_spec.ts +++ b/packages/core/test/acceptance/signal_debug_spec.ts @@ -94,7 +94,7 @@ describe('getSignalGraph', () => { ); } } - TestBed.configureTestingModule({imports: [WithEffect]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithEffect]}); const fixture = TestBed.createComponent(WithEffect); tick(); @@ -131,7 +131,7 @@ describe('getSignalGraph', () => { debugName: 'computedSignal', }); } - TestBed.configureTestingModule({imports: [WithComputed]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithComputed]}); const fixture = TestBed.createComponent(WithComputed); tick(); @@ -192,7 +192,7 @@ describe('getSignalGraph', () => { debugName: 'computedSignal', }); } - TestBed.configureTestingModule({imports: [WithUnusedReactiveNodes]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithUnusedReactiveNodes]}); const fixture = TestBed.createComponent(WithUnusedReactiveNodes); tick(); @@ -212,7 +212,7 @@ describe('getSignalGraph', () => { primitiveSignal = signal(123, {debugName: 'primitiveSignal'}); primitiveSignalEffect = effect(() => {}, {debugName: 'primitiveSignalEffect'}); } - TestBed.configureTestingModule({imports: [WithNoEffectSignalDependencies]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithNoEffectSignalDependencies]}); const fixture = TestBed.createComponent(WithNoEffectSignalDependencies); tick(); @@ -229,7 +229,7 @@ describe('getSignalGraph', () => { it('should return the signal graph for a component with no signal dependencies in the template or component effects', fakeAsync(() => { @Component({selector: 'component-with-no-effect-dependencies', template: ``}) class WithNoEffectDependencies {} - TestBed.configureTestingModule({imports: [WithNoEffectDependencies]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithNoEffectDependencies]}); const fixture = TestBed.createComponent(WithNoEffectDependencies); tick(); @@ -267,7 +267,7 @@ describe('getSignalGraph', () => { ); } } - TestBed.configureTestingModule({imports: [WithExternalService]}).compileComponents(); + TestBed.configureTestingModule({imports: [WithExternalService]}); const fixture = TestBed.createComponent(WithExternalService); tick(); diff --git a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json index 88063188dc29..2f60b0276e8d 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -614,7 +614,6 @@ "signal", "signalAsReadonlyFn", "signalSetFn", - "stashEventListeners", "storeLViewOnDestroy", "storeListenerCleanup", "stringify", diff --git a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json index ae95a5e92492..bcc28e7fee99 100644 --- a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json @@ -609,7 +609,6 @@ "signal", "signalAsReadonlyFn", "signalSetFn", - "stashEventListeners", "storeLViewOnDestroy", "storeListenerCleanup", "stringify", diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index bc84bd940abe..931bcaeeac17 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -84,6 +84,7 @@ "GuardsCheckEnd", "GuardsCheckStart", "HistoryStateManager", + "HostAttributeToken", "INITIAL_NAVIGATION", "INITIAL_VALUE", "INJECTOR", @@ -633,6 +634,7 @@ "producerNotifyConsumers", "producerRemoveLiveConsumerAtIndex", "producerUpdateValueVersion", + "producerUpdatesAllowed", "profiler", "profilerCallbacks", "readableStreamLikeToAsyncGenerator", @@ -689,10 +691,12 @@ "shimStylesContent", "shouldAddViewToDom", "shouldSearchParent", + "signal", + "signalAsReadonlyFn", + "signalSetFn", "split", "squashSegmentGroup", "standardizeConfig", - "stashEventListeners", "storeLViewOnDestroy", "storeListenerCleanup", "stringify", @@ -711,6 +715,7 @@ "throwCyclicDependencyError", "throwError2", "throwIfEmpty", + "throwInvalidWriteToSignalError", "throwInvalidWriteToSignalErrorFn", "throwProviderNotFoundError", "timeoutProvider", @@ -748,9 +753,11 @@ "ɵɵelementStart", "ɵɵgetInheritedFactory", "ɵɵinject", + "ɵɵinjectAttribute", "ɵɵlistener", "ɵɵsanitizeResourceUrl", "ɵɵsanitizeUrl", + "ɵɵsanitizeUrlOrResourceUrl", "ɵɵtext", "ɵɵtextInterpolate1" ] \ No newline at end of file diff --git a/packages/core/test/test_bed_spec.ts b/packages/core/test/test_bed_spec.ts index 40182333d520..e27f504cbc3f 100644 --- a/packages/core/test/test_bed_spec.ts +++ b/packages/core/test/test_bed_spec.ts @@ -1059,12 +1059,10 @@ describe('TestBed', () => { declarations: [App], // AppModule -> ModuleB -> ModuleA (to be overridden) imports: [AppModule], - }) - .overrideModule(ModuleA, { - remove: {declarations: [CompA], exports: [CompA]}, - add: {declarations: [MockCompA], exports: [MockCompA]}, - }) - .compileComponents(); + }).overrideModule(ModuleA, { + remove: {declarations: [CompA], exports: [CompA]}, + add: {declarations: [MockCompA], exports: [MockCompA]}, + }); const fixture = TestBed.createComponent(App); fixture.detectChanges(); @@ -1089,8 +1087,7 @@ describe('TestBed', () => { .overrideModule(ModuleB, { remove: {declarations: [CompB], exports: [CompB]}, add: {declarations: [MockCompB], exports: [MockCompB]}, - }) - .compileComponents(); + }); const fixture = TestBed.createComponent(App); fixture.detectChanges(); @@ -1312,25 +1309,23 @@ describe('TestBed', () => { TestBed.configureTestingModule({ imports: [TestModule], - }) - .overrideModule(TestModule, { - remove: { - providers: [ - // Removing the cycle named "a" should result in removing the provider for "a". - // Note: although this removes a different instance than the one provided, metadata - // overrides compare objects by value, not by reference. - {provide: CYCLES, useValue: new Cyclic('a'), multi: true}, - - // Also attempt to remove a cycle named "B" (which does not exist) to verify that - // objects are correctly compared by value. - {provide: CYCLES, useValue: new Cyclic('B'), multi: true}, - ], - }, - add: { - providers: [{provide: CYCLES, useValue: new Cyclic('c'), multi: true}], - }, - }) - .compileComponents(); + }).overrideModule(TestModule, { + remove: { + providers: [ + // Removing the cycle named "a" should result in removing the provider for "a". + // Note: although this removes a different instance than the one provided, metadata + // overrides compare objects by value, not by reference. + {provide: CYCLES, useValue: new Cyclic('a'), multi: true}, + + // Also attempt to remove a cycle named "B" (which does not exist) to verify that + // objects are correctly compared by value. + {provide: CYCLES, useValue: new Cyclic('B'), multi: true}, + ], + }, + add: { + providers: [{provide: CYCLES, useValue: new Cyclic('c'), multi: true}], + }, + }); const values = TestBed.inject(CYCLES); expect(values.map((v) => v.name)).toEqual(['b', 'c']); @@ -1676,6 +1671,7 @@ describe('TestBed', () => { set: {template: `Override of a nested template! <cmp-a />`}, }); + // This is only required because the components are AOT compiled and thus include setClassMetadataAsync await TestBed.compileComponents(); const fixture = TestBed.createComponent(RootAotComponent); @@ -1762,6 +1758,7 @@ describe('TestBed', () => { TestBed.configureTestingModule({imports: [ParentCmp], providers: [COMMON_PROVIDERS]}); TestBed.overrideProvider(ImportantService, {useValue: {value: 'overridden'}}); + // This is only required because the component has setClassMetadataAsync await TestBed.compileComponents(); const fixture = TestBed.createComponent(ParentCmp); @@ -1787,6 +1784,7 @@ describe('TestBed', () => { }, }); + // This is only required because the components are AOT compiled and thus include setClassMetadataAsync await TestBed.compileComponents(); const fixture = TestBed.createComponent(RootAotComponent); @@ -2220,9 +2218,9 @@ describe('TestBed', () => { imports: [TestingModule], declarations: [AppComponent], providers: [{provide: InjectedString, useValue: {value: 'initial'}}], - }).compileComponents(); + }); - TestBed.overrideProvider(InjectedString, {useValue: {value: 'changed'}}).compileComponents(); + TestBed.overrideProvider(InjectedString, {useValue: {value: 'changed'}}); const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); diff --git a/packages/core/testing/src/component_fixture.ts b/packages/core/testing/src/component_fixture.ts index d490d9b72030..bbf2b9a007fb 100644 --- a/packages/core/testing/src/component_fixture.ts +++ b/packages/core/testing/src/component_fixture.ts @@ -6,31 +6,31 @@ * found in the LICENSE file at https://angular.dev/license */ +import {Subscription} from 'rxjs'; import { ApplicationRef, ChangeDetectorRef, ComponentRef, - ɵChangeDetectionScheduler, - ɵNotificationSource, DebugElement, + ɵDeferBlockDetails as DeferBlockDetails, + ɵEffectScheduler as EffectScheduler, ElementRef, getDebugNode, + ɵgetDeferBlocks as getDeferBlocks, inject, NgZone, + ɵNoopNgZone as NoopNgZone, RendererFactory2, ViewRef, - ɵDeferBlockDetails as DeferBlockDetails, - ɵgetDeferBlocks as getDeferBlocks, - ɵNoopNgZone as NoopNgZone, ɵZONELESS_ENABLED as ZONELESS_ENABLED, - ɵEffectScheduler as EffectScheduler, + ɵChangeDetectionScheduler, + ɵNotificationSource, } from '../../src/core'; import {PendingTasksInternal} from '../../src/pending_tasks'; -import {Subscription} from 'rxjs'; +import {TestBedApplicationErrorHandler} from './application_error_handler'; import {DeferBlockFixture} from './defer'; import {ComponentFixtureAutoDetect, ComponentFixtureNoNgZone} from './test_bed_common'; -import {TestBedApplicationErrorHandler} from './application_error_handler'; interface TestAppRef { externalTestViews: Set<ViewRef>; @@ -97,7 +97,7 @@ export class ComponentFixture<T> { // TODO(atscott): Remove this from public API ngZone = this._noZoneOptionIsSet ? null : this._ngZone; - /** @nodoc */ + /** @docs-private */ constructor(public componentRef: ComponentRef<T>) { this.changeDetectorRef = componentRef.changeDetectorRef; this.elementRef = componentRef.location; diff --git a/packages/core/testing/src/defer.ts b/packages/core/testing/src/defer.ts index 67d52716313b..049b3fe7c75e 100644 --- a/packages/core/testing/src/defer.ts +++ b/packages/core/testing/src/defer.ts @@ -23,7 +23,7 @@ import type {ComponentFixture} from './component_fixture'; * @publicApi */ export class DeferBlockFixture { - /** @nodoc */ + /** @docs-private */ constructor( private block: DeferBlockDetails, private componentFixture: ComponentFixture<unknown>, diff --git a/packages/core/testing/src/test_bed.ts b/packages/core/testing/src/test_bed.ts index 38a0f8a91fbb..fdf3d0e02d56 100644 --- a/packages/core/testing/src/test_bed.ts +++ b/packages/core/testing/src/test_bed.ts @@ -11,33 +11,32 @@ // this statement only. import { + ApplicationRef, Component, + ɵRender3ComponentFactory as ComponentFactory, ComponentRef, + ɵDeferBlockBehavior as DeferBlockBehavior, Directive, EnvironmentInjector, + ɵflushModuleScopingQueueAsMuchAsPossible as flushModuleScopingQueueAsMuchAsPossible, + ɵgetAsyncClassMetadataFn as getAsyncClassMetadataFn, + ɵgetUnknownElementStrictMode as getUnknownElementStrictMode, + ɵgetUnknownPropertyStrictMode as getUnknownPropertyStrictMode, InjectOptions, Injector, NgModule, + ɵRender3NgModuleRef as NgModuleRef, NgZone, Pipe, PlatformRef, ProviderToken, - runInInjectionContext, - Type, - ɵDeferBlockBehavior as DeferBlockBehavior, - ɵEffectScheduler as EffectScheduler, - ɵflushModuleScopingQueueAsMuchAsPossible as flushModuleScopingQueueAsMuchAsPossible, - ɵgetAsyncClassMetadataFn as getAsyncClassMetadataFn, - ɵgetUnknownElementStrictMode as getUnknownElementStrictMode, - ɵgetUnknownPropertyStrictMode as getUnknownPropertyStrictMode, - ɵRender3ComponentFactory as ComponentFactory, - ɵRender3NgModuleRef as NgModuleRef, ɵresetCompiledComponents as resetCompiledComponents, + runInInjectionContext, ɵsetAllowDuplicateNgModuleIdsForTest as setAllowDuplicateNgModuleIdsForTest, ɵsetUnknownElementStrictMode as setUnknownElementStrictMode, ɵsetUnknownPropertyStrictMode as setUnknownPropertyStrictMode, ɵstringify as stringify, - ApplicationRef, + Type, } from '../../src/core'; import {ComponentFixture} from './component_fixture'; @@ -408,7 +407,7 @@ export class TestBedImpl implements TestBed { /** * Internal-only flag to indicate whether a module * scoping queue has been checked and flushed already. - * @nodoc + * @docs-private */ globalCompilationChecked = false; diff --git a/packages/core/testing/src/test_bed_compiler.ts b/packages/core/testing/src/test_bed_compiler.ts index 1a42f150d460..592deb2c4594 100644 --- a/packages/core/testing/src/test_bed_compiler.ts +++ b/packages/core/testing/src/test_bed_compiler.ts @@ -61,7 +61,6 @@ import { ɵrestoreComponentResolutionQueue, ɵsetLocaleId as setLocaleId, ɵtransitiveScopesFor as transitiveScopesFor, - ɵUSE_RUNTIME_DEPS_TRACKER_FOR_JIT as USE_RUNTIME_DEPS_TRACKER_FOR_JIT, ɵɵInjectableDeclaration as InjectableDeclaration, NgZone, ErrorHandler, @@ -238,9 +237,7 @@ export class TestBedCompiler { } overrideModule(ngModule: Type<any>, override: MetadataOverride<NgModule>): void { - if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - depsTracker.clearScopeCacheFor(ngModule); - } + depsTracker.clearScopeCacheFor(ngModule); this.overriddenModules.add(ngModule as NgModuleType<any>); // Compile the module right away. @@ -512,9 +509,7 @@ export class TestBedCompiler { } this.maybeStoreNgDef(NG_COMP_DEF, declaration); - if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - depsTracker.clearScopeCacheFor(declaration); - } + depsTracker.clearScopeCacheFor(declaration); compileComponent(declaration, metadata); }); this.pendingComponents.clear(); @@ -551,12 +546,7 @@ export class TestBedCompiler { const affectedModules = this.collectModulesAffectedByOverrides(testingModuleDef.imports); if (affectedModules.size > 0) { affectedModules.forEach((moduleType) => { - if (!USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - this.storeFieldOfDefOnType(moduleType as any, NG_MOD_DEF, 'transitiveCompileScopes'); - (moduleType as any)[NG_MOD_DEF].transitiveCompileScopes = null; - } else { - depsTracker.clearScopeCacheFor(moduleType); - } + depsTracker.clearScopeCacheFor(moduleType); }); } } @@ -911,9 +901,7 @@ export class TestBedCompiler { // Restore initial component/directive/pipe defs this.initialNgDefs.forEach( (defs: Map<string, PropertyDescriptor | undefined>, type: Type<any>) => { - if (USE_RUNTIME_DEPS_TRACKER_FOR_JIT) { - depsTracker.clearScopeCacheFor(type); - } + depsTracker.clearScopeCacheFor(type); defs.forEach((descriptor, prop) => { if (!descriptor) { // Delete operations are generally undesirable since they have performance diff --git a/packages/elements/test/BUILD.bazel b/packages/elements/test/BUILD.bazel index 33db5f57002d..01259775fe41 100644 --- a/packages/elements/test/BUILD.bazel +++ b/packages/elements/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/elements/index.mjs", - deps = ["//packages/elements"], -) ts_library( name = "test_lib", diff --git a/packages/forms/src/directives/abstract_form_group_directive.ts b/packages/forms/src/directives/abstract_form_group_directive.ts index dc444c4efe16..b1ad624edb7e 100644 --- a/packages/forms/src/directives/abstract_form_group_directive.ts +++ b/packages/forms/src/directives/abstract_form_group_directive.ts @@ -32,14 +32,14 @@ export class AbstractFormGroupDirective extends ControlContainer implements OnIn */ _parent!: ControlContainer; - /** @nodoc */ + /** @docs-private */ ngOnInit(): void { this._checkParentType(); // Register the group with its parent group. this.formDirective!.addFormGroup(this); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { if (this.formDirective) { // Remove the group from its parent group. diff --git a/packages/forms/src/directives/checkbox_value_accessor.ts b/packages/forms/src/directives/checkbox_value_accessor.ts index 8033c9a993f1..152fdd196e91 100644 --- a/packages/forms/src/directives/checkbox_value_accessor.ts +++ b/packages/forms/src/directives/checkbox_value_accessor.ts @@ -56,7 +56,7 @@ export class CheckboxControlValueAccessor { /** * Sets the "checked" property on the input element. - * @nodoc + * @docs-private */ writeValue(value: any): void { this.setProperty('checked', value); diff --git a/packages/forms/src/directives/control_value_accessor.ts b/packages/forms/src/directives/control_value_accessor.ts index e0e22158eb94..02b624a837d4 100644 --- a/packages/forms/src/directives/control_value_accessor.ts +++ b/packages/forms/src/directives/control_value_accessor.ts @@ -143,13 +143,13 @@ export class BaseControlValueAccessor { /** * The registered callback function called when a change or input event occurs on the input * element. - * @nodoc + * @docs-private */ onChange = (_: any) => {}; /** * The registered callback function called when a blur event occurs on the input element. - * @nodoc + * @docs-private */ onTouched = () => {}; @@ -161,7 +161,7 @@ export class BaseControlValueAccessor { /** * Helper method that sets a property on a target element using the current Renderer * implementation. - * @nodoc + * @docs-private */ protected setProperty(key: string, value: any): void { this._renderer.setProperty(this._elementRef.nativeElement, key, value); @@ -169,7 +169,7 @@ export class BaseControlValueAccessor { /** * Registers a function called when the control is touched. - * @nodoc + * @docs-private */ registerOnTouched(fn: () => void): void { this.onTouched = fn; @@ -177,7 +177,7 @@ export class BaseControlValueAccessor { /** * Registers a function called when the control value changes. - * @nodoc + * @docs-private */ registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; @@ -185,7 +185,7 @@ export class BaseControlValueAccessor { /** * Sets the "disabled" property on the range input element. - * @nodoc + * @docs-private */ setDisabledState(isDisabled: boolean): void { this.setProperty('disabled', isDisabled); diff --git a/packages/forms/src/directives/default_value_accessor.ts b/packages/forms/src/directives/default_value_accessor.ts index 9a1048ee4887..b7d331b61dad 100644 --- a/packages/forms/src/directives/default_value_accessor.ts +++ b/packages/forms/src/directives/default_value_accessor.ts @@ -115,7 +115,7 @@ export class DefaultValueAccessor extends BaseControlValueAccessor implements Co /** * Sets the "value" property on the input element. - * @nodoc + * @docs-private */ writeValue(value: any): void { const normalizedValue = value == null ? '' : value; diff --git a/packages/forms/src/directives/ng_form.ts b/packages/forms/src/directives/ng_form.ts index fa5c1b59fa3e..0b3b1f8cb63a 100644 --- a/packages/forms/src/directives/ng_form.ts +++ b/packages/forms/src/directives/ng_form.ts @@ -185,7 +185,7 @@ export class NgForm extends ControlContainer implements Form, AfterViewInit { ); } - /** @nodoc */ + /** @docs-private */ ngAfterViewInit() { this._setUpdateStrategy(); } diff --git a/packages/forms/src/directives/ng_model.ts b/packages/forms/src/directives/ng_model.ts index 5885f55bcf19..635ec82cd68e 100644 --- a/packages/forms/src/directives/ng_model.ts +++ b/packages/forms/src/directives/ng_model.ts @@ -173,7 +173,7 @@ export class NgModel extends NgControl implements OnChanges, OnDestroy { // match the native "disabled attribute" semantics which can be observed on input elements. // This static member tells the compiler that values of type "string" can also be assigned // to the input in a template. - /** @nodoc */ + /** @docs-private */ static ngAcceptInputType_isDisabled: boolean | string; /** @internal */ @@ -181,7 +181,7 @@ export class NgModel extends NgControl implements OnChanges, OnDestroy { /** * Internal reference to the view model value. - * @nodoc + * @docs-private */ viewModel: any; @@ -249,7 +249,7 @@ export class NgModel extends NgControl implements OnChanges, OnDestroy { this.valueAccessor = selectValueAccessor(this, valueAccessors); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges) { this._checkForErrors(); if (!this._registered || 'name' in changes) { @@ -276,7 +276,7 @@ export class NgModel extends NgControl implements OnChanges, OnDestroy { } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this.formDirective && this.formDirective.removeControl(this); } diff --git a/packages/forms/src/directives/number_value_accessor.ts b/packages/forms/src/directives/number_value_accessor.ts index 3b6f9df695fb..634b52896e59 100644 --- a/packages/forms/src/directives/number_value_accessor.ts +++ b/packages/forms/src/directives/number_value_accessor.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Directive, ElementRef, forwardRef, Provider} from '@angular/core'; +import {Directive, forwardRef, Provider} from '@angular/core'; import { BuiltInControlValueAccessor, @@ -57,7 +57,7 @@ export class NumberValueAccessor { /** * Sets the "value" property on the input element. - * @nodoc + * @docs-private */ writeValue(value: number): void { // The value needs to be normalized for IE9, otherwise it is set to 'null' when null @@ -67,7 +67,7 @@ export class NumberValueAccessor /** * Registers a function called when the control value changes. - * @nodoc + * @docs-private */ override registerOnChange(fn: (_: number | null) => void): void { this.onChange = (value) => { diff --git a/packages/forms/src/directives/radio_control_value_accessor.ts b/packages/forms/src/directives/radio_control_value_accessor.ts index 882c2b47a4c1..ac6906ecbe7b 100644 --- a/packages/forms/src/directives/radio_control_value_accessor.ts +++ b/packages/forms/src/directives/radio_control_value_accessor.ts @@ -144,7 +144,7 @@ export class RadioControlValueAccessor * Note: we declare `onChange` here (also used as host listener) as a function with no arguments * to override the `onChange` function (which expects 1 argument) in the parent * `BaseControlValueAccessor` class. - * @nodoc + * @docs-private */ override onChange = () => {}; @@ -179,21 +179,21 @@ export class RadioControlValueAccessor super(renderer, elementRef); } - /** @nodoc */ + /** @docs-private */ ngOnInit(): void { this._control = this._injector.get(NgControl); this._checkName(); this._registry.add(this._control, this); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this._registry.remove(this); } /** * Sets the "checked" property value on the radio input element. - * @nodoc + * @docs-private */ writeValue(value: any): void { this._state = value === this.value; @@ -202,7 +202,7 @@ export class RadioControlValueAccessor /** * Registers a function called when the control value changes. - * @nodoc + * @docs-private */ override registerOnChange(fn: (_: any) => {}): void { this._fn = fn; @@ -212,7 +212,7 @@ export class RadioControlValueAccessor }; } - /** @nodoc */ + /** @docs-private */ override setDisabledState(isDisabled: boolean): void { /** * `setDisabledState` is supposed to be called whenever the disabled state of a control changes, diff --git a/packages/forms/src/directives/range_value_accessor.ts b/packages/forms/src/directives/range_value_accessor.ts index 9550e151d933..30703737ddfe 100644 --- a/packages/forms/src/directives/range_value_accessor.ts +++ b/packages/forms/src/directives/range_value_accessor.ts @@ -61,7 +61,7 @@ export class RangeValueAccessor { /** * Sets the "value" property on the input element. - * @nodoc + * @docs-private */ writeValue(value: any): void { this.setProperty('value', parseFloat(value)); @@ -69,7 +69,7 @@ export class RangeValueAccessor /** * Registers a function called when the control value changes. - * @nodoc + * @docs-private */ override registerOnChange(fn: (_: number | null) => void): void { this.onChange = (value) => { diff --git a/packages/forms/src/directives/reactive_directives/form_control_directive.ts b/packages/forms/src/directives/reactive_directives/form_control_directive.ts index 22867c98b04b..5153d6c02689 100644 --- a/packages/forms/src/directives/reactive_directives/form_control_directive.ts +++ b/packages/forms/src/directives/reactive_directives/form_control_directive.ts @@ -80,7 +80,7 @@ const formControlBinding: Provider = { export class FormControlDirective extends NgControl implements OnChanges, OnDestroy { /** * Internal reference to the view model value. - * @nodoc + * @docs-private */ viewModel: any; @@ -147,7 +147,7 @@ export class FormControlDirective extends NgControl implements OnChanges, OnDest this.valueAccessor = selectValueAccessor(this, valueAccessors); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges): void { if (this._isControlChanged(changes)) { const previousForm = changes['form'].previousValue; @@ -166,7 +166,7 @@ export class FormControlDirective extends NgControl implements OnChanges, OnDest } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy() { if (this.form) { cleanUpControl(this.form, this, /* validateControlPresenceOnChange */ false); diff --git a/packages/forms/src/directives/reactive_directives/form_control_name.ts b/packages/forms/src/directives/reactive_directives/form_control_name.ts index c7384c7856ea..d9aa4fb6ab47 100644 --- a/packages/forms/src/directives/reactive_directives/form_control_name.ts +++ b/packages/forms/src/directives/reactive_directives/form_control_name.ts @@ -165,7 +165,7 @@ export class FormControlName extends NgControl implements OnChanges, OnDestroy { this.valueAccessor = selectValueAccessor(this, valueAccessors); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges) { if (!this._added) this._setUpControl(); if (isPropertyUpdated(changes, this.viewModel)) { @@ -177,7 +177,7 @@ export class FormControlName extends NgControl implements OnChanges, OnDestroy { } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { if (this.formDirective) { this.formDirective.removeControl(this); diff --git a/packages/forms/src/directives/reactive_directives/form_group_directive.ts b/packages/forms/src/directives/reactive_directives/form_group_directive.ts index beeb41e7f46d..c3aabb8908e1 100644 --- a/packages/forms/src/directives/reactive_directives/form_group_directive.ts +++ b/packages/forms/src/directives/reactive_directives/form_group_directive.ts @@ -46,9 +46,9 @@ import { } from '../shared'; import {AsyncValidator, AsyncValidatorFn, Validator, ValidatorFn} from '../validators'; +import {FormResetEvent, FormSubmittedEvent} from '../../model/abstract_model'; import type {FormControlName} from './form_control_name'; import type {FormArrayName, FormGroupName} from './form_group_name'; -import {FormResetEvent, FormSubmittedEvent} from '../../model/abstract_model'; const formDirectiveProvider: Provider = { provide: ControlContainer, @@ -147,7 +147,7 @@ export class FormGroupDirective extends ControlContainer implements Form, OnChan this._setAsyncValidators(asyncValidators); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges): void { if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.form) { throw missingFormException(); @@ -161,7 +161,7 @@ export class FormGroupDirective extends ControlContainer implements Form, OnChan } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy() { if (this.form) { cleanUpValidators(this.form, this); diff --git a/packages/forms/src/directives/reactive_directives/form_group_name.ts b/packages/forms/src/directives/reactive_directives/form_group_name.ts index 304f308ba37c..8564a551dd12 100644 --- a/packages/forms/src/directives/reactive_directives/form_group_name.ts +++ b/packages/forms/src/directives/reactive_directives/form_group_name.ts @@ -187,7 +187,7 @@ export class FormArrayName extends ControlContainer implements OnInit, OnDestroy /** * A lifecycle method called when the directive's inputs are initialized. For internal use only. * @throws If the directive does not have a valid parent. - * @nodoc + * @docs-private */ ngOnInit(): void { if (hasInvalidParent(this._parent) && (typeof ngDevMode === 'undefined' || ngDevMode)) { @@ -198,7 +198,7 @@ export class FormArrayName extends ControlContainer implements OnInit, OnDestroy /** * A lifecycle method called before the directive's instance is destroyed. For internal use only. - * @nodoc + * @docs-private */ ngOnDestroy(): void { this.formDirective?.removeFormArray(this); diff --git a/packages/forms/src/directives/select_control_value_accessor.ts b/packages/forms/src/directives/select_control_value_accessor.ts index b48928359649..02a5f1bb59c1 100644 --- a/packages/forms/src/directives/select_control_value_accessor.ts +++ b/packages/forms/src/directives/select_control_value_accessor.ts @@ -110,7 +110,7 @@ export class SelectControlValueAccessor extends BuiltInControlValueAccessor implements ControlValueAccessor { - /** @nodoc */ + /** @docs-private */ value: any; /** @internal */ @@ -139,7 +139,7 @@ export class SelectControlValueAccessor /** * Sets the "value" property on the select element. - * @nodoc + * @docs-private */ writeValue(value: any): void { this.value = value; @@ -150,7 +150,7 @@ export class SelectControlValueAccessor /** * Registers a function called when the control value changes. - * @nodoc + * @docs-private */ override registerOnChange(fn: (value: any) => any): void { this.onChange = (valueString: string) => { @@ -237,7 +237,7 @@ export class NgSelectOption implements OnDestroy { this._renderer.setProperty(this._element.nativeElement, 'value', value); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { if (this._select) { this._select._optionMap.delete(this.id); diff --git a/packages/forms/src/directives/select_multiple_control_value_accessor.ts b/packages/forms/src/directives/select_multiple_control_value_accessor.ts index 508aed31ac7a..bb878a56d5b5 100644 --- a/packages/forms/src/directives/select_multiple_control_value_accessor.ts +++ b/packages/forms/src/directives/select_multiple_control_value_accessor.ts @@ -92,7 +92,7 @@ export class SelectMultipleControlValueAccessor { /** * The current value. - * @nodoc + * @docs-private */ value: any; @@ -122,7 +122,7 @@ export class SelectMultipleControlValueAccessor /** * Sets the "value" property on one or of more of the select's options. - * @nodoc + * @docs-private */ writeValue(value: any): void { this.value = value; @@ -144,7 +144,7 @@ export class SelectMultipleControlValueAccessor /** * Registers a function called when the control value changes * and writes an array of the selected options. - * @nodoc + * @docs-private */ override registerOnChange(fn: (value: any) => any): void { this.onChange = (element: HTMLSelectElement) => { @@ -266,7 +266,7 @@ export class ɵNgSelectMultipleOption implements OnDestroy { this._renderer.setProperty(this._element.nativeElement, 'selected', selected); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { if (this._select) { this._select._optionMap.delete(this.id); diff --git a/packages/forms/src/directives/validators.ts b/packages/forms/src/directives/validators.ts index 20de276ab23d..128c692ec57b 100644 --- a/packages/forms/src/directives/validators.ts +++ b/packages/forms/src/directives/validators.ts @@ -154,7 +154,7 @@ abstract class AbstractValidatorDirective implements Validator, OnChanges { */ abstract normalizeInput(input: unknown): unknown; - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges): void { if (this.inputName in changes) { const input = this.normalizeInput(changes[this.inputName].currentValue); @@ -166,12 +166,12 @@ abstract class AbstractValidatorDirective implements Validator, OnChanges { } } - /** @nodoc */ + /** @docs-private */ validate(control: AbstractControl): ValidationErrors | null { return this._validator(control); } - /** @nodoc */ + /** @docs-private */ registerOnValidatorChange(fn: () => void): void { this._onChange = fn; } @@ -397,7 +397,7 @@ export class RequiredValidator extends AbstractValidatorDirective { /** @internal */ override createValidator = (input: boolean): ValidatorFn => requiredValidator; - /** @nodoc */ + /** @docs-private */ override enabled(input: boolean): boolean { return input; } @@ -494,7 +494,7 @@ export class EmailValidator extends AbstractValidatorDirective { /** @internal */ override createValidator = (input: number): ValidatorFn => emailValidator; - /** @nodoc */ + /** @docs-private */ override enabled(input: boolean): boolean { return input; } diff --git a/packages/forms/test/BUILD.bazel b/packages/forms/test/BUILD.bazel index f1add48fe7cd..c29e9a34f5b5 100644 --- a/packages/forms/test/BUILD.bazel +++ b/packages/forms/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library", "zone_compatible_jasmine_node_test") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/forms/index.mjs", - deps = ["//packages/forms"], -) ts_library( name = "test_lib", diff --git a/packages/language-service/test/legacy/BUILD.bazel b/packages/language-service/test/legacy/BUILD.bazel index fe725822c760..78345f8370cd 100644 --- a/packages/language-service/test/legacy/BUILD.bazel +++ b/packages/language-service/test/legacy/BUILD.bazel @@ -14,6 +14,14 @@ ts_library( ], ) +filegroup( + name = "package_types", + srcs = [ + "//packages/core:core_rjs", + ], + output_group = "types", +) + jasmine_node_test( name = "legacy", data = [ @@ -23,8 +31,8 @@ jasmine_node_test( # npm_package. Ivy does not currently produce flat dts, so we might # as well just depend on the outputs of ng_module. "//packages/common", - "//packages/core", "//packages/forms", + ":package_types", ":project", ], deps = [ diff --git a/packages/language-service/test/legacy/mock_host.ts b/packages/language-service/test/legacy/mock_host.ts index 25d1fbaddd54..857c3058fbf4 100644 --- a/packages/language-service/test/legacy/mock_host.ts +++ b/packages/language-service/test/legacy/mock_host.ts @@ -31,7 +31,7 @@ const logger: ts.server.Logger = { }; export const TEST_SRCDIR = process.env['TEST_SRCDIR']!; -export const PROJECT_DIR = join( +export const PROJECT_DIR: string = join( TEST_SRCDIR, 'angular', 'packages', @@ -40,11 +40,11 @@ export const PROJECT_DIR = join( 'legacy', 'project', ); -export const TSCONFIG = join(PROJECT_DIR, 'tsconfig.json'); -export const APP_COMPONENT = join(PROJECT_DIR, 'app', 'app.component.ts'); -export const APP_MAIN = join(PROJECT_DIR, 'app', 'main.ts'); -export const PARSING_CASES = join(PROJECT_DIR, 'app', 'parsing-cases.ts'); -export const TEST_TEMPLATE = join(PROJECT_DIR, 'app', 'test.ng'); +export const TSCONFIG: string = join(PROJECT_DIR, 'tsconfig.json'); +export const APP_COMPONENT: string = join(PROJECT_DIR, 'app', 'app.component.ts'); +export const APP_MAIN: string = join(PROJECT_DIR, 'app', 'main.ts'); +export const PARSING_CASES: string = join(PROJECT_DIR, 'app', 'parsing-cases.ts'); +export const TEST_TEMPLATE: string = join(PROJECT_DIR, 'app', 'test.ng'); const NOOP_FILE_WATCHER: ts.FileWatcher = { close() {}, diff --git a/packages/localize/package.json b/packages/localize/package.json index 0743d0ce2232..60493692a2f8 100644 --- a/packages/localize/package.json +++ b/packages/localize/package.json @@ -33,7 +33,7 @@ "./fesm2022/init.mjs" ], "dependencies": { - "@babel/core": "7.26.10", + "@babel/core": "7.27.1", "@types/babel__core": "7.20.5", "tinyglobby": "^0.2.12", "yargs": "^17.2.1" diff --git a/packages/localize/src/localize/src/localize.ts b/packages/localize/src/localize/src/localize.ts index 117f17486ec6..2717551a375d 100644 --- a/packages/localize/src/localize/src/localize.ts +++ b/packages/localize/src/localize/src/localize.ts @@ -8,7 +8,7 @@ import {findEndOfBlock} from '../../utils'; -/** @nodoc */ +/** @docs-private */ export interface LocalizeFn { (messageParts: TemplateStringsArray, ...expressions: readonly any[]): string; @@ -41,7 +41,7 @@ export interface LocalizeFn { locale?: string; } -/** @nodoc */ +/** @docs-private */ export interface TranslateFn { ( messageParts: TemplateStringsArray, diff --git a/packages/localize/test/BUILD.bazel b/packages/localize/test/BUILD.bazel index 80be5d6f66e7..7709fc91eac5 100644 --- a/packages/localize/test/BUILD.bazel +++ b/packages/localize/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/localize/index.mjs", - deps = ["//packages/localize"], -) ts_library( name = "test_lib", diff --git a/packages/package.json b/packages/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/packages/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/platform-browser-dynamic/src/platform_providers.ts b/packages/platform-browser-dynamic/src/platform_providers.ts index 8eee1ce7b224..d854cc77a45f 100644 --- a/packages/platform-browser-dynamic/src/platform_providers.ts +++ b/packages/platform-browser-dynamic/src/platform_providers.ts @@ -10,6 +10,7 @@ import { COMPILER_OPTIONS, CompilerFactory, createPlatformFactory, + PlatformRef, StaticProvider, } from '@angular/core'; import {platformBrowser} from '@angular/platform-browser'; @@ -29,8 +30,9 @@ export const INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS: StaticProvider[] = [ /** * @publicApi */ -export const platformBrowserDynamic = createPlatformFactory( - platformBrowser, - 'browserDynamic', - INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, -); +export const platformBrowserDynamic: (extraProviders?: StaticProvider[]) => PlatformRef = + createPlatformFactory( + platformBrowser, + 'browserDynamic', + INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, + ); diff --git a/packages/platform-browser-dynamic/test/BUILD.bazel b/packages/platform-browser-dynamic/test/BUILD.bazel index a277d5f7e4be..3327cfc9fd39 100644 --- a/packages/platform-browser-dynamic/test/BUILD.bazel +++ b/packages/platform-browser-dynamic/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-browser-dynamic/index.mjs", - deps = ["//packages/platform-browser-dynamic"], -) ts_library( name = "test_lib", diff --git a/packages/platform-browser-dynamic/testing/src/testing.ts b/packages/platform-browser-dynamic/testing/src/testing.ts index 48ce0a2d45bc..a7cd8cba7c19 100644 --- a/packages/platform-browser-dynamic/testing/src/testing.ts +++ b/packages/platform-browser-dynamic/testing/src/testing.ts @@ -13,10 +13,8 @@ import {BrowserTestingModule} from '@angular/platform-browser/testing'; /** * @publicApi */ -export const platformBrowserDynamicTesting = createPlatformFactory( - platformBrowserDynamic, - 'browserDynamicTesting', -); +export const platformBrowserDynamicTesting: (extraProviders?: StaticProvider[]) => PlatformRef = + createPlatformFactory(platformBrowserDynamic, 'browserDynamicTesting'); /** * NgModule for testing. diff --git a/packages/platform-browser/animations/async/src/async_animation_renderer.ts b/packages/platform-browser/animations/async/src/async_animation_renderer.ts index cbbae977c329..60e57d07c252 100644 --- a/packages/platform-browser/animations/async/src/async_animation_renderer.ts +++ b/packages/platform-browser/animations/async/src/async_animation_renderer.ts @@ -12,21 +12,21 @@ import { ɵAnimationRendererFactory as AnimationRendererFactory, } from '@angular/animations/browser'; import { + ɵAnimationRendererType as AnimationRendererType, + ɵChangeDetectionScheduler as ChangeDetectionScheduler, inject, Injectable, + InjectionToken, + Injector, NgZone, + ɵNotificationSource as NotificationSource, OnDestroy, Renderer2, RendererFactory2, RendererStyleFlags2, RendererType2, - ɵAnimationRendererType as AnimationRendererType, - ɵChangeDetectionScheduler as ChangeDetectionScheduler, - ɵNotificationSource as NotificationSource, ɵRuntimeError as RuntimeError, - InjectionToken, type ListenerOptions, - Injector, } from '@angular/core'; import {ɵRuntimeErrorCode as RuntimeErrorCode} from '../../../index'; @@ -57,7 +57,7 @@ export class AsyncAnimationRendererFactory implements OnDestroy, RendererFactory }>, ) {} - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { // When the root view is removed, the renderer defers the actual work to the // `TransitionAnimationEngine` to do this, and the `TransitionAnimationEngine` doesn't actually diff --git a/packages/platform-browser/animations/async/test/BUILD.bazel b/packages/platform-browser/animations/async/test/BUILD.bazel index 245b7d4f4b50..0420565a1158 100644 --- a/packages/platform-browser/animations/async/test/BUILD.bazel +++ b/packages/platform-browser/animations/async/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-browser/animations/index.mjs", - deps = ["//packages/platform-browser/animations"], -) ts_library( name = "test_lib", diff --git a/packages/platform-browser/animations/test/BUILD.bazel b/packages/platform-browser/animations/test/BUILD.bazel index 245b7d4f4b50..0420565a1158 100644 --- a/packages/platform-browser/animations/test/BUILD.bazel +++ b/packages/platform-browser/animations/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-browser/animations/index.mjs", - deps = ["//packages/platform-browser/animations"], -) ts_library( name = "test_lib", diff --git a/packages/platform-browser/test/BUILD.bazel b/packages/platform-browser/test/BUILD.bazel index 8c59eac3bc6d..e29c91ab2caf 100644 --- a/packages/platform-browser/test/BUILD.bazel +++ b/packages/platform-browser/test/BUILD.bazel @@ -1,24 +1,11 @@ load("@build_bazel_rules_nodejs//:index.bzl", "js_library") load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") exports_files([ "browser/static_assets/200.html", "static_assets/test.html", ]) -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-browser/index.mjs", - deps = ["//packages/platform-browser"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/platform-browser/testing/index.mjs", - deps = ["//packages/platform-browser/testing"], -) - ts_library( name = "test_lib", testonly = True, diff --git a/packages/platform-browser/testing/src/browser.ts b/packages/platform-browser/testing/src/browser.ts index 243f29a691d6..6fa967ff9652 100644 --- a/packages/platform-browser/testing/src/browser.ts +++ b/packages/platform-browser/testing/src/browser.ts @@ -15,6 +15,7 @@ import { ɵinternalProvideZoneChangeDetection as internalProvideZoneChangeDetection, ɵChangeDetectionScheduler as ChangeDetectionScheduler, ɵChangeDetectionSchedulerImpl as ChangeDetectionSchedulerImpl, + PlatformRef, } from '@angular/core'; import {TestComponentRenderer} from '@angular/core/testing'; import {BrowserModule, platformBrowser} from '../../index'; @@ -25,7 +26,8 @@ import {DOMTestComponentRenderer} from './dom_test_component_renderer'; * * @publicApi */ -export const platformBrowserTesting = createPlatformFactory(platformBrowser, 'browserTesting'); +export const platformBrowserTesting: (extraProviders?: StaticProvider[]) => PlatformRef = + createPlatformFactory(platformBrowser, 'browserTesting'); /** * NgModule for testing. diff --git a/packages/platform-server/init/test/BUILD.bazel b/packages/platform-server/init/test/BUILD.bazel index 4313581452c7..5eb367075b7e 100644 --- a/packages/platform-server/init/test/BUILD.bazel +++ b/packages/platform-server/init/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-server/init/index.mjs", - deps = ["//packages/platform-server/init"], -) ts_library( name = "test_lib", diff --git a/packages/platform-server/test/BUILD.bazel b/packages/platform-server/test/BUILD.bazel index 5e87ecce38a6..de8bdb5792cf 100644 --- a/packages/platform-server/test/BUILD.bazel +++ b/packages/platform-server/test/BUILD.bazel @@ -1,17 +1,4 @@ load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/platform-server/index.mjs", - deps = ["//packages/platform-server"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/platform-server/testing/index.mjs", - deps = ["//packages/platform-server/testing"], -) ts_library( name = "dom_utils", diff --git a/packages/platform-server/test/hydration_utils.ts b/packages/platform-server/test/hydration_utils.ts index 91cac882982a..f9f8a71c8bf8 100644 --- a/packages/platform-server/test/hydration_utils.ts +++ b/packages/platform-server/test/hydration_utils.ts @@ -42,7 +42,7 @@ export const EMPTY_TEXT_NODE_COMMENT = 'ngetn'; export const TEXT_NODE_SEPARATOR_COMMENT = 'ngtns'; export const SKIP_HYDRATION_ATTR_NAME = 'ngSkipHydration'; -export const SKIP_HYDRATION_ATTR_NAME_LOWER_CASE = SKIP_HYDRATION_ATTR_NAME.toLowerCase(); +export const SKIP_HYDRATION_ATTR_NAME_LOWER_CASE: string = SKIP_HYDRATION_ATTR_NAME.toLowerCase(); export const TRANSFER_STATE_TOKEN_ID = '__nghData__'; diff --git a/packages/platform-server/testing/src/server.ts b/packages/platform-server/testing/src/server.ts index 3845ef48728e..ac397d320808 100644 --- a/packages/platform-server/testing/src/server.ts +++ b/packages/platform-server/testing/src/server.ts @@ -6,7 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import {createPlatformFactory, NgModule, platformCore, StaticProvider} from '@angular/core'; +import { + createPlatformFactory, + NgModule, + platformCore, + PlatformRef, + StaticProvider, +} from '@angular/core'; import {ɵINTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS as INTERNAL_BROWSER_DYNAMIC_PLATFORM_PROVIDERS} from '@angular/platform-browser-dynamic'; import {BrowserDynamicTestingModule} from '@angular/platform-browser-dynamic/testing'; import { @@ -25,11 +31,12 @@ const INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS: StaticProvider[] = [ * @publicApi * @deprecated from v20.0.0, use e2e testing to verify SSR behavior. */ -export const platformServerTesting = createPlatformFactory( - platformCore, - 'serverTesting', - INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS, -); +export const platformServerTesting: (extraProviders?: StaticProvider[]) => PlatformRef = + createPlatformFactory( + platformCore, + 'serverTesting', + INTERNAL_SERVER_DYNAMIC_PLATFORM_TESTING_PROVIDERS, + ); /** * NgModule for testing. diff --git a/packages/router/src/directives/router_link.ts b/packages/router/src/directives/router_link.ts index a78f19b67f3a..40ca1e133e32 100644 --- a/packages/router/src/directives/router_link.ts +++ b/packages/router/src/directives/router_link.ts @@ -12,27 +12,29 @@ import { booleanAttribute, Directive, ElementRef, + HostAttributeToken, HostBinding, HostListener, + inject, Input, OnChanges, OnDestroy, Renderer2, ɵRuntimeError as RuntimeError, + signal, SimpleChanges, - ɵɵsanitizeUrlOrResourceUrl, + untracked, ɵINTERNAL_APPLICATION_ERROR_HANDLER, - inject, } from '@angular/core'; import {Subject, Subscription} from 'rxjs'; - +import {RuntimeErrorCode} from '../errors'; import {Event, NavigationEnd} from '../events'; import {QueryParamsHandling} from '../models'; import {Router} from '../router'; +import {ROUTER_CONFIGURATION} from '../router_config'; import {ActivatedRoute} from '../router_state'; import {Params} from '../shared'; import {isUrlTree, UrlTree} from '../url_tree'; -import {RuntimeErrorCode} from '../errors'; /** * @description @@ -142,14 +144,25 @@ import {RuntimeErrorCode} from '../errors'; */ @Directive({ selector: '[routerLink]', + host: { + '[attr.href]': 'reactiveHref()', + }, }) export class RouterLink implements OnChanges, OnDestroy { + /** @nodoc */ + protected readonly reactiveHref = signal<string | null>(null); /** * Represents an `href` attribute value applied to a host element, * when a host element is an `<a>`/`<area>` tag or a compatible custom element. * For other tags, the value is `null`. */ - href: string | null = null; + get href() { + return untracked(this.reactiveHref); + } + /** @deprecated */ + set href(value: string | null) { + this.reactiveHref.set(value); + } /** * Represents the `target` attribute on a host element. @@ -213,6 +226,7 @@ export class RouterLink implements OnChanges, OnDestroy { onChanges = new Subject<RouterLink>(); private readonly applicationErrorHandler = inject(ɵINTERNAL_APPLICATION_ERROR_HANDLER); + private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}); constructor( private router: Router, @@ -222,6 +236,8 @@ export class RouterLink implements OnChanges, OnDestroy { private readonly el: ElementRef, private locationStrategy?: LocationStrategy, ) { + // Set the initial href value to whatever exists on the host element already + this.reactiveHref.set(inject(new HostAttributeToken('href'), {optional: true})); const tagName = el.nativeElement.tagName?.toLowerCase(); this.isAnchorElement = tagName === 'a' || @@ -238,17 +254,37 @@ export class RouterLink implements OnChanges, OnDestroy { ) ); - if (this.isAnchorElement) { - this.subscription = router.events.subscribe((s: Event) => { - if (s instanceof NavigationEnd) { - this.updateHref(); - } - }); + if (!this.isAnchorElement) { + this.subscribeToNavigationEventsIfNecessary(); } else { this.setTabIndexIfNotOnNativeEl('0'); } } + private subscribeToNavigationEventsIfNecessary() { + if (this.subscription !== undefined || !this.isAnchorElement) { + return; + } + + // preserving fragment in router state + let createSubcription = this.preserveFragment; + // preserving or merging with query params in router state + const dependsOnRouterState = (handling?: QueryParamsHandling | null) => + handling === 'merge' || handling === 'preserve'; + createSubcription ||= dependsOnRouterState(this.queryParamsHandling); + createSubcription ||= + !this.queryParamsHandling && !dependsOnRouterState(this.options?.defaultQueryParamsHandling); + if (!createSubcription) { + return; + } + + this.subscription = this.router.events.subscribe((s: Event) => { + if (s instanceof NavigationEnd) { + this.updateHref(); + } + }); + } + /** * Passed to {@link Router#createUrlTree} as part of the * `UrlCreationOptions`. @@ -284,9 +320,9 @@ export class RouterLink implements OnChanges, OnDestroy { this.applyAttributeValue('tabindex', newTabIndex); } - /** @nodoc */ + /** @docs-private */ // TODO(atscott): Remove changes parameter in major version as a breaking change. - ngOnChanges(changes?: SimpleChanges) { + ngOnChanges(changes?: SimpleChanges): void { if ( ngDevMode && isUrlTree(this.routerLinkInput) && @@ -303,6 +339,7 @@ export class RouterLink implements OnChanges, OnDestroy { } if (this.isAnchorElement) { this.updateHref(); + this.subscribeToNavigationEventsIfNecessary(); } // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes // to the RouterLinks it's tracking. @@ -337,7 +374,7 @@ export class RouterLink implements OnChanges, OnDestroy { } } - /** @nodoc */ + /** @docs-private */ @HostListener('click', [ '$event.button', '$event.ctrlKey', @@ -385,37 +422,18 @@ export class RouterLink implements OnChanges, OnDestroy { return !this.isAnchorElement; } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): any { this.subscription?.unsubscribe(); } private updateHref(): void { const urlTree = this.urlTree; - this.href = + this.reactiveHref.set( urlTree !== null && this.locationStrategy - ? this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) - : null; - - const sanitizedValue = - this.href === null - ? null - : // This class represents a directive that can be added to both `<a>` elements, - // as well as other elements. As a result, we can't define security context at - // compile time. So the security context is deferred to runtime. - // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function - // based on the tag and property names. The logic mimics the one from - // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time. - // - // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')` - // instead of applying a value via a renderer, after a final merge of the - // `RouterLinkWithHref` directive. - ɵɵsanitizeUrlOrResourceUrl( - this.href, - this.el.nativeElement.tagName.toLowerCase(), - 'href', - ); - this.applyAttributeValue('href', sanitizedValue); + ? (this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(urlTree)) ?? '') + : null, + ); } private applyAttributeValue(attrName: string, attrValue: string | null) { @@ -451,7 +469,8 @@ export class RouterLink implements OnChanges, OnDestroy { * An alias for the `RouterLink` directive. * Deprecated since v15, use `RouterLink` directive instead. * - * @deprecated use `RouterLink` directive instead. +export { RouterLink as RouterLinkWithHref }; +nstead. * @publicApi */ export {RouterLink as RouterLinkWithHref}; diff --git a/packages/router/src/directives/router_link_active.ts b/packages/router/src/directives/router_link_active.ts index 4d2f6b82f143..4cc677f69f1b 100644 --- a/packages/router/src/directives/router_link_active.ts +++ b/packages/router/src/directives/router_link_active.ts @@ -112,7 +112,7 @@ export class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit private linkInputChangesSubscription?: Subscription; private _isActive = false; - get isActive() { + get isActive(): boolean { return this._isActive; } @@ -166,7 +166,7 @@ export class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit }); } - /** @nodoc */ + /** @docs-private */ ngAfterContentInit(): void { // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`). of(this.links.changes, of(null)) @@ -197,11 +197,11 @@ export class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit this.classes = classes.filter((c) => !!c); } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges): void { this.update(); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this.routerEventsSubscription.unsubscribe(); this.linkInputChangesSubscription?.unsubscribe(); diff --git a/packages/router/src/directives/router_outlet.ts b/packages/router/src/directives/router_outlet.ts index 5b8c0f0ec1f2..d17adf42bda9 100644 --- a/packages/router/src/directives/router_outlet.ts +++ b/packages/router/src/directives/router_outlet.ts @@ -17,15 +17,15 @@ import { InjectionToken, Injector, Input, + input, OnDestroy, OnInit, Output, reflectComponentType, - SimpleChanges, - ViewContainerRef, ɵRuntimeError as RuntimeError, Signal, - input, + SimpleChanges, + ViewContainerRef, } from '@angular/core'; import {combineLatest, of, Subscription} from 'rxjs'; import {switchMap} from 'rxjs/operators'; @@ -243,11 +243,11 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { private location = inject(ViewContainerRef); private changeDetector = inject(ChangeDetectorRef); private inputBinder = inject(INPUT_BINDER, {optional: true}); - /** @nodoc */ + /** @docs-private */ readonly supportsBindingToComponentInputs = true; - /** @nodoc */ - ngOnChanges(changes: SimpleChanges) { + /** @docs-private */ + ngOnChanges(changes: SimpleChanges): void { if (changes['name']) { const {firstChange, previousValue} = changes['name']; if (firstChange) { @@ -266,7 +266,7 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { } } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { // Ensure that the registered outlet is this one before removing it on the context. if (this.isTrackedInParentContexts(this.name)) { @@ -279,7 +279,7 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { return this.parentContexts.getContext(outletName)?.outlet === this; } - /** @nodoc */ + /** @docs-private */ ngOnInit(): void { this.initializeOutletWithName(); } @@ -357,7 +357,7 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { /** * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree */ - attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute) { + attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute): void { this.activated = ref; this._activatedRoute = activatedRoute; this.location.insert(ref.hostView); @@ -375,7 +375,7 @@ export class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract { } } - activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector) { + activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector): void { if (this.isActivated) { throw new RuntimeError( RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED, @@ -453,12 +453,12 @@ export const INPUT_BINDER = new InjectionToken<RoutedComponentInputBinder>(''); export class RoutedComponentInputBinder { private outletDataSubscriptions = new Map<RouterOutlet, Subscription>(); - bindActivatedRouteToOutletComponent(outlet: RouterOutlet) { + bindActivatedRouteToOutletComponent(outlet: RouterOutlet): void { this.unsubscribeFromRouteData(outlet); this.subscribeToRouteData(outlet); } - unsubscribeFromRouteData(outlet: RouterOutlet) { + unsubscribeFromRouteData(outlet: RouterOutlet): void { this.outletDataSubscriptions.get(outlet)?.unsubscribe(); this.outletDataSubscriptions.delete(outlet); } diff --git a/packages/router/src/router.ts b/packages/router/src/router.ts index 06d51af39aec..ba2d6f854cdc 100644 --- a/packages/router/src/router.ts +++ b/packages/router/src/router.ts @@ -8,17 +8,18 @@ import {Location} from '@angular/common'; import { + ɵConsole as Console, + EnvironmentInjector, inject, Injectable, - Type, - ɵConsole as Console, ɵPendingTasksInternal as PendingTasks, ɵRuntimeError as RuntimeError, + Type, ɵINTERNAL_APPLICATION_ERROR_HANDLER, - EnvironmentInjector, } from '@angular/core'; import {Observable, Subject, Subscription, SubscriptionLike} from 'rxjs'; +import {standardizeConfig} from './components/empty_outlet'; import {createSegmentGroupFromRoute, createUrlTreeFromSegmentGroup} from './create_url_tree'; import {INPUT_BINDER} from './directives/router_outlet'; import {RuntimeErrorCode} from './errors'; @@ -57,7 +58,7 @@ import { } from './url_tree'; import {validateConfig} from './utils/config'; import {afterNextNavigation} from './utils/navigations'; -import {standardizeConfig} from './components/empty_outlet'; +import {RouterState} from './router_state'; /** * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `true` @@ -136,7 +137,7 @@ export class Router { /** * The current state of routing in this NgModule. */ - get routerState() { + get routerState(): RouterState { return this.stateManager.getRouterState(); } @@ -368,7 +369,7 @@ export class Router { this.navigated = false; } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { this.dispose(); } diff --git a/packages/router/src/router_outlet_context.ts b/packages/router/src/router_outlet_context.ts index 17bba693125d..24cb45561568 100644 --- a/packages/router/src/router_outlet_context.ts +++ b/packages/router/src/router_outlet_context.ts @@ -41,7 +41,7 @@ export class ChildrenOutletContexts { // contexts for child outlets, by name. private contexts = new Map<string, OutletContext>(); - /** @nodoc */ + /** @docs-private */ constructor(private rootInjector: EnvironmentInjector) {} /** Called when a `RouterOutlet` directive is instantiated */ @@ -74,7 +74,7 @@ export class ChildrenOutletContexts { return contexts; } - onOutletReAttached(contexts: Map<string, OutletContext>) { + onOutletReAttached(contexts: Map<string, OutletContext>): void { this.contexts = contexts; } diff --git a/packages/router/src/router_preloader.ts b/packages/router/src/router_preloader.ts index 55fe6c2a6612..793169c77dd0 100644 --- a/packages/router/src/router_preloader.ts +++ b/packages/router/src/router_preloader.ts @@ -96,7 +96,7 @@ export class RouterPreloader implements OnDestroy { return this.processRoutes(this.injector, this.router.config); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy(): void { if (this.subscription) { this.subscription.unsubscribe(); diff --git a/packages/router/src/router_scroller.ts b/packages/router/src/router_scroller.ts index 9eb2bfbf9254..9e14bd0b3576 100644 --- a/packages/router/src/router_scroller.ts +++ b/packages/router/src/router_scroller.ts @@ -34,7 +34,7 @@ export class RouterScroller implements OnDestroy { private restoredId = 0; private store: {[key: string]: [number, number]} = {}; - /** @nodoc */ + /** @docs-private */ constructor( readonly urlSerializer: UrlSerializer, private transitions: NavigationTransitions, @@ -134,8 +134,8 @@ export class RouterScroller implements OnDestroy { }); } - /** @nodoc */ - ngOnDestroy() { + /** @docs-private */ + ngOnDestroy(): void { this.routerEventsSubscription?.unsubscribe(); this.scrollEventsSubscription?.unsubscribe(); } diff --git a/packages/router/src/shared.ts b/packages/router/src/shared.ts index 0cfc5924ecf5..23ec9aa8c5e3 100644 --- a/packages/router/src/shared.ts +++ b/packages/router/src/shared.ts @@ -21,7 +21,7 @@ export const PRIMARY_OUTLET = 'primary'; * static string or `Route.resolve` if anything else. This allows us to reuse the existing route * data/resolvers to support the title feature without new instrumentation in the `Router` pipeline. */ -export const RouteTitleKey = /* @__PURE__ */ Symbol('RouteTitle'); +export const RouteTitleKey: unique symbol = /* @__PURE__ */ Symbol('RouteTitle'); /** * A collection of matrix and query URL parameters. diff --git a/packages/router/src/statemanager/state_manager.ts b/packages/router/src/statemanager/state_manager.ts index e3d5a81cb33d..f5f5c7278ed2 100644 --- a/packages/router/src/statemanager/state_manager.ts +++ b/packages/router/src/statemanager/state_manager.ts @@ -91,7 +91,7 @@ export abstract class StateManager { return path; } - protected commitTransition({targetRouterState, finalUrl, initialUrl}: Navigation) { + protected commitTransition({targetRouterState, finalUrl, initialUrl}: Navigation): void { // If we are committing the transition after having a final URL and target state, we're updating // all pieces of the state. Otherwise, we likely skipped the transition (due to URL handling strategy) // and only want to update the rawUrlTree, which represents the browser URL (and doesn't necessarily match router state). @@ -113,7 +113,7 @@ export abstract class StateManager { private stateMemento = this.createStateMemento(); - protected updateStateMemento() { + protected updateStateMemento(): void { this.stateMemento = this.createStateMemento(); } @@ -209,7 +209,7 @@ export class HistoryStateManager extends StateManager { }); } - override handleRouterEvent(e: Event | PrivateRouterEvents, currentTransition: Navigation) { + override handleRouterEvent(e: Event | PrivateRouterEvents, currentTransition: Navigation): void { if (e instanceof NavigationStart) { this.updateStateMemento(); } else if (e instanceof NavigationSkipped) { diff --git a/packages/router/src/url_tree.ts b/packages/router/src/url_tree.ts index 2a5803170e95..54cacd16f2c1 100644 --- a/packages/router/src/url_tree.ts +++ b/packages/router/src/url_tree.ts @@ -760,7 +760,7 @@ class UrlParser { } } -export function createRoot(rootCandidate: UrlSegmentGroup) { +export function createRoot(rootCandidate: UrlSegmentGroup): UrlSegmentGroup { return rootCandidate.segments.length > 0 ? new UrlSegmentGroup([], {[PRIMARY_OUTLET]: rootCandidate}) : rootCandidate; diff --git a/packages/router/src/utils/collection.ts b/packages/router/src/utils/collection.ts index da56512c6025..8e09798329ee 100644 --- a/packages/router/src/utils/collection.ts +++ b/packages/router/src/utils/collection.ts @@ -48,7 +48,10 @@ export function getDataKeys(obj: Object): Array<string | symbol> { /** * Test equality for arrays of strings or a string. */ -export function equalArraysOrString(a: string | readonly string[], b: string | readonly string[]) { +export function equalArraysOrString( + a: string | readonly string[], + b: string | readonly string[], +): boolean { if (Array.isArray(a) && Array.isArray(b)) { if (a.length !== b.length) return false; const aSorted = [...a].sort(); diff --git a/packages/router/src/utils/config.ts b/packages/router/src/utils/config.ts index c57fabfe7bb7..4555a86704e1 100644 --- a/packages/router/src/utils/config.ts +++ b/packages/router/src/utils/config.ts @@ -31,7 +31,7 @@ import {PRIMARY_OUTLET} from '../shared'; export function getOrCreateRouteInjectorIfNeeded( route: Route, currentInjector: EnvironmentInjector, -) { +): EnvironmentInjector { if (route.providers && !route._injector) { route._injector = createEnvironmentInjector( route.providers, @@ -70,7 +70,7 @@ export function validateConfig( } } -export function assertStandalone(fullPath: string, component: Type<unknown> | undefined) { +export function assertStandalone(fullPath: string, component: Type<unknown> | undefined): void { if (component && isNgModule(component)) { throw new RuntimeError( RuntimeErrorCode.INVALID_ROUTE_CONFIG, diff --git a/packages/router/src/utils/config_matching.ts b/packages/router/src/utils/config_matching.ts index a54a8fa7ccc5..b2af5fefccbd 100644 --- a/packages/router/src/utils/config_matching.ts +++ b/packages/router/src/utils/config_matching.ts @@ -115,7 +115,10 @@ export function split( consumedSegments: UrlSegment[], slicedSegments: UrlSegment[], config: Route[], -) { +): { + segmentGroup: UrlSegmentGroup; + slicedSegments: UrlSegment[]; +} { if ( slicedSegments.length > 0 && containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config) diff --git a/packages/router/src/utils/navigations.ts b/packages/router/src/utils/navigations.ts index 2f96b5b35f87..c5f73854c84c 100644 --- a/packages/router/src/utils/navigations.ts +++ b/packages/router/src/utils/navigations.ts @@ -33,7 +33,7 @@ const enum NavigationResult { * redirecting/superseding navigation must finish. * - `NavigationError`, `NavigationEnd`, or `NavigationSkipped` event emits */ -export function afterNextNavigation(router: {events: Observable<Event>}, action: () => void) { +export function afterNextNavigation(router: {events: Observable<Event>}, action: () => void): void { router.events .pipe( filter( diff --git a/packages/router/src/utils/preactivation.ts b/packages/router/src/utils/preactivation.ts index 208c80dfa6e7..e02ca5263c87 100644 --- a/packages/router/src/utils/preactivation.ts +++ b/packages/router/src/utils/preactivation.ts @@ -42,7 +42,7 @@ export function getAllRouteGuards( future: RouterStateSnapshot, curr: RouterStateSnapshot, parentContexts: ChildrenOutletContexts, -) { +): Checks { const futureRoot = future._root; const currRoot = curr ? curr._root : null; diff --git a/packages/router/src/utils/tree.ts b/packages/router/src/utils/tree.ts index 606c99551c28..dce0650e7364 100644 --- a/packages/router/src/utils/tree.ts +++ b/packages/router/src/utils/tree.ts @@ -100,7 +100,11 @@ export class TreeNode<T> { } // Return the list of T indexed by outlet name -export function nodeChildrenAsMap<T extends {outlet: string}>(node: TreeNode<T> | null) { +export function nodeChildrenAsMap<T extends {outlet: string}>( + node: TreeNode<T> | null, +): { + [outlet: string]: TreeNode<T>; +} { const map: {[outlet: string]: TreeNode<T>} = {}; if (node) { diff --git a/packages/router/test/BUILD.bazel b/packages/router/test/BUILD.bazel index 90df4e9693cb..995e5b67be6a 100644 --- a/packages/router/test/BUILD.bazel +++ b/packages/router/test/BUILD.bazel @@ -1,17 +1,4 @@ load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library", "zone_compatible_jasmine_node_test") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/router/index.mjs", - deps = ["//packages/router"], -) - -circular_dependency_test( - name = "testing_circular_deps_test", - entry_point = "angular/packages/router/testing/index.mjs", - deps = ["//packages/router/testing"], -) ts_library( name = "test_lib", diff --git a/packages/router/upgrade/src/upgrade.ts b/packages/router/upgrade/src/upgrade.ts index 7c5b457cc5c4..0fbb13db4051 100644 --- a/packages/router/upgrade/src/upgrade.ts +++ b/packages/router/upgrade/src/upgrade.ts @@ -70,7 +70,10 @@ export function locationSyncBootstrapListener(ngUpgrade: UpgradeModule) { * * @publicApi */ -export function setUpLocationSync(ngUpgrade: UpgradeModule, urlType: 'path' | 'hash' = 'path') { +export function setUpLocationSync( + ngUpgrade: UpgradeModule, + urlType: 'path' | 'hash' = 'path', +): void { if (!ngUpgrade.$injector) { throw new Error(` RouterUpgradeInitializer can be used only after UpgradeModule.bootstrap has been called. diff --git a/packages/router/upgrade/test/BUILD.bazel b/packages/router/upgrade/test/BUILD.bazel index b220351849c0..f0b6ab3f78be 100644 --- a/packages/router/upgrade/test/BUILD.bazel +++ b/packages/router/upgrade/test/BUILD.bazel @@ -1,11 +1,4 @@ load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") - -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/router/upgrade/index.mjs", - deps = ["//packages/router/upgrade"], -) ts_library( name = "test_lib", diff --git a/packages/service-worker/BUILD.bazel b/packages/service-worker/BUILD.bazel index c5bbe7fee772..3ff9e17f3468 100644 --- a/packages/service-worker/BUILD.bazel +++ b/packages/service-worker/BUILD.bazel @@ -1,8 +1,19 @@ -load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "generate_api_docs", "ng_module", "ng_package") +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") +load("//tools:defaults.bzl", "api_golden_test", "api_golden_test_npm_package", "generate_api_docs", "ng_package") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +rules_js_tsconfig( + name = "tsconfig_build", + src = "tsconfig.json", + deps = [ + "//:node_modules/@types/node", + "//packages:tsconfig_build", + ], +) + +ng_project( name = "service-worker", srcs = glob( [ @@ -10,9 +21,11 @@ ng_module( "src/**/*.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/packages/service-worker/cli/BUILD.bazel b/packages/service-worker/cli/BUILD.bazel index 773855c797d2..87d901080ac4 100644 --- a/packages/service-worker/cli/BUILD.bazel +++ b/packages/service-worker/cli/BUILD.bazel @@ -1,17 +1,15 @@ load("@npm//@bazel/esbuild:index.bzl", "esbuild", "esbuild_config") -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "cli", srcs = glob( ["**/*.ts"], ), - tsconfig = ":tsconfig.json", deps = [ - "//packages/service-worker/config", - "@npm//@types/node", + "//packages/service-worker/config:config_rjs", ], ) diff --git a/packages/service-worker/cli/esbuild.config.js b/packages/service-worker/cli/esbuild.config.js index 6f565cbfa205..bf32b55e907f 100644 --- a/packages/service-worker/cli/esbuild.config.js +++ b/packages/service-worker/cli/esbuild.config.js @@ -7,7 +7,8 @@ */ module.exports = { - resolveExtensions: ['.mjs'], + // TODO: Investigate if this can be removed once ng_module is migrated to ng_project + resolveExtensions: ['.mjs', '.js'], // Note: `@bazel/esbuild` has a bug and does not pass-through the format from Starlark. format: 'esm', banner: { diff --git a/packages/service-worker/cli/filesystem.ts b/packages/service-worker/cli/filesystem.ts index c84f5f48c805..eb5d531fd7cf 100644 --- a/packages/service-worker/cli/filesystem.ts +++ b/packages/service-worker/cli/filesystem.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Filesystem} from '../config'; +import {Filesystem} from '../config/index'; import * as fs from 'fs'; import * as path from 'path'; diff --git a/packages/service-worker/cli/tsconfig.json b/packages/service-worker/cli/tsconfig.json deleted file mode 100644 index a47c57485c90..000000000000 --- a/packages/service-worker/cli/tsconfig.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "declaration": false, - "strict": true, - "module": "es2020", - "moduleResolution": "node", - "strictNullChecks": true, - "noImplicitReturns": true, - "noPropertyAccessFromIndexSignature": true, - "strictPropertyInitialization": true, - "outDir": "../../../dist/all/@angular/service-worker/cli-custom", - "noImplicitAny": true, - "noImplicitOverride": true, - "noFallthroughCasesInSwitch": true, - "rootDir": ".", - "paths": { - "@angular/service-worker/config": [ - "../../../dist/packages/service-worker/config" - ] - }, - "inlineSourceMap": true, - "lib": [ - "es2020" - ], - "target": "es2020", - "typeRoots": [], - "types": [ - "node" - ] - }, - "files": [ - "main.ts", - "../../../node_modules/@types/node/index.d.ts" - ] -} diff --git a/packages/service-worker/config/BUILD.bazel b/packages/service-worker/config/BUILD.bazel index 007f28865cbc..9c419572f5c6 100644 --- a/packages/service-worker/config/BUILD.bazel +++ b/packages/service-worker/config/BUILD.bazel @@ -1,4 +1,4 @@ -load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) @@ -15,8 +15,8 @@ filegroup( ]), ) -ng_module( +ng_project( name = "config", srcs = [":sources"], - deps = ["//packages/core"], + interop_deps = ["//packages/core"], ) diff --git a/packages/service-worker/config/test/BUILD.bazel b/packages/service-worker/config/test/BUILD.bazel index fee25d7827b8..f27e4b549c4a 100644 --- a/packages/service-worker/config/test/BUILD.bazel +++ b/packages/service-worker/config/test/BUILD.bazel @@ -1,21 +1,15 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/service-worker/config/index.mjs", - deps = ["//packages/service-worker/config"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob( ["**/*.ts"], ), deps = [ - "//packages/service-worker/config", - "//packages/service-worker/config/testing", + "//packages/service-worker/config:config_rjs", + "//packages/service-worker/config/testing:testing_rjs", ], ) diff --git a/packages/service-worker/config/testing/BUILD.bazel b/packages/service-worker/config/testing/BUILD.bazel index 3c1ba46fdc1a..ccb13822888e 100644 --- a/packages/service-worker/config/testing/BUILD.bazel +++ b/packages/service-worker/config/testing/BUILD.bazel @@ -1,16 +1,16 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) exports_files(["package.json"]) -ts_library( +ts_project( name = "testing", srcs = glob([ "*.ts", ]), deps = [ - "//packages/service-worker/cli", - "//packages/service-worker/config", + "//packages/service-worker/cli:cli_rjs", + "//packages/service-worker/config:config_rjs", ], ) diff --git a/packages/service-worker/test/BUILD.bazel b/packages/service-worker/test/BUILD.bazel index 1cd39e50b5c4..b1a44588d880 100644 --- a/packages/service-worker/test/BUILD.bazel +++ b/packages/service-worker/test/BUILD.bazel @@ -1,25 +1,23 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/service-worker/index.mjs", - deps = ["//packages/service-worker"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, - srcs = glob(["**/*.ts"]), - deps = [ - "//packages:types", + srcs = glob([ + "**/*.ts", + ]), + interop_deps = [ "//packages/core", "//packages/core/testing", "//packages/service-worker", "//packages/service-worker/testing", - "//packages/service-worker/worker", - "//packages/service-worker/worker/testing", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//packages:types_rjs", + "//packages/service-worker/worker:worker_rjs", + "//packages/service-worker/worker/testing:testing_rjs", ], ) diff --git a/packages/service-worker/testing/BUILD.bazel b/packages/service-worker/testing/BUILD.bazel index 629685fc3276..9b211555734b 100644 --- a/packages/service-worker/testing/BUILD.bazel +++ b/packages/service-worker/testing/BUILD.bazel @@ -1,13 +1,15 @@ -load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "testing", testonly = True, srcs = glob(["**/*.ts"]), - deps = [ + interop_deps = [ "//packages/core", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", ], ) diff --git a/packages/service-worker/tsconfig.json b/packages/service-worker/tsconfig.json new file mode 100644 index 000000000000..226d2fb95fc4 --- /dev/null +++ b/packages/service-worker/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig-build.json", + "compilerOptions": { + "types": ["node"] + } +} \ No newline at end of file diff --git a/packages/service-worker/worker/BUILD.bazel b/packages/service-worker/worker/BUILD.bazel index 2d2057fc6ff7..ca955f19958a 100644 --- a/packages/service-worker/worker/BUILD.bazel +++ b/packages/service-worker/worker/BUILD.bazel @@ -1,9 +1,9 @@ load("@npm//@bazel/esbuild:index.bzl", "esbuild") -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "worker", srcs = glob( [ @@ -14,20 +14,16 @@ ts_library( "main.ts", ], ), - deps = ["@npm//@types/node"], ) -ts_library( +ts_project( name = "main", srcs = ["main.ts"], - deps = [":worker"], + deps = [":worker_rjs"], ) esbuild( name = "ngsw_worker", - args = { - "resolveExtensions": [".mjs"], - }, entry_point = ":main.ts", format = "iife", platform = "browser", @@ -36,6 +32,6 @@ esbuild( # features that are unavailable in some supported browsers. This is risky though, so we keep ES2017. target = "es2017", deps = [ - ":main", + ":main_rjs", ], ) diff --git a/packages/service-worker/worker/test/BUILD.bazel b/packages/service-worker/worker/test/BUILD.bazel index b278d973e325..4df3eee69d53 100644 --- a/packages/service-worker/worker/test/BUILD.bazel +++ b/packages/service-worker/worker/test/BUILD.bazel @@ -1,23 +1,17 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/service-worker/worker/main.mjs", - deps = ["//packages/service-worker/worker:main"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, - srcs = glob( - ["**/*.ts"], - ), + srcs = glob([ + "**/*.ts", + ]), deps = [ - "//packages:types", - "//packages/service-worker/config", - "//packages/service-worker/worker", - "//packages/service-worker/worker/testing", + "//packages:types_rjs", + "//packages/service-worker/config:config_rjs", + "//packages/service-worker/worker:worker_rjs", + "//packages/service-worker/worker/testing:testing_rjs", ], ) diff --git a/packages/service-worker/worker/testing/BUILD.bazel b/packages/service-worker/worker/testing/BUILD.bazel index 47ceea0d7a49..349856e189fc 100644 --- a/packages/service-worker/worker/testing/BUILD.bazel +++ b/packages/service-worker/worker/testing/BUILD.bazel @@ -1,15 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "testing", testonly = True, srcs = glob(["**/*.ts"]), - deps = [ - "//packages:types", + interop_deps = [ "//packages/core", - "//packages/service-worker/worker", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//:node_modules/typescript", + "//packages:types_rjs", + "//packages/service-worker/worker:worker_rjs", ], ) diff --git a/packages/system.d.ts b/packages/system.d.ts index 268a02a7fbb4..a27a62c4ce01 100644 --- a/packages/system.d.ts +++ b/packages/system.d.ts @@ -6,5 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +// TODO(devversion): Remove this file during `rules_js` migration. + /** Dummy typings for systemjs. */ declare var System: any; diff --git a/packages/tsconfig-build.json b/packages/tsconfig-build.json index 64d405252cd0..10d3126ab0e8 100644 --- a/packages/tsconfig-build.json +++ b/packages/tsconfig-build.json @@ -29,7 +29,11 @@ "emitDecoratorMetadata": true, "sourceMap": true, "inlineSources": true, - "importHelpers": true + "importHelpers": true, + "paths": { + "zone.js": ["./zone.js/lib/zone"], + "@angular/*": ["./*/index"] + } }, "bazelOptions": { "suppressTsconfigOverrideWarnings": true diff --git a/packages/tsconfig.json b/packages/tsconfig.json index 61360b5fe15f..7c2f1d9fc0c9 100644 --- a/packages/tsconfig.json +++ b/packages/tsconfig.json @@ -24,6 +24,7 @@ "selenium-webdriver": ["./node_modules/@types/selenium-webdriver/index.d.ts"], "rxjs/*": ["./node_modules/rxjs/*"], "@angular/*": ["./packages/*"], + "zone.js": ["./packages/zone.js/lib/zone"], "zone.js/*": ["./packages/zone.js/*"], "angular-in-memory-web-api": ["./packages/misc/angular-in-memory-web-api/index.ts"] }, diff --git a/packages/types.d.ts b/packages/types.d.ts index 9df17d015184..f247117cd5c4 100644 --- a/packages/types.d.ts +++ b/packages/types.d.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +// TODO(devversion): Remove this file during `rules_js` migration. + // This file contains all ambient imports needed to compile the packages/ source code /// <reference types="hammerjs" /> diff --git a/packages/upgrade/BUILD.bazel b/packages/upgrade/BUILD.bazel index 9442a4752fe9..f263f6cb9246 100644 --- a/packages/upgrade/BUILD.bazel +++ b/packages/upgrade/BUILD.bazel @@ -1,8 +1,9 @@ -load("//tools:defaults.bzl", "api_golden_test_npm_package", "generate_api_docs", "ng_module", "ng_package") +load("//tools:defaults.bzl", "api_golden_test_npm_package", "generate_api_docs", "ng_package") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "upgrade", srcs = glob( [ @@ -10,12 +11,14 @@ ng_module( "src/dynamic/src/*.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", "//packages/platform-browser-dynamic", - "//packages/upgrade/src/common", "//packages/zone.js/lib:zone_d_ts", ], + deps = [ + "//packages/upgrade/src/common:common_rjs", + ], ) ng_package( diff --git a/packages/upgrade/src/common/BUILD.bazel b/packages/upgrade/src/common/BUILD.bazel index 118e9258ac3d..ddcc1a72bd82 100644 --- a/packages/upgrade/src/common/BUILD.bazel +++ b/packages/upgrade/src/common/BUILD.bazel @@ -1,4 +1,4 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = [ "//packages:__pkg__", @@ -6,12 +6,12 @@ package(default_visibility = [ "//tools/public_api_guard:__subpackages__", ]) -ts_library( +ts_project( name = "common", srcs = glob([ "src/**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/core", ], ) diff --git a/packages/upgrade/src/common/test/BUILD.bazel b/packages/upgrade/src/common/test/BUILD.bazel index f1f229b6847c..416d2ce2a8eb 100644 --- a/packages/upgrade/src/common/test/BUILD.bazel +++ b/packages/upgrade/src/common/test/BUILD.bazel @@ -1,21 +1,17 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/upgrade/index.mjs", - deps = ["//packages/upgrade"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob(["**/*.ts"]), - deps = [ + interop_deps = [ "//packages/core", "//packages/core/testing", - "//packages/upgrade/src/common", - "//packages/upgrade/src/common/test/helpers", + ], + deps = [ + "//packages/upgrade/src/common:common_rjs", + "//packages/upgrade/src/common/test/helpers:helpers_rjs", ], ) diff --git a/packages/upgrade/src/common/test/helpers/BUILD.bazel b/packages/upgrade/src/common/test/helpers/BUILD.bazel index 8faa68b1443e..7f767a2ac96c 100644 --- a/packages/upgrade/src/common/test/helpers/BUILD.bazel +++ b/packages/upgrade/src/common/test/helpers/BUILD.bazel @@ -1,14 +1,18 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//packages/upgrade:__subpackages__"]) -ts_library( +ts_project( name = "helpers", + testonly = True, srcs = glob([ "*.ts", ]), - deps = [ + interop_deps = [ "//packages/core/testing", - "//packages/upgrade/src/common", + ], + deps = [ + "//:node_modules/@types/jasmine", + "//packages/upgrade/src/common:common_rjs", ], ) diff --git a/packages/upgrade/src/common/test/helpers/common_test_helpers.ts b/packages/upgrade/src/common/test/helpers/common_test_helpers.ts index 4737d55ee89f..8534040dcf0f 100644 --- a/packages/upgrade/src/common/test/helpers/common_test_helpers.ts +++ b/packages/upgrade/src/common/test/helpers/common_test_helpers.ts @@ -176,4 +176,5 @@ export function nodes(html: string) { return Array.prototype.slice.call(div.childNodes); } -export const withEachNg1Version = createWithEachNg1VersionFn(setAngularJSGlobal); +export const withEachNg1Version: (specSuite: () => void) => void = + createWithEachNg1VersionFn(setAngularJSGlobal); diff --git a/packages/upgrade/src/dynamic/src/upgrade_adapter.ts b/packages/upgrade/src/dynamic/src/upgrade_adapter.ts index fda4d24d0f03..466567f9dcf1 100644 --- a/packages/upgrade/src/dynamic/src/upgrade_adapter.ts +++ b/packages/upgrade/src/dynamic/src/upgrade_adapter.ts @@ -56,6 +56,9 @@ import { import {UpgradeNg1ComponentAdapterBuilder} from './upgrade_ng1_adapter'; +// Needed for the global `Zone` ambient types to be available. +import type {} from 'zone.js'; + let upgradeCount: number = 0; /** diff --git a/packages/upgrade/src/dynamic/test/BUILD.bazel b/packages/upgrade/src/dynamic/test/BUILD.bazel index 313a240cf802..2f29c48a9862 100644 --- a/packages/upgrade/src/dynamic/test/BUILD.bazel +++ b/packages/upgrade/src/dynamic/test/BUILD.bazel @@ -1,19 +1,22 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/core", "//packages/core/testing", "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/upgrade", - "//packages/upgrade/src/common", - "//packages/upgrade/src/common/test/helpers", + ], + deps = [ + "//packages/upgrade:upgrade_rjs", + "//packages/upgrade/src/common:common_rjs", + "//packages/upgrade/src/common/test/helpers:helpers_rjs", ], ) diff --git a/packages/upgrade/static/BUILD.bazel b/packages/upgrade/static/BUILD.bazel index 0a64d5b61d1c..93ffcc488912 100644 --- a/packages/upgrade/static/BUILD.bazel +++ b/packages/upgrade/static/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "generate_api_docs", "ng_module") +load("//tools:defaults.bzl", "generate_api_docs") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) exports_files(["package.json"]) -ng_module( +ng_project( name = "static", srcs = glob( [ @@ -12,10 +13,12 @@ ng_module( "src/*.ts", ], ), - deps = [ + interop_deps = [ "//packages/core", "//packages/platform-browser", - "//packages/upgrade", + ], + deps = [ + "//packages/upgrade:upgrade_rjs", ], ) diff --git a/packages/upgrade/static/src/upgrade_component.ts b/packages/upgrade/static/src/upgrade_component.ts index 1a616e38b38a..1d7283a695db 100644 --- a/packages/upgrade/static/src/upgrade_component.ts +++ b/packages/upgrade/static/src/upgrade_component.ts @@ -123,7 +123,7 @@ export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy { this.initializeOutputs(); } - /** @nodoc */ + /** @docs-private */ ngOnInit() { // Collect contents, insert and compile template const attachChildNodes: ɵangular1.ILinkFn | undefined = this.helper.prepareTransclusion(); @@ -196,7 +196,7 @@ export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy { } } - /** @nodoc */ + /** @docs-private */ ngOnChanges(changes: SimpleChanges) { if (!this.bindingDestination) { this.pendingChanges = changes; @@ -205,7 +205,7 @@ export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy { } } - /** @nodoc */ + /** @docs-private */ ngDoCheck() { const twoWayBoundProperties = this.bindings.twoWayBoundProperties; const twoWayBoundLastValues = this.bindings.twoWayBoundLastValues; @@ -225,7 +225,7 @@ export class UpgradeComponent implements OnInit, OnChanges, DoCheck, OnDestroy { }); } - /** @nodoc */ + /** @docs-private */ ngOnDestroy() { if (ɵutil.isFunction(this.unregisterDoCheckWatcher)) { this.unregisterDoCheckWatcher(); diff --git a/packages/upgrade/static/test/BUILD.bazel b/packages/upgrade/static/test/BUILD.bazel index 5f423a1eaf91..dc14da367623 100644 --- a/packages/upgrade/static/test/BUILD.bazel +++ b/packages/upgrade/static/test/BUILD.bazel @@ -1,28 +1,24 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/upgrade/static/index.mjs", - deps = ["//packages/upgrade/static"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/core", "//packages/core/testing", "//packages/platform-browser", "//packages/platform-browser-dynamic", "//packages/platform-browser/testing", "//packages/private/testing", - "//packages/upgrade/src/common", - "//packages/upgrade/src/common/test/helpers", - "//packages/upgrade/static", + ], + deps = [ + "//packages/upgrade/src/common:common_rjs", + "//packages/upgrade/src/common/test/helpers:helpers_rjs", + "//packages/upgrade/static:static_rjs", ], ) diff --git a/packages/upgrade/static/testing/BUILD.bazel b/packages/upgrade/static/testing/BUILD.bazel index b84415f58acf..e12b999b89c5 100644 --- a/packages/upgrade/static/testing/BUILD.bazel +++ b/packages/upgrade/static/testing/BUILD.bazel @@ -1,10 +1,11 @@ -load("//tools:defaults.bzl", "generate_api_docs", "ng_module") +load("//tools:defaults.bzl", "generate_api_docs") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) exports_files(["package.json"]) -ng_module( +ng_project( name = "testing", srcs = glob( [ @@ -12,9 +13,11 @@ ng_module( "src/*.ts", ], ), - deps = [ + interop_deps = [ "//packages/core/testing", - "//packages/upgrade/static", + ], + deps = [ + "//packages/upgrade/static:static_rjs", ], ) diff --git a/packages/upgrade/static/testing/test/BUILD.bazel b/packages/upgrade/static/testing/test/BUILD.bazel index b273e3bf8339..1a27462c580e 100644 --- a/packages/upgrade/static/testing/test/BUILD.bazel +++ b/packages/upgrade/static/testing/test/BUILD.bazel @@ -1,27 +1,23 @@ -load("//tools:defaults.bzl", "karma_web_test_suite", "ts_library") -load("//tools/circular_dependency_test:index.bzl", "circular_dependency_test") +load("//tools:defaults.bzl", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -circular_dependency_test( - name = "circular_deps_test", - entry_point = "angular/packages/upgrade/static/testing/index.mjs", - deps = ["//packages/upgrade/static/testing"], -) - -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob([ "**/*.ts", ]), - deps = [ + interop_deps = [ "//packages/core", "//packages/core/testing", "//packages/upgrade/src/common", - "//packages/upgrade/src/common/test/helpers", - "//packages/upgrade/static", - "//packages/upgrade/static/testing", + ], + deps = [ + "//packages/upgrade/src/common/test/helpers:helpers_rjs", + "//packages/upgrade/static:static_rjs", + "//packages/upgrade/static/testing:testing_rjs", ], ) diff --git a/packages/zone.js/lib/BUILD.bazel b/packages/zone.js/lib/BUILD.bazel index 24084db23102..de7a2b447fbc 100644 --- a/packages/zone.js/lib/BUILD.bazel +++ b/packages/zone.js/lib/BUILD.bazel @@ -14,6 +14,8 @@ ts_library( ":zone.ts", ":zone-impl.ts", ], + module_name = "zone.js", + module_root = "zone.d.ts", deps = [ "@npm//@types/node", ], diff --git a/packages/zone.js/package.json b/packages/zone.js/package.json index 7bf92804c9dd..f83b12ec7ee1 100644 --- a/packages/zone.js/package.json +++ b/packages/zone.js/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@externs/nodejs": "^1.5.0", "@types/node": "^10.9.4", - "domino": "https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af", + "domino": "https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b", "google-closure-compiler": "^20240317.0.0", "jest": "^29.0", "jest-environment-jsdom": "^29.0.3", diff --git a/packages/zone.js/yarn.lock b/packages/zone.js/yarn.lock index 2481181330cd..7f5b21b3e585 100644 --- a/packages/zone.js/yarn.lock +++ b/packages/zone.js/yarn.lock @@ -1124,9 +1124,10 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -"domino@https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af": - version "2.1.6" - resolved "https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af" +"domino@https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b": + version "2.1.6+git" + uid "93e720f143d0296dd2726ffbcf4fc12283363a7b" + resolved "https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b" dunder-proto@^1.0.1: version "1.0.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd86315047b9..88567302947f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,7 +1,7 @@ lockfileVersion: '6.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false onlyBuiltDependencies: [] @@ -15,41 +15,41 @@ importers: .: dependencies: '@angular-devkit/build-angular': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.3.4) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2) '@angular-devkit/core': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(chokidar@4.0.3) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(chokidar@4.0.3) '@angular-devkit/schematics': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(chokidar@4.0.3) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(chokidar@4.0.3) '@angular/build': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2) '@angular/cdk': - specifier: 20.0.0-next.10 - version: 20.0.0-next.10(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(rxjs@7.8.2) '@angular/cli': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(@types/node@18.19.87)(chokidar@4.0.3) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(@types/node@18.19.87)(chokidar@4.0.3) '@angular/material': - specifier: 20.0.0-next.10 - version: 20.0.0-next.10(@angular/cdk@20.0.0-next.10)(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/forms@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(@angular/cdk@20.0.0-rc.0)(rxjs@7.8.2) '@angular/ssr': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/router@20.0.0-next.9) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0 '@babel/cli': - specifier: 7.27.0 - version: 7.27.0(@babel/core@7.26.10) + specifier: 7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@babel/core': - specifier: 7.26.10 - version: 7.26.10 + specifier: 7.27.1 + version: 7.27.1 '@babel/generator': - specifier: 7.27.0 - version: 7.27.0 + specifier: 7.27.1 + version: 7.27.1 '@bazel/concatjs': specifier: 5.8.1 - version: 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2) + version: 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2) '@bazel/esbuild': specifier: 5.8.1 version: 5.8.1 @@ -61,7 +61,7 @@ importers: version: 5.8.1(protractor@7.0.0) '@bazel/rollup': specifier: 5.8.1 - version: 5.8.1(rollup@4.35.0) + version: 5.8.1(rollup@4.40.2) '@bazel/runfiles': specifier: 5.8.1 version: 5.8.1 @@ -79,16 +79,16 @@ importers: version: 7.52.5(@types/node@18.19.87) '@rollup/plugin-babel': specifier: ^6.0.0 - version: 6.0.4(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@4.35.0) + version: 6.0.4(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@4.40.2) '@rollup/plugin-commonjs': specifier: ^28.0.0 - version: 28.0.3(rollup@4.35.0) + version: 28.0.3(rollup@4.40.2) '@rollup/plugin-node-resolve': - specifier: ^13.0.4 - version: 13.3.0(rollup@4.35.0) + specifier: ^16.0.0 + version: 16.0.1(rollup@4.40.2) '@schematics/angular': - specifier: 20.0.0-next.9 - version: 20.0.0-next.9(chokidar@4.0.3) + specifier: 20.0.0-rc.0 + version: 20.0.0-rc.0(chokidar@4.0.3) '@stackblitz/sdk': specifier: ^1.11.0 version: 1.11.0 @@ -105,8 +105,8 @@ importers: specifier: ^3.5.27 version: 3.5.42 '@types/chrome': - specifier: ^0.0.317 - version: 0.0.317 + specifier: ^0.0.322 + version: 0.0.322 '@types/convert-source-map': specifier: ^2.0.0 version: 2.0.3 @@ -204,8 +204,8 @@ importers: specifier: ^7.0.0 version: 7.0.0 domino: - specifier: https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af - version: github.com/angular/domino/8f228f8862540c6ccd14f76b5a1d9bb5458618af + specifier: https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b + version: github.com/angular/domino/93e720f143d0296dd2726ffbcf4fc12283363a7b hammerjs: specifier: ~2.0.8 version: 2.0.8 @@ -221,6 +221,9 @@ importers: jasmine-core: specifier: ^5.0.0 version: 5.7.0 + jasmine-reporters: + specifier: ^2.5.2 + version: 2.5.2 karma: specifier: ~6.4.0 version: 6.4.4 @@ -247,10 +250,10 @@ importers: version: 2.0.1 ngx-flamegraph: specifier: 0.0.12 - version: 0.0.12(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) + version: 0.0.12 ngx-progressbar: specifier: ^14.0.0 - version: 14.0.0(@angular/cdk@20.0.0-next.10)(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2) + version: 14.0.0(@angular/cdk@20.0.0-rc.0)(rxjs@7.8.2) open-in-idx: specifier: ^0.1.1 version: 0.1.1 @@ -264,17 +267,17 @@ importers: specifier: ^2.3.6 version: 2.3.7 rollup: - specifier: 4.35.0 - version: 4.35.0 + specifier: 4.40.2 + version: 4.40.2 rollup-plugin-dts: specifier: ^6.1.1 - version: 6.2.1(rollup@4.35.0)(typescript@5.8.2) + version: 6.2.1(rollup@4.40.2)(typescript@5.8.2) rollup-plugin-preserve-shebang: specifier: ^1.0.1 version: 1.0.1 rollup-plugin-sourcemaps: specifier: ^0.6.3 - version: 0.6.3(@types/node@18.19.87)(rollup@4.35.0) + version: 0.6.3(@types/node@18.19.87)(rollup@4.40.2) rxjs: specifier: ^7.0.0 version: 7.8.2 @@ -282,14 +285,14 @@ importers: specifier: 3.5.0 version: 3.5.0 selenium-webdriver4: - specifier: npm:selenium-webdriver@4.31.0 - version: /selenium-webdriver@4.31.0 + specifier: npm:selenium-webdriver@4.32.0 + version: /selenium-webdriver@4.32.0 semver-dsl: specifier: ^1.0.1 version: 1.0.1 shelljs: - specifier: ^0.9.0 - version: 0.9.2 + specifier: ^0.10.0 + version: 0.10.0 source-map: specifier: 0.7.4 version: 0.7.4 @@ -343,17 +346,17 @@ importers: specifier: ^6.0.0 version: 6.0.0 '@angular-devkit/architect-cli': - specifier: 0.2000.0-next.9 - version: 0.2000.0-next.9(chokidar@4.0.3) + specifier: 0.2000.0-rc.0 + version: 0.2000.0-rc.0(chokidar@4.0.3) '@angular/build-tooling': specifier: https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a - version: github.com/angular/dev-infra-private-build-tooling-builds/ce04ec6cf7604014191821a637e60964a1a3bb4a(@angular/ssr@20.0.0-next.9)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3)(zone.js@0.12.0) + version: github.com/angular/dev-infra-private-build-tooling-builds/ce04ec6cf7604014191821a637e60964a1a3bb4a(@angular/ssr@20.0.0-rc.0)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#1a12d97905f4af88ccc0b582864907729d23e23e - version: github.com/angular/dev-infra-private-ng-dev-builds/1a12d97905f4af88ccc0b582864907729d23e23e + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#a871c115e04a76587fcd418107ad985752610ccf + version: github.com/angular/dev-infra-private-ng-dev-builds/a871c115e04a76587fcd418107ad985752610ccf '@babel/plugin-proposal-async-generator-functions': specifier: 7.20.7 - version: 7.20.7(@babel/core@7.26.10) + version: 7.20.7(@babel/core@7.27.1) '@bazel/bazelisk': specifier: ^1.7.5 version: 1.26.0 @@ -361,8 +364,8 @@ importers: specifier: ^8.0.0 version: 8.0.3 '@bazel/ibazel': - specifier: 0.16.2 - version: 0.16.2 + specifier: 0.25.0 + version: 0.25.0 '@codemirror/autocomplete': specifier: ^6.11.1 version: 6.18.6 @@ -449,7 +452,7 @@ importers: version: 0.5.16 angular-split: specifier: ^19.0.0 - version: 19.0.0(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2) + version: 19.0.0(rxjs@7.8.2) check-side-effects: specifier: 0.0.23 version: 0.0.23 @@ -498,9 +501,6 @@ importers: live-server: specifier: ^1.2.2 version: 1.2.2 - madge: - specifier: ^8.0.0 - version: 8.0.0(typescript@5.8.2) marked: specifier: ^15.0.0 version: 15.0.11 @@ -553,6 +553,49 @@ importers: specifier: 6.0.0 version: 6.0.0(tslint@6.1.3)(typescript@5.8.2) + packages/compiler: + dependencies: + tslib: + specifier: ^2.3.0 + version: 2.8.1 + + packages/compiler-cli: + dependencies: + '@babel/core': + specifier: 7.27.1 + version: 7.27.1 + '@jridgewell/sourcemap-codec': + specifier: ^1.4.14 + version: 1.5.0 + chokidar: + specifier: ^4.0.0 + version: 4.0.3 + convert-source-map: + specifier: ^1.5.1 + version: 1.9.0 + reflect-metadata: + specifier: ^0.2.0 + version: 0.2.2 + semver: + specifier: ^7.0.0 + version: 7.7.1 + tslib: + specifier: ^2.3.0 + version: 2.8.1 + yargs: + specifier: ^17.2.1 + version: 17.7.2 + devDependencies: + '@angular/compiler': + specifier: workspace:* + version: link:../compiler + + tools/bazel/rules_angular_store: + dependencies: + '@angular/compiler-cli': + specifier: workspace:* + version: link:../../../packages/compiler-cli + packages: /@actions/core@1.11.1: @@ -711,13 +754,13 @@ packages: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - /@angular-devkit/architect-cli@0.2000.0-next.9(chokidar@4.0.3): - resolution: {integrity: sha512-dRi3075GrtDJUoNQNa1mRVosniyW2uCw7iP/oBd+qVTLqL5LzfXiO84nmrRQy9TSTjQdOLM63yWMxhfnw+J9gw==, tarball: https://registry.npmjs.org/@angular-devkit/architect-cli/-/architect-cli-0.2000.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/architect-cli@0.2000.0-rc.0(chokidar@4.0.3): + resolution: {integrity: sha512-inyeokdQI83zVY9n07dOTPLotDb+wSnC6+Cj/2pkfug1aVBq1bC+lZKrHO2BMkaWaXwrusTBJ0ikgxqKSh90GQ==, tarball: https://registry.npmjs.org/@angular-devkit/architect-cli/-/architect-cli-0.2000.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true dependencies: - '@angular-devkit/architect': 0.2000.0-next.9(chokidar@4.0.3) - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) + '@angular-devkit/architect': 0.2000.0-rc.0(chokidar@4.0.3) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) ansi-colors: 4.1.3 progress: 2.0.3 yargs-parser: 21.1.1 @@ -735,18 +778,18 @@ packages: - chokidar dev: true - /@angular-devkit/architect@0.2000.0-next.9(chokidar@4.0.3): - resolution: {integrity: sha512-YR6AbJTbArhTwNrUYxj52+PH6FFQMPfxIILGqC/ywfrQdU0218sLocfkpGS6FnSNcdgXdzKSZyuWGB+3SSpY0Q==, tarball: https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/architect@0.2000.0-rc.0(chokidar@4.0.3): + resolution: {integrity: sha512-O3sVOvEou7+d0YbIE/OzHs6EU/xrHjSwi3z1djyNSJflhwTe6qyY4wdzdggwWt6z6iS5sLsMolsnhR6hYfuK+A==, tarball: https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} dependencies: - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) rxjs: 7.8.2 transitivePeerDependencies: - chokidar - /@angular-devkit/build-angular@20.0.0-next.9(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.3.4): - resolution: {integrity: sha512-ZST69xXPunUFaosiGwaE6xwEn/y1+dv5z+SMbSArLupqLCZO+J8orOTIxd30fqBPrGCBPY7u3AjIUzPkYQtHFQ==, tarball: https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/build-angular@20.0.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2): + resolution: {integrity: sha512-dFiKXZTPV2Uiq938eHSxepCrZKPY3ZbS3L08Q6bgPTInq1hFIceaVty7Ujq90PD6DYEaY3bGKv+aynN8occcCw==, tarball: https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^20.0.0 || ^20.0.0-next.0 '@angular/core': ^20.0.0 || ^20.0.0-next.0 @@ -754,7 +797,7 @@ packages: '@angular/platform-browser': ^20.0.0 || ^20.0.0-next.0 '@angular/platform-server': ^20.0.0 || ^20.0.0-next.0 '@angular/service-worker': ^20.0.0 || ^20.0.0-next.0 - '@angular/ssr': ^20.0.0-next.9 + '@angular/ssr': ^20.0.0-rc.0 '@web/test-runner': ^0.20.0 browser-sync: ^3.0.2 jest: ^29.5.0 @@ -795,32 +838,30 @@ packages: optional: true dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2000.0-next.9(chokidar@4.0.3) - '@angular-devkit/build-webpack': 0.2000.0-next.9(chokidar@4.0.3)(webpack-dev-server@5.2.1)(webpack@5.99.7) - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) - '@angular/build': 20.0.0-next.9(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/platform-browser': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) - '@angular/ssr': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/router@20.0.0-next.9) - '@babel/core': 7.26.10 - '@babel/generator': 7.27.0 - '@babel/helper-annotate-as-pure': 7.25.9 + '@angular-devkit/architect': 0.2000.0-rc.0(chokidar@4.0.3) + '@angular-devkit/build-webpack': 0.2000.0-rc.0(chokidar@4.0.3)(webpack-dev-server@5.2.1)(webpack@5.99.8) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) + '@angular/build': 20.0.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2) + '@angular/ssr': 20.0.0-rc.0 + '@babel/core': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10) - '@babel/preset-env': 7.26.9(@babel/core@7.26.10) - '@babel/runtime': 7.27.0 + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-runtime': 7.27.1(@babel/core@7.27.1) + '@babel/preset-env': 7.27.2(@babel/core@7.27.1) + '@babel/runtime': 7.27.1 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 20.0.0-next.9(typescript@5.8.2)(webpack@5.99.7) - '@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.4) + '@ngtools/webpack': 20.0.0-rc.0(typescript@5.8.2)(webpack@5.99.8) + '@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.5) ansi-colors: 4.1.3 autoprefixer: 10.4.21(postcss@8.5.3) - babel-loader: 10.0.0(@babel/core@7.26.10)(webpack@5.99.7) + babel-loader: 10.0.0(@babel/core@7.27.1)(webpack@5.99.8) browserslist: 4.24.4 - copy-webpack-plugin: 13.0.0(webpack@5.99.7) - css-loader: 7.1.2(webpack@5.99.7) - esbuild-wasm: 0.25.3 + copy-webpack-plugin: 13.0.0(webpack@5.99.8) + css-loader: 7.1.2(webpack@5.99.8) + esbuild-wasm: 0.25.4 fast-glob: 3.3.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 @@ -828,35 +869,35 @@ packages: karma: 6.4.4 karma-source-map-support: 1.4.0 less: 4.3.0 - less-loader: 12.2.0(less@4.3.0)(webpack@5.99.7) - license-webpack-plugin: 4.0.2(webpack@5.99.7) + less-loader: 12.3.0(less@4.3.0)(webpack@5.99.8) + license-webpack-plugin: 4.0.2(webpack@5.99.8) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.9.2(webpack@5.99.7) - open: 10.1.1 + mini-css-extract-plugin: 2.9.2(webpack@5.99.8) + open: 10.1.2 ora: 5.4.1 picomatch: 4.0.2 - piscina: 4.9.2 + piscina: 5.0.0 postcss: 8.5.3 - postcss-loader: 8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.99.7) + postcss-loader: 8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.99.8) protractor: 7.0.0 resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.87.0 - sass-loader: 16.0.5(sass@1.87.0)(webpack@5.99.7) + sass-loader: 16.0.5(sass@1.87.0)(webpack@5.99.8) semver: 7.7.1 - source-map-loader: 5.0.0(webpack@5.99.7) + source-map-loader: 5.0.0(webpack@5.99.8) source-map-support: 0.5.21 terser: 5.39.0 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.8.2 - webpack: 5.99.7(esbuild@0.25.3) - webpack-dev-middleware: 7.4.2(webpack@5.99.7) - webpack-dev-server: 5.2.1(webpack@5.99.7) + webpack: 5.99.8(esbuild@0.25.4) + webpack-dev-middleware: 7.4.2(webpack@5.99.8) + webpack-dev-server: 5.2.1(webpack@5.99.8) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(webpack@5.99.7) + webpack-subresource-integrity: 5.1.0(webpack@5.99.8) optionalDependencies: - esbuild: 0.25.3 + esbuild: 0.25.4 transitivePeerDependencies: - '@angular/compiler' - '@rspack/core' @@ -893,17 +934,17 @@ packages: webpack-sources: 1.3.0 dev: true - /@angular-devkit/build-webpack@0.2000.0-next.9(chokidar@4.0.3)(webpack-dev-server@5.2.1)(webpack@5.99.7): - resolution: {integrity: sha512-zliPqpqJid8Mmw+Mn0uxmIfZxPnmpae1DRIUIRQA/MZIt4xs6Yr6scn3I8xooU2osbu3DhxT0xuAoW0vIkt00g==, tarball: https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2000.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/build-webpack@0.2000.0-rc.0(chokidar@4.0.3)(webpack-dev-server@5.2.1)(webpack@5.99.8): + resolution: {integrity: sha512-pejJMhyzxetoJ5GpXOkybh6oJOPgKs+wMLA/U3F4oxT4EpwcUY+kl0VoANtqDDkHEC1cDmsWzI6XyBesmIQIfw==, tarball: https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2000.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: webpack: ^5.30.0 webpack-dev-server: ^5.0.2 dependencies: - '@angular-devkit/architect': 0.2000.0-next.9(chokidar@4.0.3) + '@angular-devkit/architect': 0.2000.0-rc.0(chokidar@4.0.3) rxjs: 7.8.2 - webpack: 5.99.7(esbuild@0.25.3) - webpack-dev-server: 5.2.1(webpack@5.99.7) + webpack: 5.99.8(esbuild@0.25.4) + webpack-dev-server: 5.2.1(webpack@5.99.8) transitivePeerDependencies: - chokidar dev: false @@ -918,7 +959,7 @@ packages: optional: true dependencies: ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv-formats: 3.0.1 chokidar: 4.0.3 jsonc-parser: 3.3.1 picomatch: 4.0.2 @@ -926,9 +967,9 @@ packages: source-map: 0.7.4 dev: true - /@angular-devkit/core@20.0.0-next.9(chokidar@4.0.3): - resolution: {integrity: sha512-T6Fl1UZWQsYodeQcp9DbSmHRStuREsFcAoIC1c83NSoxanrx2kZIgz5OoniHkysvyBTnuneN/0gdQTKguxhx6Q==, tarball: https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/core@20.0.0-rc.0(chokidar@4.0.3): + resolution: {integrity: sha512-Crj0G0occyB1ftUQoAj4ONouJuQ336FryWhehslIzZCOGxzwPWUw/ersaIKHmGr80sQ39fL4iUUaiFmm5EyG/A==, tarball: https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^4.0.0 peerDependenciesMeta: @@ -936,18 +977,18 @@ packages: optional: true dependencies: ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv-formats: 3.0.1 chokidar: 4.0.3 jsonc-parser: 3.3.1 picomatch: 4.0.2 rxjs: 7.8.2 source-map: 0.7.4 - /@angular-devkit/schematics@20.0.0-next.9(chokidar@4.0.3): - resolution: {integrity: sha512-mtPucxDtz7GpMVRrjxX6seTIiRPwV09n7B8yEVMU2anXEOM/QBgX4rizxscgc69KGU3Tr4Z5m5w+H8jlNxBIoQ==, tarball: https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular-devkit/schematics@20.0.0-rc.0(chokidar@4.0.3): + resolution: {integrity: sha512-VJMahL7uvTT4L5fzzIrcv4bSnsXQG+2HNLQK4EWmG4j2vdKOcpCXL6EbE+ZD2ZDSqmNGSIAV0YHnsMD7mjTNYw==, tarball: https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} dependencies: - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) jsonc-parser: 3.3.1 magic-string: 0.30.17 ora: 5.4.1 @@ -956,17 +997,17 @@ packages: - chokidar dev: false - /@angular/benchpress@0.3.0(rxjs@7.8.2)(zone.js@0.12.0): + /@angular/benchpress@0.3.0(rxjs@7.8.2): resolution: {integrity: sha512-ApxoY5lTj1S0QFLdq5ZdTfdkIds1m3tma9EJOZpNVHRU9eCj2D/5+VFb5tlWsv9NHQ2S0XXkJjauFOAdfzT8uw==, tarball: https://registry.npmjs.org/@angular/benchpress/-/benchpress-0.3.0.tgz} dependencies: - '@angular/core': 14.3.0(rxjs@7.8.2)(zone.js@0.12.0) + '@angular/core': 14.3.0(rxjs@7.8.2) reflect-metadata: 0.1.14 transitivePeerDependencies: - rxjs - zone.js dev: true - /@angular/build@19.1.0-rc.0(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3): + /@angular/build@19.1.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3): resolution: {integrity: sha512-ALl+MVMYBF+E7HyAQ+1MtE6sNIOAX0o2Sfs0wdIQfM2unRl6jPsz/Ker4BjnNQIK4wRCcstyzBv5mZBDulfFIQ==, tarball: https://registry.npmjs.org/@angular/build/-/build-19.1.0-rc.0.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -1001,7 +1042,7 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1901.0-rc.0(chokidar@4.0.3) - '@angular/ssr': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/router@20.0.0-next.9) + '@angular/ssr': 20.0.0-rc.0 '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-split-export-declaration': 7.24.7 @@ -1014,19 +1055,17 @@ packages: fast-glob: 3.3.3 https-proxy-agent: 7.0.6(supports-color@10.0.0) istanbul-lib-instrument: 6.0.3 - less: 4.3.0 listr2: 8.2.5 magic-string: 0.30.17 mrmime: 2.0.0 parse5-html-rewriting-stream: 7.0.0 picomatch: 4.0.2 piscina: 4.8.0 - postcss: 8.5.3 rollup: 4.30.1 sass: 1.83.1 semver: 7.6.3 typescript: 5.7.3 - vite: 6.0.7(@types/node@18.19.87)(less@4.3.0)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3) + vite: 6.0.7(@types/node@18.19.87)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3) watchpack: 2.4.2 optionalDependencies: lmdb: 3.2.2 @@ -1044,9 +1083,9 @@ packages: - yaml dev: true - /@angular/build@20.0.0-next.9(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2): - resolution: {integrity: sha512-803SVKnM7gRT7Aiu7KZ3h6zWWfcsxUW2umaqhEwF9zjaYx+Th1RoEjv+SaaeFQ5G0fJnJynutxGLrPu5WZtHNQ==, tarball: https://registry.npmjs.org/@angular/build/-/build-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular/build@20.0.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tslib@2.8.1)(tsx@4.19.3)(typescript@5.8.2): + resolution: {integrity: sha512-cVKDaoloiiN06dMnsS0ARDP5QMKVpQSijTBHr2Fpvxi6615rTEQAhj/VgTECVYhkRRNm4cILP1RX1KvqWkawEA==, tarball: https://registry.npmjs.org/@angular/build/-/build-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler': ^20.0.0 || ^20.0.0-next.0 '@angular/compiler-cli': ^20.0.0 || ^20.0.0-next.0 @@ -1055,7 +1094,7 @@ packages: '@angular/platform-browser': ^20.0.0 || ^20.0.0-next.0 '@angular/platform-server': ^20.0.0 || ^20.0.0-next.0 '@angular/service-worker': ^20.0.0 || ^20.0.0-next.0 - '@angular/ssr': ^20.0.0-next.9 + '@angular/ssr': ^20.0.0-rc.0 karma: ^6.4.0 less: ^4.2.0 ng-packagr: ^20.0.0 || ^20.0.0-next.0 @@ -1091,41 +1130,39 @@ packages: optional: true dependencies: '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.2000.0-next.9(chokidar@4.0.3) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/platform-browser': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) - '@angular/ssr': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/router@20.0.0-next.9) - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 + '@angular-devkit/architect': 0.2000.0-rc.0(chokidar@4.0.3) + '@angular/ssr': 20.0.0-rc.0 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 '@babel/helper-split-export-declaration': 7.24.7 '@inquirer/confirm': 5.1.9(@types/node@18.19.87) - '@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.4) + '@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.5) beasties: 0.3.3 browserslist: 4.24.4 - esbuild: 0.25.3 + esbuild: 0.25.4 https-proxy-agent: 7.0.6(supports-color@10.0.0) istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma: 6.4.4 less: 4.3.0 - listr2: 8.3.2 + listr2: 8.3.3 magic-string: 0.30.17 mrmime: 2.0.1 parse5-html-rewriting-stream: 7.1.0 picomatch: 4.0.2 - piscina: 4.9.2 + piscina: 5.0.0 postcss: 8.5.3 - rollup: 4.40.1 + rollup: 4.40.2 sass: 1.87.0 semver: 7.7.1 source-map-support: 0.5.21 tinyglobby: 0.2.13 tslib: 2.8.1 typescript: 5.8.2 - vite: 6.3.4(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3) + vite: 6.3.5(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3) watchpack: 2.4.2 optionalDependencies: - lmdb: 3.2.6 + lmdb: 3.3.0 transitivePeerDependencies: - '@types/node' - chokidar @@ -1140,35 +1177,33 @@ packages: - yaml dev: false - /@angular/cdk@20.0.0-next.10(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2): - resolution: {integrity: sha512-z72vwZnryFydG4lqElMXEP6ywdlq2kA+uA8pIH2vdneR7iyM3TdGfgeVqFB/S8JOoq0AeQ3A9K5l1Gm0dPDRgw==, tarball: https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.0-next.10.tgz} + /@angular/cdk@20.0.0-rc.0(rxjs@7.8.2): + resolution: {integrity: sha512-dvSacjyg5+6GCQiQpXIfguFcjrtR2R0uweUL8R9ZpGRi35jA0HqUYYY99asqyvhMS/G7F0etxRaPWu/d6sHpzg==, tarball: https://registry.npmjs.org/@angular/cdk/-/cdk-20.0.0-rc.0.tgz} peerDependencies: '@angular/common': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 '@angular/core': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) parse5: 7.3.0 rxjs: 7.8.2 tslib: 2.8.1 dev: false - /@angular/cli@20.0.0-next.9(@types/node@18.19.87)(chokidar@4.0.3): - resolution: {integrity: sha512-V1ze/mX7WqLrJ5ZzVyVnA2n0jbv7qEbPmkTiCjLQ0Mzv0KrjdbGUPRslUc/URXC0A3KCuVEw8Lpy6xMsTht/Tw==, tarball: https://registry.npmjs.org/@angular/cli/-/cli-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@angular/cli@20.0.0-rc.0(@types/node@18.19.87)(chokidar@4.0.3): + resolution: {integrity: sha512-fP+OWXhxjNVHSQbofoQv5mEB1JKc+Dh/q/1tUMk+T2VM3QsMZpelWRXb3Wk6jlScwDMChyr3VjaEngAUnoEF3A==, tarball: https://registry.npmjs.org/@angular/cli/-/cli-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true dependencies: - '@angular-devkit/architect': 0.2000.0-next.9(chokidar@4.0.3) - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) - '@angular-devkit/schematics': 20.0.0-next.9(chokidar@4.0.3) + '@angular-devkit/architect': 0.2000.0-rc.0(chokidar@4.0.3) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) + '@angular-devkit/schematics': 20.0.0-rc.0(chokidar@4.0.3) '@inquirer/prompts': 7.5.0(@types/node@18.19.87) - '@listr2/prompt-adapter-inquirer': 2.0.21(@inquirer/prompts@7.5.0) - '@schematics/angular': 20.0.0-next.9(chokidar@4.0.3) + '@listr2/prompt-adapter-inquirer': 2.0.22(@inquirer/prompts@7.5.0) + '@schematics/angular': 20.0.0-rc.0(chokidar@4.0.3) '@yarnpkg/lockfile': 1.1.0 ini: 5.0.0 jsonc-parser: 3.3.1 - listr2: 8.3.2 + listr2: 8.3.3 npm-package-arg: 12.0.2 npm-pick-manifest: 10.0.0 pacote: 20.0.0 @@ -1181,18 +1216,7 @@ packages: - supports-color dev: false - /@angular/common@20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2): - resolution: {integrity: sha512-+V9Rbp6rbkJ7qx/ZGxrIdFb36X1TZSik9eXHVpcUncojdsg+je2mG7fvuCcuktkc2JRhv08TQnhOWi/BNuHQGA==, tarball: https://registry.npmjs.org/@angular/common/-/common-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0} - peerDependencies: - '@angular/core': 20.0.0-next.9 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - rxjs: 7.8.2 - tslib: 2.8.1 - - /@angular/core@14.3.0(rxjs@7.8.2)(zone.js@0.12.0): + /@angular/core@14.3.0(rxjs@7.8.2): resolution: {integrity: sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==, tarball: https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz} engines: {node: ^14.15.0 || >=16.10.0} peerDependencies: @@ -1201,91 +1225,25 @@ packages: dependencies: rxjs: 7.8.2 tslib: 2.8.1 - zone.js: 0.12.0 dev: true - /@angular/core@20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0): - resolution: {integrity: sha512-dTcDo1mp3A0hsAAajgMHjb8DX/MweUrPqJH660iXSCZVSM5MqFUBhazrJgySt31CKCPE5F3W+ZeISN8QCi9pcQ==, tarball: https://registry.npmjs.org/@angular/core/-/core-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0} + /@angular/material@20.0.0-rc.0(@angular/cdk@20.0.0-rc.0)(rxjs@7.8.2): + resolution: {integrity: sha512-Z6uaTLaTdfMoT2RnL8GB1na/n2/0d9Dk5h2wSsymyZFJz/U20btCQuor9Cvb/mUlrPs/uu/5SWDMpigRXlaomg==, tarball: https://registry.npmjs.org/@angular/material/-/material-20.0.0-rc.0.tgz} peerDependencies: - '@angular/compiler': 20.0.0-next.9 - rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.15.0 - peerDependenciesMeta: - '@angular/compiler': - optional: true - dependencies: - rxjs: 7.8.2 - tslib: 2.8.1 - zone.js: 0.12.0 - - /@angular/forms@20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2): - resolution: {integrity: sha512-ne7hBsqpyfpkSgkC7JRBrY5pnPEE+uIm9xYaDjsBzJHaJYGWkkF9eHdPmW7X13Lok8LRG7z24wxZlTeY/UNn0g==, tarball: https://registry.npmjs.org/@angular/forms/-/forms-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0} - peerDependencies: - '@angular/common': 20.0.0-next.9 - '@angular/core': 20.0.0-next.9 - '@angular/platform-browser': 20.0.0-next.9 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/platform-browser': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) - rxjs: 7.8.2 - tslib: 2.8.1 - dev: false - - /@angular/material@20.0.0-next.10(@angular/cdk@20.0.0-next.10)(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/forms@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2): - resolution: {integrity: sha512-V8YU1uSaHVd0LZAV4wSd3RbQ/tV+HSuTtu+RiJ8z7OEfdIt44NOIqQ1AzSHhiCTz8+BS61TDKrbDNUDJP2KX/g==, tarball: https://registry.npmjs.org/@angular/material/-/material-20.0.0-next.10.tgz} - peerDependencies: - '@angular/cdk': 20.0.0-next.10 + '@angular/cdk': 20.0.0-rc.0 '@angular/common': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 '@angular/core': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 '@angular/forms': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 '@angular/platform-browser': ^20.0.0-0 || ^20.1.0-0 || ^20.2.0-0 || ^20.3.0-0 || ^21.0.0-0 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/cdk': 20.0.0-next.10(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/forms': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2) - '@angular/platform-browser': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) + '@angular/cdk': 20.0.0-rc.0(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 dev: false - /@angular/platform-browser@20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9): - resolution: {integrity: sha512-gvyrm4o4UWn/VSiaJirI4hOf50bD6wF3QwpoP9NOG4YQyo5GjFQf6QPGVAfPgKjrp3eyTemVMhFq2yoVj9elNg==, tarball: https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0} - peerDependencies: - '@angular/animations': 20.0.0-next.9 - '@angular/common': 20.0.0-next.9 - '@angular/core': 20.0.0-next.9 - peerDependenciesMeta: - '@angular/animations': - optional: true - dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - tslib: 2.8.1 - - /@angular/router@20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2): - resolution: {integrity: sha512-pkgcyBTfO1LIUHBfmnxQNDhWN6Gr7S4RNkvms9n/fj/athKEvAxSjwcqkrIFADkqOw0t2zRjdqEPIoHAouImHw==, tarball: https://registry.npmjs.org/@angular/router/-/router-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0} - peerDependencies: - '@angular/common': 20.0.0-next.9 - '@angular/core': 20.0.0-next.9 - '@angular/platform-browser': 20.0.0-next.9 - rxjs: ^6.5.3 || ^7.4.0 - dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/platform-browser': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9) - rxjs: 7.8.2 - tslib: 2.8.1 - - /@angular/ssr@20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/router@20.0.0-next.9): - resolution: {integrity: sha512-0arVUvOUaN9qcCZe0k45r9HZz1BiJm7+JRnTUKpXTPUUC+T75XNXYBM0GWOVit42Kqd32VeSQqQrrQWZZg10Ng==, tarball: https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.0-next.9.tgz} + /@angular/ssr@20.0.0-rc.0: + resolution: {integrity: sha512-PqAXHxJvahRbEgDVpd8eYVqM0PEYd4kpvBtpoH532TQi173hoNQxYf9JY6O/ECADqe6ZEqiIgGWy41l1jt7XcA==, tarball: https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.0-rc.0.tgz} peerDependencies: '@angular/common': ^20.0.0 || ^20.0.0-next.0 '@angular/core': ^20.0.0 || ^20.0.0-next.0 @@ -1295,9 +1253,6 @@ packages: '@angular/platform-server': optional: true dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/router': 20.0.0-next.9(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(@angular/platform-browser@20.0.0-next.9)(rxjs@7.8.2) tslib: 2.8.1 /@antfu/install-pkg@1.0.0: @@ -1330,14 +1285,14 @@ packages: lru-cache: 10.4.3 dev: true - /@babel/cli@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-bZfxn8DRxwiVzDO5CEeV+7IqXeCkzI4yYnrQbpwjT76CUyossQc6RYE7n+xfm0/2k40lPaCpW0FhxYs7EBAetw==, tarball: https://registry.npmjs.org/@babel/cli/-/cli-7.27.0.tgz} + /@babel/cli@7.27.2(@babel/core@7.27.1): + resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==, tarball: https://registry.npmjs.org/@babel/cli/-/cli-7.27.2.tgz} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -1350,16 +1305,16 @@ packages: chokidar: 3.6.0 dev: false - /@babel/code-frame@7.26.2: - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz} + /@babel/code-frame@7.27.1: + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - /@babel/compat-data@7.26.8: - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz} + /@babel/compat-data@7.27.2: + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz} engines: {node: '>=6.9.0'} /@babel/core@7.26.0: @@ -1367,15 +1322,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.0) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 convert-source-map: 2.0.0 debug: 4.4.0(supports-color@10.0.0) gensync: 1.0.0-beta.2 @@ -1390,15 +1345,15 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helpers': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.26.10) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 convert-source-map: 2.0.0 debug: 4.4.0(supports-color@10.0.0) gensync: 1.0.0-beta.2 @@ -1406,13 +1361,36 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true - /@babel/generator@7.27.0: - resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz} + /@babel/core@7.27.1: + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==, tarball: https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@10.0.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/generator@7.27.1: + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 @@ -1421,56 +1399,63 @@ packages: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==, tarball: https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 + dev: true - /@babel/helper-compilation-targets@7.27.0: - resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz} + /@babel/helper-annotate-as-pure@7.27.1: + resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==, tarball: https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 + '@babel/types': 7.27.1 + + /@babel/helper-compilation-targets@7.27.2: + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/helper-validator-option': 7.27.1 browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==, tarball: https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz} + /@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==, tarball: https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==, tarball: https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz} + /@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==, tarball: https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 regexpu-core: 6.2.0 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10): + /@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1): resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==, tarball: https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.0(supports-color@10.0.0) lodash.debounce: 4.0.8 resolve: 1.22.10 @@ -1482,99 +1467,113 @@ packages: resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 dev: true - /@babel/helper-member-expression-to-functions@7.25.9: - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==, tarball: https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz} + /@babel/helper-member-expression-to-functions@7.27.1: + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==, tarball: https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-module-imports@7.25.9: - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz} + /@babel/helper-module-imports@7.27.1: + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz} + /@babel/helper-module-transforms@7.27.1(@babel/core@7.26.0): + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10): - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz} + /@babel/helper-module-transforms@7.27.1(@babel/core@7.26.10): + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color + dev: true - /@babel/helper-optimise-call-expression@7.25.9: - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==, tarball: https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz} + /@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 + transitivePeerDependencies: + - supports-color + + /@babel/helper-optimise-call-expression@7.27.1: + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==, tarball: https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.27.1 dev: false - /@babel/helper-plugin-utils@7.26.5: - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz} + /@babel/helper-plugin-utils@7.27.1: + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==, tarball: https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz} + /@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==, tarball: https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - /@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10): - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==, tarball: https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz} + /@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==, tarball: https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-skip-transparent-expression-wrappers@7.25.9: - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==, tarball: https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz} + /@babel/helper-skip-transparent-expression-wrappers@7.27.1: + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==, tarball: https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color dev: false @@ -1583,146 +1582,146 @@ packages: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==, tarball: https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 - /@babel/helper-string-parser@7.25.9: - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz} + /@babel/helper-string-parser@7.27.1: + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.25.9: - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz} + /@babel/helper-validator-identifier@7.27.1: + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.25.9: - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz} + /@babel/helper-validator-option@7.27.1: + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.25.9: - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==, tarball: https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz} + /@babel/helper-wrap-function@7.27.1: + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==, tarball: https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.27.0 - '@babel/traverse': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - /@babel/helpers@7.27.0: - resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz} + /@babel/helpers@7.27.1: + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 - /@babel/parser@7.27.0: - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz} + /@babel/parser@7.27.2: + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz} + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.26.10): + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.27.1): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz} engines: {node: '>=6.9.0'} deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1) transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: true - /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10): - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz} + /@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0): @@ -1732,742 +1731,740 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 dev: true - /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10): - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz} + /@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz} + /@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10): - resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz} + /@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz} + /@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10): - resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz} + /@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz} + /@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz} + /@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10): - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz} + /@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz} + /@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/traverse': 7.27.1 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz} + /@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 dev: false - /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz} + /@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz} + /@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz} + /@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz} + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz} + /@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10): - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz} + /@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==, tarball: https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz} + /@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10): - resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz} + /@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz} + /@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz} + /@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz} + /@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz} + /@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz} + /@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz} + /@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10): - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz} + /@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz} + /@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz} + /@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz} + /@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==, tarball: https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz} + /@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10): - resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz} + /@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz} + /@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz} + /@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1): + resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) dev: false - /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz} + /@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz} + /@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz} + /@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz} + /@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz} + /@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz} + /@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz} + /@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz} + /@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10): - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz} + /@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz} + /@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10): - resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz} + /@babel/plugin-transform-runtime@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==, tarball: https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz} + /@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz} + /@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz} + /@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10): - resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz} + /@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10): - resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz} + /@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz} + /@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz} + /@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz} + /@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10): - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz} + /@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1): + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 dev: false - /@babel/preset-env@7.26.9(@babel/core@7.26.10): - resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==, tarball: https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz} + /@babel/preset-env@7.27.2(@babel/core@7.27.1): + resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==, tarball: https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10 - '@babel/helper-compilation-targets': 7.27.0 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) - '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) - '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10) + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.1) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) core-js-compat: 3.41.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, tarball: https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.27.0 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.1 esutils: 2.0.3 dev: false - /@babel/runtime@7.27.0: - resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz} + /@babel/runtime@7.27.1: + resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 dev: false - /@babel/template@7.27.0: - resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz} + /@babel/template@7.27.2: + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - /@babel/traverse@7.27.0: - resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz} + /@babel/traverse@7.27.1: + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 debug: 4.4.0(supports-color@10.0.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types@7.27.0: - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz} + /@babel/types@7.27.1: + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 /@bazel/bazelisk@1.26.0: resolution: {integrity: sha512-bTNcHdGyEQ9r7SczEYUa0gkEQhJo1ld2BjXI8fWBvsUeoHi03QpUs2HZgDbjjrpQFQqG2ZbO7ihZvH8MjhUTHw==, tarball: https://registry.npmjs.org/@bazel/bazelisk/-/bazelisk-1.26.0.tgz} @@ -2484,7 +2481,7 @@ packages: hasBin: true dev: true - /@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.3): + /@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.3): resolution: {integrity: sha512-TkARsNUxgi3bjFeGwIGlffmQglNhuR9qK9uE7uKhdBZvQE5caAWVCjYiMTzo3viKDhwKn5QNRcHY5huuJMVFfA==, tarball: https://registry.npmjs.org/@bazel/concatjs/-/concatjs-5.8.1.tgz} hasBin: true peerDependencies: @@ -2500,7 +2497,6 @@ packages: karma-chrome-launcher: 3.2.0 karma-firefox-launcher: 2.1.3 karma-jasmine: 5.1.0(karma@6.4.4) - karma-junit-reporter: 2.0.1(karma@6.4.4) karma-requirejs: 1.1.0(karma@6.4.4)(requirejs@2.3.7) karma-sourcemap-loader: 0.4.0 protobufjs: 6.8.8 @@ -2510,7 +2506,7 @@ packages: - typescript dev: true - /@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2): + /@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2): resolution: {integrity: sha512-TkARsNUxgi3bjFeGwIGlffmQglNhuR9qK9uE7uKhdBZvQE5caAWVCjYiMTzo3viKDhwKn5QNRcHY5huuJMVFfA==, tarball: https://registry.npmjs.org/@bazel/concatjs/-/concatjs-5.8.1.tgz} hasBin: true peerDependencies: @@ -2526,7 +2522,6 @@ packages: karma-chrome-launcher: 3.2.0 karma-firefox-launcher: 2.1.3 karma-jasmine: 5.1.0(karma@6.4.4) - karma-junit-reporter: 2.0.1(karma@6.4.4) karma-requirejs: 1.1.0(karma@6.4.4)(requirejs@2.3.7) karma-sourcemap-loader: 0.4.0 protobufjs: 6.8.8 @@ -2538,8 +2533,8 @@ packages: /@bazel/esbuild@5.8.1: resolution: {integrity: sha512-8k4LL8P3ivCnFeBOcjiFxL8U+M5VtEGuOyIqm2hfEiP8xDWsZLS7YQ7KhshKJy7Elh2dlK9oGgMtl0D/x9kxxg==, tarball: https://registry.npmjs.org/@bazel/esbuild/-/esbuild-5.8.1.tgz} - /@bazel/ibazel@0.16.2: - resolution: {integrity: sha512-KgqAWMH0emL6f3xH6nqyTryoBMqlJ627LBIe9PT1PRRQPz2FtHib3FIHJPukp1slzF3hJYZvdiVwgPnHbaSOOA==, tarball: https://registry.npmjs.org/@bazel/ibazel/-/ibazel-0.16.2.tgz} + /@bazel/ibazel@0.25.0: + resolution: {integrity: sha512-dtosfsuZCSaqlUe5EyxNdaN7Gow0Y+ZJixdlciytcSieUcB/1lXPFTx6OihxhjgtTHkeFovlQ/QbvArRPnk+nQ==, tarball: https://registry.npmjs.org/@bazel/ibazel/-/ibazel-0.25.0.tgz} hasBin: true dev: true @@ -2563,14 +2558,14 @@ packages: dependencies: protractor: 7.0.0 - /@bazel/rollup@5.8.1(rollup@4.35.0): + /@bazel/rollup@5.8.1(rollup@4.40.2): resolution: {integrity: sha512-Ys+UWbRp1TY2j+z15N+SZgID/nuqAtJTgJDsz0NZVjm8F8KzmgXxLDnBb/cUKFVk83pNOAi84G/bq1tINjMSNA==, tarball: https://registry.npmjs.org/@bazel/rollup/-/rollup-5.8.1.tgz} hasBin: true peerDependencies: rollup: '>=2.3.0 <3.0.0' dependencies: '@bazel/worker': 5.8.1 - rollup: 4.35.0 + rollup: 4.40.2 dev: false /@bazel/runfiles@5.8.1: @@ -2841,14 +2836,6 @@ packages: kuler: 2.0.0 dev: true - /@dependents/detective-less@5.0.1: - resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==, tarball: https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz} - engines: {node: '>=18'} - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - dev: true - /@discoveryjs/json-ext@0.6.3: resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==, tarball: https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz} engines: {node: '>=14.17.0'} @@ -2872,8 +2859,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.25.3: - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz} + /@esbuild/aix-ppc64@0.25.4: + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2887,8 +2874,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.25.3: - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz} + /@esbuild/android-arm64@0.25.4: + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2902,8 +2889,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.25.3: - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz} + /@esbuild/android-arm@0.25.4: + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2917,8 +2904,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.25.3: - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz} + /@esbuild/android-x64@0.25.4: + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2932,8 +2919,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.25.3: - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz} + /@esbuild/darwin-arm64@0.25.4: + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2947,8 +2934,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.25.3: - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz} + /@esbuild/darwin-x64@0.25.4: + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2962,8 +2949,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.25.3: - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz} + /@esbuild/freebsd-arm64@0.25.4: + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2977,8 +2964,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.25.3: - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz} + /@esbuild/freebsd-x64@0.25.4: + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2992,8 +2979,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.25.3: - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz} + /@esbuild/linux-arm64@0.25.4: + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -3007,8 +2994,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.25.3: - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz} + /@esbuild/linux-arm@0.25.4: + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -3022,8 +3009,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.25.3: - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz} + /@esbuild/linux-ia32@0.25.4: + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -3037,8 +3024,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.25.3: - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz} + /@esbuild/linux-loong64@0.25.4: + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -3052,8 +3039,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.25.3: - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz} + /@esbuild/linux-mips64el@0.25.4: + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -3067,8 +3054,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.25.3: - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz} + /@esbuild/linux-ppc64@0.25.4: + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -3082,8 +3069,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.25.3: - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz} + /@esbuild/linux-riscv64@0.25.4: + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -3097,8 +3084,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.25.3: - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz} + /@esbuild/linux-s390x@0.25.4: + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -3112,8 +3099,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.25.3: - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz} + /@esbuild/linux-x64@0.25.4: + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -3127,8 +3114,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-arm64@0.25.3: - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz} + /@esbuild/netbsd-arm64@0.25.4: + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -3142,8 +3129,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.25.3: - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz} + /@esbuild/netbsd-x64@0.25.4: + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -3157,8 +3144,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-arm64@0.25.3: - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz} + /@esbuild/openbsd-arm64@0.25.4: + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -3172,8 +3159,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.25.3: - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz} + /@esbuild/openbsd-x64@0.25.4: + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -3187,8 +3174,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.25.3: - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz} + /@esbuild/sunos-x64@0.25.4: + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -3202,8 +3189,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.25.3: - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz} + /@esbuild/win32-arm64@0.25.4: + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -3217,8 +3204,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.25.3: - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz} + /@esbuild/win32-ia32@0.25.4: + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -3232,8 +3219,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.25.3: - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz} + /@esbuild/win32-x64@0.25.4: + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -3326,8 +3313,8 @@ packages: - supports-color dev: true - /@google-cloud/spanner@7.19.1(supports-color@10.0.0): - resolution: {integrity: sha512-a7WlM4T3g5hslSBxQpsCxlH2IGgeVVEnDP5/v51kNlKv/W5PhBMqaHanodkUjbjegsQNlWAkqLClzIwtldfSXg==, tarball: https://registry.npmjs.org/@google-cloud/spanner/-/spanner-7.19.1.tgz} + /@google-cloud/spanner@7.21.0(supports-color@10.0.0): + resolution: {integrity: sha512-SrlHgXmSaEbGhdimxcB0FgNsW9J931JBBveoGW43clQHVNcDJuKRoG+240inbSRZoW8JIwwEHToXYU5YGO3VGg==, tarball: https://registry.npmjs.org/@google-cloud/spanner/-/spanner-7.21.0.tgz} engines: {node: '>=14.0.0'} dependencies: '@google-cloud/common': 5.0.2(supports-color@10.0.0) @@ -3797,8 +3784,8 @@ packages: '@lezer/lr': 1.4.2 dev: true - /@listr2/prompt-adapter-inquirer@2.0.21(@inquirer/prompts@7.5.0): - resolution: {integrity: sha512-can62OlOPusZwYfKfd0SV6znsSFbiuJw/lvvRSAAdzqUCTE/Vn8FydLGAfEvGbDALdfqvazSj6tnVJKQxj9iXw==, tarball: https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.21.tgz} + /@listr2/prompt-adapter-inquirer@2.0.22(@inquirer/prompts@7.5.0): + resolution: {integrity: sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ==, tarball: https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz} engines: {node: '>=18.0.0'} peerDependencies: '@inquirer/prompts': '>= 3 < 8' @@ -3814,8 +3801,8 @@ packages: dev: true optional: true - /@lmdb/lmdb-darwin-arm64@3.2.6: - resolution: {integrity: sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz} + /@lmdb/lmdb-darwin-arm64@3.3.0: + resolution: {integrity: sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz} cpu: [arm64] os: [darwin] dev: false @@ -3828,8 +3815,8 @@ packages: dev: true optional: true - /@lmdb/lmdb-darwin-x64@3.2.6: - resolution: {integrity: sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz} + /@lmdb/lmdb-darwin-x64@3.3.0: + resolution: {integrity: sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ==, tarball: https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz} cpu: [x64] os: [darwin] dev: false @@ -3842,8 +3829,8 @@ packages: dev: true optional: true - /@lmdb/lmdb-linux-arm64@3.2.6: - resolution: {integrity: sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz} + /@lmdb/lmdb-linux-arm64@3.3.0: + resolution: {integrity: sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz} cpu: [arm64] os: [linux] dev: false @@ -3856,8 +3843,8 @@ packages: dev: true optional: true - /@lmdb/lmdb-linux-arm@3.2.6: - resolution: {integrity: sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz} + /@lmdb/lmdb-linux-arm@3.3.0: + resolution: {integrity: sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz} cpu: [arm] os: [linux] dev: false @@ -3870,13 +3857,20 @@ packages: dev: true optional: true - /@lmdb/lmdb-linux-x64@3.2.6: - resolution: {integrity: sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz} + /@lmdb/lmdb-linux-x64@3.3.0: + resolution: {integrity: sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz} cpu: [x64] os: [linux] dev: false optional: true + /@lmdb/lmdb-win32-arm64@3.3.0: + resolution: {integrity: sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA==, tarball: https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz} + cpu: [arm64] + os: [win32] + dev: false + optional: true + /@lmdb/lmdb-win32-x64@3.2.2: resolution: {integrity: sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==, tarball: https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz} cpu: [x64] @@ -3884,8 +3878,8 @@ packages: dev: true optional: true - /@lmdb/lmdb-win32-x64@3.2.6: - resolution: {integrity: sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==, tarball: https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz} + /@lmdb/lmdb-win32-x64@3.3.0: + resolution: {integrity: sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA==, tarball: https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz} cpu: [x64] os: [win32] dev: false @@ -4158,16 +4152,16 @@ packages: - supports-color dev: true - /@ngtools/webpack@20.0.0-next.9(typescript@5.8.2)(webpack@5.99.7): - resolution: {integrity: sha512-e31bSzguIYXHzVBAyoX7TFHRTsOX+QnSdZkZ+CWKTGBIeDCrf7Z8dsJoy2INWJRS5Vnf1CMM32fvtGxkYfPDDw==, tarball: https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@ngtools/webpack@20.0.0-rc.0(typescript@5.8.2)(webpack@5.99.8): + resolution: {integrity: sha512-bawbfDlbvFz6De4oV2n9wpFNTWOSIxmbs+fqZcrSenP1SUiN1iVGRQBibk/q1rvutN0nWdPRsQFmRe4JeTDgkw==, tarball: https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: '@angular/compiler-cli': ^20.0.0 || ^20.0.0-next.0 typescript: '>=5.8 <5.9' webpack: ^5.54.0 dependencies: typescript: 5.8.2 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3: @@ -4728,7 +4722,7 @@ packages: - supports-color dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.26.10)(@types/babel__core@7.20.5)(rollup@4.35.0): + /@rollup/plugin-babel@6.0.4(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@4.40.2): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==, tarball: https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz} engines: {node: '>=14.0.0'} peerDependencies: @@ -4741,16 +4735,16 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.26.10 - '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 5.1.4(rollup@4.35.0) + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 5.1.4(rollup@4.40.2) '@types/babel__core': 7.20.5 - rollup: 4.35.0 + rollup: 4.40.2 transitivePeerDependencies: - supports-color dev: false - /@rollup/plugin-commonjs@28.0.3(rollup@4.35.0): + /@rollup/plugin-commonjs@28.0.3(rollup@4.40.2): resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==, tarball: https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: @@ -4759,32 +4753,34 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.35.0) + '@rollup/pluginutils': 5.1.4(rollup@4.40.2) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.4(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 - rollup: 4.35.0 + rollup: 4.40.2 dev: false - /@rollup/plugin-node-resolve@13.3.0(rollup@4.35.0): - resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz} - engines: {node: '>= 10.0.0'} + /@rollup/plugin-node-resolve@16.0.1(rollup@4.40.2): + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==, tarball: https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz} + engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.42.0 + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.35.0) - '@types/resolve': 1.17.1 + '@rollup/pluginutils': 5.1.4(rollup@4.40.2) + '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.10 - rollup: 4.35.0 + rollup: 4.40.2 dev: false - /@rollup/pluginutils@3.1.0(rollup@4.35.0): + /@rollup/pluginutils@3.1.0(rollup@4.40.2): resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz} engines: {node: '>= 8.0.0'} peerDependencies: @@ -4793,10 +4789,10 @@ packages: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 4.35.0 + rollup: 4.40.2 dev: false - /@rollup/pluginutils@5.1.4(rollup@4.35.0): + /@rollup/pluginutils@5.1.4(rollup@4.40.2): resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz} engines: {node: '>=14.0.0'} peerDependencies: @@ -4808,7 +4804,7 @@ packages: '@types/estree': 1.0.7 estree-walker: 2.0.2 picomatch: 4.0.2 - rollup: 4.35.0 + rollup: 4.40.2 dev: false /@rollup/rollup-android-arm-eabi@4.30.1: @@ -4818,15 +4814,8 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm-eabi@4.35.0: - resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz} - cpu: [arm] - os: [android] - dev: false - optional: true - - /@rollup/rollup-android-arm-eabi@4.40.1: - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz} + /@rollup/rollup-android-arm-eabi@4.40.2: + resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz} cpu: [arm] os: [android] optional: true @@ -4838,15 +4827,8 @@ packages: dev: true optional: true - /@rollup/rollup-android-arm64@4.35.0: - resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz} - cpu: [arm64] - os: [android] - dev: false - optional: true - - /@rollup/rollup-android-arm64@4.40.1: - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz} + /@rollup/rollup-android-arm64@4.40.2: + resolution: {integrity: sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz} cpu: [arm64] os: [android] optional: true @@ -4858,15 +4840,8 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-arm64@4.35.0: - resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz} - cpu: [arm64] - os: [darwin] - dev: false - optional: true - - /@rollup/rollup-darwin-arm64@4.40.1: - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz} + /@rollup/rollup-darwin-arm64@4.40.2: + resolution: {integrity: sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz} cpu: [arm64] os: [darwin] optional: true @@ -4878,15 +4853,8 @@ packages: dev: true optional: true - /@rollup/rollup-darwin-x64@4.35.0: - resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz} - cpu: [x64] - os: [darwin] - dev: false - optional: true - - /@rollup/rollup-darwin-x64@4.40.1: - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz} + /@rollup/rollup-darwin-x64@4.40.2: + resolution: {integrity: sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz} cpu: [x64] os: [darwin] optional: true @@ -4898,15 +4866,8 @@ packages: dev: true optional: true - /@rollup/rollup-freebsd-arm64@4.35.0: - resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz} - cpu: [arm64] - os: [freebsd] - dev: false - optional: true - - /@rollup/rollup-freebsd-arm64@4.40.1: - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz} + /@rollup/rollup-freebsd-arm64@4.40.2: + resolution: {integrity: sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz} cpu: [arm64] os: [freebsd] optional: true @@ -4918,15 +4879,8 @@ packages: dev: true optional: true - /@rollup/rollup-freebsd-x64@4.35.0: - resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz} - cpu: [x64] - os: [freebsd] - dev: false - optional: true - - /@rollup/rollup-freebsd-x64@4.40.1: - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz} + /@rollup/rollup-freebsd-x64@4.40.2: + resolution: {integrity: sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz} cpu: [x64] os: [freebsd] optional: true @@ -4938,15 +4892,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.35.0: - resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz} - cpu: [arm] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.40.1: - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz} + /@rollup/rollup-linux-arm-gnueabihf@4.40.2: + resolution: {integrity: sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz} cpu: [arm] os: [linux] optional: true @@ -4958,15 +4905,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.35.0: - resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz} - cpu: [arm] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.40.1: - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz} + /@rollup/rollup-linux-arm-musleabihf@4.40.2: + resolution: {integrity: sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz} cpu: [arm] os: [linux] optional: true @@ -4978,15 +4918,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.35.0: - resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz} - cpu: [arm64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.40.1: - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz} + /@rollup/rollup-linux-arm64-gnu@4.40.2: + resolution: {integrity: sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz} cpu: [arm64] os: [linux] optional: true @@ -4998,15 +4931,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.35.0: - resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz} - cpu: [arm64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-arm64-musl@4.40.1: - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz} + /@rollup/rollup-linux-arm64-musl@4.40.2: + resolution: {integrity: sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz} cpu: [arm64] os: [linux] optional: true @@ -5018,15 +4944,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-loongarch64-gnu@4.35.0: - resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz} - cpu: [loong64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-loongarch64-gnu@4.40.1: - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz} + /@rollup/rollup-linux-loongarch64-gnu@4.40.2: + resolution: {integrity: sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz} cpu: [loong64] os: [linux] optional: true @@ -5038,15 +4957,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.35.0: - resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz} - cpu: [ppc64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-powerpc64le-gnu@4.40.1: - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz} + /@rollup/rollup-linux-powerpc64le-gnu@4.40.2: + resolution: {integrity: sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz} cpu: [ppc64] os: [linux] optional: true @@ -5058,21 +4970,14 @@ packages: dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.35.0: - resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz} - cpu: [riscv64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-riscv64-gnu@4.40.1: - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz} + /@rollup/rollup-linux-riscv64-gnu@4.40.2: + resolution: {integrity: sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz} cpu: [riscv64] os: [linux] optional: true - /@rollup/rollup-linux-riscv64-musl@4.40.1: - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz} + /@rollup/rollup-linux-riscv64-musl@4.40.2: + resolution: {integrity: sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz} cpu: [riscv64] os: [linux] optional: true @@ -5084,15 +4989,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.35.0: - resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz} - cpu: [s390x] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-s390x-gnu@4.40.1: - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz} + /@rollup/rollup-linux-s390x-gnu@4.40.2: + resolution: {integrity: sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz} cpu: [s390x] os: [linux] optional: true @@ -5104,15 +5002,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.35.0: - resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz} - cpu: [x64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-x64-gnu@4.40.1: - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz} + /@rollup/rollup-linux-x64-gnu@4.40.2: + resolution: {integrity: sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz} cpu: [x64] os: [linux] optional: true @@ -5124,15 +5015,8 @@ packages: dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.35.0: - resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz} - cpu: [x64] - os: [linux] - dev: false - optional: true - - /@rollup/rollup-linux-x64-musl@4.40.1: - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz} + /@rollup/rollup-linux-x64-musl@4.40.2: + resolution: {integrity: sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz} cpu: [x64] os: [linux] optional: true @@ -5144,15 +5028,8 @@ packages: dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.35.0: - resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz} - cpu: [arm64] - os: [win32] - dev: false - optional: true - - /@rollup/rollup-win32-arm64-msvc@4.40.1: - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz} + /@rollup/rollup-win32-arm64-msvc@4.40.2: + resolution: {integrity: sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz} cpu: [arm64] os: [win32] optional: true @@ -5164,15 +5041,8 @@ packages: dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.35.0: - resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz} - cpu: [ia32] - os: [win32] - dev: false - optional: true - - /@rollup/rollup-win32-ia32-msvc@4.40.1: - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz} + /@rollup/rollup-win32-ia32-msvc@4.40.2: + resolution: {integrity: sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz} cpu: [ia32] os: [win32] optional: true @@ -5184,15 +5054,8 @@ packages: dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.35.0: - resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz} - cpu: [x64] - os: [win32] - dev: false - optional: true - - /@rollup/rollup-win32-x64-msvc@4.40.1: - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz} + /@rollup/rollup-win32-x64-msvc@4.40.2: + resolution: {integrity: sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz} cpu: [x64] os: [win32] optional: true @@ -5208,7 +5071,7 @@ packages: '@types/node': 18.19.87 ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) + ajv-formats: 3.0.1 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 @@ -5227,7 +5090,7 @@ packages: '@types/node': 18.19.87 ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) + ajv-formats: 3.0.1 fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 @@ -5289,12 +5152,12 @@ packages: - '@types/node' dev: false - /@schematics/angular@20.0.0-next.9(chokidar@4.0.3): - resolution: {integrity: sha512-rE05t3pCS7EaHQixe/qcIp7BGGLgY0tXbuTW422GIFpaQJ6k02GHk9eGhi3UdhHY4D+4TCywz6ISmvO/JWmy8Q==, tarball: https://registry.npmjs.org/@schematics/angular/-/angular-20.0.0-next.9.tgz} - engines: {node: ^20.11.1 || >=22.11.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + /@schematics/angular@20.0.0-rc.0(chokidar@4.0.3): + resolution: {integrity: sha512-LLsoqOO5waTnqvpa5zI9PyltHr/mKRrzznGzQ5IDDHKk8Vm1KgVd0+MHOPXHPCNPDgARbARM/yXwPa5dqeOYlA==, tarball: https://registry.npmjs.org/@schematics/angular/-/angular-20.0.0-rc.0.tgz} + engines: {node: ^20.11.1 || ^22.11.0 || >=24.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} dependencies: - '@angular-devkit/core': 20.0.0-next.9(chokidar@4.0.3) - '@angular-devkit/schematics': 20.0.0-next.9(chokidar@4.0.3) + '@angular-devkit/core': 20.0.0-rc.0(chokidar@4.0.3) + '@angular-devkit/schematics': 20.0.0-rc.0(chokidar@4.0.3) jsonc-parser: 3.3.1 transitivePeerDependencies: - chokidar @@ -5423,33 +5286,6 @@ packages: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, tarball: https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz} dev: true - /@ts-graphviz/adapter@2.0.6: - resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==, tarball: https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz} - engines: {node: '>=18'} - dependencies: - '@ts-graphviz/common': 2.1.5 - dev: true - - /@ts-graphviz/ast@2.0.7: - resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==, tarball: https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz} - engines: {node: '>=18'} - dependencies: - '@ts-graphviz/common': 2.1.5 - dev: true - - /@ts-graphviz/common@2.1.5: - resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==, tarball: https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz} - engines: {node: '>=18'} - dev: true - - /@ts-graphviz/core@2.0.7: - resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==, tarball: https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz} - engines: {node: '>=18'} - dependencies: - '@ts-graphviz/ast': 2.0.7 - '@ts-graphviz/common': 2.1.5 - dev: true - /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==, tarball: https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz} dev: true @@ -5495,8 +5331,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, tarball: https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz} dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.7 @@ -5504,18 +5340,18 @@ packages: /@types/babel__generator@7.27.0: resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, tarball: https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz} dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, tarball: https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz} dependencies: - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 /@types/babel__traverse@7.20.7: resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==, tarball: https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz} dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.27.1 /@types/big.js@6.2.2: resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==, tarball: https://registry.npmjs.org/@types/big.js/-/big.js-6.2.2.tgz} @@ -5559,8 +5395,8 @@ packages: resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==, tarball: https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz} dev: true - /@types/chrome@0.0.317: - resolution: {integrity: sha512-ibKycbXX8ZZToFshjgWg98BTvFUSvQht8m53Xc+87ye3Z6ZoHJubLjoiDsil8rtW+noWE+Z0+7y0nwLxArU+CQ==, tarball: https://registry.npmjs.org/@types/chrome/-/chrome-0.0.317.tgz} + /@types/chrome@0.0.322: + resolution: {integrity: sha512-glbRm82TzLLJfi3ttlnn7HR9KIX5OYeTo9Xug0Hna03JvaqNipZT+P/q/O5kxOvUQqKUqmn8NAOrcRSG6BOQAw==, tarball: https://registry.npmjs.org/@types/chrome/-/chrome-0.0.322.tgz} dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 @@ -5804,6 +5640,7 @@ packages: /@types/estree@1.0.6: resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz} + dev: true /@types/estree@1.0.7: resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz} @@ -6042,10 +5879,8 @@ packages: '@types/node': 22.15.3 dev: true - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==, tarball: https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz} - dependencies: - '@types/node': 22.15.3 + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==, tarball: https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz} dev: false /@types/responselike@1.0.3: @@ -6171,38 +6006,6 @@ packages: dev: true optional: true - /@typescript-eslint/types@8.31.0: - resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true - - /@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.3): - resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - dependencies: - '@typescript-eslint/types': 8.31.0 - '@typescript-eslint/visitor-keys': 8.31.0 - debug: 4.4.0(supports-color@10.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/visitor-keys@8.31.0: - resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dependencies: - '@typescript-eslint/types': 8.31.0 - eslint-visitor-keys: 4.2.0 - dev: true - /@typescript/vfs@1.6.1(typescript@5.8.2): resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==, tarball: https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz} peerDependencies: @@ -6224,60 +6027,18 @@ packages: peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 dependencies: - vite: 6.0.7(@types/node@18.19.87)(less@4.3.0)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3) + vite: 6.0.7(@types/node@18.19.87)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3) dev: true - /@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.4): + /@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5): resolution: {integrity: sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA==, tarball: https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} peerDependencies: vite: ^6.0.0 dependencies: - vite: 6.3.4(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3) + vite: 6.3.5(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3) dev: false - /@vue/compiler-core@3.5.13: - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==, tarball: https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz} - dependencies: - '@babel/parser': 7.27.0 - '@vue/shared': 3.5.13 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - dev: true - - /@vue/compiler-dom@3.5.13: - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==, tarball: https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz} - dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 - dev: true - - /@vue/compiler-sfc@3.5.13: - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==, tarball: https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz} - dependencies: - '@babel/parser': 7.27.0 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - estree-walker: 2.0.2 - magic-string: 0.30.17 - postcss: 8.5.3 - source-map-js: 1.2.1 - dev: true - - /@vue/compiler-ssr@3.5.13: - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==, tarball: https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz} - dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 - dev: true - - /@vue/shared@3.5.13: - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==, tarball: https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz} - dev: true - /@wdio/config@6.12.1: resolution: {integrity: sha512-V5hTIW5FNlZ1W33smHF4Rd5BKjGW2KeYhyXDQfXHjqLCeRiirZ9fABCo9plaVQDnwWSUMWYaAaIAifV82/oJCQ==, tarball: https://registry.npmjs.org/@wdio/config/-/config-6.12.1.tgz} engines: {node: '>=10.0.0'} @@ -6554,23 +6315,8 @@ packages: dependencies: ajv: 8.17.1 - /ajv-formats@3.0.1(ajv@8.13.0): - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==, tarball: https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.13.0 - - /ajv-formats@3.0.1(ajv@8.17.1): + /ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==, tarball: https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true dependencies: ajv: 8.17.1 @@ -6650,15 +6396,13 @@ packages: resolution: {integrity: sha512-vqsT6zwu80cZ8RY7qRQBZuy6Fq5X7/N5hkV9LzNT0c8b546rw4ErGK6muW1u2JnDKYa7+jJuaGM702bWir4HGw==, tarball: https://registry.npmjs.org/angular-mocks/-/angular-mocks-1.8.3.tgz} dev: false - /angular-split@19.0.0(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2): + /angular-split@19.0.0(rxjs@7.8.2): resolution: {integrity: sha512-vQqXWLcCimFmInu2lpGKIfS9FtYBgKmoWenPjeYkHSRdWmb7HLGlQoNPj1oALrwdhIWFPdySgp0BIXDe2IAepQ==, tarball: https://registry.npmjs.org/angular-split/-/angular-split-19.0.0.tgz} peerDependencies: '@angular/common': '>=19.0.0' '@angular/core': '>=19.0.0' rxjs: '>=7.0.0' dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) rxjs: 7.8.2 tslib: 2.8.1 dev: true @@ -6787,10 +6531,6 @@ packages: engines: {node: '>=8'} dev: true - /app-module-path@2.2.0: - resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==, tarball: https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz} - dev: true - /archiver-utils@2.1.0: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==, tarball: https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz} engines: {node: '>= 6'} @@ -6969,11 +6709,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ast-module-types@6.0.1: - resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==, tarball: https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz} - engines: {node: '>=18'} - dev: true - /ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, tarball: https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz} engines: {node: '>=4'} @@ -7070,50 +6805,50 @@ packages: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==, tarball: https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz} dev: true - /babel-loader@10.0.0(@babel/core@7.26.10)(webpack@5.99.7): + /babel-loader@10.0.0(@babel/core@7.27.1)(webpack@5.99.8): resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==, tarball: https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz} engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5.61.0' dependencies: - '@babel/core': 7.26.10 + '@babel/core': 7.27.1 find-up: 5.0.0 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false - /babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10): + /babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): + /babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10): + /babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1): resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.26.10 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10) + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) transitivePeerDependencies: - supports-color dev: false @@ -7539,6 +7274,7 @@ packages: /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==, tarball: https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz} engines: {node: '>=6'} + dev: true /bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==, tarball: https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz} @@ -8129,11 +7865,6 @@ packages: engines: {node: '>=14'} dev: true - /commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, tarball: https://registry.npmjs.org/commander/-/commander-12.1.0.tgz} - engines: {node: '>=18'} - dev: true - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmjs.org/commander/-/commander-2.20.3.tgz} @@ -8158,6 +7889,7 @@ packages: /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, tarball: https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz} + dev: false /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, tarball: https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz} @@ -8454,6 +8186,7 @@ packages: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==, tarball: https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz} dependencies: is-what: 3.14.1 + dev: false /copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==, tarball: https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz} @@ -8468,7 +8201,7 @@ packages: is-plain-object: 5.0.0 dev: true - /copy-webpack-plugin@13.0.0(webpack@5.99.7): + /copy-webpack-plugin@13.0.0(webpack@5.99.8): resolution: {integrity: sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==, tarball: https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -8479,7 +8212,7 @@ packages: schema-utils: 4.3.2 serialize-javascript: 6.0.2 tinyglobby: 0.2.13 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /core-js-compat@3.41.0: @@ -8575,17 +8308,6 @@ packages: cross-spawn: 7.0.6 dev: true - /cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - dev: false - /cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz} engines: {node: '>= 8'} @@ -8599,7 +8321,7 @@ packages: engines: {node: '>=8'} dev: true - /css-loader@7.1.2(webpack@5.99.7): + /css-loader@7.1.2(webpack@5.99.8): resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==, tarball: https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -8619,7 +8341,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.5.3) postcss-value-parser: 4.2.0 semver: 7.7.1 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /css-select@5.1.0: @@ -9180,19 +8902,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, tarball: https://registry.npmjs.org/depd/-/depd-2.0.0.tgz} engines: {node: '>= 0.8'} - /dependency-tree@11.1.1: - resolution: {integrity: sha512-pnkCd8VGOq70EVaEQxDC9mZCjCwYj4yG4j8h+PEJswuWp+rdE6p8zbtVvWk+yPwaVimOjlhNi782U9K5KOU9MQ==, tarball: https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.1.1.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - commander: 12.1.0 - filing-cabinet: 5.0.3 - precinct: 12.2.0 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - dev: true - /deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, tarball: https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz} dev: true @@ -9207,113 +8916,23 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} /detect-file@1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==, tarball: https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - - /detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz} - engines: {node: '>=0.10'} - hasBin: true - optional: true - - /detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz} - engines: {node: '>=8'} - optional: true - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, tarball: https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz} - - /detective-amd@6.0.1: - resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==, tarball: https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - ast-module-types: 6.0.1 - escodegen: 2.1.0 - get-amd-module-type: 6.0.1 - node-source-walk: 7.0.1 - dev: true - - /detective-cjs@6.0.1: - resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==, tarball: https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz} - engines: {node: '>=18'} - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - dev: true - - /detective-es6@5.0.1: - resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==, tarball: https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz} - engines: {node: '>=18'} - dependencies: - node-source-walk: 7.0.1 - dev: true - - /detective-postcss@7.0.1(postcss@8.5.3): - resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==, tarball: https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz} - engines: {node: ^14.0.0 || >=16.0.0} - peerDependencies: - postcss: ^8.4.47 - dependencies: - is-url: 1.2.4 - postcss: 8.5.3 - postcss-values-parser: 6.0.2(postcss@8.5.3) - dev: true - - /detective-sass@6.0.1: - resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==, tarball: https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz} - engines: {node: '>=18'} - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - dev: true - - /detective-scss@5.0.1: - resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==, tarball: https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz} - engines: {node: '>=18'} - dependencies: - gonzales-pe: 4.3.0 - node-source-walk: 7.0.1 - dev: true - - /detective-stylus@5.0.1: - resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==, tarball: https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz} - engines: {node: '>=18'} - dev: true - - /detective-typescript@14.0.0(typescript@5.8.3): - resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==, tarball: https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz} - engines: {node: '>=18'} - peerDependencies: - typescript: ^5.4.4 - dependencies: - '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.3) - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==, tarball: https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz} + engines: {node: '>=0.10.0'} dev: true - /detective-vue2@2.2.0(typescript@5.8.3): - resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==, tarball: https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz} - engines: {node: '>=18'} - peerDependencies: - typescript: ^5.4.4 - dependencies: - '@dependents/detective-less': 5.0.1 - '@vue/compiler-sfc': 3.5.13 - detective-es6: 5.0.1 - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - dev: true + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz} + engines: {node: '>=0.10'} + hasBin: true + optional: true + + /detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz} + engines: {node: '>=8'} + optional: true + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, tarball: https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz} /dev-ip@1.0.1: resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==, tarball: https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz} @@ -9604,6 +9223,7 @@ packages: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + dev: false /ent@2.2.2: resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==, tarball: https://registry.npmjs.org/ent/-/ent-2.2.2.tgz} @@ -9638,6 +9258,7 @@ packages: hasBin: true dependencies: prr: 1.0.1 + dev: false optional: true /error-ex@1.3.2: @@ -9750,8 +9371,8 @@ packages: when: 3.7.8 dev: false - /esbuild-wasm@0.25.3: - resolution: {integrity: sha512-60mFpAU4iQMVIP9tSd5EEbxZUDsqSKAjAJ7r1OK073lG/ctnVidThvbcU+M2B55jMFntCFJlqksubXMpYIcbfg==, tarball: https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.3.tgz} + /esbuild-wasm@0.25.4: + resolution: {integrity: sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==, tarball: https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.4.tgz} engines: {node: '>=18'} hasBin: true dev: false @@ -9788,36 +9409,36 @@ packages: '@esbuild/win32-x64': 0.24.2 dev: true - /esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz} + /esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz} engines: {node: '>=18'} hasBin: true optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 /escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, tarball: https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz} @@ -9860,11 +9481,6 @@ packages: estraverse: 4.3.0 dev: false - /eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true - /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} engines: {node: '>=4'} @@ -9892,6 +9508,7 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz} + dev: false /esutils@1.1.6: resolution: {integrity: sha512-RG1ZkUT7iFJG9LSHr7KDuuMSlujfeTtMNIcInURxKAxhMtwQhI3NrQhz26gZQYlsYZQKzsnwtpKrFKj9K9Qu1A==, tarball: https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz} @@ -9941,17 +9558,19 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} engines: {node: '>=0.8.x'} - /execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==, tarball: https://registry.npmjs.org/execa/-/execa-1.0.0.tgz} - engines: {node: '>=6'} + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, tarball: https://registry.npmjs.org/execa/-/execa-5.1.1.tgz} + engines: {node: '>=10'} dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 signal-exit: 3.0.7 - strip-eof: 1.0.0 + strip-final-newline: 2.0.0 dev: false /exegesis-express@4.0.0: @@ -10228,24 +9847,6 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /filing-cabinet@5.0.3: - resolution: {integrity: sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==, tarball: https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - app-module-path: 2.2.0 - commander: 12.1.0 - enhanced-resolve: 5.18.1 - module-definition: 6.0.1 - module-lookup-amd: 9.0.4 - resolve: 1.22.10 - resolve-dependency-path: 4.0.1 - sass-lookup: 6.1.0 - stylus-lookup: 6.1.0 - tsconfig-paths: 4.2.0 - typescript: 5.8.3 - dev: true - /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, tarball: https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz} engines: {node: '>=0.10.0'} @@ -10366,7 +9967,7 @@ packages: '@google-cloud/pubsub': 4.11.0 abort-controller: 3.0.0 ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv-formats: 3.0.1 archiver: 7.0.1 async-lock: 1.4.1 body-parser: 1.20.3 @@ -10722,14 +10323,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz} engines: {node: '>=6.9.0'} - /get-amd-module-type@6.0.1: - resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==, tarball: https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz} - engines: {node: '>=18'} - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - dev: true - /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, tarball: https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz} engines: {node: 6.* || 8.* || >= 10.*} @@ -10753,10 +10346,6 @@ packages: hasown: 2.0.2 math-intrinsics: 1.1.0 - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==, tarball: https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz} - dev: true - /get-port@5.1.1: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==, tarball: https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz} engines: {node: '>=8'} @@ -10772,19 +10361,17 @@ packages: /get-ready@1.0.0: resolution: {integrity: sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==, tarball: https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz} - /get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==, tarball: https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz} - engines: {node: '>=6'} - dependencies: - pump: 3.0.2 - dev: false - /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, tarball: https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz} engines: {node: '>=8'} dependencies: pump: 3.0.2 + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, tarball: https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz} + engines: {node: '>=10'} + dev: false + /get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, tarball: https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz} engines: {node: '>= 0.4'} @@ -10997,14 +10584,6 @@ packages: sparkles: 2.1.0 dev: true - /gonzales-pe@4.3.0: - resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==, tarball: https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz} - engines: {node: '>=0.6.0'} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /google-auth-library@9.15.1(supports-color@10.0.0): resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==, tarball: https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz} engines: {node: '>=14'} @@ -11583,6 +11162,11 @@ packages: transitivePeerDependencies: - supports-color + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, tarball: https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz} + engines: {node: '>=10.17.0'} + dev: false + /husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==, tarball: https://registry.npmjs.org/husky/-/husky-9.1.7.tgz} engines: {node: '>=18'} @@ -11635,6 +11219,7 @@ packages: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz} engines: {node: '>=0.10.0'} hasBin: true + dev: false optional: true /immediate@3.0.6: @@ -11763,11 +11348,6 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, tarball: https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz} engines: {node: '>=12'} - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, tarball: https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz} - engines: {node: '>= 0.10'} - dev: false - /interpret@3.1.1: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==, tarball: https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz} engines: {node: '>=10.13.0'} @@ -11868,13 +11448,6 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, tarball: https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz} dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==, tarball: https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: false - /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, tarball: https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz} engines: {node: '>= 0.4'} @@ -12084,11 +11657,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} engines: {node: '>=0.12.0'} - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==, tarball: https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz} - engines: {node: '>=0.10.0'} - dev: true - /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, tarball: https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz} engines: {node: '>=8'} @@ -12153,11 +11721,6 @@ packages: has-tostringtag: 1.0.2 hasown: 2.0.2 - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==, tarball: https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: true - /is-relative@1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==, tarball: https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz} engines: {node: '>=0.10.0'} @@ -12181,15 +11744,9 @@ packages: resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==, tarball: https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz} dev: true - /is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, tarball: https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz} - engines: {node: '>=0.10.0'} - dev: false - /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, tarball: https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz} engines: {node: '>=8'} - dev: true /is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, tarball: https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz} @@ -12229,11 +11786,6 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, tarball: https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz} engines: {node: '>=10'} - /is-url-superb@4.0.0: - resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==, tarball: https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz} - engines: {node: '>=10'} - dev: true - /is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==, tarball: https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz} dev: true @@ -12265,6 +11817,7 @@ packages: /is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==, tarball: https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz} + dev: false /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz} @@ -12358,8 +11911,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, tarball: https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz} engines: {node: '>=8'} dependencies: - '@babel/core': 7.26.10 - '@babel/parser': 7.27.0 + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -12371,8 +11924,8 @@ packages: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==, tarball: https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz} engines: {node: '>=10'} dependencies: - '@babel/core': 7.26.10 - '@babel/parser': 7.27.0 + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.1 @@ -12740,16 +12293,6 @@ packages: jasmine-core: 4.6.1 karma: 6.4.4 - /karma-junit-reporter@2.0.1(karma@6.4.4): - resolution: {integrity: sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==, tarball: https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-2.0.1.tgz} - engines: {node: '>= 8'} - peerDependencies: - karma: '>=0.9' - dependencies: - karma: 6.4.4 - path-is-absolute: 1.0.1 - xmlbuilder: 12.0.0 - /karma-requirejs@1.1.0(karma@6.4.4)(requirejs@2.3.7): resolution: {integrity: sha512-MHTOYKdwwJBkvYid0TaYvBzOnFH3TDtzo6ie5E4o9SaUSXXsfMRLa/whUz6efVIgTxj1xnKYasNn/XwEgJeB/Q==, tarball: https://registry.npmjs.org/karma-requirejs/-/karma-requirejs-1.1.0.tgz} peerDependencies: @@ -12912,8 +12455,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /less-loader@12.2.0(less@4.3.0)(webpack@5.99.7): - resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==, tarball: https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz} + /less-loader@12.3.0(less@4.3.0)(webpack@5.99.8): + resolution: {integrity: sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==, tarball: https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -12926,7 +12469,7 @@ packages: optional: true dependencies: less: 4.3.0 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /less@4.3.0: @@ -12945,6 +12488,7 @@ packages: mime: 1.6.0 needle: 3.3.1 source-map: 0.6.1 + dev: false /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, tarball: https://registry.npmjs.org/leven/-/leven-3.1.0.tgz} @@ -12961,7 +12505,7 @@ packages: resolution: {integrity: sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw==, tarball: https://registry.npmjs.org/libsodium/-/libsodium-0.7.15.tgz} dev: true - /license-webpack-plugin@4.0.2(webpack@5.99.7): + /license-webpack-plugin@4.0.2(webpack@5.99.8): resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==, tarball: https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz} peerDependencies: webpack: '*' @@ -12969,7 +12513,7 @@ packages: webpack: optional: true dependencies: - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) webpack-sources: 3.2.3 dev: false @@ -13019,8 +12563,8 @@ packages: wrap-ansi: 9.0.0 dev: true - /listr2@8.3.2: - resolution: {integrity: sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==, tarball: https://registry.npmjs.org/listr2/-/listr2-8.3.2.tgz} + /listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==, tarball: https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz} engines: {node: '>=18.0.0'} dependencies: cli-truncate: 4.0.0 @@ -13072,8 +12616,8 @@ packages: dev: true optional: true - /lmdb@3.2.6: - resolution: {integrity: sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==, tarball: https://registry.npmjs.org/lmdb/-/lmdb-3.2.6.tgz} + /lmdb@3.3.0: + resolution: {integrity: sha512-MgJocUI6QEiSXQBFWLeyo1R7eQj8Rke5dlPxX0KFwli8/bsCxpM/KbXO5y0qmV/5llQ3wpneDWcTYxa+4vn8iQ==, tarball: https://registry.npmjs.org/lmdb/-/lmdb-3.3.0.tgz} hasBin: true dependencies: msgpackr: 1.11.2 @@ -13082,12 +12626,13 @@ packages: ordered-binary: 1.5.3 weak-lru-cache: 1.2.2 optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.2.6 - '@lmdb/lmdb-darwin-x64': 3.2.6 - '@lmdb/lmdb-linux-arm': 3.2.6 - '@lmdb/lmdb-linux-arm64': 3.2.6 - '@lmdb/lmdb-linux-x64': 3.2.6 - '@lmdb/lmdb-win32-x64': 3.2.6 + '@lmdb/lmdb-darwin-arm64': 3.3.0 + '@lmdb/lmdb-darwin-x64': 3.3.0 + '@lmdb/lmdb-linux-arm': 3.3.0 + '@lmdb/lmdb-linux-arm64': 3.3.0 + '@lmdb/lmdb-linux-x64': 3.3.0 + '@lmdb/lmdb-win32-arm64': 3.3.0 + '@lmdb/lmdb-win32-x64': 3.3.0 dev: false optional: true @@ -13334,33 +12879,6 @@ packages: through2: 2.0.5 dev: true - /madge@8.0.0(typescript@5.8.2): - resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==, tarball: https://registry.npmjs.org/madge/-/madge-8.0.0.tgz} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - typescript: ^5.4.4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - chalk: 4.1.2 - commander: 7.2.0 - commondir: 1.0.1 - debug: 4.4.0(supports-color@10.0.0) - dependency-tree: 11.1.1 - ora: 5.4.1 - pluralize: 8.0.0 - pretty-ms: 7.0.1 - rc: 1.2.8 - stream-to-array: 2.3.0 - ts-graphviz: 2.1.6 - typescript: 5.8.2 - walkdir: 0.4.1 - transitivePeerDependencies: - - supports-color - dev: true - /magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz} dependencies: @@ -13378,6 +12896,7 @@ packages: dependencies: pify: 4.0.1 semver: 5.7.2 + dev: false /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, tarball: https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz} @@ -13682,7 +13201,7 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, tarball: https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz} engines: {node: '>=10'} - /mini-css-extract-plugin@2.9.2(webpack@5.99.7): + /mini-css-extract-plugin@2.9.2(webpack@5.99.8): resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==, tarball: https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz} engines: {node: '>= 12.13.0'} peerDependencies: @@ -13690,7 +13209,7 @@ packages: dependencies: schema-utils: 4.3.2 tapable: 2.2.1 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /minimalistic-assert@1.0.1: @@ -13850,26 +13369,6 @@ packages: ufo: 1.6.1 dev: true - /module-definition@6.0.1: - resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==, tarball: https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - ast-module-types: 6.0.1 - node-source-walk: 7.0.1 - dev: true - - /module-lookup-amd@9.0.4: - resolution: {integrity: sha512-DWJEuLVvjxh5b8wrvJC5wr2a7qo7pOWXIgdCBNazU416kcIyzO4drxvlqKhsHzYwxcC4cWuhoK+MiWCKCGnv7A==, tarball: https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.4.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - commander: 12.1.0 - glob: 7.2.3 - requirejs: 2.3.7 - requirejs-config-file: 4.0.0 - dev: true - /moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==, tarball: https://registry.npmjs.org/moo/-/moo-0.5.2.tgz} dev: true @@ -14007,6 +13506,7 @@ packages: dependencies: iconv-lite: 0.6.3 sax: 1.4.1 + dev: false optional: true /negotiator@0.6.3: @@ -14030,18 +13530,16 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /ngx-flamegraph@0.0.12(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9): + /ngx-flamegraph@0.0.12: resolution: {integrity: sha512-YoxrqlL36Bg5Ca9fu10kuSUmaWHAvx7jkxINF4/4cXn9bBPRfu78FqnZ5LIULC0+iScZcSDSWDAnUdn8H7+wGw==, tarball: https://registry.npmjs.org/ngx-flamegraph/-/ngx-flamegraph-0.0.12.tgz} peerDependencies: '@angular/common': ^9.0.0 '@angular/core': ^9.0.0 dependencies: - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) tslib: 2.8.1 dev: false - /ngx-progressbar@14.0.0(@angular/cdk@20.0.0-next.10)(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2): + /ngx-progressbar@14.0.0(@angular/cdk@20.0.0-rc.0)(rxjs@7.8.2): resolution: {integrity: sha512-tDj7h5F2aSI4/XaJjs50FnELVe6qFqyz3vVq22acacd3oDW2EyJB4c+IYaxMf5972OdTw0WL4n6UwQ3dqC+gCA==, tarball: https://registry.npmjs.org/ngx-progressbar/-/ngx-progressbar-14.0.0.tgz} peerDependencies: '@angular/cdk': '>=17.3.0' @@ -14049,17 +13547,11 @@ packages: '@angular/core': '>=17.3.0' rxjs: '>=7.0.0' dependencies: - '@angular/cdk': 20.0.0-next.10(@angular/common@20.0.0-next.9)(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/common': 20.0.0-next.9(@angular/core@20.0.0-next.9)(rxjs@7.8.2) - '@angular/core': 20.0.0-next.9(rxjs@7.8.2)(zone.js@0.12.0) + '@angular/cdk': 20.0.0-rc.0(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 dev: false - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, tarball: https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz} - dev: false - /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} dependencies: @@ -14150,13 +13642,6 @@ packages: /node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz} - /node-source-walk@7.0.1: - resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==, tarball: https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz} - engines: {node: '>=18'} - dependencies: - '@babel/parser': 7.27.0 - dev: true - /nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==, tarball: https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -14272,11 +13757,11 @@ packages: - supports-color dev: false - /npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz} - engines: {node: '>=4'} + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz} + engines: {node: '>=8'} dependencies: - path-key: 2.0.1 + path-key: 3.1.1 dev: false /nth-check@2.1.1: @@ -14413,8 +13898,8 @@ packages: resolution: {integrity: sha512-4Cks2eY4bnWpBP/fEj1deRrVYbHME36g0w4/IFDG4iwnkD7CwmK9HrF3A3LR/RKHs5AXUMj49YxnwdIxEizDpA==, tarball: https://registry.npmjs.org/open-in-idx/-/open-in-idx-0.1.1.tgz} dev: false - /open@10.1.1: - resolution: {integrity: sha512-zy1wx4+P3PfhXSEPJNtZmJXfhkkIaxU1VauWIrDZw1O7uJRDRJtKr9n3Ic4NgbA16KyOxOXO2ng9gYwCdXuSXA==, tarball: https://registry.npmjs.org/open/-/open-10.1.1.tgz} + /open@10.1.2: + resolution: {integrity: sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==, tarball: https://registry.npmjs.org/open/-/open-10.1.2.tgz} engines: {node: '>=18'} dependencies: default-browser: 5.2.1 @@ -14507,6 +13992,7 @@ packages: /p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, tarball: https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz} engines: {node: '>=4'} + dev: true /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, tarball: https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz} @@ -14666,7 +14152,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -14675,19 +14161,15 @@ packages: resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==, tarball: https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz} engines: {node: '>=18'} dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 index-to-position: 1.1.0 type-fest: 4.40.1 dev: true - /parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==, tarball: https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz} - engines: {node: '>=6'} - dev: true - /parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==, tarball: https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz} engines: {node: '>= 0.10'} + dev: false /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, tarball: https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz} @@ -14799,11 +14281,6 @@ packages: /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==, tarball: https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, tarball: https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz} - engines: {node: '>=4'} - dev: false - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} engines: {node: '>=8'} @@ -14945,6 +14422,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, tarball: https://registry.npmjs.org/pify/-/pify-4.0.1.tgz} engines: {node: '>=6'} + dev: false /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==, tarball: https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz} @@ -14962,8 +14440,9 @@ packages: '@napi-rs/nice': 1.0.1 dev: true - /piscina@4.9.2: - resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==, tarball: https://registry.npmjs.org/piscina/-/piscina-4.9.2.tgz} + /piscina@5.0.0: + resolution: {integrity: sha512-R+arufwL7sZvGjAhSMK3TfH55YdGOqhpKXkcwQJr432AAnJX/xxX19PA4QisrmJ+BTTfZVggaz6HexbkQq1l1Q==, tarball: https://registry.npmjs.org/piscina/-/piscina-5.0.0.tgz} + engines: {node: '>=18.x'} optionalDependencies: '@napi-rs/nice': 1.0.1 dev: false @@ -15004,11 +14483,6 @@ packages: ansi-colors: 1.1.0 dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, tarball: https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz} - engines: {node: '>=4'} - dev: true - /points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==, tarball: https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz} dev: true @@ -15047,7 +14521,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.99.7): + /postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.99.8): resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==, tarball: https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -15064,7 +14538,7 @@ packages: jiti: 1.21.7 postcss: 8.5.3 semver: 7.7.1 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) transitivePeerDependencies: - typescript dev: false @@ -15125,18 +14599,6 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, tarball: https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} dev: false - /postcss-values-parser@6.0.2(postcss@8.5.3): - resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==, tarball: https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.2.9 - dependencies: - color-name: 1.1.4 - is-url-superb: 4.0.0 - postcss: 8.5.3 - quote-unquote: 1.0.0 - dev: true - /postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz} engines: {node: ^10 || ^12 || >=14} @@ -15179,30 +14641,6 @@ packages: resolution: {integrity: sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==, tarball: https://registry.npmjs.org/preact/-/preact-10.26.5.tgz} dev: true - /precinct@12.2.0: - resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==, tarball: https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - '@dependents/detective-less': 5.0.1 - commander: 12.1.0 - detective-amd: 6.0.1 - detective-cjs: 6.0.1 - detective-es6: 5.0.1 - detective-postcss: 7.0.1(postcss@8.5.3) - detective-sass: 6.0.1 - detective-scss: 5.0.1 - detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - detective-vue2: 2.2.0(typescript@5.8.3) - module-definition: 6.0.1 - node-source-walk: 7.0.1 - postcss: 8.5.3 - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - dev: true - /prettier@3.4.2: resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==, tarball: https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz} engines: {node: '>=14'} @@ -15215,13 +14653,6 @@ packages: hasBin: true dev: true - /pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==, tarball: https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz} - engines: {node: '>=10'} - dependencies: - parse-ms: 2.1.0 - dev: true - /proc-log@4.2.0: resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==, tarball: https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -15366,6 +14797,7 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==, tarball: https://registry.npmjs.org/prr/-/prr-1.0.1.tgz} + dev: false optional: true /psl@1.15.0: @@ -15523,10 +14955,6 @@ packages: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==, tarball: https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz} engines: {node: '>=10'} - /quote-unquote@1.0.0: - resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==, tarball: https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz} - dev: true - /railroad-diagrams@1.0.0: resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==, tarball: https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz} dev: true @@ -15655,13 +15083,6 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, tarball: https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz} engines: {node: '>= 14.18.0'} - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, tarball: https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.10 - dev: false - /rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==, tarball: https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz} engines: {node: '>= 10.13.0'} @@ -15702,16 +15123,6 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, tarball: https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz} dev: false - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz} - dev: false - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==, tarball: https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz} - dependencies: - '@babel/runtime': 7.27.0 - dev: false - /regex-not@1.0.2: resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==, tarball: https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz} engines: {node: '>=0.10.0'} @@ -15850,14 +15261,6 @@ packages: /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, tarball: https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz} - /requirejs-config-file@4.0.0: - resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==, tarball: https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz} - engines: {node: '>=10.13.0'} - dependencies: - esprima: 4.0.1 - stringify-object: 3.3.0 - dev: true - /requirejs@2.3.7: resolution: {integrity: sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==, tarball: https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz} engines: {node: '>=0.4.0'} @@ -15869,11 +15272,6 @@ packages: /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==, tarball: https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz} - /resolve-dependency-path@4.0.1: - resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==, tarball: https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-4.0.1.tgz} - engines: {node: '>=18'} - dev: true - /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==, tarball: https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz} engines: {node: '>=0.10.0'} @@ -16021,7 +15419,7 @@ packages: /robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==, tarball: https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz} - /rollup-plugin-dts@6.2.1(rollup@4.35.0)(typescript@5.8.2): + /rollup-plugin-dts@6.2.1(rollup@4.40.2)(typescript@5.8.2): resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==, tarball: https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.2.1.tgz} engines: {node: '>=16'} peerDependencies: @@ -16029,10 +15427,10 @@ packages: typescript: ^4.5 || ^5.0 dependencies: magic-string: 0.30.17 - rollup: 4.35.0 + rollup: 4.40.2 typescript: 5.8.2 optionalDependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 dev: false /rollup-plugin-node-resolve@4.2.4: @@ -16051,7 +15449,7 @@ packages: magic-string: 0.25.9 dev: false - /rollup-plugin-sourcemaps@0.6.3(@types/node@18.19.87)(rollup@4.35.0): + /rollup-plugin-sourcemaps@0.6.3(@types/node@18.19.87)(rollup@4.40.2): resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==, tarball: https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz} engines: {node: '>=10.0.0'} peerDependencies: @@ -16061,9 +15459,9 @@ packages: '@types/node': optional: true dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.35.0) + '@rollup/pluginutils': 3.1.0(rollup@4.40.2) '@types/node': 18.19.87 - rollup: 4.35.0 + rollup: 4.40.2 source-map-resolve: 0.6.0 dev: false @@ -16073,7 +15471,7 @@ packages: peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 jest-worker: 26.6.2 rollup: 1.11.3 serialize-javascript: 4.0.0 @@ -16118,62 +15516,33 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.35.0: - resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==, tarball: https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.35.0 - '@rollup/rollup-android-arm64': 4.35.0 - '@rollup/rollup-darwin-arm64': 4.35.0 - '@rollup/rollup-darwin-x64': 4.35.0 - '@rollup/rollup-freebsd-arm64': 4.35.0 - '@rollup/rollup-freebsd-x64': 4.35.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.35.0 - '@rollup/rollup-linux-arm-musleabihf': 4.35.0 - '@rollup/rollup-linux-arm64-gnu': 4.35.0 - '@rollup/rollup-linux-arm64-musl': 4.35.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.35.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0 - '@rollup/rollup-linux-riscv64-gnu': 4.35.0 - '@rollup/rollup-linux-s390x-gnu': 4.35.0 - '@rollup/rollup-linux-x64-gnu': 4.35.0 - '@rollup/rollup-linux-x64-musl': 4.35.0 - '@rollup/rollup-win32-arm64-msvc': 4.35.0 - '@rollup/rollup-win32-ia32-msvc': 4.35.0 - '@rollup/rollup-win32-x64-msvc': 4.35.0 - fsevents: 2.3.3 - dev: false - - /rollup@4.40.1: - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==, tarball: https://registry.npmjs.org/rollup/-/rollup-4.40.1.tgz} + /rollup@4.40.2: + resolution: {integrity: sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==, tarball: https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.1 - '@rollup/rollup-android-arm64': 4.40.1 - '@rollup/rollup-darwin-arm64': 4.40.1 - '@rollup/rollup-darwin-x64': 4.40.1 - '@rollup/rollup-freebsd-arm64': 4.40.1 - '@rollup/rollup-freebsd-x64': 4.40.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 - '@rollup/rollup-linux-arm64-musl': 4.40.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 - '@rollup/rollup-linux-x64-gnu': 4.40.1 - '@rollup/rollup-linux-x64-musl': 4.40.1 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 - '@rollup/rollup-win32-x64-msvc': 4.40.1 + '@rollup/rollup-android-arm-eabi': 4.40.2 + '@rollup/rollup-android-arm64': 4.40.2 + '@rollup/rollup-darwin-arm64': 4.40.2 + '@rollup/rollup-darwin-x64': 4.40.2 + '@rollup/rollup-freebsd-arm64': 4.40.2 + '@rollup/rollup-freebsd-x64': 4.40.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.40.2 + '@rollup/rollup-linux-arm-musleabihf': 4.40.2 + '@rollup/rollup-linux-arm64-gnu': 4.40.2 + '@rollup/rollup-linux-arm64-musl': 4.40.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.40.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-gnu': 4.40.2 + '@rollup/rollup-linux-riscv64-musl': 4.40.2 + '@rollup/rollup-linux-s390x-gnu': 4.40.2 + '@rollup/rollup-linux-x64-gnu': 4.40.2 + '@rollup/rollup-linux-x64-musl': 4.40.2 + '@rollup/rollup-win32-arm64-msvc': 4.40.2 + '@rollup/rollup-win32-ia32-msvc': 4.40.2 + '@rollup/rollup-win32-x64-msvc': 4.40.2 fsevents: 2.3.3 /roughjs@4.6.6: @@ -16282,7 +15651,7 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} - /sass-loader@16.0.5(sass@1.87.0)(webpack@5.99.7): + /sass-loader@16.0.5(sass@1.87.0)(webpack@5.99.8): resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==, tarball: https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -16305,18 +15674,9 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.87.0 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false - /sass-lookup@6.1.0: - resolution: {integrity: sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==, tarball: https://registry.npmjs.org/sass-lookup/-/sass-lookup-6.1.0.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - commander: 12.1.0 - enhanced-resolve: 5.18.1 - dev: true - /sass@1.83.1: resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==, tarball: https://registry.npmjs.org/sass/-/sass-1.83.1.tgz} engines: {node: '>=14.0.0'} @@ -16401,8 +15761,8 @@ packages: tmp: 0.0.30 xml2js: 0.4.23 - /selenium-webdriver@4.31.0: - resolution: {integrity: sha512-0MWEwypM0+c1NnZ87UEMxZdwphKoaK2UJ2qXzKWrJiM0gazFjgNVimxlHTOO90G2cOhphZqwpqSCJy62NTEzyA==, tarball: https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.31.0.tgz} + /selenium-webdriver@4.32.0: + resolution: {integrity: sha512-dG48JJnB96Aea1iVaZOKGmd6yT6aemeI1heWI/i8DtfD3pDX7uIlwpDBoGauNhtXAaFaamP+U4hIab8zZkg3Ag==, tarball: https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.32.0.tgz} engines: {node: '>= 18.20.5'} dependencies: '@bazel/runfiles': 6.3.1 @@ -16665,24 +16025,12 @@ packages: kind-of: 6.0.3 dev: false - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz} - engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - dev: false - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz} - engines: {node: '>=0.10.0'} - dev: false - /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} engines: {node: '>=8'} @@ -16692,15 +16040,12 @@ packages: engines: {node: '>= 0.4'} dev: false - /shelljs@0.9.2: - resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==, tarball: https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz} + /shelljs@0.10.0: + resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==, tarball: https://registry.npmjs.org/shelljs/-/shelljs-0.10.0.tgz} engines: {node: '>=18'} - hasBin: true dependencies: - execa: 1.0.0 + execa: 5.1.1 fast-glob: 3.3.3 - interpret: 1.4.0 - rechoir: 0.6.2 dev: false /shiki@3.3.0: @@ -16934,7 +16279,7 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} engines: {node: '>=0.10.0'} - /source-map-loader@5.0.0(webpack@5.99.7): + /source-map-loader@5.0.0(webpack@5.99.8): resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==, tarball: https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -16942,7 +16287,7 @@ packages: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /source-map-resolve@0.5.3: @@ -17210,12 +16555,6 @@ packages: limiter: 1.1.5 dev: true - /stream-to-array@2.3.0: - resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==, tarball: https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz} - dependencies: - any-promise: 1.3.0 - dev: true - /streamifier@0.1.1: resolution: {integrity: sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==, tarball: https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz} engines: {node: '>=0.10'} @@ -17320,15 +16659,6 @@ packages: character-entities-legacy: 3.0.0 dev: true - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==, tarball: https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: true - /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz} engines: {node: '>=0.10.0'} @@ -17347,14 +16677,9 @@ packages: dependencies: ansi-regex: 6.1.0 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, tarball: https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz} - engines: {node: '>=4'} - dev: true - - /strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, tarball: https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz} - engines: {node: '>=0.10.0'} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, tarball: https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz} + engines: {node: '>=6'} dev: false /strip-json-comments@2.0.1: @@ -17378,14 +16703,6 @@ packages: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==, tarball: https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz} dev: true - /stylus-lookup@6.1.0: - resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==, tarball: https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-6.1.0.tgz} - engines: {node: '>=18'} - hasBin: true - dependencies: - commander: 12.1.0 - dev: true - /superstatic@9.2.0: resolution: {integrity: sha512-QrJAJIpAij0jJT1nEwYTB0SzDi4k0wYygu6GxK0ko8twiQgfgaOAZ7Hu99p02MTAsGho753zhzSvsw8We4PBEQ==, tarball: https://registry.npmjs.org/superstatic/-/superstatic-9.2.0.tgz} engines: {node: 18 || 20 || 22} @@ -17473,6 +16790,7 @@ packages: /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} engines: {node: '>=6'} + dev: false /tar-fs@2.1.2: resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==, tarball: https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz} @@ -17578,7 +16896,7 @@ packages: streamx: 2.22.0 dev: true - /terser-webpack-plugin@5.3.14(esbuild@0.25.3)(webpack@5.99.7): + /terser-webpack-plugin@5.3.14(esbuild@0.25.4)(webpack@5.99.8): resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==, tarball: https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz} engines: {node: '>= 10.13.0'} peerDependencies: @@ -17595,12 +16913,12 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.25.3 + esbuild: 0.25.4 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.39.0 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false /terser@5.39.0: @@ -17847,30 +17165,11 @@ packages: resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==, tarball: https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz} dev: true - /ts-api-utils@2.1.0(typescript@5.8.3): - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - dependencies: - typescript: 5.8.3 - dev: true - /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, tarball: https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz} engines: {node: '>=6.10'} dev: true - /ts-graphviz@2.1.6: - resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==, tarball: https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-2.1.6.tgz} - engines: {node: '>=18'} - dependencies: - '@ts-graphviz/adapter': 2.0.6 - '@ts-graphviz/ast': 2.0.7 - '@ts-graphviz/common': 2.1.5 - '@ts-graphviz/core': 2.0.7 - dev: true - /ts-node@10.9.2(@types/node@18.19.87)(typescript@5.8.2): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, tarball: https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz} hasBin: true @@ -17902,15 +17201,6 @@ packages: yn: 3.1.1 dev: true - /tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, tarball: https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz} - engines: {node: '>=6'} - dependencies: - json5: 2.2.3 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - /tsec@0.2.8(@bazel/bazelisk@1.26.0)(@bazel/concatjs@5.8.1)(typescript@5.8.2): resolution: {integrity: sha512-d2vdTEtLbPzTs57ygzzPk6QrdW1lA8SBAoHZCVvAyC3R1LTjsQ2eGg/XRmtoCpXOVIflVtMsxtzk7eTHwT+DjQ==, tarball: https://registry.npmjs.org/tsec/-/tsec-0.2.8.tgz} hasBin: true @@ -17920,7 +17210,7 @@ packages: typescript: '>=3.9.2' dependencies: '@bazel/bazelisk': 1.26.0 - '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2) + '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.8.2) glob: 7.2.3 minimatch: 3.1.2 typescript: 5.8.2 @@ -17967,7 +17257,7 @@ packages: peerDependencies: typescript: '>=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev' dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 builtin-modules: 1.1.1 chalk: 2.4.2 commander: 2.20.3 @@ -18019,7 +17309,7 @@ packages: engines: {node: '>=18.0.0'} hasBin: true dependencies: - esbuild: 0.25.3 + esbuild: 0.25.4 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -18647,7 +17937,7 @@ packages: teex: 1.0.1 dev: true - /vite@6.0.7(@types/node@18.19.87)(less@4.3.0)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3): + /vite@6.0.7(@types/node@18.19.87)(sass@1.83.1)(terser@5.39.0)(tsx@4.19.3): resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==, tarball: https://registry.npmjs.org/vite/-/vite-6.0.7.tgz} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -18689,9 +17979,8 @@ packages: dependencies: '@types/node': 18.19.87 esbuild: 0.24.2 - less: 4.3.0 postcss: 8.5.3 - rollup: 4.40.1 + rollup: 4.40.2 sass: 1.83.1 terser: 5.39.0 tsx: 4.19.3 @@ -18699,8 +17988,8 @@ packages: fsevents: 2.3.3 dev: true - /vite@6.3.4(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3): - resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==, tarball: https://registry.npmjs.org/vite/-/vite-6.3.4.tgz} + /vite@6.3.5(@types/node@18.19.87)(less@4.3.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.3): + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==, tarball: https://registry.npmjs.org/vite/-/vite-6.3.5.tgz} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -18740,12 +18029,12 @@ packages: optional: true dependencies: '@types/node': 18.19.87 - esbuild: 0.25.3 + esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) less: 4.3.0 picomatch: 4.0.2 postcss: 8.5.3 - rollup: 4.40.1 + rollup: 4.40.2 sass: 1.87.0 terser: 5.39.0 tinyglobby: 0.2.13 @@ -18810,11 +18099,6 @@ packages: xml-name-validator: 5.0.0 dev: true - /walkdir@0.4.1: - resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==, tarball: https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz} - engines: {node: '>=6.0.0'} - dev: true - /watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==, tarball: https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz} engines: {node: '>=10.13.0'} @@ -18918,7 +18202,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-dev-middleware@7.4.2(webpack@5.99.7): + /webpack-dev-middleware@7.4.2(webpack@5.99.8): resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==, tarball: https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz} engines: {node: '>= 18.12.0'} peerDependencies: @@ -18933,10 +18217,10 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.2 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false - /webpack-dev-server@5.2.1(webpack@5.99.7): + /webpack-dev-server@5.2.1(webpack@5.99.8): resolution: {integrity: sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==, tarball: https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz} engines: {node: '>= 18.12.0'} hasBin: true @@ -18968,15 +18252,15 @@ packages: http-proxy-middleware: 2.0.9(@types/express@4.17.21) ipaddr.js: 2.2.0 launch-editor: 2.10.0 - open: 10.1.1 + open: 10.1.2 p-retry: 6.2.1 schema-utils: 4.3.2 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.99.7(esbuild@0.25.3) - webpack-dev-middleware: 7.4.2(webpack@5.99.7) + webpack: 5.99.8(esbuild@0.25.4) + webpack-dev-middleware: 7.4.2(webpack@5.99.8) ws: 8.18.1 transitivePeerDependencies: - bufferutil @@ -19006,7 +18290,7 @@ packages: engines: {node: '>=10.13.0'} dev: false - /webpack-subresource-integrity@5.1.0(webpack@5.99.7): + /webpack-subresource-integrity@5.1.0(webpack@5.99.8): resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==, tarball: https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz} engines: {node: '>= 12'} peerDependencies: @@ -19017,11 +18301,11 @@ packages: optional: true dependencies: typed-assert: 1.0.9 - webpack: 5.99.7(esbuild@0.25.3) + webpack: 5.99.8(esbuild@0.25.4) dev: false - /webpack@5.99.7(esbuild@0.25.3): - resolution: {integrity: sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==, tarball: https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz} + /webpack@5.99.8(esbuild@0.25.4): + resolution: {integrity: sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==, tarball: https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -19051,7 +18335,7 @@ packages: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.1 - terser-webpack-plugin: 5.3.14(esbuild@0.25.3)(webpack@5.99.7) + terser-webpack-plugin: 5.3.14(esbuild@0.25.4)(webpack@5.99.8) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -19361,10 +18645,6 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==, tarball: https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz} engines: {node: '>=4.0'} - /xmlbuilder@12.0.0: - resolution: {integrity: sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==, tarball: https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-12.0.0.tgz} - engines: {node: '>=6.0'} - /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, tarball: https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz} dev: true @@ -19509,27 +18789,22 @@ packages: resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==, tarball: https://registry.npmjs.org/zod/-/zod-3.24.3.tgz} dev: true - /zone.js@0.12.0: - resolution: {integrity: sha512-XtC+I5dXU14HrzidAKBNMqneIVUykLEAA1x+v4KVrd6AUPWlwYORF8KgsVqvgdHiKZ4BkxxjvYi/ksEixTPR0Q==, tarball: https://registry.npmjs.org/zone.js/-/zone.js-0.12.0.tgz} - dependencies: - tslib: 2.8.1 - /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, tarball: https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz} dev: true - github.com/angular/dev-infra-private-build-tooling-builds/ce04ec6cf7604014191821a637e60964a1a3bb4a(@angular/ssr@20.0.0-next.9)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.3.0)(postcss@8.5.3)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3)(zone.js@0.12.0): + github.com/angular/dev-infra-private-build-tooling-builds/ce04ec6cf7604014191821a637e60964a1a3bb4a(@angular/ssr@20.0.0-rc.0)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3): resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/ce04ec6cf7604014191821a637e60964a1a3bb4a} id: github.com/angular/dev-infra-private-build-tooling-builds/ce04ec6cf7604014191821a637e60964a1a3bb4a name: '@angular/build-tooling' version: 0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65 dependencies: - '@angular/benchpress': 0.3.0(rxjs@7.8.2)(zone.js@0.12.0) - '@angular/build': 19.1.0-rc.0(@angular/ssr@20.0.0-next.9)(@types/node@18.19.87)(chokidar@4.0.3)(less@4.3.0)(postcss@8.5.3)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3) - '@babel/core': 7.26.10 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.26.10) + '@angular/benchpress': 0.3.0(rxjs@7.8.2) + '@angular/build': 19.1.0-rc.0(@angular/ssr@20.0.0-rc.0)(@types/node@18.19.87)(chokidar@4.0.3)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3) + '@babel/core': 7.27.1 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.27.1) '@bazel/buildifier': 6.3.3 - '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.3) + '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.3) '@bazel/esbuild': 5.8.1 '@bazel/protractor': 5.8.1(protractor@7.0.0) '@bazel/runfiles': 5.8.1 @@ -19547,7 +18822,7 @@ packages: browser-sync: 3.0.4 prettier: 3.4.2 protractor: 7.0.0 - selenium-webdriver: 4.31.0 + selenium-webdriver: 4.32.0 send: 1.2.0 source-map: 0.7.4 tmp: 0.2.3 @@ -19591,13 +18866,13 @@ packages: - zone.js dev: true - github.com/angular/dev-infra-private-ng-dev-builds/1a12d97905f4af88ccc0b582864907729d23e23e: - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/1a12d97905f4af88ccc0b582864907729d23e23e} + github.com/angular/dev-infra-private-ng-dev-builds/a871c115e04a76587fcd418107ad985752610ccf: + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/a871c115e04a76587fcd418107ad985752610ccf} name: '@angular/ng-dev' - version: 0.0.0-a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7 + version: 0.0.0-892760b7f6cf0d08a51778674a9b13ebc1a809a7 hasBin: true dependencies: - '@google-cloud/spanner': 7.19.1(supports-color@10.0.0) + '@google-cloud/spanner': 7.21.0(supports-color@10.0.0) '@octokit/rest': 21.1.1 '@types/semver': 7.7.0 '@types/supports-color': 10.0.0 @@ -19613,8 +18888,8 @@ packages: - encoding dev: true - github.com/angular/domino/8f228f8862540c6ccd14f76b5a1d9bb5458618af: - resolution: {tarball: https://codeload.github.com/angular/domino/tar.gz/8f228f8862540c6ccd14f76b5a1d9bb5458618af} + github.com/angular/domino/93e720f143d0296dd2726ffbcf4fc12283363a7b: + resolution: {tarball: https://codeload.github.com/angular/domino/tar.gz/93e720f143d0296dd2726ffbcf4fc12283363a7b} name: '@angular/domino' version: 2.1.6 dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d05a7e7dc84a..b5ce6b805187 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,5 @@ packages: - . + - packages/compiler/ + - packages/compiler-cli/ + - tools/bazel/rules_angular_store/ diff --git a/renovate.json b/renovate.json index 870628fef037..f9072f1c7bed 100644 --- a/renovate.json +++ b/renovate.json @@ -1,42 +1,24 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], "baseBranches": ["main", "20.0.x"], - "enabledManagers": ["npm", "bazel", "github-actions", "nvm"], - "rangeStrategy": "replace", - "pinDigests": true, - "semanticCommits": "enabled", - "semanticCommitScope": "", - "semanticCommitType": "build", - "dependencyDashboard": true, - "commitBody": "See associated pull request for more information.", - "separateMajorMinor": false, - "prHourlyLimit": 3, - "timezone": "America/Tijuana", - "lockFileMaintenance": { - "enabled": true - }, - "labels": ["area: build & ci", "action: merge"], "postUpgradeTasks": { "commands": [ - "git restore .yarn/releases/yarn-1.22.22.cjs pnpm-lock.yaml", + "git restore .yarn/releases/yarn-1.22.22.cjs pnpm-lock.yaml .npmrc", "yarn install --frozen-lockfile --non-interactive", "yarn bazel sync --only=repo || true", "yarn ng-dev misc update-generated-files" ], "fileFilters": [ + ".aspect/rules/external_repository_action_cache/**/*", ".github/actions/deploy-docs-site/**/*", "packages/**/*", - ".aspect/rules/external_repository_action_cache/**/*", "pnpm-lock.yaml" ], "executionMode": "branch" }, "ignoreDeps": [ "@angular/build-tooling", - "@bazel/ibazel", - "@bazel/runfiles", - "@rollup/plugin-node-resolve", - "@types/node", "@types/selenium-webdriver", "angular-1.5", "angular-1.6", @@ -46,98 +28,16 @@ "angular-mocks-1.6", "angular-mocks-1.7", "angular-mocks-1.8", - "aspect_bazel_lib", - "build_bazel_rules_nodejs", - "chalk", "convert-source-map", - "glob", - "hast-util-has-property", - "hast-util-is-element", - "hast-util-to-string", - "rehype-slug", - "remark", - "remark-html", - "rollup", - "rules_pkg", - "rxjs", "selenium-webdriver", - "systemjs", - "typescript", - "unist-util-filter", - "unist-util-source", - "unist-util-visit", - "unist-util-visit-parents", - "watchr" + "systemjs" ], "packageRules": [ - { - "matchDepNames": ["node"], - "matchUpdateTypes": ["minor", "patch"], - "groupName": "node" - }, - { - "enabled": false, - "matchDepNames": ["node"], - "matchUpdateTypes": ["major"] - }, - { - "matchPackageNames": ["*"], - "matchUpdateTypes": ["minor", "patch"], - "groupName": "all non-major dependencies", - "schedule": ["after 10:00pm on monday", "before 04:00am on tuesday"] - }, - { - "groupName": "bazel setup", - "schedule": ["at any time"], - "matchDepNames": ["/^@bazel/.*/", "/^build_bazel.*/"] - }, - { - "followTag": "next", - "groupName": "cross-repo Angular dependencies", - "schedule": ["at any time"], - "matchPackageNames": [ - "@angular/{/,}**", - "angular/{/,}**", - "@angular-devkit{/,}**", - "@schematics/{/,}**" - ] - }, - { - "matchFileNames": ["packages/**", "adev/src/content/tutorials/**"], - "followTag": null, - "matchPackageNames": [ - "@angular/{/,}**", - "angular/{/,}**", - "@angular-devkit{/,}**", - "@schematics/{/,}**" - ] - }, - { - "groupName": "babel dependencies", - "matchPackageNames": ["@babel/{/,}**", "@types/babel__{/,}**"] - }, - { - "groupName": "eslint dependencies", - "matchPackageNames": ["@angular-eslint/{/,}**", "@typescript-eslint/{/,}**"] - }, - { - "matchPackageNames": ["typescript", "tslib"], - "groupName": "typescript dependencies" - }, - { - "matchFileNames": [".github/workflows/scorecard.yml"], - "groupName": "scorecard action dependencies", - "groupSlug": "scorecard-action" - }, - { - "matchCurrentVersion": "0.0.0-PLACEHOLDER", - "enabled": false - }, { "matchFileNames": [ "integration/**", - "packages/zone.js/test/typings/package.json", - "packages/core/schematics/migrations/signal-migration/test/**" + "packages/core/schematics/migrations/signal-migration/test/**", + "packages/zone.js/test/typings/package.json" ], "enabled": false } diff --git a/scripts/benchmarks/utils.mts b/scripts/benchmarks/utils.mts index 4ee95fcfa3d8..52710a5d6e9c 100644 --- a/scripts/benchmarks/utils.mts +++ b/scripts/benchmarks/utils.mts @@ -14,7 +14,7 @@ import url from 'url'; const scriptDir = path.dirname(url.fileURLToPath(import.meta.url)); /** Absolute disk path to the project directory. */ -export const projectDir = path.join(scriptDir, '../..'); +export const projectDir: string = path.join(scriptDir, '../..'); /** * Executes the given command, forwarding stdin, stdout and stderr while diff --git a/scripts/build/package-builder.mts b/scripts/build/package-builder.mts index 2af378825fab..440e3e6e3a54 100644 --- a/scripts/build/package-builder.mts +++ b/scripts/build/package-builder.mts @@ -16,7 +16,7 @@ import sh from 'shelljs'; sh.set('-e'); /** Path to the project directory. */ -export const projectDir = join(dirname(fileURLToPath(import.meta.url)), '../..'); +export const projectDir: string = join(dirname(fileURLToPath(import.meta.url)), '../..'); /** Command that runs Bazel. */ export const bazelCmd = process.env.BAZEL || `yarn -s bazel`; @@ -56,7 +56,7 @@ export function performDefaultSnapshotBuild(): BuiltPackage[] { function buildReleasePackages( distPath: string, isSnapshotBuild: boolean, - additionalTargets: string[] = [] + additionalTargets: string[] = [], ): BuiltPackage[] { console.info('######################################'); console.info(' Building release packages...'); @@ -120,7 +120,7 @@ function getPackageNamesOfTargets(targets: string[]): string[] { if (matches === null) { throw Error( `Found Bazel target with "${releaseTargetTag}" tag, but could not ` + - `determine release output name: ${targetName}` + `determine release output name: ${targetName}`, ); } return matches[1]; diff --git a/scripts/diff-release-package.mts b/scripts/diff-release-package.mts new file mode 100644 index 000000000000..0ddaaddb618f --- /dev/null +++ b/scripts/diff-release-package.mts @@ -0,0 +1,145 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/** + * Script that can be used to compare the local `npm_package` snapshot artifact + * with the snapshot artifact from GitHub at upstream `HEAD`. + * + * This is useful during the `rules_js` migration to verify the npm artifact + * doesn't differ unexpectedly. + * + * Example command: pnpm diff-release-package @angular/cli + */ + +import {GitClient} from '@angular/ng-dev'; +import childProcess from 'node:child_process'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import sh from 'shelljs'; +import {glob} from 'tinyglobby'; + +// Do not remove `.git` as we use Git for comparisons later. +// Also preserve `uniqueId` as it's irrelevant for the diff and not included via Bazel. +// The `README.md` is also put together outside of Bazel, so ignore it too. +const SKIP_FILES = [/^README\.md$/, /^uniqueId$/, /\.map$/]; + +const packageName = process.argv[2]; +if (!packageName) { + console.error('Expected package name to be specified.'); + process.exit(1); +} + +try { + await main(packageName); +} catch (e) { + console.error(e); + process.exitCode = 1; +} + +async function main(packageName: string) { + const bazel = process.env.BAZEL ?? 'bazel'; + const git = await GitClient.get(); + const targetDir = packageName.replace(/^@/g, '').replace(/-/g, '_'); + + const snapshotRepoName = `angular/${packageName}-builds`; + + const tmpDir = await fs.promises.mkdtemp( + path.join(os.tmpdir(), `diff-release-package-${snapshotRepoName.replace(/\//g, '_')}`), + ); + + console.info(`Cloning snapshot repo (${snapshotRepoName}) into ${tmpDir}..`); + git.run(['clone', '--depth=1', `https://github.com/${snapshotRepoName}.git`, tmpDir]); + console.info(`--> Cloned snapshot repo.`); + + const bazelBinDir = childProcess + .spawnSync(bazel, ['info', 'bazel-bin'], { + shell: true, + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'inherit'], + }) + .stdout.trim(); + if (bazelBinDir === '') { + throw new Error('Could not determine bazel-bin directory.'); + } + + const outputPath = path.join(bazelBinDir, 'packages/', targetDir, 'npm_package'); + + // Delete old directory to avoid surprises, or stamping being outdated. + await deleteDir(outputPath); + + childProcess.spawnSync( + bazel, + ['build', `//packages/${targetDir}:npm_package`, '--config=snapshot-build'], + { + shell: true, + stdio: 'inherit', + encoding: 'utf8', + }, + ); + + console.info('--> Built npm package with --config=snapshot-build'); + console.error(`--> Output: ${outputPath}`); + + const removeTasks: Promise<void>[] = []; + for (const subentry of await glob('**/*', { + dot: true, + cwd: tmpDir, + onlyFiles: true, + ignore: ['.git'], + })) { + if (!SKIP_FILES.some((s) => s.test(subentry))) { + continue; + } + + removeTasks.push(fs.promises.rm(path.join(tmpDir, subentry), {maxRetries: 3})); + } + await Promise.all(removeTasks); + + // Stage all removed files that were skipped; to exclude them from the diff. + git.run(['add', '-A'], {cwd: tmpDir}); + git.run(['commit', '-m', 'Delete skipped files for diff'], {cwd: tmpDir}); + + const copyTasks: Promise<void>[] = []; + for (const subentry of await glob('**/*', { + dot: true, + cwd: outputPath, + onlyFiles: true, + ignore: ['.git'], + })) { + if (SKIP_FILES.some((s) => s.test(subentry))) { + continue; + } + + copyTasks.push( + fs.promises.cp(path.join(outputPath, subentry), path.join(tmpDir, subentry), { + recursive: true, + }), + ); + } + await Promise.all(copyTasks); + + git.run(['config', 'core.filemode', 'false'], {cwd: tmpDir}); + + const diff = git.run(['diff', '--color'], {cwd: tmpDir}).stdout; + + console.info('\n\n----- Diff ------'); + console.info(diff); + + await deleteDir(tmpDir); +} + +async function deleteDir(dirPath: string) { + if (!fs.existsSync(dirPath)) { + return; + } + + // Needed as Bazel artifacts are readonly and cannot be deleted otherwise. + sh.chmod('-R', 'u+w', dirPath); + await fs.promises.rm(dirPath, {recursive: true, force: true, maxRetries: 3}); +} diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index d8bd18ae7520..ce366b5cdcbd 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -1,3 +1,4 @@ +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") load("//tools:defaults.bzl", "ts_config") package(default_visibility = ["//visibility:public"]) @@ -13,6 +14,21 @@ ts_config( deps = ["tsconfig.json"], ) +rules_js_tsconfig( + name = "tsconfig_build", + src = "tsconfig.json", + deps = ["//:node_modules/@types/node"], +) + +rules_js_tsconfig( + name = "tsconfig_test", + src = "tsconfig-test.json", + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasmine", + ], +) + platform( name = "rbe_ubuntu1604-angular", parents = ["@rbe_ubuntu1604_angular//config:platform"], diff --git a/tools/bazel/rules_angular_store/BUILD.bazel b/tools/bazel/rules_angular_store/BUILD.bazel new file mode 100644 index 000000000000..e82cbba4f55a --- /dev/null +++ b/tools/bazel/rules_angular_store/BUILD.bazel @@ -0,0 +1,3 @@ +load("@npm2//:defs.bzl", "npm_link_all_packages") + +npm_link_all_packages() diff --git a/tools/bazel/rules_angular_store/README.md b/tools/bazel/rules_angular_store/README.md new file mode 100644 index 000000000000..6eb9ca0aed0a --- /dev/null +++ b/tools/bazel/rules_angular_store/README.md @@ -0,0 +1,3 @@ +This directory will be used for exposing `@angular/compiler-cli` to `rules_angular`. + +A folder structure generated through this `package.json` ensures that transitive dependencies are available at runtime, and module resolution can naturally work. diff --git a/tools/bazel/rules_angular_store/package.json b/tools/bazel/rules_angular_store/package.json new file mode 100644 index 000000000000..9be119720211 --- /dev/null +++ b/tools/bazel/rules_angular_store/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@angular/compiler-cli": "workspace:*" + } +} diff --git a/tools/bazel/ts_project_interop.bzl b/tools/bazel/ts_project_interop.bzl index f9c7552fb269..b5d0f130e44a 100644 --- a/tools/bazel/ts_project_interop.bzl +++ b/tools/bazel/ts_project_interop.bzl @@ -77,7 +77,7 @@ def _ts_project_module_impl(ctx): LinkablePackageInfo( package_name = ctx.attr.module_name, package_path = "", - path = "%s/%s/%s" % (ctx.bin_dir.path, ctx.label.workspace_root, ctx.label.package), + path = "%s/%s" % (ctx.bin_dir.path, ctx.label.package), files = info.sources, ), ) @@ -106,7 +106,8 @@ def ts_project( tsconfig = None, testonly = False, visibility = None, - ignore_strict_deps = False, + # TODO: Enable this for all `ts_project` targets at end of migration. + ignore_strict_deps = True, enable_runtime_rnjs_interop = True, rule_impl = _ts_project, **kwargs): diff --git a/tools/bazel/tsec.bzl b/tools/bazel/tsec.bzl new file mode 100644 index 000000000000..82d7a0dcfcc7 --- /dev/null +++ b/tools/bazel/tsec.bzl @@ -0,0 +1,253 @@ +"""Bazel rules and macros for running tsec over a ng_module or ts_library.""" + +load("@aspect_rules_js//js:providers.bzl", "JsInfo") +load("@bazel_skylib//lib:new_sets.bzl", "sets") +load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test") +load("@build_bazel_rules_nodejs//:providers.bzl", "DeclarationInfo", "NpmPackageInfo") +load("@npm//@bazel/concatjs/internal:ts_config.bzl", "TsConfigInfo") + +TsecInteropSrcs = provider("Sources used by an interop target", fields = ["srcs"]) +TsecTargetInfo = provider("Attributes required for tsec_test to generate tsconfig.json", fields = ["srcs", "deps", "module_name", "paths", "node_modules_root"]) + +def _capture_tsec_attrs_aspect_impl(target, ctx): + """Capture certain attributes of `ts_library` into a TsecTargetInfo provider.""" + + # If we come across a `ts_project`, don't propagate anything. All information + # has to go through the interop targets and the logic below. We just expose + # the real `.ts` sources here. + if ctx.rule.kind == "ts_project": + return [ + TsecInteropSrcs( + srcs = ctx.rule.attr.srcs, + ), + ] + + module_name_from_providers = getattr(target, "module_name", None) + module_name_from_attrs = getattr(ctx.rule.attr, "module_name", None) + module_name = module_name_from_providers if module_name_from_providers else module_name_from_attrs + module_root = getattr(ctx.rule.attr, "module_root", None) + + paths = {} + deps = [] + node_modules_root = None + if module_name: + paths[module_name] = "%s/%s" % (target.label.package, module_root) if module_root else target.label.package + + # Note: We might come across an interop target. Their deps include the RJS deps + # as well. Those might ultimately point to a real `//:node_modules/x` target without + # any `deps` attribute. This is fine as we also get the "rules_nodejs" target; so + # gracefully proceed with an empty set of "deps" then. + for d in getattr(ctx.rule.attr, "deps", []): + if TsecTargetInfo in d: + paths.update(d[TsecTargetInfo].paths) + if DeclarationInfo in d: + deps.append(d[DeclarationInfo].transitive_declarations) + if JsInfo in d: + deps.append(d[JsInfo].transitive_types) + if node_modules_root == None and NpmPackageInfo in d: + node_modules_root = "/".join(["external", d[NpmPackageInfo].workspace, "node_modules"]) + + srcs = getattr(ctx.rule.attr, "srcs", []) + + # If this is an interop target, pull the `srcs` from the underlying `ts_project`. + if ctx.rule.kind == "ts_project_module": + srcs = ctx.rule.attr.dep[TsecInteropSrcs].srcs + + return [ + TsecTargetInfo( + srcs = srcs, + deps = depset(transitive = deps), + module_name = module_name, + paths = paths, + node_modules_root = node_modules_root, + ), + ] + +_capture_tsec_attrs_aspect = aspect( + implementation = _capture_tsec_attrs_aspect_impl, + attr_aspects = ["deps", "dep"], +) + +def _generate_tsconfig(bin_dir_path, target, base_tsconfig, use_runfiles): + tsconfig = {"bazel": True} + pkg_base_dir = "/".join([".."] * len(target.label.package.split("/"))) + + # With runfiles, the location of the source code is the same as the generated .d.ts, i.e., the workspace root. + # Without runfiles, the source code remains in the Bazel package folder in the source tree, so `src_base_dir` + # has to go to the execroot first and further back to the source tree. + src_base_dir = pkg_base_dir if use_runfiles else "/".join([".."] * len(bin_dir_path.split("/")) + [pkg_base_dir]) + + if base_tsconfig: + base = src_base_dir if base_tsconfig.is_source else pkg_base_dir + tsconfig["extends"] = base + "/" + base_tsconfig.short_path + + compiler_options = {"noEmit": True} + compiler_options["baseUrl"] = src_base_dir + + tslib_info = target[TsecTargetInfo] + paths = {} + for name, path in tslib_info.paths.items(): + paths[name] = [path] + paths["%s/*" % name] = ["%s/*" % path] + + if not use_runfiles: + paths[name].append(bin_dir_path + "/" + path) + + node_modules_root = tslib_info.node_modules_root + if node_modules_root != None: + type_roots = [node_modules_root, node_modules_root + "/@types"] + paths["*"] = ["%s/*" % r for r in type_roots] + compiler_options["typeRoots"] = ["%s/%s/*" % (src_base_dir, r) for r in type_roots] + + compiler_options["paths"] = paths + + if not use_runfiles: + compiler_options["rootDirs"] = [src_base_dir, src_base_dir + "/" + bin_dir_path] + + tsconfig["compilerOptions"] = compiler_options + + files = sets.make() + for s in tslib_info.srcs: + if hasattr(s, "files"): + for f in s.files.to_list(): + base = src_base_dir if f.is_source else pkg_base_dir + sets.insert(files, base + "/" + f.short_path) + + for f in tslib_info.deps.to_list(): + # Do not include non-TS files + if f.extension not in ["ts", "tsx"]: + continue + + path = f.short_path + + # Do not include ngc produced files + if path.endswith(".ngfactory.d.ts") or path.endswith(".ngsummary.d.ts"): + continue + + if not use_runfiles and f.owner.workspace_name == "npm": + # For npm hosted source files, we need to go further back two levels + # of directories (workspace and execroot) from `src_base_dir`, and + # then go to node_modules_root (and trim off the redundant "npm" + # segment that exists in both `path` and `node_modules_root`. + base = "../../%s/%s/.." % (src_base_dir, node_modules_root) + else: + base = src_base_dir if f.is_source else pkg_base_dir + + sets.insert(files, base + "/" + path) + + tsconfig["files"] = sets.to_list(files) + + return json.encode(tsconfig) + +TsecTsconfigInfo = provider("Transitive depenedencies of tsconfig for tsec_test", fields = ["files"]) + +def _tsec_config_impl(ctx): + deps = [] + + base_tsconfig_src = None + base = ctx.attr.base + + # Gather all base tsconfig files and the exemption list. + if base: + if TsConfigInfo not in base: + fail("`base` must be a ts_config target") + deps.extend(base[TsConfigInfo].deps) + base_tsconfig_src = ctx.attr.base.files.to_list()[0] + + out = ctx.outputs.out + ts_target = ctx.attr.target + generated_tsconfig_content = _generate_tsconfig( + ctx.bin_dir.path, + ts_target, + base_tsconfig_src, + ctx.attr.use_runfiles, + ) + + ctx.actions.write(output = out, content = generated_tsconfig_content) + + deps.append(out) + + return [DefaultInfo(files = depset(deps))] + +_tsec_config = rule( + implementation = _tsec_config_impl, + attrs = { + "target": attr.label( + mandatory = True, + aspects = [_capture_tsec_attrs_aspect], + doc = """The ts_library target for which the tsconfig is generated.""", + ), + "base": attr.label( + allow_single_file = [".json"], + doc = """Base tsconfig to extend from.""", + ), + "use_runfiles": attr.bool(mandatory = True), + "out": attr.output(mandatory = True), + }, + doc = """Generate the tsconfig.json for a tsec_test. """, +) + +def _all_transitive_deps_impl(ctx): + if TsecTargetInfo not in ctx.attr.target: + fail("`target` must be a ts_library target") + + tslib_info = ctx.attr.target[TsecTargetInfo] + + files = [] + for s in tslib_info.srcs: + if hasattr(s, "files"): + files.extend(s.files.to_list()) + + files.extend(tslib_info.deps.to_list()) + + return [DefaultInfo(files = depset(files))] + +_all_transitive_deps = rule( + implementation = _all_transitive_deps_impl, + attrs = {"target": attr.label(aspects = [_capture_tsec_attrs_aspect])}, + doc = """Expand all transitive dependencies needed to run `_tsec_test`.""", +) + +def tsec_test(name, target, tsconfig, use_runfiles_on_windows = False): + """Run tsec over a ts_library or ng_module target to check its compatibility with Trusted Types. + + This rule DOES NOT check transitive dependencies. + Args: + name: name of the tsec test + target: the ts_library or ng_module target to be checked + tsconfig: the ts_config target used for configuring tsec + use_runfiles_on_windows: whether to force using runfiles on Windows + """ + tsec_tsconfig_name = "%s_tsec_tsconfig" % name + generated_tsconfig = "%s_tsconfig.json" % name + + use_runfiles = use_runfiles_on_windows or select({ + "@platforms//os:windows": False, + "//conditions:default": True, + }) + + _tsec_config( + name = tsec_tsconfig_name, + testonly = True, + tags = ["tsec"], + target = target, + base = tsconfig, + use_runfiles = use_runfiles, + out = generated_tsconfig, + ) + + all_transitive_deps_name = "%s_all_transitive_deps" % name + _all_transitive_deps( + name = all_transitive_deps_name, + testonly = True, + tags = ["tsec"], + target = target, + ) + + nodejs_test( + name = name, + entry_point = Label("@npm//:node_modules/tsec/bin/tsec"), + data = [Label("@npm//tsec"), tsec_tsconfig_name, all_transitive_deps_name, generated_tsconfig], + tags = ["tsec"], + templated_args = ["-p", "$$(rlocation $(rootpath %s))" % generated_tsconfig], + ) diff --git a/tools/circular_dependency_test/BUILD.bazel b/tools/circular_dependency_test/BUILD.bazel deleted file mode 100644 index 2fbfcdf23774..000000000000 --- a/tools/circular_dependency_test/BUILD.bazel +++ /dev/null @@ -1 +0,0 @@ -exports_files(["madge-resolve.config.js"]) diff --git a/tools/circular_dependency_test/index.bzl b/tools/circular_dependency_test/index.bzl deleted file mode 100644 index d499defade2a..000000000000 --- a/tools/circular_dependency_test/index.bzl +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright Google LLC All Rights Reserved. -# -# Use of this source code is governed by an MIT-style license that can be -# found in the LICENSE file at https://angular.dev/license - -load("//tools:defaults.bzl", "nodejs_test") - -MADGE_CONFIG_LABEL = "//tools/circular_dependency_test:madge-resolve.config.js" - -""" - Creates a test target that ensures that no circular dependencies can - be found in the given entry point file. -""" - -def circular_dependency_test(name, deps, entry_point, **kwargs): - nodejs_test( - name = name, - data = ["@npm//madge", MADGE_CONFIG_LABEL] + deps, - entry_point = "@npm//:node_modules/madge/bin/cli.js", - templated_args = [ - "--circular", - "--no-spinner", - # NOTE: We cannot use `$(rootpath)` to resolve labels. This is because `ts_library` - # does not pre-declare outputs in the rule. Hence, the outputs cannot be referenced - # through labels (i.e. `//packages/core:index.js`). Read more here: - # https://docs.bazel.build/versions/2.0.0/skylark/rules.html#outputs - # TODO: revisit once https://github.com/bazelbuild/rules_nodejs/issues/1563 is solved. - "$$(rlocation %s)" % entry_point, - # Madge supports custom module resolution, but expects a configuration file - # similar to a webpack configuration file setting the `resolve` option. - "--webpack-config", - "$$(rlocation $(rootpath %s))" % MADGE_CONFIG_LABEL, - ], - testonly = 1, - expected_exit_code = 0, - **kwargs - ) diff --git a/tools/circular_dependency_test/madge-resolve.config.js b/tools/circular_dependency_test/madge-resolve.config.js deleted file mode 100644 index 980cc59496e0..000000000000 --- a/tools/circular_dependency_test/madge-resolve.config.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -/** - * Custom resolution plugin for webpack's `resolve-enhanced` package that is used by - * Madge for resolving imports. The plugin extends the resolution by leveraging the - * runfile resolution and module mappings handled in the module info aspect. - */ -class BazelRunfileResolutionPlugin { - apply(resolver) { - resolver.plugin('module', (request, callback) => { - try { - // Resolve the module through the `require.resolve` method which has been patched - // in the Bazel NodeJS loader to respect runfiles and module mappings. This allows - // Madge to handle module mappings specified in `ts_library` and `ng_module` targets. - const resolvedPath = require.resolve(request.request); - // Update the request to refer to the runfile resolved file path. - resolver.doResolve('resolve', {...request, request: resolvedPath}, null, callback, true); - return; - } catch {} - // If the file could not be resolved through Bazel's runfile resolution, proceed - // with the default module resolvers. - callback(); - }); - } -} - -// Configures a plugin which ensures that Madge can properly resolve specified -// dependencies through their configured module names. -module.exports = { - resolve: {plugins: [new BazelRunfileResolutionPlugin()]}, -}; diff --git a/tools/defaults.bzl b/tools/defaults.bzl index 796c506c3b9e..28bcf97559e7 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -15,12 +15,12 @@ load("@npm//@bazel/jasmine:index.bzl", _jasmine_node_test = "jasmine_node_test") load("@npm//@bazel/protractor:index.bzl", _protractor_web_test_suite = "protractor_web_test_suite") load("@npm//@bazel/rollup:index.bzl", _rollup_bundle = "rollup_bundle") load("@npm//@bazel/terser:index.bzl", "terser_minified") -load("@npm//tsec:index.bzl", _tsec_test = "tsec_test") load("@npm//typescript:index.bzl", "tsc") load("@rules_pkg//:pkg.bzl", "pkg_tar") load("//adev/shared-docs/pipeline/api-gen:generate_api_docs.bzl", _generate_api_docs = "generate_api_docs") load("//packages/bazel:index.bzl", _ng_module = "ng_module", _ng_package = "ng_package") load("//tools/bazel:module_name.bzl", "compute_module_name") +load("//tools/bazel:tsec.bzl", _tsec_test = "tsec_test") load("//tools/esm-interop:index.bzl", "enable_esm_node_module_loader", _nodejs_binary = "nodejs_binary", _nodejs_test = "nodejs_test") _DEFAULT_TSCONFIG_TEST = "//packages:tsconfig-test" @@ -484,12 +484,17 @@ def jasmine_node_test(name, srcs = [], data = [], bootstrap = [], env = {}, **kw bootstrap = bootstrap, ) + extra_data = [] + + if native.package_name().startswith("packages/"): + extra_data.append("//packages:package_json") + _jasmine_node_test( name = name, srcs = [":%s_spec_entrypoint.spec" % name], # Note: `deps`, `srcs` and `bootstrap` are explicitly added here as otherwise their linker # mappings may not be discovered, given the `bootstrap` attr not being covered by the aspect. - data = data + deps + srcs + bootstrap, + data = extra_data + data + deps + srcs + bootstrap, use_direct_specs = True, configuration_env_vars = configuration_env_vars, env = env, diff --git a/tools/defaults2.bzl b/tools/defaults2.bzl index fdc86c74bb27..5bf0498bfd84 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.bzl @@ -1,7 +1,25 @@ +load("@aspect_rules_jasmine//jasmine:defs.bzl", _jasmine_test = "jasmine_test") +load("@aspect_rules_js//npm:defs.bzl", _npm_package = "npm_package") +load("@aspect_rules_ts//ts:defs.bzl", _ts_config = "ts_config") load("@rules_angular//src/ng_project:index.bzl", _ng_project = "ng_project") load("//tools/bazel:module_name.bzl", "compute_module_name") load("//tools/bazel:ts_project_interop.bzl", _ts_project = "ts_project") +npm_package = _npm_package +ts_config = _ts_config + +def _determine_tsconfig(testonly): + if native.package_name().startswith("packages/compiler-cli/src/ngtsc"): + return "//packages/compiler-cli:tsconfig_test" if testonly else "//packages/compiler-cli:tsconfig_build" + + if native.package_name().startswith("packages/service-worker"): + return "//packages:tsconfig_test" if testonly else "//packages/service-worker:tsconfig_build" + + if native.package_name().startswith("packages"): + return "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" + + fail("Failing... a tsconfig value must be provided.") + def ts_project( name, source_map = True, @@ -10,8 +28,8 @@ def ts_project( **kwargs): module_name = kwargs.pop("module_name", compute_module_name(testonly)) - if tsconfig == None and native.package_name().startswith("packages"): - tsconfig = "//packages:test-tsconfig" if testonly else "//packages:build-tsconfig" + if tsconfig == None: + tsconfig = _determine_tsconfig(testonly) _ts_project( name, @@ -30,8 +48,9 @@ def ng_project( **kwargs): module_name = kwargs.pop("module_name", compute_module_name(testonly)) - if tsconfig == None and native.package_name().startswith("packages"): - tsconfig = "//packages:test-tsconfig" if testonly else "//packages:build-tsconfig" + if tsconfig == None: + tsconfig = _determine_tsconfig(testonly) + _ts_project( name, source_map = source_map, @@ -41,3 +60,24 @@ def ng_project( tsconfig = tsconfig, **kwargs ) + +def jasmine_test(name, data = [], args = [], **kwargs): + # Create relative path to root, from current package dir. Necessary as + # we change the `chdir` below to the package directory. + relative_to_root = "/".join([".."] * len(native.package_name().split("/"))) + + _jasmine_test( + name = name, + node_modules = "//:node_modules", + chdir = native.package_name(), + fixed_args = [ + "--require=%s/node_modules/source-map-support/register.js" % relative_to_root, + "**/*spec.js", + "**/*spec.mjs", + "**/*spec.cjs", + ] + args, + data = data + [ + "//:node_modules/source-map-support", + ], + **kwargs + ) diff --git a/tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-d30a56c19bafaac67cf44e605ed8c2c0e45b0a51.patch b/tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65.patch similarity index 79% rename from tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-d30a56c19bafaac67cf44e605ed8c2c0e45b0a51.patch rename to tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65.patch index 052fd25616f8..a32d6ec0f192 100644 --- a/tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-d30a56c19bafaac67cf44e605ed8c2c0e45b0a51.patch +++ b/tools/esm-interop/patches/npm/@angular+build-tooling+0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65.patch @@ -6,7 +6,7 @@ index 6cee158..815a55d 100755 load("@npm//@angular/build-tooling/bazel:extract_types.bzl", "extract_types") -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary", "nodejs_test") +load("@angular//tools/esm-interop:index.bzl", "nodejs_binary", "nodejs_test") - + nodejs_test_args = [ # Needed so that node doesn't walk back to the source directory. diff --git a/node_modules/@angular/build-tooling/bazel/app-bundling/BUILD.bazel b/node_modules/@angular/build-tooling/bazel/app-bundling/BUILD.bazel @@ -16,32 +16,35 @@ index 1c27a95..c239203 100755 @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +load("@angular//tools/esm-interop:index.bzl", "nodejs_binary") - + package(default_visibility = ["//visibility:public"]) - -diff --git a/node_modules/@angular/build-tooling/bazel/app-bundling/esbuild.config-tmpl.mjs b/node_modules/@angular/build-tooling/bazel/app-bundling/esbuild.config-tmpl.mjs -index 81e67de..d1c1ac0 100755 ---- a/node_modules/@angular/build-tooling/bazel/app-bundling/esbuild.config-tmpl.mjs -+++ b/node_modules/@angular/build-tooling/bazel/app-bundling/esbuild.config-tmpl.mjs -@@ -7,7 +7,7 @@ - */ - - import {createEsbuildAngularOptimizePlugin} from '@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs'; --import {GLOBAL_DEFS_FOR_TERSER_WITH_AOT} from '@angular/compiler-cli/private/tooling'; -+import {GLOBAL_DEFS_FOR_TERSER_WITH_AOT} from '@angular/compiler-cli/private/tooling.mjs'; - import * as path from 'path'; - - /** Root path pointing to the app bundle source entry-point file. */ + diff --git a/node_modules/@angular/build-tooling/bazel/app-bundling/index.bzl b/node_modules/@angular/build-tooling/bazel/app-bundling/index.bzl -index d6249b8..761d50a 100755 +index d6249b8..707ae39 100755 --- a/node_modules/@angular/build-tooling/bazel/app-bundling/index.bzl +++ b/node_modules/@angular/build-tooling/bazel/app-bundling/index.bzl -@@ -64,7 +64,7 @@ def app_bundle( +@@ -4,11 +4,11 @@ + # found in the LICENSE file at https://angular.io/license + + load("@build_bazel_rules_nodejs//:index.bzl", "npm_package_bin") +-load("@npm//@bazel/terser:index.bzl", "terser_minified") +-load("@npm//prettier:index.bzl", "prettier") +-load("@npm//@angular/build-tooling/bazel/esbuild:index.bzl", "esbuild", "esbuild_config") + load("@npm//@angular/build-tooling/bazel:expand_template.bzl", "expand_template") + load("@npm//@angular/build-tooling/bazel:filter_outputs.bzl", "filter_outputs") ++load("@npm//@angular/build-tooling/bazel/esbuild:index.bzl", "esbuild", "esbuild_config") ++load("@npm//@bazel/terser:index.bzl", "terser_minified") ++load("@npm//prettier:index.bzl", "prettier") + + def _create_esbuild_minify_options(debug = False): + # The minify options match with the configuration used by the CLI. The whitespace +@@ -64,7 +64,8 @@ def app_bundle( name = "%s_esbuild_config" % name, config_file = ":%s_config_file" % name, deps = [ - "@npm//@angular/compiler-cli", -+ "@angular//packages/compiler-cli/private", ++ "@angular//packages/compiler", ++ "@angular//packages/compiler-cli:npm_package", "@npm//@angular/build-tooling/shared-scripts/angular-optimization:js_lib", ], **common_base_attributes @@ -59,7 +62,7 @@ index 8bfab84..e52327d 100755 @@ -7,7 +6,7 @@ load("@npm//@bazel/protractor:index.bzl", "protractor_web_test_suite") unless explicitly requested. """ - + -def benchmark_test(name, server, tags = [], **kwargs): +def benchmark_test(name, server, tags = [], data = [], **kwargs): protractor_web_test_suite( @@ -85,7 +88,7 @@ index a8d1947..5a5e37f 100755 +load("@angular//tools:defaults.bzl", "ng_module") load("@npm//@angular/build-tooling/bazel:defaults.bzl", "ts_library") load(":benchmark_test.bzl", "benchmark_test") - + @@ -37,8 +37,8 @@ def component_benchmark( driver_deps, ng_srcs, @@ -103,7 +106,7 @@ index a8d1947..5a5e37f 100755 # repository with its corresponding source target that does not come with any typings. - ng_bundle_deps.append("@npm//zone.js") + ng_bundle_deps.append("@angular//packages/zone.js:npm_package") - + if not assets: html = prefix + "index.html" diff --git a/node_modules/@angular/build-tooling/bazel/http-server/BUILD.bazel b/node_modules/@angular/build-tooling/bazel/http-server/BUILD.bazel @@ -114,7 +117,7 @@ index 3a85025..12a2c55 100755 -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary") +load("@angular//tools/esm-interop:index.bzl", "nodejs_binary") load("@npm//@angular/build-tooling/bazel:defaults.bzl", "ts_library") - + package(default_visibility = ["//visibility:public"]) diff --git a/node_modules/@angular/build-tooling/bazel/integration/index.bzl b/node_modules/@angular/build-tooling/bazel/integration/index.bzl index 6f99d65..1bd5183 100755 @@ -123,7 +126,7 @@ index 6f99d65..1bd5183 100755 @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test") +load("@angular//tools/esm-interop:index.bzl", "nodejs_test") - + def _serialize_file(file): """Serializes a file into a struct that matches the `BazelFileInfo` type in the diff --git a/node_modules/@angular/build-tooling/bazel/map-size-tracking/index.bzl b/node_modules/@angular/build-tooling/bazel/map-size-tracking/index.bzl @@ -133,12 +136,12 @@ index af0f305..ce46302 100755 @@ -3,7 +3,7 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.io/license - + -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary", "nodejs_test") +load("@angular//tools/esm-interop:index.bzl", "nodejs_binary", "nodejs_test") - + nodejs_args = ["--nobazel_run_linker"] - + diff --git a/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/BUILD.bazel b/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/BUILD.bazel index b2729ad..80ab926 100755 --- a/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/BUILD.bazel @@ -148,23 +151,8 @@ index b2729ad..80ab926 100755 deps = [ "@npm//@angular/build", - "@npm//@angular/compiler-cli", -+ "@angular//packages/compiler-cli", -+ "@angular//packages/compiler-cli/linker/babel", ++ "@angular//packages/compiler", ++ "@angular//packages/compiler-cli:npm_package", "@npm//@babel/core", "@npm//@babel/plugin-proposal-async-generator-functions", ], -diff --git a/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs b/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs -index e79184b..da9e479 100755 ---- a/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs -+++ b/node_modules/@angular/build-tooling/shared-scripts/angular-optimization/esbuild-plugin.mjs -@@ -29,8 +29,8 @@ export async function createEsbuildAngularOptimizePlugin(opts, additionalBabelPl - - if (opts.enableLinker) { - linkerCreator = { -- compiler: await import('@angular/compiler-cli'), -- babel: await import('@angular/compiler-cli/linker/babel'), -+ compiler: await import('@angular/compiler-cli/index.mjs'), -+ babel: await import('@angular/compiler-cli/linker/babel/index.mjs'), - }; - } - diff --git a/tools/manual_api_docs/BUILD.bazel b/tools/manual_api_docs/BUILD.bazel index c7ed56acea36..0ffcd1b9c32b 100644 --- a/tools/manual_api_docs/BUILD.bazel +++ b/tools/manual_api_docs/BUILD.bazel @@ -1,37 +1,46 @@ -load("//tools:defaults.bzl", "nodejs_binary", "ts_library") +load("@aspect_rules_js//js:defs.bzl", "js_binary") +load("//tools:defaults2.bzl", "ts_config", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_config( + name = "tsconfig_build", + src = "tsconfig.json", + deps = ["//tools:tsconfig_build"], +) + +ts_project( name = "generate_element_api_json_lib", - srcs = ["generate_element_api_json.ts"], + srcs = ["generate_element_api_json.mts"], + tsconfig = ":tsconfig_build", deps = [ - "//packages/compiler-cli", - "@npm//@types/node", + "//:node_modules/@types/node", + "//packages/compiler-cli/src/ngtsc/docs:docs_rjs", ], ) -nodejs_binary( +js_binary( name = "generate_element_api_json", data = [ - ":generate_element_api_json_lib", + ":generate_element_api_json_lib_rjs", ], - entry_point = ":generate_element_api_json.ts", + entry_point = ":generate_element_api_json.mjs", ) -ts_library( +ts_project( name = "generate_block_api_json_lib", - srcs = ["generate_block_api_json.ts"], + srcs = ["generate_block_api_json.mts"], + tsconfig = ":tsconfig_build", deps = [ - "//packages/compiler-cli", - "@npm//@types/node", + "//:node_modules/@types/node", + "//packages/compiler-cli/src/ngtsc/docs:docs_rjs", ], ) -nodejs_binary( +js_binary( name = "generate_block_api_json", data = [ - ":generate_block_api_json_lib", + ":generate_block_api_json_lib_rjs", ], - entry_point = ":generate_block_api_json.ts", + entry_point = ":generate_block_api_json.mjs", ) diff --git a/tools/manual_api_docs/generate_block_api_json.bzl b/tools/manual_api_docs/generate_block_api_json.bzl index 668a9124b399..00a01edcd661 100644 --- a/tools/manual_api_docs/generate_block_api_json.bzl +++ b/tools/manual_api_docs/generate_block_api_json.bzl @@ -25,6 +25,11 @@ def _generate_block_api_json(ctx): executable = "_generate_block_api_json", outputs = [manifest], arguments = [args], + env = { + # Note: This rule access source files directly, without copying them over. + # Hence we don't need to change the working directory to the bazel-bin. + "BAZEL_BINDIR": ".", + }, ) # The return value describes what the rule is producing. In this case we need to specify diff --git a/tools/manual_api_docs/generate_block_api_json.ts b/tools/manual_api_docs/generate_block_api_json.mts similarity index 74% rename from tools/manual_api_docs/generate_block_api_json.ts rename to tools/manual_api_docs/generate_block_api_json.mts index a6bc6c7f3396..0e4b780d794d 100644 --- a/tools/manual_api_docs/generate_block_api_json.ts +++ b/tools/manual_api_docs/generate_block_api_json.mts @@ -6,13 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DocEntry, DocEntryWithSourceInfo, EntryType} from '@angular/compiler-cli'; +import type { + DocEntry, + DocEntryWithSourceInfo, + EntryType, +} from '@angular/compiler-cli/src/ngtsc/docs'; import {readFileSync, writeFileSync} from 'fs'; -import {basename} from 'path'; +import {basename, join} from 'path'; function main() { - const [paramFilePath] = process.argv.slice(2); - const rawParamLines = readFileSync(paramFilePath, {encoding: 'utf8'}).split('\n'); + const [paramFileExecPath] = process.argv.slice(2); + const paramFileAbsolutePath = join(process.env.JS_BINARY__EXECROOT!, paramFileExecPath); + + const rawParamLines = readFileSync(paramFileAbsolutePath, {encoding: 'utf8'}).split('\n'); const [srcs, outputFileExecRootRelativePath] = rawParamLines; const developerPreview = [{'name': 'developerPreview', 'comment': ''}]; @@ -25,7 +31,7 @@ function main() { return { name: `@${basename(sourceFilePath, '.md')}`, - entryType: EntryType.Block, + entryType: 'block' as EntryType.Block, description: filteredContent, rawComment: filteredContent, source: { diff --git a/tools/manual_api_docs/generate_element_api_json.bzl b/tools/manual_api_docs/generate_element_api_json.bzl index 0bae6e1fd50f..0690664b9290 100644 --- a/tools/manual_api_docs/generate_element_api_json.bzl +++ b/tools/manual_api_docs/generate_element_api_json.bzl @@ -25,6 +25,11 @@ def _generate_element_api_json(ctx): executable = "_generate_element_api_json", outputs = [manifest], arguments = [args], + env = { + # Note: This rule access source files directly, without copying them over. + # Hence we don't need to change the working directory to the bazel-bin. + "BAZEL_BINDIR": ".", + }, ) # The return value describes what the rule is producing. In this case we need to specify diff --git a/tools/manual_api_docs/generate_element_api_json.ts b/tools/manual_api_docs/generate_element_api_json.mts similarity index 71% rename from tools/manual_api_docs/generate_element_api_json.ts rename to tools/manual_api_docs/generate_element_api_json.mts index 1e95ad2fe333..1e2188289f29 100644 --- a/tools/manual_api_docs/generate_element_api_json.ts +++ b/tools/manual_api_docs/generate_element_api_json.mts @@ -6,13 +6,15 @@ * found in the LICENSE file at https://angular.dev/license */ -import {DocEntry, EntryType} from '@angular/compiler-cli'; +import type {DocEntry, EntryType} from '@angular/compiler-cli/src/ngtsc/docs'; import {readFileSync, writeFileSync} from 'fs'; -import {basename} from 'path'; +import {basename, join} from 'path'; function main() { - const [paramFilePath] = process.argv.slice(2); - const rawParamLines = readFileSync(paramFilePath, {encoding: 'utf8'}).split('\n'); + const [paramFileExecPath] = process.argv.slice(2); + const paramFileAbsolutePath = join(process.env.JS_BINARY__EXECROOT!, paramFileExecPath); + + const rawParamLines = readFileSync(paramFileAbsolutePath, {encoding: 'utf8'}).split('\n'); const [srcs, outputFileExecRootRelativePath] = rawParamLines; const entries: DocEntry[] = srcs.split(',').map((sourceFilePath) => { @@ -25,7 +27,7 @@ function main() { startLine: 0, endLine: 0, }, - entryType: EntryType.Element, + entryType: 'element' as EntryType.Element, description: fileContent, rawComment: fileContent, jsdocTags: [], diff --git a/tools/manual_api_docs/tsconfig.json b/tools/manual_api_docs/tsconfig.json new file mode 100644 index 000000000000..2a48677b2f6d --- /dev/null +++ b/tools/manual_api_docs/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + // Note: We use `bundler` here because compiler-cli is understood as ESM, but + // there are no explicit extensions. This is invalid. For our type-only usage this + // is fine. + "module": "ESNext", + "moduleResolution": "bundler", + "paths": { + "@angular/compiler-cli/*": ["../../packages/compiler-cli/*"] + } + } +} diff --git a/tools/symbol-extractor/BUILD.bazel b/tools/symbol-extractor/BUILD.bazel index c85fab648079..ca07e5d39811 100644 --- a/tools/symbol-extractor/BUILD.bazel +++ b/tools/symbol-extractor/BUILD.bazel @@ -1,8 +1,9 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "lib", testonly = True, srcs = glob( @@ -12,25 +13,26 @@ ts_library( "**/*_spec", ], ), + tsconfig = "//tools:tsconfig_build", deps = [ - "//packages:types", - "@npm//@bazel/runfiles", - "@npm//typescript", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/jasmine", + "//:node_modules/typescript", ], ) -ts_library( +ts_project( name = "test_lib", testonly = 1, srcs = glob( ["**/*_spec.ts"], exclude = ["symbol_extractor_spec/**"], ), + tsconfig = "//tools:tsconfig_test", deps = [ - ":lib", - "//packages:types", - "@npm//@bazel/runfiles", - "@npm//typescript", + ":lib_rjs", + "//:node_modules/@bazel/runfiles", + "//:node_modules/typescript", ], ) diff --git a/tools/symbol-extractor/index.bzl b/tools/symbol-extractor/index.bzl index af761d7fc250..9da4b2f5107d 100644 --- a/tools/symbol-extractor/index.bzl +++ b/tools/symbol-extractor/index.bzl @@ -3,7 +3,7 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("//tools:defaults.bzl", "nodejs_binary", "nodejs_test") +load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_test") """ This test verifies that a set of top level symbols from a javascript file match a gold file. @@ -13,27 +13,26 @@ def js_expected_symbol_test(name, src, golden, data = [], **kwargs): """This test verifies that a set of top level symbols from a javascript file match a gold file. """ all_data = data + [ - Label("//tools/symbol-extractor:lib"), - Label("@npm//typescript"), + Label("//tools/symbol-extractor:lib_rjs"), src, golden, ] - entry_point = "//tools/symbol-extractor:cli.ts" + entry_point = "//tools/symbol-extractor:cli.js" - nodejs_test( + js_test( name = name, data = all_data, entry_point = entry_point, tags = kwargs.pop("tags", []) + ["symbol_extractor"], - templated_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden], + fixed_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden], **kwargs ) - nodejs_binary( + js_binary( name = name + ".accept", testonly = True, data = all_data, entry_point = entry_point, - templated_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden, "--accept"], + fixed_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden, "--accept"], **kwargs ) diff --git a/tools/symbol-extractor/symbol_extractor.ts b/tools/symbol-extractor/symbol_extractor.ts index f44bb9b9d2c1..f9266f8f5ce5 100644 --- a/tools/symbol-extractor/symbol_extractor.ts +++ b/tools/symbol-extractor/symbol_extractor.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// <reference types="jasmine" /> + import ts from 'typescript'; export class SymbolExtractor { diff --git a/tools/symbol-extractor/symbol_extractor_spec.ts b/tools/symbol-extractor/symbol_extractor_spec.ts index 621af63213c4..955270fba8b2 100644 --- a/tools/symbol-extractor/symbol_extractor_spec.ts +++ b/tools/symbol-extractor/symbol_extractor_spec.ts @@ -49,7 +49,7 @@ describe('scenarios', () => { it('should properly capture classes in TypeScript ES2015 class output', () => { const jsFileContent = fs.readFileSync( runfiles.resolve( - 'angular/tools/symbol-extractor/symbol_extractor_spec/es2015_class_output.mjs', + 'angular/tools/symbol-extractor/symbol_extractor_spec/es2015_class_output.js', ), 'utf8', ); diff --git a/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel b/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel index 220b271b7728..0640b52a36d4 100644 --- a/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel +++ b/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel @@ -1,16 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( - name = "es2015_class_output_lib", - srcs = ["es2015_class_output.ts"], -) - -filegroup( +ts_project( name = "es2015_class_output", - srcs = [":es2015_class_output_lib"], - output_group = "es6_sources", + srcs = ["es2015_class_output.ts"], + tsconfig = "tsconfig.json", ) filegroup( diff --git a/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json b/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json new file mode 100644 index 000000000000..c12cbba737a9 --- /dev/null +++ b/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "strict": true, + "module": "ESNext", + "target": "ES2022", + "sourceMap": true, + "declaration": true + } +} diff --git a/tools/testing/BUILD.bazel b/tools/testing/BUILD.bazel index 7e85d417128d..9f8dc8a79db5 100644 --- a/tools/testing/BUILD.bazel +++ b/tools/testing/BUILD.bazel @@ -73,6 +73,7 @@ jasmine_node_test( name = "fail_bootstrap_test", srcs = ["fail.spec.js"], bootstrap = ["//tools/testing:node"], + data = ["//packages:package_json"], # While we force the termination of the process with an exitCode of 55 in fail.spec.js. Jasmine force it to 4. # see: https://github.com/jasmine/jasmine-npm/blob/eea8b26efe29176ecbb26ce3f1c4990f8bede685/lib/jasmine.js#L213 expected_exit_code = 4, diff --git a/tools/tsconfig-test.json b/tools/tsconfig-test.json index 597fbd2909ce..d022089a5513 100644 --- a/tools/tsconfig-test.json +++ b/tools/tsconfig-test.json @@ -1,9 +1,6 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "types": [ - "node", - "jasmine" - ] - }, -} \ No newline at end of file + "types": ["node", "jasmine"] + } +} diff --git a/tools/tsconfig.json b/tools/tsconfig.json index b234e0e3f4a0..875ddffe9a7b 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -1,40 +1,12 @@ { - // This tsconfig is only used by IDEs, no actual builds. "compilerOptions": { - "baseUrl": ".", + "strict": true, + "skipLibCheck": true, "declaration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "module": "commonjs", "esModuleInterop": true, - "moduleResolution": "node", - "outDir": "../dist/tools/", - "noImplicitAny": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@angular/*": ["../packages/*"] - }, - "rootDirs": [".", ".."], "sourceMap": true, - "inlineSources": true, - "lib": [ - "es6", - "dom" - ], - "target": "es5", - "skipLibCheck": true, - "types": [ - "node" - ] - }, - "exclude": [ - "testing", - "node_modules", - "typings-test", - "public_api_guard", - "docs" - ], - "bazelOptions": { - "suppressTsconfigOverrideWarnings": true + "module": "NodeNext", + "moduleResolution": "nodenext", + "types": ["node"] } } diff --git a/tools/tslint/noExportedInferredCallTypeRule.ts b/tools/tslint/noExportedInferredCallTypeRule.ts new file mode 100644 index 000000000000..8057124ec09d --- /dev/null +++ b/tools/tslint/noExportedInferredCallTypeRule.ts @@ -0,0 +1,57 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import {Replacement, RuleFailure} from 'tslint/lib'; +import {AbstractRule, TypedRule} from 'tslint/lib/rules'; +import {Rule as TypedefRule} from 'tslint/lib/rules/typedefRule'; +import ts from 'typescript'; + +/** + * Rule that ensures ("best effort") that exported constants are having + * an explicit type if they would otherwise rely on a synthetically inserted + * type that is inferred from a function call. E.g. + * + * ```ts + * export const myLoader = createImageLoader(); // Wrong! + * export const myLoader: ImageLoader<X> = createImageLoader(); // Correct! + * ``` + */ +export class Rule extends TypedRule { + override applyWithProgram(sourceFile: ts.SourceFile, program: ts.Program): RuleFailure[] { + const checker = program.getTypeChecker(); + + return this.applyWithFunction(sourceFile, (ctx) => { + for (const st of sourceFile.statements) { + if ( + !ts.isVariableStatement(st) || + !(st.modifiers ?? []).some((s) => s.kind === ts.SyntaxKind.ExportKeyword) + ) { + continue; + } + + for (const decl of st.declarationList.declarations) { + if ( + decl.initializer !== undefined && + ts.isCallExpression(decl.initializer) && + decl.type === undefined + ) { + const inferredType = checker.getTypeAtLocation(decl.name); + const typeStr = checker.typeToString(inferredType, decl); + + ctx.addFailureAtNode( + decl, + 'No explicit type. Inferred types can cause unexpected issues. ' + + 'Please add an explicit type.', + Replacement.appendText(decl.name.end, `: ${typeStr}`), + ); + } + } + } + }); + } +} diff --git a/tslint.json b/tslint.json index e498369e72eb..ec8c22c202ef 100644 --- a/tslint.json +++ b/tslint.json @@ -11,6 +11,7 @@ // that rules written in TypeScript can be loaded without needing to be transpiled. "ts-node-loader": true, // Custom rules written in TypeScript. + "no-exported-inferred-call-type": true, "require-internal-with-underscore": true, "no-implicit-override-abstract": true, "validate-import-for-esm-cjs-interop": [ @@ -77,7 +78,10 @@ "name": ["*", "getMutableClone"], "message": "Use a ts.factory.update* or ts.factory.create* method instead." }, - {"name": ["performance", "mark"], "message": "`performance` methods aren't not fully supported in all environments like JSDOM and Cloudflare workers. Use 'performanceMark' from '@angular/core' instead."} + { + "name": ["performance", "mark"], + "message": "`performance` methods aren't not fully supported in all environments like JSDOM and Cloudflare workers. Use 'performanceMark' from '@angular/core' instead." + } ] }, "jsRules": { diff --git a/yarn.lock b/yarn.lock index 4e4d2f3ebc3a..0b3ddb1bd538 100644 --- a/yarn.lock +++ b/yarn.lock @@ -164,13 +164,13 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@angular-devkit/architect-cli@0.2000.0-next.9": - version "0.2000.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect-cli/-/architect-cli-0.2000.0-next.9.tgz#c4b536fc28775260ac8ebb3ee5ffac9cbe4d6db0" - integrity sha512-dRi3075GrtDJUoNQNa1mRVosniyW2uCw7iP/oBd+qVTLqL5LzfXiO84nmrRQy9TSTjQdOLM63yWMxhfnw+J9gw== +"@angular-devkit/architect-cli@0.2000.0-rc.0": + version "0.2000.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect-cli/-/architect-cli-0.2000.0-rc.0.tgz#2c09a2b90ea6b418802a175ba3b9b39a4bed80e8" + integrity sha512-inyeokdQI83zVY9n07dOTPLotDb+wSnC6+Cj/2pkfug1aVBq1bC+lZKrHO2BMkaWaXwrusTBJ0ikgxqKSh90GQ== dependencies: - "@angular-devkit/architect" "0.2000.0-next.9" - "@angular-devkit/core" "20.0.0-next.9" + "@angular-devkit/architect" "0.2000.0-rc.0" + "@angular-devkit/core" "20.0.0-rc.0" ansi-colors "4.1.3" progress "2.0.3" yargs-parser "21.1.1" @@ -183,35 +183,35 @@ "@angular-devkit/core" "19.1.0-rc.0" rxjs "7.8.1" -"@angular-devkit/architect@0.2000.0-next.9": - version "0.2000.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2000.0-next.9.tgz#669fb0755aeaf008706f0b912f66c78ac4b9f2e3" - integrity sha512-YR6AbJTbArhTwNrUYxj52+PH6FFQMPfxIILGqC/ywfrQdU0218sLocfkpGS6FnSNcdgXdzKSZyuWGB+3SSpY0Q== +"@angular-devkit/architect@0.2000.0-rc.0": + version "0.2000.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2000.0-rc.0.tgz#839ecd08bbcd8b38f2eb20b2de635ece6dd5b74c" + integrity sha512-O3sVOvEou7+d0YbIE/OzHs6EU/xrHjSwi3z1djyNSJflhwTe6qyY4wdzdggwWt6z6iS5sLsMolsnhR6hYfuK+A== dependencies: - "@angular-devkit/core" "20.0.0-next.9" + "@angular-devkit/core" "20.0.0-rc.0" rxjs "7.8.2" -"@angular-devkit/build-angular@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-20.0.0-next.9.tgz#1e8912a538aa2ce9cc57c18d37d2b2fe115c528b" - integrity sha512-ZST69xXPunUFaosiGwaE6xwEn/y1+dv5z+SMbSArLupqLCZO+J8orOTIxd30fqBPrGCBPY7u3AjIUzPkYQtHFQ== +"@angular-devkit/build-angular@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-20.0.0-rc.0.tgz#22e9c357d93e28a81af1f2ec5d0286bb274f867e" + integrity sha512-dFiKXZTPV2Uiq938eHSxepCrZKPY3ZbS3L08Q6bgPTInq1hFIceaVty7Ujq90PD6DYEaY3bGKv+aynN8occcCw== dependencies: "@ampproject/remapping" "2.3.0" - "@angular-devkit/architect" "0.2000.0-next.9" - "@angular-devkit/build-webpack" "0.2000.0-next.9" - "@angular-devkit/core" "20.0.0-next.9" - "@angular/build" "20.0.0-next.9" - "@babel/core" "7.26.10" - "@babel/generator" "7.27.0" - "@babel/helper-annotate-as-pure" "7.25.9" + "@angular-devkit/architect" "0.2000.0-rc.0" + "@angular-devkit/build-webpack" "0.2000.0-rc.0" + "@angular-devkit/core" "20.0.0-rc.0" + "@angular/build" "20.0.0-rc.0" + "@babel/core" "7.27.1" + "@babel/generator" "7.27.1" + "@babel/helper-annotate-as-pure" "7.27.1" "@babel/helper-split-export-declaration" "7.24.7" - "@babel/plugin-transform-async-generator-functions" "7.26.8" - "@babel/plugin-transform-async-to-generator" "7.25.9" - "@babel/plugin-transform-runtime" "7.26.10" - "@babel/preset-env" "7.26.9" - "@babel/runtime" "7.27.0" + "@babel/plugin-transform-async-generator-functions" "7.27.1" + "@babel/plugin-transform-async-to-generator" "7.27.1" + "@babel/plugin-transform-runtime" "7.27.1" + "@babel/preset-env" "7.27.2" + "@babel/runtime" "7.27.1" "@discoveryjs/json-ext" "0.6.3" - "@ngtools/webpack" "20.0.0-next.9" + "@ngtools/webpack" "20.0.0-rc.0" "@vitejs/plugin-basic-ssl" "2.0.0" ansi-colors "4.1.3" autoprefixer "10.4.21" @@ -219,21 +219,21 @@ browserslist "^4.21.5" copy-webpack-plugin "13.0.0" css-loader "7.1.2" - esbuild-wasm "0.25.3" + esbuild-wasm "0.25.4" fast-glob "3.3.3" http-proxy-middleware "3.0.5" istanbul-lib-instrument "6.0.3" jsonc-parser "3.3.1" karma-source-map-support "1.4.0" less "4.3.0" - less-loader "12.2.0" + less-loader "12.3.0" license-webpack-plugin "4.0.2" loader-utils "3.3.1" mini-css-extract-plugin "2.9.2" - open "10.1.1" + open "10.1.2" ora "5.4.1" picomatch "4.0.2" - piscina "4.9.2" + piscina "5.0.0" postcss "8.5.3" postcss-loader "8.1.1" resolve-url-loader "5.0.0" @@ -246,13 +246,13 @@ terser "5.39.0" tree-kill "1.2.2" tslib "2.8.1" - webpack "5.99.7" + webpack "5.99.8" webpack-dev-middleware "7.4.2" webpack-dev-server "5.2.1" webpack-merge "6.0.1" webpack-subresource-integrity "5.1.0" optionalDependencies: - esbuild "0.25.3" + esbuild "0.25.4" "@angular-devkit/build-optimizer@0.14.0-beta.5": version "0.14.0-beta.5" @@ -264,12 +264,12 @@ typescript "3.2.4" webpack-sources "1.3.0" -"@angular-devkit/build-webpack@0.2000.0-next.9": - version "0.2000.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.2000.0-next.9.tgz#c1f328b0d44eb2810e91ff86832d32eca3e340ab" - integrity sha512-zliPqpqJid8Mmw+Mn0uxmIfZxPnmpae1DRIUIRQA/MZIt4xs6Yr6scn3I8xooU2osbu3DhxT0xuAoW0vIkt00g== +"@angular-devkit/build-webpack@0.2000.0-rc.0": + version "0.2000.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.2000.0-rc.0.tgz#77c70362e21e76245ae999b353af0e23330962bc" + integrity sha512-pejJMhyzxetoJ5GpXOkybh6oJOPgKs+wMLA/U3F4oxT4EpwcUY+kl0VoANtqDDkHEC1cDmsWzI6XyBesmIQIfw== dependencies: - "@angular-devkit/architect" "0.2000.0-next.9" + "@angular-devkit/architect" "0.2000.0-rc.0" rxjs "7.8.2" "@angular-devkit/core@19.1.0-rc.0": @@ -284,10 +284,10 @@ rxjs "7.8.1" source-map "0.7.4" -"@angular-devkit/core@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.0.0-next.9.tgz#8c41b9f100d6c1733d24522c6974066477b4b5b9" - integrity sha512-T6Fl1UZWQsYodeQcp9DbSmHRStuREsFcAoIC1c83NSoxanrx2kZIgz5OoniHkysvyBTnuneN/0gdQTKguxhx6Q== +"@angular-devkit/core@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.0.0-rc.0.tgz#30d1b34b21759544751de412c1fdd1873baa5d29" + integrity sha512-Crj0G0occyB1ftUQoAj4ONouJuQ336FryWhehslIzZCOGxzwPWUw/ersaIKHmGr80sQ39fL4iUUaiFmm5EyG/A== dependencies: ajv "8.17.1" ajv-formats "3.0.1" @@ -296,12 +296,12 @@ rxjs "7.8.2" source-map "0.7.4" -"@angular-devkit/schematics@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.0.0-next.9.tgz#743d8e1eba2e7f28b99fcb475b6fbf32ccbfe6a3" - integrity sha512-mtPucxDtz7GpMVRrjxX6seTIiRPwV09n7B8yEVMU2anXEOM/QBgX4rizxscgc69KGU3Tr4Z5m5w+H8jlNxBIoQ== +"@angular-devkit/schematics@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.0.0-rc.0.tgz#fa0d2a0c743a391ef3338d1e7f79b3147e2aea8f" + integrity sha512-VJMahL7uvTT4L5fzzIrcv4bSnsXQG+2HNLQK4EWmG4j2vdKOcpCXL6EbE+ZD2ZDSqmNGSIAV0YHnsMD7mjTNYw== dependencies: - "@angular-devkit/core" "20.0.0-next.9" + "@angular-devkit/core" "20.0.0-rc.0" jsonc-parser "3.3.1" magic-string "0.30.17" ora "5.4.1" @@ -317,7 +317,6 @@ "@angular/build-tooling@https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a": version "0.0.0-2670abf637fa155971cdd1f7e570a7f234922a65" - uid ce04ec6cf7604014191821a637e60964a1a3bb4a resolved "https://github.com/angular/dev-infra-private-build-tooling-builds.git#ce04ec6cf7604014191821a637e60964a1a3bb4a" dependencies: "@angular/benchpress" "0.3.0" @@ -386,63 +385,63 @@ optionalDependencies: lmdb "3.2.2" -"@angular/build@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.0.0-next.9.tgz#2d165e63471e125f66f642efd162d33e343ab073" - integrity sha512-803SVKnM7gRT7Aiu7KZ3h6zWWfcsxUW2umaqhEwF9zjaYx+Th1RoEjv+SaaeFQ5G0fJnJynutxGLrPu5WZtHNQ== +"@angular/build@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.0.0-rc.0.tgz#8f02e1d61c4f45072db67ed288c93a68bf4105d0" + integrity sha512-cVKDaoloiiN06dMnsS0ARDP5QMKVpQSijTBHr2Fpvxi6615rTEQAhj/VgTECVYhkRRNm4cILP1RX1KvqWkawEA== dependencies: "@ampproject/remapping" "2.3.0" - "@angular-devkit/architect" "0.2000.0-next.9" - "@babel/core" "7.26.10" - "@babel/helper-annotate-as-pure" "7.25.9" + "@angular-devkit/architect" "0.2000.0-rc.0" + "@babel/core" "7.27.1" + "@babel/helper-annotate-as-pure" "7.27.1" "@babel/helper-split-export-declaration" "7.24.7" "@inquirer/confirm" "5.1.9" "@vitejs/plugin-basic-ssl" "2.0.0" beasties "0.3.3" browserslist "^4.23.0" - esbuild "0.25.3" + esbuild "0.25.4" https-proxy-agent "7.0.6" istanbul-lib-instrument "6.0.3" jsonc-parser "3.3.1" - listr2 "8.3.2" + listr2 "8.3.3" magic-string "0.30.17" mrmime "2.0.1" parse5-html-rewriting-stream "7.1.0" picomatch "4.0.2" - piscina "4.9.2" - rollup "4.40.1" + piscina "5.0.0" + rollup "4.40.2" sass "1.87.0" semver "7.7.1" source-map-support "0.5.21" tinyglobby "0.2.13" - vite "6.3.4" + vite "6.3.5" watchpack "2.4.2" optionalDependencies: - lmdb "3.2.6" + lmdb "3.3.0" -"@angular/cdk@20.0.0-next.10": - version "20.0.0-next.10" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.0.0-next.10.tgz#b06cefb88e08c0d733778d77e5b1e2772fba147f" - integrity sha512-z72vwZnryFydG4lqElMXEP6ywdlq2kA+uA8pIH2vdneR7iyM3TdGfgeVqFB/S8JOoq0AeQ3A9K5l1Gm0dPDRgw== +"@angular/cdk@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.0.0-rc.0.tgz#25608707dc76330ef9e6b5a98ddc53071f27568c" + integrity sha512-dvSacjyg5+6GCQiQpXIfguFcjrtR2R0uweUL8R9ZpGRi35jA0HqUYYY99asqyvhMS/G7F0etxRaPWu/d6sHpzg== dependencies: parse5 "^7.1.2" tslib "^2.3.0" -"@angular/cli@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.0.0-next.9.tgz#3f58538c59819d7068039d94f5b49c7df607273e" - integrity sha512-V1ze/mX7WqLrJ5ZzVyVnA2n0jbv7qEbPmkTiCjLQ0Mzv0KrjdbGUPRslUc/URXC0A3KCuVEw8Lpy6xMsTht/Tw== +"@angular/cli@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.0.0-rc.0.tgz#a4f10c74c440aaf99cc843e8f6339f9e5a8f2a99" + integrity sha512-fP+OWXhxjNVHSQbofoQv5mEB1JKc+Dh/q/1tUMk+T2VM3QsMZpelWRXb3Wk6jlScwDMChyr3VjaEngAUnoEF3A== dependencies: - "@angular-devkit/architect" "0.2000.0-next.9" - "@angular-devkit/core" "20.0.0-next.9" - "@angular-devkit/schematics" "20.0.0-next.9" + "@angular-devkit/architect" "0.2000.0-rc.0" + "@angular-devkit/core" "20.0.0-rc.0" + "@angular-devkit/schematics" "20.0.0-rc.0" "@inquirer/prompts" "7.5.0" - "@listr2/prompt-adapter-inquirer" "2.0.21" - "@schematics/angular" "20.0.0-next.9" + "@listr2/prompt-adapter-inquirer" "2.0.22" + "@schematics/angular" "20.0.0-rc.0" "@yarnpkg/lockfile" "1.1.0" ini "5.0.0" jsonc-parser "3.3.1" - listr2 "8.3.2" + listr2 "8.3.3" npm-package-arg "12.0.2" npm-pick-manifest "10.0.0" pacote "20.0.0" @@ -457,19 +456,18 @@ dependencies: tslib "^2.3.0" -"@angular/material@20.0.0-next.10": - version "20.0.0-next.10" - resolved "https://registry.yarnpkg.com/@angular/material/-/material-20.0.0-next.10.tgz#fed09517e2607d3ee481979fe1dd73d9880e3fb7" - integrity sha512-V8YU1uSaHVd0LZAV4wSd3RbQ/tV+HSuTtu+RiJ8z7OEfdIt44NOIqQ1AzSHhiCTz8+BS61TDKrbDNUDJP2KX/g== +"@angular/material@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/material/-/material-20.0.0-rc.0.tgz#04cd9e0e447e7bd216fa493f65fb174377800cd1" + integrity sha512-Z6uaTLaTdfMoT2RnL8GB1na/n2/0d9Dk5h2wSsymyZFJz/U20btCQuor9Cvb/mUlrPs/uu/5SWDMpigRXlaomg== dependencies: tslib "^2.3.0" -"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#1a12d97905f4af88ccc0b582864907729d23e23e": - version "0.0.0-a4538b2474d3c551f0217c3d1f5f3a99cf4f8eb7" - uid "1a12d97905f4af88ccc0b582864907729d23e23e" - resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1a12d97905f4af88ccc0b582864907729d23e23e" +"@angular/ng-dev@https://github.com/angular/dev-infra-private-ng-dev-builds.git#a871c115e04a76587fcd418107ad985752610ccf": + version "0.0.0-892760b7f6cf0d08a51778674a9b13ebc1a809a7" + resolved "https://github.com/angular/dev-infra-private-ng-dev-builds.git#a871c115e04a76587fcd418107ad985752610ccf" dependencies: - "@google-cloud/spanner" "7.19.1" + "@google-cloud/spanner" "7.21.0" "@octokit/rest" "21.1.1" "@types/semver" "^7.3.6" "@types/supports-color" "^10.0.0" @@ -482,10 +480,10 @@ which "^5.0.0" yaml "2.7.1" -"@angular/ssr@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@angular/ssr/-/ssr-20.0.0-next.9.tgz#78f2e7acee2a0f1ef9607a5359edd42cfc9f97ac" - integrity sha512-0arVUvOUaN9qcCZe0k45r9HZz1BiJm7+JRnTUKpXTPUUC+T75XNXYBM0GWOVit42Kqd32VeSQqQrrQWZZg10Ng== +"@angular/ssr@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@angular/ssr/-/ssr-20.0.0-rc.0.tgz#c220e3220d62537a272301de1b22c45a662a41bf" + integrity sha512-PqAXHxJvahRbEgDVpd8eYVqM0PEYd4kpvBtpoH532TQi173hoNQxYf9JY6O/ECADqe6ZEqiIgGWy41l1jt7XcA== dependencies: tslib "^2.3.0" @@ -523,10 +521,10 @@ "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" -"@babel/cli@7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.27.0.tgz#076603b25fc7dd88298ea94ab249c8237c7e71cc" - integrity sha512-bZfxn8DRxwiVzDO5CEeV+7IqXeCkzI4yYnrQbpwjT76CUyossQc6RYE7n+xfm0/2k40lPaCpW0FhxYs7EBAetw== +"@babel/cli@7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.27.2.tgz#d54560567a73a269b31d3201bedb70692ace8684" + integrity sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA== dependencies: "@jridgewell/trace-mapping" "^0.3.25" commander "^6.2.0" @@ -548,11 +546,25 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": version "7.26.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== +"@babel/compat-data@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.2.tgz#4183f9e642fd84e74e3eea7ffa93a412e3b102c9" + integrity sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ== + "@babel/core@7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" @@ -595,7 +607,39 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@7.27.0", "@babel/generator@^7.26.0", "@babel/generator@^7.26.10", "@babel/generator@^7.27.0": +"@babel/core@7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" + integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helpers" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@7.27.1", "@babel/generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" + integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== + dependencies: + "@babel/parser" "^7.27.1" + "@babel/types" "^7.27.1" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.10", "@babel/generator@^7.27.0": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== @@ -613,6 +657,13 @@ dependencies: "@babel/types" "^7.25.9" +"@babel/helper-annotate-as-pure@7.27.1", "@babel/helper-annotate-as-pure@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d" + integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow== + dependencies: + "@babel/types" "^7.27.1" + "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" @@ -624,20 +675,31 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" - integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.27.0" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281" + integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.27.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== @@ -646,6 +708,15 @@ regexpu-core "^6.2.0" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" + integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": version "0.6.4" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" @@ -664,13 +735,13 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.25.9": version "7.25.9" @@ -680,7 +751,15 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== @@ -689,19 +768,33 @@ "@babel/helper-validator-identifier" "^7.25.9" "@babel/traverse" "^7.25.9" -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== +"@babel/helper-module-transforms@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" + integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== dependencies: - "@babel/types" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": version "7.26.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.25.9": +"@babel/helper-plugin-utils@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.18.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== @@ -710,22 +803,31 @@ "@babel/helper-wrap-function" "^7.25.9" "@babel/traverse" "^7.25.9" -"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" - integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.26.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" "@babel/helper-split-export-declaration@7.24.7": version "7.24.7" @@ -739,16 +841,31 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + "@babel/helper-validator-option@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + "@babel/helper-wrap-function@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" @@ -758,6 +875,15 @@ "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" +"@babel/helper-wrap-function@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409" + integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/helpers@^7.26.0", "@babel/helpers@^7.26.10": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" @@ -766,51 +892,66 @@ "@babel/template" "^7.27.0" "@babel/types" "^7.27.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.3", "@babel/parser@^7.26.0", "@babel/parser@^7.26.10", "@babel/parser@^7.26.7", "@babel/parser@^7.27.0": +"@babel/helpers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" + integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== dependencies: "@babel/types" "^7.27.0" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== +"@babel/parser@^7.27.1", "@babel/parser@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.2.tgz#577518bedb17a2ce4212afd052e01f7df0941127" + integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/types" "^7.27.1" -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670" + integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" "@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": version "7.20.7" @@ -834,20 +975,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-attributes@7.26.0", "@babel/plugin-syntax-import-attributes@^7.26.0": +"@babel/plugin-syntax-import-attributes@7.26.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: "@babel/helper-plugin-utils" "^7.25.9" +"@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -856,473 +1004,473 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@7.26.8", "@babel/plugin-transform-async-generator-functions@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" - integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== +"@babel/plugin-transform-async-generator-functions@7.27.1", "@babel/plugin-transform-async-generator-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz#ca433df983d68e1375398e7ca71bf2a4f6fd89d7" + integrity sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.26.8" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-async-to-generator@7.25.9", "@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== +"@babel/plugin-transform-async-to-generator@7.27.1", "@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" - integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== +"@babel/plugin-transform-block-scoping@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz#bc0dbe8ac6de5602981ba58ef68c6df8ef9bfbb3" + integrity sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== +"@babel/plugin-transform-class-static-block@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4" + integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== +"@babel/plugin-transform-classes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz#03bb04bea2c7b2f711f0db7304a8da46a85cced4" + integrity sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.27.1" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== +"@babel/plugin-transform-destructuring@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz#d5916ef7089cb254df0418ae524533c1b72ba656" + integrity sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-for-of@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" - integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" + integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== +"@babel/plugin-transform-object-rest-spread@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz#67f9ab822347aa2bcee91e8996763da79bdea973" + integrity sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g== dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.1" -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== +"@babel/plugin-transform-parameters@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz#80334b54b9b1ac5244155a0c8304a187a618d5a7" + integrity sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" - integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== +"@babel/plugin-transform-regenerator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz#0a471df9213416e44cd66bf67176b66f65768401" + integrity sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - regenerator-transform "^0.15.2" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-runtime@7.26.10": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz#6b4504233de8238e7d666c15cde681dc62adff87" - integrity sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw== +"@babel/plugin-transform-runtime@7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz#f9fbf71949a209eb26b3e60375b1d956937b8be9" + integrity sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw== dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.11.0" babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" - integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" - integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== +"@babel/preset-env@7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.27.2.tgz#106e6bfad92b591b1f6f76fd4cf13b7725a7bf9a" + integrity sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ== dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/compat-data" "^7.27.2" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.27.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.26.8" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.26.5" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.26.3" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.26.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.26.8" - "@babel/plugin-transform-typeof-symbol" "^7.26.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.27.1" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.27.1" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.27.1" + "@babel/plugin-transform-classes" "^7.27.1" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.27.1" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.27.2" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.1" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.27.1" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.11.0" @@ -1339,12 +1487,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime@7.27.0", "@babel/runtime@^7.8.4": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" +"@babel/runtime@7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" + integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== "@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0": version "7.27.0" @@ -1355,7 +1501,16 @@ "@babel/parser" "^7.27.0" "@babel/types" "^7.27.0" -"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": +"@babel/template@^7.27.1": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== @@ -1368,6 +1523,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" + integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.4.4": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" @@ -1376,6 +1544,14 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" +"@babel/types@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" + integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@bazel/bazelisk@^1.7.5": version "1.26.0" resolved "https://registry.yarnpkg.com/@bazel/bazelisk/-/bazelisk-1.26.0.tgz#2d35cfa6b57cc295a0f7b2dd1d025f1b76116236" @@ -1405,10 +1581,10 @@ resolved "https://registry.yarnpkg.com/@bazel/esbuild/-/esbuild-5.8.1.tgz#74668d33bfb29652cbe8e2852aa8dca5e0839e73" integrity sha512-8k4LL8P3ivCnFeBOcjiFxL8U+M5VtEGuOyIqm2hfEiP8xDWsZLS7YQ7KhshKJy7Elh2dlK9oGgMtl0D/x9kxxg== -"@bazel/ibazel@0.16.2": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.16.2.tgz#05dd7f06659759fda30f87b15534f1e42f1201bb" - integrity sha512-KgqAWMH0emL6f3xH6nqyTryoBMqlJ627LBIe9PT1PRRQPz2FtHib3FIHJPukp1slzF3hJYZvdiVwgPnHbaSOOA== +"@bazel/ibazel@0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.25.0.tgz#5431a4622ebc5c5bc48ea8b979f82f745a210d25" + integrity sha512-dtosfsuZCSaqlUe5EyxNdaN7Gow0Y+ZJixdlciytcSieUcB/1lXPFTx6OihxhjgtTHkeFovlQ/QbvArRPnk+nQ== "@bazel/jasmine@5.8.1": version "5.8.1" @@ -1694,14 +1870,6 @@ enabled "2.0.x" kuler "^2.0.0" -"@dependents/detective-less@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@dependents/detective-less/-/detective-less-5.0.1.tgz#e6c5b502f0d26a81da4170c1ccd848a6eaa68470" - integrity sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^7.0.1" - "@discoveryjs/json-ext@0.6.3": version "0.6.3" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" @@ -1730,6 +1898,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz#014180d9a149cffd95aaeead37179433f5ea5437" integrity sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ== +"@esbuild/aix-ppc64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz#830d6476cbbca0c005136af07303646b419f1162" + integrity sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q== + "@esbuild/android-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" @@ -1740,6 +1913,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz#649e47e04ddb24a27dc05c395724bc5f4c55cbfe" integrity sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ== +"@esbuild/android-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz#d11d4fc299224e729e2190cacadbcc00e7a9fd67" + integrity sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A== + "@esbuild/android-arm@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" @@ -1750,6 +1928,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.3.tgz#8a0f719c8dc28a4a6567ef7328c36ea85f568ff4" integrity sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A== +"@esbuild/android-arm@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.4.tgz#5660bd25080553dd2a28438f2a401a29959bd9b1" + integrity sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ== + "@esbuild/android-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" @@ -1760,6 +1943,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.3.tgz#e2ab182d1fd06da9bef0784a13c28a7602d78009" integrity sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ== +"@esbuild/android-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.4.tgz#18ddde705bf984e8cd9efec54e199ac18bc7bee1" + integrity sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ== + "@esbuild/darwin-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" @@ -1770,6 +1958,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz#c7f3166fcece4d158a73dcfe71b2672ca0b1668b" integrity sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w== +"@esbuild/darwin-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz#b0b7fb55db8fc6f5de5a0207ae986eb9c4766e67" + integrity sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g== + "@esbuild/darwin-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" @@ -1780,6 +1973,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz#d8c5342ec1a4bf4b1915643dfe031ba4b173a87a" integrity sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A== +"@esbuild/darwin-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz#e6813fdeba0bba356cb350a4b80543fbe66bf26f" + integrity sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A== + "@esbuild/freebsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" @@ -1790,6 +1988,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz#9f7d789e2eb7747d4868817417cc968ffa84f35b" integrity sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw== +"@esbuild/freebsd-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz#dc11a73d3ccdc308567b908b43c6698e850759be" + integrity sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ== + "@esbuild/freebsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" @@ -1800,6 +2003,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz#8ad35c51d084184a8e9e76bb4356e95350a64709" integrity sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q== +"@esbuild/freebsd-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz#91da08db8bd1bff5f31924c57a81dab26e93a143" + integrity sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ== + "@esbuild/linux-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" @@ -1810,6 +2018,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz#3af0da3d9186092a9edd4e28fa342f57d9e3cd30" integrity sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A== +"@esbuild/linux-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz#efc15e45c945a082708f9a9f73bfa8d4db49728a" + integrity sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ== + "@esbuild/linux-arm@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" @@ -1820,6 +2033,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz#e91cafa95e4474b3ae3d54da12e006b782e57225" integrity sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ== +"@esbuild/linux-arm@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz#9b93c3e54ac49a2ede6f906e705d5d906f6db9e8" + integrity sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ== + "@esbuild/linux-ia32@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" @@ -1830,6 +2048,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz#81025732d85b68ee510161b94acdf7e3007ea177" integrity sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw== +"@esbuild/linux-ia32@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz#be8ef2c3e1d99fca2d25c416b297d00360623596" + integrity sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ== + "@esbuild/linux-loong64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" @@ -1840,6 +2063,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz#3c744e4c8d5e1148cbe60a71a11b58ed8ee5deb8" integrity sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g== +"@esbuild/linux-loong64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz#b0840a2707c3fc02eec288d3f9defa3827cd7a87" + integrity sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA== + "@esbuild/linux-mips64el@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" @@ -1850,6 +2078,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz#1dfe2a5d63702db9034cc6b10b3087cc0424ec26" integrity sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag== +"@esbuild/linux-mips64el@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz#2a198e5a458c9f0e75881a4e63d26ba0cf9df39f" + integrity sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg== + "@esbuild/linux-ppc64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" @@ -1860,6 +2093,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz#2e85d9764c04a1ebb346dc0813ea05952c9a5c56" integrity sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg== +"@esbuild/linux-ppc64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz#64f4ae0b923d7dd72fb860b9b22edb42007cf8f5" + integrity sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag== + "@esbuild/linux-riscv64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" @@ -1870,6 +2108,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz#a9ea3334556b09f85ccbfead58c803d305092415" integrity sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA== +"@esbuild/linux-riscv64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz#fb2844b11fdddd39e29d291c7cf80f99b0d5158d" + integrity sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA== + "@esbuild/linux-s390x@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" @@ -1880,6 +2123,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz#f6a7cb67969222b200974de58f105dfe8e99448d" integrity sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ== +"@esbuild/linux-s390x@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz#1466876e0aa3560c7673e63fdebc8278707bc750" + integrity sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g== + "@esbuild/linux-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" @@ -1890,6 +2138,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz#a237d3578ecdd184a3066b1f425e314ade0f8033" integrity sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA== +"@esbuild/linux-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz#c10fde899455db7cba5f11b3bccfa0e41bf4d0cd" + integrity sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA== + "@esbuild/netbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" @@ -1900,6 +2153,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz#4c15c68d8149614ddb6a56f9c85ae62ccca08259" integrity sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA== +"@esbuild/netbsd-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz#02e483fbcbe3f18f0b02612a941b77be76c111a4" + integrity sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ== + "@esbuild/netbsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" @@ -1910,6 +2168,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz#12f6856f8c54c2d7d0a8a64a9711c01a743878d5" integrity sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g== +"@esbuild/netbsd-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz#ec401fb0b1ed0ac01d978564c5fc8634ed1dc2ed" + integrity sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw== + "@esbuild/openbsd-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" @@ -1920,6 +2183,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz#ca078dad4a34df192c60233b058db2ca3d94bc5c" integrity sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ== +"@esbuild/openbsd-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz#f272c2f41cfea1d91b93d487a51b5c5ca7a8c8c4" + integrity sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A== + "@esbuild/openbsd-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" @@ -1930,6 +2198,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz#c9178adb60e140e03a881d0791248489c79f95b2" integrity sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w== +"@esbuild/openbsd-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz#2e25950bc10fa9db1e5c868e3d50c44f7c150fd7" + integrity sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw== + "@esbuild/sunos-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" @@ -1940,6 +2213,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz#03765eb6d4214ff27e5230af779e80790d1ee09f" integrity sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA== +"@esbuild/sunos-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz#cd596fa65a67b3b7adc5ecd52d9f5733832e1abd" + integrity sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q== + "@esbuild/win32-arm64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" @@ -1950,6 +2228,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz#f1c867bd1730a9b8dfc461785ec6462e349411ea" integrity sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ== +"@esbuild/win32-arm64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz#b4dbcb57b21eeaf8331e424c3999b89d8951dc88" + integrity sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ== + "@esbuild/win32-ia32@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" @@ -1960,6 +2243,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz#77491f59ef6c9ddf41df70670d5678beb3acc322" integrity sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew== +"@esbuild/win32-ia32@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz#410842e5d66d4ece1757634e297a87635eb82f7a" + integrity sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg== + "@esbuild/win32-x64@0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" @@ -1970,6 +2258,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz#b17a2171f9074df9e91bfb07ef99a892ac06412a" integrity sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg== +"@esbuild/win32-x64@0.25.4": + version "0.25.4" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz#0b17ec8a70b2385827d52314c1253160a0b9bacc" + integrity sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ== + "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" @@ -2048,10 +2341,10 @@ lodash.snakecase "^4.1.1" p-defer "^3.0.0" -"@google-cloud/spanner@7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@google-cloud/spanner/-/spanner-7.19.1.tgz#f4a81ebffe2cd6b07cae12c5ae1eccd9a8d1f031" - integrity sha512-a7WlM4T3g5hslSBxQpsCxlH2IGgeVVEnDP5/v51kNlKv/W5PhBMqaHanodkUjbjegsQNlWAkqLClzIwtldfSXg== +"@google-cloud/spanner@7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@google-cloud/spanner/-/spanner-7.21.0.tgz#166307b46b00d4c9be9f762730cd1212a563a740" + integrity sha512-SrlHgXmSaEbGhdimxcB0FgNsW9J931JBBveoGW43clQHVNcDJuKRoG+240inbSRZoW8JIwwEHToXYU5YGO3VGg== dependencies: "@google-cloud/common" "^5.0.0" "@google-cloud/precise-date" "^4.0.0" @@ -2455,10 +2748,10 @@ "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" -"@listr2/prompt-adapter-inquirer@2.0.21": - version "2.0.21" - resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.21.tgz#65ee52ab1fb473e3fff9a6125332dfe8e7ddedef" - integrity sha512-can62OlOPusZwYfKfd0SV6znsSFbiuJw/lvvRSAAdzqUCTE/Vn8FydLGAfEvGbDALdfqvazSj6tnVJKQxj9iXw== +"@listr2/prompt-adapter-inquirer@2.0.22": + version "2.0.22" + resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz#95f7730de62089be79a87a80aa333f5f4644f3c5" + integrity sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ== dependencies: "@inquirer/type" "^1.5.5" @@ -2467,60 +2760,65 @@ resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz#39e25e2a95d35a7350862af96d05e5396ea8a074" integrity sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g== -"@lmdb/lmdb-darwin-arm64@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz#5de419e9b95ba7aa5a0305a451e202be41dd76c0" - integrity sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg== +"@lmdb/lmdb-darwin-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.3.0.tgz#8120e59facefd54c79b86761ef308db2833a494d" + integrity sha512-LipbQobyEfQtu8WixasaFUZZ+JCGlho4OWwWIQ5ol0rB1RKkcZvypu7sS1CBvofBGVAa3vbOh8IOGQMrbmL5dg== "@lmdb/lmdb-darwin-x64@3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz#7b9eac5b7a89dbf3433648622fe52799dd4202e5" integrity sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA== -"@lmdb/lmdb-darwin-x64@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz#1e2a066f49b454411ed778a589ee57a6051851df" - integrity sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg== +"@lmdb/lmdb-darwin-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.3.0.tgz#3e5c7a1ea0e1d5c9c38ad89c9d1dce91e883924c" + integrity sha512-yA+9P+ZeA3vg76BLXWeUomIAjxfmSmR2eg8fueHXDg5Xe1Xmkl9JCKuHXUhtJ+mMVcH12d5k4kJBLbyXTadfGQ== "@lmdb/lmdb-linux-arm64@3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.2.tgz#f81b9233b2b78141af4cd22864f152cfeeed7b93" integrity sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g== -"@lmdb/lmdb-linux-arm64@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz#42c4c67dd67da62860f8fb7dd57e9171f407c1d2" - integrity sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg== +"@lmdb/lmdb-linux-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.3.0.tgz#cc04c17a35710a46432306c7c12a941aa1590722" + integrity sha512-OeWvSgjXXZ/zmtLqqL78I3910F6UYpUubmsUU+iBHo6nTtjkpXms95rJtGrjkWQqwswKBD7xSMplbYC4LEsiPA== "@lmdb/lmdb-linux-arm@3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz#251fa02ed9d2d8b8a4827f5e53bf1e2d8aa745b8" integrity sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA== -"@lmdb/lmdb-linux-arm@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz#a4aabc336dfbb2efdad6c91e39a95bece96fa7bd" - integrity sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ== +"@lmdb/lmdb-linux-arm@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.3.0.tgz#f36a07eb8f1656cc989ffa4e5a014b18d133079f" + integrity sha512-EDYrW9kle+8wI19JCj/PhRnGoCN9bked5cdOPdo1wdgH/HzjgoLPFTn9DHlZccgTEVhp3O+bpWXdN/rWySVvjw== "@lmdb/lmdb-linux-x64@3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz#f794a5b4c06019a82622565ba3d38e47aa113a2c" integrity sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw== -"@lmdb/lmdb-linux-x64@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz#83fb669606ebe6275915a06f2ca2e34d2ce1664e" - integrity sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q== +"@lmdb/lmdb-linux-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.3.0.tgz#0b4b0a73ee69d1d98695905065ff1de415f5ac72" + integrity sha512-wDd02mt5ScX4+xd6g78zKBr6ojpgCJCTrllCAabjgap5FzuETqOqaQfKhO+tJuGWv/J5q+GIds6uY7rNFueOxg== + +"@lmdb/lmdb-win32-arm64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.3.0.tgz#e631dbe9bee71d00fb49b158b460a2306429ce46" + integrity sha512-COotWhHJgzXULLiEjOgWQwqig6PoA+6ji6W+sDl6M1HhMXWIymEVHGs0edsVSNtsNSCAWMxJgR3asv6FNX/2EA== "@lmdb/lmdb-win32-x64@3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz#d160454f0e6c4f4af0a5a05d85141c3bd9523f9c" integrity sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ== -"@lmdb/lmdb-win32-x64@3.2.6": - version "3.2.6" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz#729f2035ddef1975279b3329532f5c1f86c91918" - integrity sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg== +"@lmdb/lmdb-win32-x64@3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.3.0.tgz#02f81fa98bcd527a493de6009ba65e3758a322c4" + integrity sha512-kqUgQH+l8HDbkAapx+aoko7Ez4X4DqkIraOqY/k0QY5EN/iialVlFpBUXh4wFXzirdmEVjbIUMrceUh0Kh8LeA== "@marijn/find-cluster-break@^1.0.0": version "1.0.2" @@ -2748,10 +3046,10 @@ tinyglobby "0.2.12" typescript "^5.8.3" -"@ngtools/webpack@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-20.0.0-next.9.tgz#6f6a6e1e3d0f93df2a9333fda3086a8949542ebf" - integrity sha512-e31bSzguIYXHzVBAyoX7TFHRTsOX+QnSdZkZ+CWKTGBIeDCrf7Z8dsJoy2INWJRS5Vnf1CMM32fvtGxkYfPDDw== +"@ngtools/webpack@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-20.0.0-rc.0.tgz#50ddf99501a01e866f8e0949ee61a4b52c505df8" + integrity sha512-bawbfDlbvFz6De4oV2n9wpFNTWOSIxmbs+fqZcrSenP1SUiN1iVGRQBibk/q1rvutN0nWdPRsQFmRe4JeTDgkw== "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" @@ -3299,19 +3597,18 @@ magic-string "^0.30.3" picomatch "^4.0.2" -"@rollup/plugin-node-resolve@^13.0.4": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" - integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== +"@rollup/plugin-node-resolve@^16.0.0": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz#2fc6b54ca3d77e12f3fb45b2a55b50720de4c95d" + integrity sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA== dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" deepmerge "^4.2.2" - is-builtin-module "^3.1.0" is-module "^1.0.0" - resolve "^1.19.0" + resolve "^1.22.1" -"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.0.9": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -3334,291 +3631,296 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809" integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q== -"@rollup/rollup-android-arm-eabi@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz#e1d7700735f7e8de561ef7d1fa0362082a180c43" - integrity sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ== - "@rollup/rollup-android-arm-eabi@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz#e1562d360bca73c7bef6feef86098de3a2f1d442" integrity sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw== +"@rollup/rollup-android-arm-eabi@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz#c228d00a41f0dbd6fb8b7ea819bbfbf1c1157a10" + integrity sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg== + "@rollup/rollup-android-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w== -"@rollup/rollup-android-arm64@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz#fa6cdfb1fc9e2c8e227a7f35d524d8f7f90cf4db" - integrity sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA== - "@rollup/rollup-android-arm64@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.1.tgz#37ba63940211673e15dcc5f469a78e34276dbca7" integrity sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw== +"@rollup/rollup-android-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz#e2b38d0c912169fd55d7e38d723aada208d37256" + integrity sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw== + "@rollup/rollup-darwin-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q== -"@rollup/rollup-darwin-arm64@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz#6da5a1ddc4f11d4a7ae85ab443824cb6bf614e30" - integrity sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q== - "@rollup/rollup-darwin-arm64@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.1.tgz#58b1eb86d997d71dabc5b78903233a3c27438ca0" integrity sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA== +"@rollup/rollup-darwin-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz#1fddb3690f2ae33df16d334c613377f05abe4878" + integrity sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w== + "@rollup/rollup-darwin-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA== -"@rollup/rollup-darwin-x64@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz#25b74ce2d8d3f9ea8e119b01384d44a1c0a0d3ae" - integrity sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q== - "@rollup/rollup-darwin-x64@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.1.tgz#5e22dab3232b1e575d930ce891abb18fe19c58c9" integrity sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw== +"@rollup/rollup-darwin-x64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz#818298d11c8109e1112590165142f14be24b396d" + integrity sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ== + "@rollup/rollup-freebsd-arm64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ== -"@rollup/rollup-freebsd-arm64@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz#be3d39e3441df5d6e187c83d158c60656c82e203" - integrity sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ== - "@rollup/rollup-freebsd-arm64@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.1.tgz#04c892d9ff864d66e31419634726ab0bebb33707" integrity sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw== +"@rollup/rollup-freebsd-arm64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz#91a28dc527d5bed7f9ecf0e054297b3012e19618" + integrity sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ== + "@rollup/rollup-freebsd-x64@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw== -"@rollup/rollup-freebsd-x64@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz#cd932d3ec679711efd65ca25821fb318e25b7ce4" - integrity sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw== - "@rollup/rollup-freebsd-x64@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.1.tgz#f4b1e091f7cf5afc9e3a029d70128ad56409ecfb" integrity sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q== +"@rollup/rollup-freebsd-x64@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz#28acadefa76b5c7bede1576e065b51d335c62c62" + integrity sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q== + "@rollup/rollup-linux-arm-gnueabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg== -"@rollup/rollup-linux-arm-gnueabihf@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz#d300b74c6f805474225632f185daaeae760ac2bb" - integrity sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg== - "@rollup/rollup-linux-arm-gnueabihf@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.1.tgz#c8814bb5ce047a81b1fe4a33628dfd4ac52bd864" integrity sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg== +"@rollup/rollup-linux-arm-gnueabihf@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz#819691464179cbcd9a9f9d3dc7617954840c6186" + integrity sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q== + "@rollup/rollup-linux-arm-musleabihf@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug== -"@rollup/rollup-linux-arm-musleabihf@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz#2caac622380f314c41934ed1e68ceaf6cc380cc3" - integrity sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A== - "@rollup/rollup-linux-arm-musleabihf@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.1.tgz#5b4e7bd83cbebbf5ffe958802dcfd4ee34bf73a3" integrity sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg== +"@rollup/rollup-linux-arm-musleabihf@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz#d149207039e4189e267e8724050388effc80d704" + integrity sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg== + "@rollup/rollup-linux-arm64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw== -"@rollup/rollup-linux-arm64-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz#1ec841650b038cc15c194c26326483fd7ebff3e3" - integrity sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A== - "@rollup/rollup-linux-arm64-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.1.tgz#141c848e53cee011e82a11777b8a51f1b3e8d77c" integrity sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg== +"@rollup/rollup-linux-arm64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz#fa72ebddb729c3c6d88973242f1a2153c83e86ec" + integrity sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg== + "@rollup/rollup-linux-arm64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA== -"@rollup/rollup-linux-arm64-musl@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz#2fc70a446d986e27f6101ea74e81746987f69150" - integrity sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg== - "@rollup/rollup-linux-arm64-musl@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.1.tgz#22ebeaf2fa301aa4aa6c84b760e6cd1d1ac7eb1e" integrity sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ== +"@rollup/rollup-linux-arm64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz#2054216e34469ab8765588ebf343d531fc3c9228" + integrity sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg== + "@rollup/rollup-linux-loongarch64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ== -"@rollup/rollup-linux-loongarch64-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz#561bd045cd9ce9e08c95f42e7a8688af8c93d764" - integrity sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g== - "@rollup/rollup-linux-loongarch64-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.1.tgz#20b77dc78e622f5814ff8e90c14c938ceb8043bc" integrity sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ== +"@rollup/rollup-linux-loongarch64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz#818de242291841afbfc483a84f11e9c7a11959bc" + integrity sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw== + "@rollup/rollup-linux-powerpc64le-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw== -"@rollup/rollup-linux-powerpc64le-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz#45d849a0b33813f33fe5eba9f99e0ff15ab5caad" - integrity sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA== - "@rollup/rollup-linux-powerpc64le-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.1.tgz#2c90f99c987ef1198d4f8d15d754c286e1f07b13" integrity sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg== +"@rollup/rollup-linux-powerpc64le-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz#0bb4cb8fc4a2c635f68c1208c924b2145eb647cb" + integrity sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q== + "@rollup/rollup-linux-riscv64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw== -"@rollup/rollup-linux-riscv64-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz#78dde3e6fcf5b5733a97d0a67482d768aa1e83a5" - integrity sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g== - "@rollup/rollup-linux-riscv64-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.1.tgz#9336fd5e47d7f4760d02aa85f76976176eef53ca" integrity sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ== +"@rollup/rollup-linux-riscv64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz#4b3b8e541b7b13e447ae07774217d98c06f6926d" + integrity sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg== + "@rollup/rollup-linux-riscv64-musl@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.1.tgz#d75b4d54d46439bb5c6c13762788f57e798f5670" integrity sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA== +"@rollup/rollup-linux-riscv64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz#e065405e67d8bd64a7d0126c931bd9f03910817f" + integrity sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg== + "@rollup/rollup-linux-s390x-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA== -"@rollup/rollup-linux-s390x-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz#2e34835020f9e03dfb411473a5c2a0e8a9c5037b" - integrity sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw== - "@rollup/rollup-linux-s390x-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.1.tgz#e9f09b802f1291839247399028beaef9ce034c81" integrity sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg== +"@rollup/rollup-linux-s390x-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz#dda3265bbbfe16a5d0089168fd07f5ebb2a866fe" + integrity sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ== + "@rollup/rollup-linux-x64-gnu@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg== -"@rollup/rollup-linux-x64-gnu@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz#4f9774beddc6f4274df57ac99862eb23040de461" - integrity sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA== - "@rollup/rollup-linux-x64-gnu@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.1.tgz#0413169dc00470667dea8575c1129d4e7a73eb29" integrity sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ== +"@rollup/rollup-linux-x64-gnu@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz#90993269b8b995b4067b7b9d72ff1c360ef90a17" + integrity sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng== + "@rollup/rollup-linux-x64-musl@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow== -"@rollup/rollup-linux-x64-musl@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz#dfcff2c1aed518b3d23ccffb49afb349d74fb608" - integrity sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg== - "@rollup/rollup-linux-x64-musl@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.1.tgz#c76fd593323c60ea219439a00da6c6d33ffd0ea6" integrity sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ== +"@rollup/rollup-linux-x64-musl@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz#fdf5b09fd121eb8d977ebb0fda142c7c0167b8de" + integrity sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA== + "@rollup/rollup-win32-arm64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw== -"@rollup/rollup-win32-arm64-msvc@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz#b0b37e2d77041e3aa772f519291309abf4c03a84" - integrity sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg== - "@rollup/rollup-win32-arm64-msvc@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.1.tgz#c7724c386eed0bda5ae7143e4081c1910cab349b" integrity sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg== +"@rollup/rollup-win32-arm64-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz#6397e1e012db64dfecfed0774cb9fcf89503d716" + integrity sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg== + "@rollup/rollup-win32-ia32-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw== -"@rollup/rollup-win32-ia32-msvc@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz#5b5a40e44a743ddc0e06b8e1b3982f856dc9ce0a" - integrity sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw== - "@rollup/rollup-win32-ia32-msvc@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.1.tgz#7749e1b65cb64fe6d41ad1ad9e970a0ccc8ac350" integrity sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA== +"@rollup/rollup-win32-ia32-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz#df0991464a52a35506103fe18d29913bf8798a0c" + integrity sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA== + "@rollup/rollup-win32-x64-msvc@4.30.1": version "4.30.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og== -"@rollup/rollup-win32-x64-msvc@4.35.0": - version "4.35.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz#05f25dbc9981bee1ae6e713daab10397044a46ca" - integrity sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw== - "@rollup/rollup-win32-x64-msvc@4.40.1": version "4.40.1" resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.1.tgz#8078b71fe0d5825dcbf83d52a7dc858b39da165c" integrity sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA== +"@rollup/rollup-win32-x64-msvc@4.40.2": + version "4.40.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz#8dae04d01a2cbd84d6297d99356674c6b993f0fc" + integrity sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA== + "@rushstack/node-core-library@5.10.2": version "5.10.2" resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.10.2.tgz#8d12bc5bd9244ea57f441877246efb0a1b7b7df6" @@ -3691,13 +3993,13 @@ argparse "~1.0.9" string-argv "~0.3.1" -"@schematics/angular@20.0.0-next.9": - version "20.0.0-next.9" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.0.0-next.9.tgz#c08e049bea78e93cfd9ac2421eae9d4e7384f7a9" - integrity sha512-rE05t3pCS7EaHQixe/qcIp7BGGLgY0tXbuTW422GIFpaQJ6k02GHk9eGhi3UdhHY4D+4TCywz6ISmvO/JWmy8Q== +"@schematics/angular@20.0.0-rc.0": + version "20.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.0.0-rc.0.tgz#6300853e28f63fb3aa8e64a0868fcba322b4f63c" + integrity sha512-LLsoqOO5waTnqvpa5zI9PyltHr/mKRrzznGzQ5IDDHKk8Vm1KgVd0+MHOPXHPCNPDgARbARM/yXwPa5dqeOYlA== dependencies: - "@angular-devkit/core" "20.0.0-next.9" - "@angular-devkit/schematics" "20.0.0-next.9" + "@angular-devkit/core" "20.0.0-rc.0" + "@angular-devkit/schematics" "20.0.0-rc.0" jsonc-parser "3.3.1" "@shikijs/core@3.3.0": @@ -3832,33 +4134,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== -"@ts-graphviz/adapter@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@ts-graphviz/adapter/-/adapter-2.0.6.tgz#18d5a42304dca7ffff760fcaf311a3148ef4a3bd" - integrity sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q== - dependencies: - "@ts-graphviz/common" "^2.1.5" - -"@ts-graphviz/ast@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@ts-graphviz/ast/-/ast-2.0.7.tgz#4ec33492e4b4e998d4632030e97a9f7e149afb86" - integrity sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw== - dependencies: - "@ts-graphviz/common" "^2.1.5" - -"@ts-graphviz/common@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@ts-graphviz/common/-/common-2.1.5.tgz#a256dfaea009a5b147d8f73f25e57fb44f6462a2" - integrity sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg== - -"@ts-graphviz/core@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@ts-graphviz/core/-/core-2.0.7.tgz#2185e390990038b267a2341c3db1cef3680bbee8" - integrity sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg== - dependencies: - "@ts-graphviz/ast" "^2.0.7" - "@ts-graphviz/common" "^2.1.5" - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -3992,10 +4267,10 @@ resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== -"@types/chrome@^0.0.317": - version "0.0.317" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.317.tgz#105f222075c1dabd9c914dd6190d27d32487f7a0" - integrity sha512-ibKycbXX8ZZToFshjgWg98BTvFUSvQht8m53Xc+87ye3Z6ZoHJubLjoiDsil8rtW+noWE+Z0+7y0nwLxArU+CQ== +"@types/chrome@^0.0.322": + version "0.0.322" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.322.tgz#70abb352dfd619d58a5f3c6dc2cd2cdf920dc434" + integrity sha512-glbRm82TzLLJfi3ttlnn7HR9KIX5OYeTo9Xug0Hna03JvaqNipZT+P/q/O5kxOvUQqKUqmn8NAOrcRSG6BOQAw== dependencies: "@types/filesystem" "*" "@types/har-format" "*" @@ -4565,12 +4840,10 @@ dependencies: "@types/node" "*" -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== "@types/responselike@^1.0.0": version "1.0.3" @@ -4734,33 +5007,6 @@ dependencies: "@types/node" "*" -"@typescript-eslint/types@8.31.0": - version "8.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.31.0.tgz#c48e20ec47a43b72747714f49ea9f7b38a4fa6c1" - integrity sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ== - -"@typescript-eslint/typescript-estree@^8.23.0": - version "8.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz#9c7f84eff6ad23d63cf086c6e93af571cd561270" - integrity sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ== - dependencies: - "@typescript-eslint/types" "8.31.0" - "@typescript-eslint/visitor-keys" "8.31.0" - debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^2.0.1" - -"@typescript-eslint/visitor-keys@8.31.0": - version "8.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz#9a1a97ed16c60d4d1e7399b41c11a6d94ebc1ce5" - integrity sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ== - dependencies: - "@typescript-eslint/types" "8.31.0" - eslint-visitor-keys "^4.2.0" - "@typescript/vfs@^1.5.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@typescript/vfs/-/vfs-1.6.1.tgz#fe7087d5a43715754f7ea9bf6e0b905176c9eebd" @@ -4783,53 +5029,6 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.0.0.tgz#9169bfe748743b8806553e0d1aa78e8227c27b2d" integrity sha512-gc9Tjg8bUxBVSTzeWT3Njc0Cl3PakHFKdNfABnZWiUgbxqmHDEn7uECv3fHVylxoYgNzAcmU7ZrILz+BwSo3sA== -"@vue/compiler-core@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" - integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.13" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" - integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== - dependencies: - "@vue/compiler-core" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/compiler-sfc@^3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" - integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/compiler-core" "3.5.13" - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" - estree-walker "^2.0.2" - magic-string "^0.30.11" - postcss "^8.4.48" - source-map-js "^1.2.0" - -"@vue/compiler-ssr@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" - integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== - dependencies: - "@vue/compiler-dom" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/shared@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" - integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== - "@wdio/config@6.12.1": version "6.12.1" resolved "https://registry.yarnpkg.com/@wdio/config/-/config-6.12.1.tgz#86d987b505d8ca85ec11471830d2ba296dab3bcf" @@ -5318,7 +5517,7 @@ ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== -any-promise@^1.0.0, any-promise@^1.1.0: +any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== @@ -5351,11 +5550,6 @@ apache-md5@^1.0.6: resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.8.tgz#ea79c6feb03abfed42b2830dde06f75df5e3bbd9" integrity sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA== -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== - archiver-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" @@ -5549,11 +5743,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== -ast-module-types@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-6.0.1.tgz#4b4ca0251c57b815bab62604dcb22f8c903e2523" - integrity sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA== - ast-types@^0.13.4: version "0.13.4" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -6128,7 +6317,7 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== -builtin-modules@^3.1.0, builtin-modules@^3.3.0: +builtin-modules@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== @@ -6717,7 +6906,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -6773,7 +6962,7 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@7, commander@^7.2.0: +commander@7: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== @@ -6783,11 +6972,6 @@ commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - commander@^2.11.0, commander@^2.12.1, commander@^2.19.0, commander@^2.2.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -7242,17 +7426,6 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^6.0.0: - version "6.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" - integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3, cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -7877,16 +8050,6 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -dependency-tree@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-11.1.1.tgz#5ab5fbb223fb32a9b03ed40952eb04bf09929ad6" - integrity sha512-pnkCd8VGOq70EVaEQxDC9mZCjCwYj4yG4j8h+PEJswuWp+rdE6p8zbtVvWk+yPwaVimOjlhNi782U9K5KOU9MQ== - dependencies: - commander "^12.1.0" - filing-cabinet "^5.0.3" - precinct "^12.2.0" - typescript "^5.7.3" - deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -7922,82 +8085,6 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detective-amd@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-6.0.1.tgz#71eb13b5d9b17222d7b4de3fb89a8e684d8b9a23" - integrity sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g== - dependencies: - ast-module-types "^6.0.1" - escodegen "^2.1.0" - get-amd-module-type "^6.0.1" - node-source-walk "^7.0.1" - -detective-cjs@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-6.0.1.tgz#4fb81a67337630811409abb2148b2b622cacbdcd" - integrity sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw== - dependencies: - ast-module-types "^6.0.1" - node-source-walk "^7.0.1" - -detective-es6@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-5.0.1.tgz#f0c026bc9b767a243e57ef282f4343fcf3b8ec4e" - integrity sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew== - dependencies: - node-source-walk "^7.0.1" - -detective-postcss@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-7.0.1.tgz#f5822d8988339fb56851fcdb079d51fbcff114db" - integrity sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ== - dependencies: - is-url "^1.2.4" - postcss-values-parser "^6.0.2" - -detective-sass@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-6.0.1.tgz#fcf5aa51bebf7b721807be418418470ee2409f8a" - integrity sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^7.0.1" - -detective-scss@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-5.0.1.tgz#6a7f792dc9c0e8cfc0d252a50ba26a6df12596a7" - integrity sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^7.0.1" - -detective-stylus@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-5.0.1.tgz#57d54a0b405305ee16655e42008b38a827a9f179" - integrity sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA== - -detective-typescript@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-14.0.0.tgz#3cf429652eb7d7d2be2c050ac47af957a559527d" - integrity sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw== - dependencies: - "@typescript-eslint/typescript-estree" "^8.23.0" - ast-module-types "^6.0.1" - node-source-walk "^7.0.1" - -detective-vue2@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/detective-vue2/-/detective-vue2-2.2.0.tgz#35fd1d39e261b064aca9fcaf20e136c76877482a" - integrity sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA== - dependencies: - "@dependents/detective-less" "^5.0.1" - "@vue/compiler-sfc" "^3.5.13" - detective-es6 "^5.0.1" - detective-sass "^6.0.1" - detective-scss "^5.0.1" - detective-stylus "^5.0.1" - detective-typescript "^14.0.0" - dev-ip@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" @@ -8101,10 +8188,9 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -"domino@https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af": - version "2.1.6+git" - uid "8f228f8862540c6ccd14f76b5a1d9bb5458618af" - resolved "https://github.com/angular/domino.git#8f228f8862540c6ccd14f76b5a1d9bb5458618af" +"domino@https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b": + version "2.1.6" + resolved "https://github.com/angular/domino.git#93e720f143d0296dd2726ffbcf4fc12283363a7b" dompurify@^3.2.4: version "3.2.5" @@ -8321,7 +8407,7 @@ engine.io@~6.6.0: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.17.1, enhanced-resolve@^5.18.0: +enhanced-resolve@^5.17.1: version "5.18.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== @@ -8488,10 +8574,10 @@ es6-module-loader@^0.17.4: dependencies: when "^3.7.2" -esbuild-wasm@0.25.3: - version "0.25.3" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.25.3.tgz#8c801814f9fa7f07896cc2f66ea74e541f6e7b5b" - integrity sha512-60mFpAU4iQMVIP9tSd5EEbxZUDsqSKAjAJ7r1OK073lG/ctnVidThvbcU+M2B55jMFntCFJlqksubXMpYIcbfg== +esbuild-wasm@0.25.4: + version "0.25.4" + resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.25.4.tgz#06744be7a790acd0a65c98c5a6289b31a17a0dcb" + integrity sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ== esbuild@0.24.2, esbuild@^0.24.2: version "0.24.2" @@ -8524,7 +8610,38 @@ esbuild@0.24.2, esbuild@^0.24.2: "@esbuild/win32-ia32" "0.24.2" "@esbuild/win32-x64" "0.24.2" -esbuild@0.25.3, esbuild@^0.25.0, esbuild@~0.25.0: +esbuild@0.25.4: + version "0.25.4" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.4.tgz#bb9a16334d4ef2c33c7301a924b8b863351a0854" + integrity sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.4" + "@esbuild/android-arm" "0.25.4" + "@esbuild/android-arm64" "0.25.4" + "@esbuild/android-x64" "0.25.4" + "@esbuild/darwin-arm64" "0.25.4" + "@esbuild/darwin-x64" "0.25.4" + "@esbuild/freebsd-arm64" "0.25.4" + "@esbuild/freebsd-x64" "0.25.4" + "@esbuild/linux-arm" "0.25.4" + "@esbuild/linux-arm64" "0.25.4" + "@esbuild/linux-ia32" "0.25.4" + "@esbuild/linux-loong64" "0.25.4" + "@esbuild/linux-mips64el" "0.25.4" + "@esbuild/linux-ppc64" "0.25.4" + "@esbuild/linux-riscv64" "0.25.4" + "@esbuild/linux-s390x" "0.25.4" + "@esbuild/linux-x64" "0.25.4" + "@esbuild/netbsd-arm64" "0.25.4" + "@esbuild/netbsd-x64" "0.25.4" + "@esbuild/openbsd-arm64" "0.25.4" + "@esbuild/openbsd-x64" "0.25.4" + "@esbuild/sunos-x64" "0.25.4" + "@esbuild/win32-arm64" "0.25.4" + "@esbuild/win32-ia32" "0.25.4" + "@esbuild/win32-x64" "0.25.4" + +esbuild@^0.25.0, esbuild@~0.25.0: version "0.25.3" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.3.tgz#371f7cb41283e5b2191a96047a7a89562965a285" integrity sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q== @@ -8599,11 +8716,6 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -8694,18 +8806,20 @@ events@^3.2.0, events@^3.3.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== +execa@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" exegesis-express@^4.0.0: version "4.0.0" @@ -8992,23 +9106,6 @@ filesize@^6.1.0: resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== -filing-cabinet@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-5.0.3.tgz#e5ab960958653ee7fe70d5d99b3b88c342ce7907" - integrity sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg== - dependencies: - app-module-path "^2.2.0" - commander "^12.1.0" - enhanced-resolve "^5.18.0" - module-definition "^6.0.1" - module-lookup-amd "^9.0.3" - resolve "^1.22.10" - resolve-dependency-path "^4.0.1" - sass-lookup "^6.1.0" - stylus-lookup "^6.1.0" - tsconfig-paths "^4.2.0" - typescript "^5.7.3" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -9490,14 +9587,6 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-amd-module-type@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz#191f479ae8706c246b52bf402fbe1bb0965d9f1e" - integrity sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ== - dependencies: - ast-module-types "^6.0.1" - node-source-walk "^7.0.1" - get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -9524,11 +9613,6 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ hasown "^2.0.2" math-intrinsics "^1.1.0" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-port@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" @@ -9547,13 +9631,6 @@ get-ready@^1.0.0: resolved "https://registry.yarnpkg.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782" integrity sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -9561,6 +9638,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" @@ -9778,13 +9860,6 @@ glogg@^2.2.0: dependencies: sparkles "^2.1.0" -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" - integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== - dependencies: - minimist "^1.2.5" - google-auth-library@^9.0.0, google-auth-library@^9.11.0, google-auth-library@^9.2.0, google-auth-library@^9.3.0, google-auth-library@^9.7.0: version "9.15.1" resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.15.1.tgz#0c5d84ed1890b2375f1cd74f03ac7b806b392928" @@ -10365,6 +10440,11 @@ https-proxy-agent@7.0.6, https-proxy-agent@^2.2.1, https-proxy-agent@^4.0.0, htt agent-base "^7.1.2" debug "4" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + husky@9.1.7: version "9.1.7" resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" @@ -10555,11 +10635,6 @@ internmap@^1.0.0: resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -10667,13 +10742,6 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -10892,11 +10960,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -10970,11 +11033,6 @@ is-regex@^1.2.1: has-tostringtag "^1.0.2" hasown "^2.0.2" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -10999,11 +11057,6 @@ is-stream-ended@^0.1.0, is-stream-ended@^0.1.4: resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -11050,11 +11103,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-url-superb@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" - integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== - is-url@^1.2.2, is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -11270,7 +11318,7 @@ jasmine-core@~2.8.0: resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ== -jasmine-reporters@~2.5.0: +jasmine-reporters@^2.5.2, jasmine-reporters@~2.5.0: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine-reporters/-/jasmine-reporters-2.5.2.tgz#b5dfa1d9c40b8020c5225e0e1e2b9953d66a4d69" integrity sha512-qdewRUuFOSiWhiyWZX8Yx3YNQ9JG51ntBEO4ekLQRpktxFTwUHy24a86zD/Oi2BRTKksEdfWQZcQFqzjqIkPig== @@ -11464,7 +11512,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: +json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -11770,10 +11818,10 @@ lead@^4.0.0: resolved "https://registry.yarnpkg.com/lead/-/lead-4.0.0.tgz#5317a49effb0e7ec3a0c8fb9c1b24fb716aab939" integrity sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg== -less-loader@12.2.0: - version "12.2.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-12.2.0.tgz#e1e94522f6abe9e064ef396c29a3151bc6c1b6cc" - integrity sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg== +less-loader@12.3.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-12.3.0.tgz#d4a00361568be86a97da3df4f16954b0d4c15340" + integrity sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw== less@4.3.0: version "4.3.0" @@ -11866,10 +11914,10 @@ listr2@8.2.5: rfdc "^1.4.1" wrap-ansi "^9.0.0" -listr2@8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.3.2.tgz#c252ec9a3334950bfca9238457d0ad2c1a5cc867" - integrity sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g== +listr2@8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.3.3.tgz#815fc8f738260ff220981bf9e866b3e11e8121bf" + integrity sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== dependencies: cli-truncate "^4.0.0" colorette "^2.0.20" @@ -11915,10 +11963,10 @@ lmdb@3.2.2: "@lmdb/lmdb-linux-x64" "3.2.2" "@lmdb/lmdb-win32-x64" "3.2.2" -lmdb@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.2.6.tgz#dd18bae6323679f99bc3cb57df81dc507f50f505" - integrity sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ== +lmdb@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.3.0.tgz#85149c8178a3fa57a9230bd1adf9fd96ceb9125f" + integrity sha512-MgJocUI6QEiSXQBFWLeyo1R7eQj8Rke5dlPxX0KFwli8/bsCxpM/KbXO5y0qmV/5llQ3wpneDWcTYxa+4vn8iQ== dependencies: msgpackr "^1.11.2" node-addon-api "^6.1.0" @@ -11926,12 +11974,13 @@ lmdb@3.2.6: ordered-binary "^1.5.3" weak-lru-cache "^1.2.2" optionalDependencies: - "@lmdb/lmdb-darwin-arm64" "3.2.6" - "@lmdb/lmdb-darwin-x64" "3.2.6" - "@lmdb/lmdb-linux-arm" "3.2.6" - "@lmdb/lmdb-linux-arm64" "3.2.6" - "@lmdb/lmdb-linux-x64" "3.2.6" - "@lmdb/lmdb-win32-x64" "3.2.6" + "@lmdb/lmdb-darwin-arm64" "3.3.0" + "@lmdb/lmdb-darwin-x64" "3.3.0" + "@lmdb/lmdb-linux-arm" "3.3.0" + "@lmdb/lmdb-linux-arm64" "3.3.0" + "@lmdb/lmdb-linux-x64" "3.3.0" + "@lmdb/lmdb-win32-arm64" "3.3.0" + "@lmdb/lmdb-win32-x64" "3.3.0" loader-runner@^4.2.0: version "4.3.0" @@ -12217,25 +12266,7 @@ lsofi@1.0.0: is-number "^2.1.0" through2 "^2.0.1" -madge@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/madge/-/madge-8.0.0.tgz#cca4ab66fb388e7b6bf43c1f78dcaab3cad30f50" - integrity sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw== - dependencies: - chalk "^4.1.2" - commander "^7.2.0" - commondir "^1.0.1" - debug "^4.3.4" - dependency-tree "^11.0.0" - ora "^5.4.1" - pluralize "^8.0.0" - pretty-ms "^7.0.1" - rc "^1.2.8" - stream-to-array "^2.3.0" - ts-graphviz "^2.1.2" - walkdir "^0.4.1" - -magic-string@0.30.17, magic-string@^0.30.11, magic-string@^0.30.17, magic-string@^0.30.3, magic-string@^0.30.8: +magic-string@0.30.17, magic-string@^0.30.17, magic-string@^0.30.3, magic-string@^0.30.8: version "0.30.17" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== @@ -12760,24 +12791,6 @@ mlly@^1.7.4: pkg-types "^1.3.0" ufo "^1.5.4" -module-definition@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-6.0.1.tgz#47e73144cc5a9aa31f3380166fddf8e962ccb2e4" - integrity sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g== - dependencies: - ast-module-types "^6.0.1" - node-source-walk "^7.0.1" - -module-lookup-amd@^9.0.3: - version "9.0.4" - resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-9.0.4.tgz#328aff0913a47b25f02dd03c40efc9640d60f38c" - integrity sha512-DWJEuLVvjxh5b8wrvJC5wr2a7qo7pOWXIgdCBNazU416kcIyzO4drxvlqKhsHzYwxcC4cWuhoK+MiWCKCGnv7A== - dependencies: - commander "^12.1.0" - glob "^7.2.3" - requirejs "^2.3.7" - requirejs-config-file "^4.0.0" - moo@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" @@ -12961,11 +12974,6 @@ ngx-progressbar@^14.0.0: dependencies: tslib "^2.3.0" -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -13050,13 +13058,6 @@ node-releases@^2.0.19: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== -node-source-walk@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-7.0.1.tgz#3e4ab8d065377228fd038af7b2d4fb58f61defd3" - integrity sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg== - dependencies: - "@babel/parser" "^7.26.7" - nopt@^7.0.0: version "7.2.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" @@ -13169,12 +13170,12 @@ npm-registry-fetch@^18.0.0: npm-package-arg "^12.0.0" proc-log "^5.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - path-key "^2.0.0" + path-key "^3.0.0" nth-check@^2.0.1: version "2.1.1" @@ -13296,7 +13297,7 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -13329,7 +13330,17 @@ open-in-idx@^0.1.1: resolved "https://registry.yarnpkg.com/open-in-idx/-/open-in-idx-0.1.1.tgz#390cb0985146a461f5a662ed1fd0db3fce55b2f0" integrity sha512-4Cks2eY4bnWpBP/fEj1deRrVYbHME36g0w4/IFDG4iwnkD7CwmK9HrF3A3LR/RKHs5AXUMj49YxnwdIxEizDpA== -open@10.1.1, open@^10.0.3: +open@10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.2.tgz#d5df40984755c9a9c3c93df8156a12467e882925" + integrity sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +open@^10.0.3: version "10.1.1" resolved "https://registry.yarnpkg.com/open/-/open-10.1.1.tgz#5fd814699e47ae3e1a09962d39f4f4441cae6c22" integrity sha512-zy1wx4+P3PfhXSEPJNtZmJXfhkkIaxU1VauWIrDZw1O7uJRDRJtKr9n3Ic4NgbA16KyOxOXO2ng9gYwCdXuSXA== @@ -13608,11 +13619,6 @@ parse-json@^8.0.0: index-to-position "^1.1.0" type-fest "^4.39.1" -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - parse-node-version@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" @@ -13748,12 +13754,7 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -13927,10 +13928,10 @@ piscina@4.8.0: optionalDependencies: "@napi-rs/nice" "^1.0.1" -piscina@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.9.2.tgz#80f2c2375231720337c703e443941adfac8caf75" - integrity sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ== +piscina@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-5.0.0.tgz#9a4f11e4b4ff137ea6b90a66c3ceb7755b2be56f" + integrity sha512-R+arufwL7sZvGjAhSMK3TfH55YdGOqhpKXkcwQJr432AAnJX/xxX19PA4QisrmJ+BTTfZVggaz6HexbkQq1l1Q== optionalDependencies: "@napi-rs/nice" "^1.0.1" @@ -13971,11 +13972,6 @@ plugin-error@^2.0.0: dependencies: ansi-colors "^1.0.1" -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - points-on-curve@0.2.0, points-on-curve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/points-on-curve/-/points-on-curve-0.2.0.tgz#7dbb98c43791859434284761330fa893cb81b4d1" @@ -14070,16 +14066,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss-values-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz#636edc5b86c953896f1bb0d7a7a6615df00fb76f" - integrity sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw== - dependencies: - color-name "^1.1.4" - is-url-superb "^4.0.0" - quote-unquote "^1.0.0" - -postcss@8.5.3, postcss@^8.2.14, postcss@^8.4.33, postcss@^8.4.48, postcss@^8.4.49, postcss@^8.5.1, postcss@^8.5.3: +postcss@8.5.3, postcss@^8.2.14, postcss@^8.4.33, postcss@^8.4.49, postcss@^8.5.3: version "8.5.3" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== @@ -14120,27 +14107,6 @@ preact@^10.17.1: resolved "https://registry.yarnpkg.com/preact/-/preact-10.26.5.tgz#7e1e998af178f139e4c7cb53f441bf2179f44ad2" integrity sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w== -precinct@^12.2.0: - version "12.2.0" - resolved "https://registry.yarnpkg.com/precinct/-/precinct-12.2.0.tgz#6ab18f48034cc534f2c8fedb318f19a11bcd171b" - integrity sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w== - dependencies: - "@dependents/detective-less" "^5.0.1" - commander "^12.1.0" - detective-amd "^6.0.1" - detective-cjs "^6.0.1" - detective-es6 "^5.0.1" - detective-postcss "^7.0.1" - detective-sass "^6.0.1" - detective-scss "^5.0.1" - detective-stylus "^5.0.1" - detective-typescript "^14.0.0" - detective-vue2 "^2.2.0" - module-definition "^6.0.1" - node-source-walk "^7.0.1" - postcss "^8.5.1" - typescript "^5.7.3" - prettier@3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" @@ -14151,13 +14117,6 @@ prettier@^3.0.0: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - proc-log@^4.1.0, proc-log@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" @@ -14458,11 +14417,6 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -quote-unquote@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" - integrity sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg== - railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -14598,13 +14552,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -14648,18 +14595,6 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -14808,15 +14743,7 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requirejs-config-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc" - integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw== - dependencies: - esprima "^4.0.0" - stringify-object "^3.2.1" - -requirejs@^2.3.6, requirejs@^2.3.7: +requirejs@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.7.tgz#0b22032e51a967900e0ae9f32762c23a87036bd0" integrity sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw== @@ -14831,11 +14758,6 @@ resolve-alpn@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== -resolve-dependency-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-4.0.1.tgz#1b9d43e5b62384301e26d040b9fce61ee5db60bd" - integrity sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ== - resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -14877,7 +14799,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@1.22.10, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.3.2, resolve@~1.22.1, resolve@~1.22.2: +resolve@1.22.10, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.3.2, resolve@~1.22.1, resolve@~1.22.2: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -15066,35 +14988,36 @@ rollup@4.30.1: "@rollup/rollup-win32-x64-msvc" "4.30.1" fsevents "~2.3.2" -rollup@4.35.0: - version "4.35.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.35.0.tgz#76c95dba17a579df4c00c3955aed32aa5d4dc66d" - integrity sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg== +rollup@4.40.2: + version "4.40.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.2.tgz#778e88b7a197542682b3e318581f7697f55f0619" + integrity sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg== dependencies: - "@types/estree" "1.0.6" + "@types/estree" "1.0.7" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.35.0" - "@rollup/rollup-android-arm64" "4.35.0" - "@rollup/rollup-darwin-arm64" "4.35.0" - "@rollup/rollup-darwin-x64" "4.35.0" - "@rollup/rollup-freebsd-arm64" "4.35.0" - "@rollup/rollup-freebsd-x64" "4.35.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.35.0" - "@rollup/rollup-linux-arm-musleabihf" "4.35.0" - "@rollup/rollup-linux-arm64-gnu" "4.35.0" - "@rollup/rollup-linux-arm64-musl" "4.35.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.35.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.35.0" - "@rollup/rollup-linux-riscv64-gnu" "4.35.0" - "@rollup/rollup-linux-s390x-gnu" "4.35.0" - "@rollup/rollup-linux-x64-gnu" "4.35.0" - "@rollup/rollup-linux-x64-musl" "4.35.0" - "@rollup/rollup-win32-arm64-msvc" "4.35.0" - "@rollup/rollup-win32-ia32-msvc" "4.35.0" - "@rollup/rollup-win32-x64-msvc" "4.35.0" + "@rollup/rollup-android-arm-eabi" "4.40.2" + "@rollup/rollup-android-arm64" "4.40.2" + "@rollup/rollup-darwin-arm64" "4.40.2" + "@rollup/rollup-darwin-x64" "4.40.2" + "@rollup/rollup-freebsd-arm64" "4.40.2" + "@rollup/rollup-freebsd-x64" "4.40.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.40.2" + "@rollup/rollup-linux-arm-musleabihf" "4.40.2" + "@rollup/rollup-linux-arm64-gnu" "4.40.2" + "@rollup/rollup-linux-arm64-musl" "4.40.2" + "@rollup/rollup-linux-loongarch64-gnu" "4.40.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.40.2" + "@rollup/rollup-linux-riscv64-gnu" "4.40.2" + "@rollup/rollup-linux-riscv64-musl" "4.40.2" + "@rollup/rollup-linux-s390x-gnu" "4.40.2" + "@rollup/rollup-linux-x64-gnu" "4.40.2" + "@rollup/rollup-linux-x64-musl" "4.40.2" + "@rollup/rollup-win32-arm64-msvc" "4.40.2" + "@rollup/rollup-win32-ia32-msvc" "4.40.2" + "@rollup/rollup-win32-x64-msvc" "4.40.2" fsevents "~2.3.2" -rollup@4.40.1, rollup@^4.23.0, rollup@^4.34.9: +rollup@^4.23.0, rollup@^4.34.9: version "4.40.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.1.tgz#03d6c53ebb6a9c2c060ae686a61e72a2472b366f" integrity sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw== @@ -15261,14 +15184,6 @@ sass-loader@16.0.5: dependencies: neo-async "^2.6.2" -sass-lookup@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-6.1.0.tgz#a13b1f31dd44d2b4bcd55ba8f72763db4d95bd7c" - integrity sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA== - dependencies: - commander "^12.1.0" - enhanced-resolve "^5.18.0" - sass@1.83.1: version "1.83.1" resolved "https://registry.yarnpkg.com/sass/-/sass-1.83.1.tgz#dee1ab94b47a6f9993d3195d36f556bcbda64846" @@ -15337,10 +15252,10 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -"selenium-webdriver4@npm:selenium-webdriver@4.31.0": - version "4.31.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.31.0.tgz#3908152b9fcccd41411a58e30a099fc05a04dd2f" - integrity sha512-0MWEwypM0+c1NnZ87UEMxZdwphKoaK2UJ2qXzKWrJiM0gazFjgNVimxlHTOO90G2cOhphZqwpqSCJy62NTEzyA== +"selenium-webdriver4@npm:selenium-webdriver@4.32.0": + version "4.32.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.32.0.tgz#9bfe160cdac14d2d2876bba6eb369a09e9bd13ed" + integrity sha512-dG48JJnB96Aea1iVaZOKGmd6yT6aemeI1heWI/i8DtfD3pDX7uIlwpDBoGauNhtXAaFaamP+U4hIab8zZkg3Ag== dependencies: "@bazel/runfiles" "^6.3.1" jszip "^3.10.1" @@ -15421,12 +15336,12 @@ semver@7.6.3: resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -semver@7.7.1, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: +semver@7.7.1, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +semver@^5.3.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -15639,13 +15554,6 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -15653,11 +15561,6 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" @@ -15668,15 +15571,13 @@ shell-quote@^1.8.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== -shelljs@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.9.2.tgz#a8ac724434520cd7ae24d52071e37a18ac2bb183" - integrity sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw== +shelljs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.10.0.tgz#e3bbae99b0f3f0cc5dce05b46a346fae2090e883" + integrity sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw== dependencies: - execa "^1.0.0" + execa "^5.1.1" fast-glob "^3.3.2" - interpret "^1.0.0" - rechoir "^0.6.2" shiki@^3.0.0: version "3.3.0" @@ -15732,7 +15633,7 @@ side-channel@^1.0.6, side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -15909,7 +15810,7 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -16218,13 +16119,6 @@ stream-throttle@^0.1.3: commander "^2.2.0" limiter "^1.0.5" -stream-to-array@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" - integrity sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA== - dependencies: - any-promise "^1.1.0" - streamifier@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/streamifier/-/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" @@ -16349,15 +16243,6 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -stringify-object@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -16386,15 +16271,10 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.0: dependencies: ansi-regex "^6.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@~2.0.1: version "2.0.1" @@ -16421,13 +16301,6 @@ stylis@^4.3.6: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320" integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ== -stylus-lookup@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-6.1.0.tgz#f0fe88a885b830dc7520f51dd0a7e59e5d3307b4" - integrity sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ== - dependencies: - commander "^12.1.0" - superstatic@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/superstatic/-/superstatic-9.2.0.tgz#c3d338e87fb1b695670c79db5affb18288441c32" @@ -16896,26 +16769,11 @@ triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== -ts-api-utils@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== - ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== -ts-graphviz@^2.1.2: - version "2.1.6" - resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-2.1.6.tgz#007fcb42b4e8c55d26543ece9e86395bd3c3cfd6" - integrity sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw== - dependencies: - "@ts-graphviz/adapter" "^2.0.6" - "@ts-graphviz/ast" "^2.0.7" - "@ts-graphviz/common" "^2.1.5" - "@ts-graphviz/core" "^2.0.7" - ts-node@^10.9.1: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -16935,15 +16793,6 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tsec@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/tsec/-/tsec-0.2.8.tgz#a9e7492b144fcff14f1f36327fa84a2d54c4e211" @@ -17189,7 +17038,7 @@ typescript@5.8.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== -typescript@^5.7.3, typescript@^5.8.3: +typescript@^5.8.3: version "5.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== @@ -17698,10 +17547,10 @@ vite@6.0.7: optionalDependencies: fsevents "~2.3.3" -vite@6.3.4: - version "6.3.4" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.4.tgz#d441a72c7cd9a93b719bb851250a4e6c119c9cff" - integrity sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw== +vite@6.3.5: + version "6.3.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" + integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== dependencies: esbuild "^0.25.0" fdir "^6.4.4" @@ -17769,11 +17618,6 @@ w3c-xmlserializer@^5.0.0: dependencies: xml-name-validator "^5.0.0" -walkdir@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39" - integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ== - watchpack@2.4.2, watchpack@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" @@ -17952,10 +17796,10 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -webpack@5.99.7: - version "5.99.7" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.7.tgz#60201c1ca66da046b07d006c2f6e0cc5e8a7bdba" - integrity sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w== +webpack@5.99.8: + version "5.99.8" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.8.tgz#dd31a020b7c092d30c4c6d9a4edb95809e7f5946" + integrity sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" @@ -18106,7 +17950,7 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.18: gopd "^1.2.0" has-tostringtag "^1.0.2" -which@^1.2.1, which@^1.2.14, which@^1.2.9: +which@^1.2.1, which@^1.2.14: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==