diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index 10a09b67f6..05f130d098 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -44,16 +44,16 @@ jobs: - name: mono_repo self validate run: dart pub global run mono_repo generate --validate job_002: - name: "analyzer_and_format; linux; Dart dev; PKG: dwds; `dart format --output=none --set-exit-if-changed .`, `dart analyze --fatal-infos .`, `dart test test/build/ensure_version_test.dart`" + name: "analyzer_and_format; linux; Dart dev; PKGS: debug_extension, dwds_test_common, dwds_test_common/fixtures/_webdev_smoke, example, frontend_server_client; `dart format --output=none --set-exit-if-changed .`, `dart analyze --fatal-infos .`" runs-on: ubuntu-latest steps: - name: Cache Pub hosted dependencies uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:format-analyze_0-test_0" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:debug_extension-dwds_test_common-dwds_test_common/fixtures/_webdev_smoke-example-frontend_server_client;commands:format-analyze_0" restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds + os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:debug_extension-dwds_test_common-dwds_test_common/fixtures/_webdev_smoke-example-frontend_server_client os:ubuntu-latest;pub-cache-hosted;sdk:dev os:ubuntu-latest;pub-cache-hosted os:ubuntu-latest @@ -66,46 +66,19 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: dwds_pub_upgrade - name: dwds; dart pub upgrade + - id: debug_extension_pub_upgrade + name: debug_extension; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: dwds - - name: "dwds; dart format --output=none --set-exit-if-changed ." + working-directory: debug_extension + - name: "debug_extension; dart format --output=none --set-exit-if-changed ." run: "dart format --output=none --set-exit-if-changed ." - if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" - working-directory: dwds - - name: "dwds; dart analyze --fatal-infos ." + if: "always() && steps.debug_extension_pub_upgrade.conclusion == 'success'" + working-directory: debug_extension + - name: "debug_extension; dart analyze --fatal-infos ." run: dart analyze --fatal-infos . - if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" - working-directory: dwds - - name: dwds; dart test test/build/ensure_version_test.dart - run: dart test test/build/ensure_version_test.dart - if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" - working-directory: dwds - job_003: - name: "analyzer_and_format; linux; Dart dev; PKGS: dwds_test_common, dwds_test_common/fixtures/_webdev_smoke, example, frontend_server_client; `dart format --output=none --set-exit-if-changed .`, `dart analyze --fatal-infos .`" - runs-on: ubuntu-latest - steps: - - name: Cache Pub hosted dependencies - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 - with: - path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds_test_common-dwds_test_common/fixtures/_webdev_smoke-example-frontend_server_client;commands:format-analyze_0" - restore-keys: | - os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds_test_common-dwds_test_common/fixtures/_webdev_smoke-example-frontend_server_client - os:ubuntu-latest;pub-cache-hosted;sdk:dev - os:ubuntu-latest;pub-cache-hosted - os:ubuntu-latest - - name: Setup Dart SDK - uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c - with: - sdk: dev - - id: checkout - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd - with: - persist-credentials: false + if: "always() && steps.debug_extension_pub_upgrade.conclusion == 'success'" + working-directory: debug_extension - id: dwds_test_common_pub_upgrade name: dwds_test_common; dart pub upgrade run: dart pub upgrade @@ -158,6 +131,46 @@ jobs: run: dart analyze --fatal-infos . if: "always() && steps.frontend_server_client_pub_upgrade.conclusion == 'success'" working-directory: frontend_server_client + job_003: + name: "analyzer_and_format; linux; Dart dev; PKG: dwds; `dart format --output=none --set-exit-if-changed .`, `dart analyze --fatal-infos .`, `dart test test/build/ensure_version_test.dart`" + runs-on: ubuntu-latest + steps: + - name: Cache Pub hosted dependencies + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 + with: + path: "~/.pub-cache/hosted" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:format-analyze_0-test_1" + restore-keys: | + os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds + os:ubuntu-latest;pub-cache-hosted;sdk:dev + os:ubuntu-latest;pub-cache-hosted + os:ubuntu-latest + - name: Setup Dart SDK + uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c + with: + sdk: dev + - id: checkout + name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + persist-credentials: false + - id: dwds_pub_upgrade + name: dwds; dart pub upgrade + run: dart pub upgrade + if: "always() && steps.checkout.conclusion == 'success'" + working-directory: dwds + - name: "dwds; dart format --output=none --set-exit-if-changed ." + run: "dart format --output=none --set-exit-if-changed ." + if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" + working-directory: dwds + - name: "dwds; dart analyze --fatal-infos ." + run: dart analyze --fatal-infos . + if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" + working-directory: dwds + - name: dwds; dart test test/build/ensure_version_test.dart + run: dart test test/build/ensure_version_test.dart + if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" + working-directory: dwds job_004: name: "analyzer_and_format; linux; Dart dev; PKG: webdev; `dart format --output=none --set-exit-if-changed .`, `dart analyze --fatal-infos .`, `dart test test/build/ensure_build_test.dart`" runs-on: ubuntu-latest @@ -199,6 +212,47 @@ jobs: if: "always() && steps.webdev_pub_upgrade.conclusion == 'success'" working-directory: webdev job_005: + name: "unit_test; linux; Dart dev; PKG: debug_extension; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `dart test -j 1`" + runs-on: ubuntu-latest + steps: + - name: Cache Pub hosted dependencies + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 + with: + path: "~/.pub-cache/hosted" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:debug_extension;commands:command_0-test_0" + restore-keys: | + os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:debug_extension + os:ubuntu-latest;pub-cache-hosted;sdk:dev + os:ubuntu-latest;pub-cache-hosted + os:ubuntu-latest + - name: Setup Dart SDK + uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c + with: + sdk: dev + - id: checkout + name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + persist-credentials: false + - id: debug_extension_pub_upgrade + name: debug_extension; dart pub upgrade + run: dart pub upgrade + if: "always() && steps.checkout.conclusion == 'success'" + working-directory: debug_extension + - name: "debug_extension; Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &" + run: "Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &" + if: "always() && steps.debug_extension_pub_upgrade.conclusion == 'success'" + working-directory: debug_extension + - name: "debug_extension; dart test -j 1" + run: dart test -j 1 + if: "always() && steps.debug_extension_pub_upgrade.conclusion == 'success'" + working-directory: debug_extension + needs: + - job_001 + - job_002 + - job_003 + - job_004 + job_006: name: "unit_test; linux; Dart dev; PKG: dwds; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test --tags=extension`" runs-on: ubuntu-latest steps: @@ -206,7 +260,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_1" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_2" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -243,7 +297,7 @@ jobs: - job_002 - job_003 - job_004 - job_006: + job_007: name: "unit_test; linux; Dart dev; PKG: dwds; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test --total-shards 3 --shard-index 0 --exclude-tags=extension`" runs-on: ubuntu-latest steps: @@ -251,7 +305,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_2" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_3" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -288,7 +342,7 @@ jobs: - job_002 - job_003 - job_004 - job_007: + job_008: name: "unit_test; linux; Dart dev; PKG: dwds; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test --total-shards 3 --shard-index 1 --exclude-tags=extension`" runs-on: ubuntu-latest steps: @@ -296,7 +350,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_3" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_4" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -333,7 +387,7 @@ jobs: - job_002 - job_003 - job_004 - job_008: + job_009: name: "unit_test; linux; Dart dev; PKG: dwds; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test --total-shards 3 --shard-index 2 --exclude-tags=extension`" runs-on: ubuntu-latest steps: @@ -341,7 +395,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_4" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds;commands:command_0-command_1-test_5" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:dwds os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -378,7 +432,7 @@ jobs: - job_002 - job_003 - job_004 - job_009: + job_010: name: "unit_test; linux; Dart dev; PKG: dwds_test_common; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test --exclude-tags=release`" runs-on: ubuntu-latest steps: @@ -423,7 +477,7 @@ jobs: - job_002 - job_003 - job_004 - job_010: + job_011: name: "unit_test; linux; Dart dev; PKG: frontend_server_client; `dart test -j 1`" runs-on: ubuntu-latest steps: @@ -431,7 +485,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:frontend_server_client;commands:test_5" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:frontend_server_client;commands:test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:frontend_server_client os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -460,7 +514,7 @@ jobs: - job_002 - job_003 - job_004 - job_011: + job_012: name: "unit_test; linux; Dart dev; PKG: webdev; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test -j 1`" runs-on: ubuntu-latest steps: @@ -468,7 +522,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:webdev;commands:command_0-command_1-test_5" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:webdev;commands:command_0-command_1-test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:dev;packages:webdev os:ubuntu-latest;pub-cache-hosted;sdk:dev @@ -505,8 +559,8 @@ jobs: - job_002 - job_003 - job_004 - job_012: - name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --tags=extension`" + job_013: + name: "unit_test; windows; Dart dev; PKG: debug_extension; `dart test -j 1`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -518,22 +572,22 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: dwds_pub_upgrade - name: dwds; dart pub upgrade + - id: debug_extension_pub_upgrade + name: debug_extension; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: dwds - - name: "dwds; dart test --tags=extension" - run: "dart test --tags=extension" - if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" - working-directory: dwds + working-directory: debug_extension + - name: "debug_extension; dart test -j 1" + run: dart test -j 1 + if: "always() && steps.debug_extension_pub_upgrade.conclusion == 'success'" + working-directory: debug_extension needs: - job_001 - job_002 - job_003 - job_004 - job_013: - name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 0 --exclude-tags=extension`" + job_014: + name: "unit_test; windows; Dart dev; PKG: frontend_server_client; `dart test -j 1`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -545,22 +599,49 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: dwds_pub_upgrade - name: dwds; dart pub upgrade + - id: frontend_server_client_pub_upgrade + name: frontend_server_client; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: dwds - - name: "dwds; dart test --total-shards 3 --shard-index 0 --exclude-tags=extension" - run: "dart test --total-shards 3 --shard-index 0 --exclude-tags=extension" - if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" - working-directory: dwds + working-directory: frontend_server_client + - name: "frontend_server_client; dart test -j 1" + run: dart test -j 1 + if: "always() && steps.frontend_server_client_pub_upgrade.conclusion == 'success'" + working-directory: frontend_server_client needs: - job_001 - job_002 - job_003 - job_004 - job_014: - name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 1 --exclude-tags=extension`" + job_015: + name: "unit_test; windows; Dart dev; PKG: webdev; `dart test -j 1`" + runs-on: windows-latest + steps: + - name: Setup Dart SDK + uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c + with: + sdk: dev + - id: checkout + name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + persist-credentials: false + - id: webdev_pub_upgrade + name: webdev; dart pub upgrade + run: dart pub upgrade + if: "always() && steps.checkout.conclusion == 'success'" + working-directory: webdev + - name: "webdev; dart test -j 1" + run: dart test -j 1 + if: "always() && steps.webdev_pub_upgrade.conclusion == 'success'" + working-directory: webdev + needs: + - job_001 + - job_002 + - job_003 + - job_004 + job_016: + name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --tags=extension`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -577,8 +658,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: dwds - - name: "dwds; dart test --total-shards 3 --shard-index 1 --exclude-tags=extension" - run: "dart test --total-shards 3 --shard-index 1 --exclude-tags=extension" + - name: "dwds; dart test --tags=extension" + run: "dart test --tags=extension" if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" working-directory: dwds needs: @@ -586,8 +667,8 @@ jobs: - job_002 - job_003 - job_004 - job_015: - name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 2 --exclude-tags=extension`" + job_017: + name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 0 --exclude-tags=extension`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -604,8 +685,8 @@ jobs: run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" working-directory: dwds - - name: "dwds; dart test --total-shards 3 --shard-index 2 --exclude-tags=extension" - run: "dart test --total-shards 3 --shard-index 2 --exclude-tags=extension" + - name: "dwds; dart test --total-shards 3 --shard-index 0 --exclude-tags=extension" + run: "dart test --total-shards 3 --shard-index 0 --exclude-tags=extension" if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" working-directory: dwds needs: @@ -613,8 +694,8 @@ jobs: - job_002 - job_003 - job_004 - job_016: - name: "unit_test; windows; Dart dev; PKG: dwds_test_common; `dart test --exclude-tags=release`" + job_018: + name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 1 --exclude-tags=extension`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -626,22 +707,22 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: dwds_test_common_pub_upgrade - name: dwds_test_common; dart pub upgrade + - id: dwds_pub_upgrade + name: dwds; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: dwds_test_common - - name: "dwds_test_common; dart test --exclude-tags=release" - run: "dart test --exclude-tags=release" - if: "always() && steps.dwds_test_common_pub_upgrade.conclusion == 'success'" - working-directory: dwds_test_common + working-directory: dwds + - name: "dwds; dart test --total-shards 3 --shard-index 1 --exclude-tags=extension" + run: "dart test --total-shards 3 --shard-index 1 --exclude-tags=extension" + if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" + working-directory: dwds needs: - job_001 - job_002 - job_003 - job_004 - job_017: - name: "unit_test; windows; Dart dev; PKG: frontend_server_client; `dart test -j 1`" + job_019: + name: "unit_test; windows; Dart dev; PKG: dwds; `dart test --total-shards 3 --shard-index 2 --exclude-tags=extension`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -653,22 +734,22 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: frontend_server_client_pub_upgrade - name: frontend_server_client; dart pub upgrade + - id: dwds_pub_upgrade + name: dwds; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: frontend_server_client - - name: "frontend_server_client; dart test -j 1" - run: dart test -j 1 - if: "always() && steps.frontend_server_client_pub_upgrade.conclusion == 'success'" - working-directory: frontend_server_client + working-directory: dwds + - name: "dwds; dart test --total-shards 3 --shard-index 2 --exclude-tags=extension" + run: "dart test --total-shards 3 --shard-index 2 --exclude-tags=extension" + if: "always() && steps.dwds_pub_upgrade.conclusion == 'success'" + working-directory: dwds needs: - job_001 - job_002 - job_003 - job_004 - job_018: - name: "unit_test; windows; Dart dev; PKG: webdev; `dart test -j 1`" + job_020: + name: "unit_test; windows; Dart dev; PKG: dwds_test_common; `dart test --exclude-tags=release`" runs-on: windows-latest steps: - name: Setup Dart SDK @@ -680,21 +761,21 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd with: persist-credentials: false - - id: webdev_pub_upgrade - name: webdev; dart pub upgrade + - id: dwds_test_common_pub_upgrade + name: dwds_test_common; dart pub upgrade run: dart pub upgrade if: "always() && steps.checkout.conclusion == 'success'" - working-directory: webdev - - name: "webdev; dart test -j 1" - run: dart test -j 1 - if: "always() && steps.webdev_pub_upgrade.conclusion == 'success'" - working-directory: webdev + working-directory: dwds_test_common + - name: "dwds_test_common; dart test --exclude-tags=release" + run: "dart test --exclude-tags=release" + if: "always() && steps.dwds_test_common_pub_upgrade.conclusion == 'success'" + working-directory: dwds_test_common needs: - job_001 - job_002 - job_003 - job_004 - job_019: + job_021: name: "beta_cron; linux; Dart beta; PKG: dwds; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test -j 1`" runs-on: ubuntu-latest if: "github.event_name == 'schedule'" @@ -703,7 +784,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:dwds;commands:command_0-command_1-test_5" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:dwds;commands:command_0-command_1-test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:dwds os:ubuntu-latest;pub-cache-hosted;sdk:beta @@ -754,7 +835,9 @@ jobs: - job_016 - job_017 - job_018 - job_020: + - job_019 + - job_020 + job_022: name: "beta_cron; linux; Dart beta; PKG: webdev; `Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &`, `echo \"CHROME_EXECUTABLE=$(which google-chrome)\" >> $GITHUB_ENV`, `dart test -j 1`" runs-on: ubuntu-latest if: "github.event_name == 'schedule'" @@ -763,7 +846,7 @@ jobs: uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 with: path: "~/.pub-cache/hosted" - key: "os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:webdev;commands:command_0-command_1-test_5" + key: "os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:webdev;commands:command_0-command_1-test_0" restore-keys: | os:ubuntu-latest;pub-cache-hosted;sdk:beta;packages:webdev os:ubuntu-latest;pub-cache-hosted;sdk:beta @@ -814,7 +897,9 @@ jobs: - job_016 - job_017 - job_018 - job_021: + - job_019 + - job_020 + job_023: name: "beta_cron; linux; Dart beta; PKG: dwds; `dart analyze .`" runs-on: ubuntu-latest if: "github.event_name == 'schedule'" @@ -866,7 +951,9 @@ jobs: - job_016 - job_017 - job_018 - job_022: + - job_019 + - job_020 + job_024: name: "beta_cron; linux; Dart beta; PKG: webdev; `dart analyze .`" runs-on: ubuntu-latest if: "github.event_name == 'schedule'" @@ -918,7 +1005,9 @@ jobs: - job_016 - job_017 - job_018 - job_023: + - job_019 + - job_020 + job_025: name: "beta_cron; windows; Dart beta; PKG: dwds; `dart test -j 1`" runs-on: windows-latest if: "github.event_name == 'schedule'" @@ -960,7 +1049,9 @@ jobs: - job_016 - job_017 - job_018 - job_024: + - job_019 + - job_020 + job_026: name: "beta_cron; windows; Dart beta; PKG: webdev; `dart test -j 1`" runs-on: windows-latest if: "github.event_name == 'schedule'" @@ -1002,7 +1093,9 @@ jobs: - job_016 - job_017 - job_018 - job_025: + - job_019 + - job_020 + job_027: name: Notify failure runs-on: ubuntu-latest if: "(github.event_name == 'push' || github.event_name == 'schedule') && failure()" @@ -1038,3 +1131,5 @@ jobs: - job_022 - job_023 - job_024 + - job_025 + - job_026 diff --git a/debug_extension/mono_pkg.yaml b/debug_extension/mono_pkg.yaml new file mode 100644 index 0000000000..42b321e034 --- /dev/null +++ b/debug_extension/mono_pkg.yaml @@ -0,0 +1,17 @@ +# See https://pub.dev/packages/mono_repo for details +stages: + - analyzer_and_format: + - group: + - format + - analyze: --fatal-infos . + sdk: dev + - unit_test: + - group: + - command: Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & + - test: -j 1 + sdk: dev + os: + - linux + - test: -j 1 + os: windows + sdk: dev diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index a68e5fe574..98538ff49a 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -1,8 +1,10 @@ ## 28.0.0 - -- Support expression evaluation in Frontend Server + Build Daemon mode via `DaemonExpressionCompiler`. -- Add `WebPathTranslator` to support path translation between Frontend Server and Build Daemon. -- Replace `PackageUriMapper` with `PathResolver` strategy. +- **Breaking Change**: Removed `PackageUriMapper` in favor of **`PathResolver`** - with `BuildRunnerPathResolver`, `FrontendServerPathResolver`, and `FlutterPathResolver` impls. +- **Breaking Change**: **`LoadStrategy`** implementors must now implement the **`assetScheme`** getter. +- Introduce **`AssetScheme`** to generalize asset naming schemes. +- Add support for Frontend Server + Build Daemon configuration with hot reload via **`FrontendServerBuildDaemonStrategyProvider`**. +- Expose **`DaemonExpressionCompiler`** for handling expression compilation directly via `build_daemon`. +- **`BuildSettings`** now supports **`useDebuggerModuleNames`** to distinguish between debugger-friendly paths and raw server paths. ## 27.1.3-wip diff --git a/dwds/lib/src/handlers/injected_client_js.dart b/dwds/lib/src/handlers/injected_client_js.dart index 93c9b319b6..06635d89ca 100644 --- a/dwds/lib/src/handlers/injected_client_js.dart +++ b/dwds/lib/src/handlers/injected_client_js.dart @@ -2,7 +2,7 @@ // Emits the transpiled client.js directly into a statically embeddable string. // dart format off -const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-values), the Dart to JavaScript compiler version: 3.14.0-edge.30b941a500c61ffb45fe23e49ae0576eada8d371.\n" +const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-values), the Dart to JavaScript compiler version: 3.14.0-edge.49708da8bbb61fcaf57229ecfad88ee2db967f44.\n" "// The code supports the following hooks:\n" "// dartPrint(message):\n" "// if this function is defined it is called instead of the Dart [print]\n" @@ -3830,15 +3830,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return A._TimerImpl\$(milliseconds < 0 ? 0 : milliseconds, callback);\n" " },\n" " _TimerImpl\$(milliseconds, callback) {\n" -" var t1 = new A._TimerImpl(true);\n" +" var t1 = new A._TimerImpl();\n" " t1._TimerImpl\$2(milliseconds, callback);\n" " return t1;\n" " },\n" -" _TimerImpl\$periodic(milliseconds, callback) {\n" -" var t1 = new A._TimerImpl(false);\n" -" t1._TimerImpl\$periodic\$2(milliseconds, callback);\n" -" return t1;\n" -" },\n" " _makeAsyncAwaitCompleter(\$T) {\n" " return new A._AsyncAwaitCompleter(new A._Future(\$.Zone__current, \$T._eval\$1(\"_Future<0>\")), \$T._eval\$1(\"_AsyncAwaitCompleter<0>\"));\n" " },\n" @@ -3876,91 +3871,20 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " },\n" " _wrapJsFunctionForAsync(\$function) {\n" " var \$protected = function(fn, ERROR) {\n" -" return function(errorCode, result) {\n" -" while (true) {\n" -" try {\n" -" fn(errorCode, result);\n" -" break;\n" -" } catch (error) {\n" -" result = error;\n" -" errorCode = ERROR;\n" +" return function(errorCode, result) {\n" +" while (true) {\n" +" try {\n" +" fn(errorCode, result);\n" +" break;\n" +" } catch (error) {\n" +" result = error;\n" +" errorCode = ERROR;\n" +" }\n" " }\n" -" }\n" -" };\n" -" }(\$function, 1);\n" -" return \$.Zone__current.registerBinaryCallback\$3\$1(new A._wrapJsFunctionForAsync_closure(\$protected), type\$.void, type\$.int, type\$.dynamic);\n" -" },\n" -" _asyncStarHelper(object, bodyFunctionOrErrorCode, controller) {\n" -" var t1, t2, t3,\n" -" _s10_ = \"controller\";\n" -" if (bodyFunctionOrErrorCode === 0) {\n" -" t1 = controller.cancelationFuture;\n" -" if (t1 != null)\n" -" t1._completeWithValue\$1(null);\n" -" else {\n" -" t1 = controller.___AsyncStarStreamController_controller_A;\n" -" t1 === \$ && A.throwLateFieldNI(_s10_);\n" -" t1.close\$0();\n" -" }\n" -" return;\n" -" } else if (bodyFunctionOrErrorCode === 1) {\n" -" t1 = controller.cancelationFuture;\n" -" if (t1 != null) {\n" -" t2 = A.unwrapException(object);\n" -" t3 = A.getTraceFromException(object);\n" -" t1._completeErrorObject\$1(new A.AsyncError(t2, t3));\n" -" } else {\n" -" t1 = A.unwrapException(object);\n" -" t2 = A.getTraceFromException(object);\n" -" t3 = controller.___AsyncStarStreamController_controller_A;\n" -" t3 === \$ && A.throwLateFieldNI(_s10_);\n" -" t3.addError\$2(t1, t2);\n" -" controller.___AsyncStarStreamController_controller_A.close\$0();\n" -" }\n" -" return;\n" -" }\n" -" type\$.void_Function_int_dynamic._as(bodyFunctionOrErrorCode);\n" -" if (object instanceof A._IterationMarker) {\n" -" if (controller.cancelationFuture != null) {\n" -" bodyFunctionOrErrorCode.call\$2(2, null);\n" -" return;\n" -" }\n" -" t1 = object.state;\n" -" if (t1 === 0) {\n" -" t1 = object.value;\n" -" t2 = controller.___AsyncStarStreamController_controller_A;\n" -" t2 === \$ && A.throwLateFieldNI(_s10_);\n" -" t2.add\$1(0, controller.\$ti._precomputed1._as(t1));\n" -" A.scheduleMicrotask(new A._asyncStarHelper_closure(controller, bodyFunctionOrErrorCode));\n" -" return;\n" -" } else if (t1 === 1) {\n" -" t1 = controller.\$ti._eval\$1(\"Stream<1>\")._as(type\$.Stream_dynamic._as(object.value));\n" -" t2 = controller.___AsyncStarStreamController_controller_A;\n" -" t2 === \$ && A.throwLateFieldNI(_s10_);\n" -" t2.addStream\$2\$cancelOnError(t1, false).then\$1\$1(new A._asyncStarHelper_closure0(controller, bodyFunctionOrErrorCode), type\$.Null);\n" -" return;\n" -" }\n" -" }\n" -" A._awaitOnObject(object, bodyFunctionOrErrorCode);\n" -" },\n" -" _streamOfController(controller) {\n" -" var t1 = controller.___AsyncStarStreamController_controller_A;\n" -" t1 === \$ && A.throwLateFieldNI(\"controller\");\n" -" return new A._ControllerStream(t1, A._instanceType(t1)._eval\$1(\"_ControllerStream<1>\"));\n" -" },\n" -" _AsyncStarStreamController\$(body, \$T) {\n" -" var t1 = new A._AsyncStarStreamController(\$T._eval\$1(\"_AsyncStarStreamController<0>\"));\n" -" t1._AsyncStarStreamController\$1(body, \$T);\n" -" return t1;\n" -" },\n" -" _makeAsyncStarStreamController(body, \$T) {\n" -" return A._AsyncStarStreamController\$(body, \$T);\n" -" },\n" -" _IterationMarker_yieldStar(values) {\n" -" return new A._IterationMarker(values, 1);\n" -" },\n" -" _IterationMarker_yieldSingle(value) {\n" -" return new A._IterationMarker(value, 0);\n" +" };\n" +" }(\$function, 1),\n" +" t1 = \$.Zone__current;\n" +" return t1._registerBinaryCallbackZoned\$3\$2(t1, type\$.void_Function_int_dynamic._as(new A._wrapJsFunctionForAsync_closure(\$protected)), type\$.void, type\$.int, type\$.dynamic);\n" " },\n" " AsyncError_defaultStackTrace(error) {\n" " var stackTrace;\n" @@ -4016,9 +3940,9 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _interceptError(error, stackTrace) {\n" " var replacement, t1, t2,\n" " zone = \$.Zone__current;\n" -" if (zone === B.C__RootZone)\n" +" if (zone === B.Zone_jYP)\n" " return null;\n" -" replacement = zone.errorCallback\$2(error, stackTrace);\n" +" replacement = zone._errorCallbackZoned\$3(zone, error, stackTrace);\n" " if (replacement == null)\n" " return null;\n" " t1 = replacement.error;\n" @@ -4029,7 +3953,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " },\n" " _interceptUserError(error, stackTrace) {\n" " var replacement;\n" -" if (\$.Zone__current !== B.C__RootZone) {\n" +" if (\$.Zone__current !== B.Zone_jYP) {\n" " replacement = A._interceptError(error, stackTrace);\n" " if (replacement != null)\n" " return replacement;\n" @@ -4055,7 +3979,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return t1;\n" " },\n" " _Future__chainCoreFuture(source, target, sync) {\n" -" var t2, t3, ignoreError, listeners, _box_0 = {},\n" +" var t2, t3, ignoreError, listeners, targetZone, _box_0 = {},\n" " t1 = _box_0.source = source;\n" " for (t2 = type\$._Future_dynamic; t3 = t1._state, (t3 & 4) !== 0; t1 = source) {\n" " source = t2._as(t1._resultOrListeners);\n" @@ -4089,7 +4013,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return;\n" " }\n" " target._state ^= 2;\n" -" target._zone.scheduleMicrotask\$1(new A._Future__chainCoreFuture_closure(_box_0, target));\n" +" targetZone = target._zone;\n" +" targetZone._scheduleMicrotaskZoned\$2(targetZone, new A._Future__chainCoreFuture_closure(_box_0, target));\n" " },\n" " _Future__propagateToListeners(source, listeners) {\n" " var t2, t3, _box_0, t4, t5, hasError, asyncError, nextListener, nextListener0, sourceResult, t6, zone, oldZone, result, current, _box_1 = {},\n" @@ -4102,7 +4027,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " if (listeners == null) {\n" " if (hasError && (t4 & 1) === 0) {\n" " asyncError = t2._as(t1._resultOrListeners);\n" -" t1._zone.handleUncaughtError\$2(asyncError.error, asyncError.stackTrace);\n" +" t1 = t1._zone;\n" +" t1._handleUncaughtErrorZoned\$3(t1, asyncError.error, asyncError.stackTrace);\n" " }\n" " return;\n" " }\n" @@ -4125,15 +4051,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t6 = true;\n" " if (t6) {\n" " zone = t1.result._zone;\n" -" if (hasError) {\n" +" if (hasError && t4._zone._handleUncaughtErrorFunction != zone._handleUncaughtErrorFunction) {\n" +" t2._as(sourceResult);\n" " t1 = t4._zone;\n" -" t1 = !(t1 === zone || t1.get\$errorZone() === zone.get\$errorZone());\n" -" } else\n" -" t1 = false;\n" -" if (t1) {\n" -" t1 = _box_1.source;\n" -" asyncError = t2._as(t1._resultOrListeners);\n" -" t1._zone.handleUncaughtError\$2(asyncError.error, asyncError.stackTrace);\n" +" t1._handleUncaughtErrorZoned\$3(t1, sourceResult.error, sourceResult.stackTrace);\n" " return;\n" " }\n" " oldZone = \$.Zone__current;\n" @@ -4141,7 +4062,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " \$.Zone__current = zone;\n" " else\n" " oldZone = null;\n" -" t1 = _box_0.listener.state;\n" +" t1 = t1.state;\n" " if ((t1 & 15) === 8)\n" " new A._Future__propagateToListeners_handleWhenCompleteCallback(_box_0, _box_1, hasError).call\$0();\n" " else if (t5) {\n" @@ -4192,10 +4113,12 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " },\n" " _registerErrorHandler(errorHandler, zone) {\n" -" if (type\$.dynamic_Function_Object_StackTrace._is(errorHandler))\n" -" return zone.registerBinaryCallback\$3\$1(errorHandler, type\$.dynamic, type\$.Object, type\$.StackTrace);\n" -" if (type\$.dynamic_Function_Object._is(errorHandler))\n" -" return zone.registerUnaryCallback\$2\$1(errorHandler, type\$.dynamic, type\$.Object);\n" +" var t1 = type\$.dynamic_Function_Object_StackTrace;\n" +" if (t1._is(errorHandler))\n" +" return zone._registerBinaryCallbackZoned\$3\$2(zone, t1._as(errorHandler), type\$.dynamic, type\$.Object, type\$.StackTrace);\n" +" t1 = type\$.dynamic_Function_Object;\n" +" if (t1._is(errorHandler))\n" +" return zone._registerUnaryCallbackZoned\$2\$2(zone, t1._as(errorHandler), type\$.dynamic, type\$.Object);\n" " throw A.wrapException(A.ArgumentError\$value(errorHandler, \"onError\", string\$.Error_));\n" " },\n" " _microtaskLoop() {\n" @@ -4252,32 +4175,27 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " },\n" " scheduleMicrotask(callback) {\n" -" var t1, _null = null,\n" -" currentZone = \$.Zone__current;\n" -" if (B.C__RootZone === currentZone) {\n" -" A._rootScheduleMicrotask(_null, _null, B.C__RootZone, callback);\n" +" var currentZone = \$.Zone__current;\n" +" if (B.Zone_jYP === currentZone) {\n" +" A._rootScheduleMicrotask(B.Zone_jYP, callback);\n" " return;\n" " }\n" -" if (B.C__RootZone === currentZone.get\$_scheduleMicrotask().zone)\n" -" t1 = B.C__RootZone.get\$errorZone() === currentZone.get\$errorZone();\n" -" else\n" -" t1 = false;\n" -" if (t1) {\n" -" A._rootScheduleMicrotask(_null, _null, currentZone, currentZone.registerCallback\$1\$1(callback, type\$.void));\n" +" if (currentZone._scheduleMicrotaskFunction == null && currentZone._handleUncaughtErrorFunction == null) {\n" +" A._rootScheduleMicrotask(currentZone, currentZone._registerCallbackZoned\$1\$2(currentZone, callback, type\$.void));\n" " return;\n" " }\n" -" t1 = \$.Zone__current;\n" -" t1.scheduleMicrotask\$1(t1.bindCallbackGuarded\$1(callback));\n" +" currentZone._scheduleMicrotaskZoned\$2(currentZone, currentZone.bindCallbackGuarded\$1(callback));\n" " },\n" " StreamIterator_StreamIterator(stream, \$T) {\n" " A.checkNotNullable(stream, \"stream\", type\$.Object);\n" " return new A._StreamIterator(\$T._eval\$1(\"_StreamIterator<0>\"));\n" " },\n" -" StreamController_StreamController(onCancel, onListen, onResume, \$T) {\n" -" return new A._AsyncStreamController(onListen, null, onResume, onCancel, \$T._eval\$1(\"_AsyncStreamController<0>\"));\n" +" StreamController_StreamController(\$T) {\n" +" var _null = null;\n" +" return new A._AsyncStreamController(_null, _null, _null, _null, \$T._eval\$1(\"_AsyncStreamController<0>\"));\n" " },\n" " _runGuarded(notificationHandler) {\n" -" var e, s, exception;\n" +" var e, s, exception, t1;\n" " if (notificationHandler == null)\n" " return;\n" " try {\n" @@ -4285,31 +4203,31 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" -" \$.Zone__current.handleUncaughtError\$2(e, s);\n" +" t1 = \$.Zone__current;\n" +" t1._handleUncaughtErrorZoned\$3(t1, A._asObject(e), type\$.StackTrace._as(s));\n" " }\n" " },\n" -" _AddStreamState_makeErrorHandler(controller) {\n" -" return new A._AddStreamState_makeErrorHandler_closure(controller);\n" -" },\n" " _BufferingStreamSubscription__registerDataHandler(zone, handleData, \$T) {\n" " var t1 = handleData == null ? A.async___nullDataHandler\$closure() : handleData;\n" -" return zone.registerUnaryCallback\$2\$1(t1, type\$.void, \$T);\n" +" return zone._registerUnaryCallbackZoned\$2\$2(zone, type\$.\$env_1_1_void._bind\$1(\$T)._eval\$1(\"1(2)\")._as(t1), type\$.void, \$T);\n" " },\n" " _BufferingStreamSubscription__registerErrorHandler(zone, handleError) {\n" " if (handleError == null)\n" " handleError = A.async___nullErrorHandler\$closure();\n" " if (type\$.void_Function_Object_StackTrace._is(handleError))\n" -" return zone.registerBinaryCallback\$3\$1(handleError, type\$.dynamic, type\$.Object, type\$.StackTrace);\n" +" return zone._registerBinaryCallbackZoned\$3\$2(zone, type\$.dynamic_Function_Object_StackTrace._as(handleError), type\$.dynamic, type\$.Object, type\$.StackTrace);\n" " if (type\$.void_Function_Object._is(handleError))\n" -" return zone.registerUnaryCallback\$2\$1(handleError, type\$.dynamic, type\$.Object);\n" +" return zone._registerUnaryCallbackZoned\$2\$2(zone, type\$.dynamic_Function_Object._as(handleError), type\$.dynamic, type\$.Object);\n" " throw A.wrapException(A.ArgumentError\$(string\$.handle, null));\n" " },\n" " _nullDataHandler(value) {\n" " },\n" " _nullErrorHandler(error, stackTrace) {\n" +" var t1;\n" " A._asObject(error);\n" " type\$.StackTrace._as(stackTrace);\n" -" \$.Zone__current.handleUncaughtError\$2(error, stackTrace);\n" +" t1 = \$.Zone__current;\n" +" t1._handleUncaughtErrorZoned\$3(t1, error, stackTrace);\n" " },\n" " _nullDoneHandler() {\n" " },\n" @@ -4322,34 +4240,35 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " },\n" " Timer_Timer(duration, callback) {\n" " var t1 = \$.Zone__current;\n" -" if (t1 === B.C__RootZone)\n" -" return t1.createTimer\$2(duration, callback);\n" -" return t1.createTimer\$2(duration, t1.bindCallbackGuarded\$1(callback));\n" +" if (t1 === B.Zone_jYP)\n" +" return t1._createTimerZoned\$3(t1, duration, type\$.void_Function._as(callback));\n" +" return t1._createTimerZoned\$3(t1, duration, type\$.void_Function._as(t1.bindCallbackGuarded\$1(callback)));\n" " },\n" " runZonedGuarded(body, onError, \$R) {\n" -" var error, stackTrace, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, exception, _null = null, zoneSpecification = null, zoneValues = null,\n" +" var error, stackTrace, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, newZone, exception, _null = null, zoneSpecification = null, zoneValues = null,\n" " parentZone = \$.Zone__current,\n" -" errorHandler = new A.runZonedGuarded_closure(parentZone, onError);\n" +" t1 = new A.runZonedGuarded_errorHandler(parentZone, onError);\n" " if (zoneSpecification == null)\n" -" zoneSpecification = new A.ZoneSpecification(errorHandler, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null);\n" +" zoneSpecification = new A.ZoneSpecification(t1, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null, _null);\n" " else {\n" -" t1 = zoneSpecification;\n" -" t2 = t1.run;\n" -" t3 = t1.runUnary;\n" -" t4 = t1.runBinary;\n" -" t5 = t1.registerCallback;\n" -" t6 = t1.registerUnaryCallback;\n" -" t7 = t1.registerBinaryCallback;\n" -" t8 = t1.errorCallback;\n" -" t9 = t1.scheduleMicrotask;\n" -" t10 = t1.createTimer;\n" -" t11 = t1.createPeriodicTimer;\n" -" t12 = t1.print;\n" -" t1 = t1.fork;\n" -" zoneSpecification = new A.ZoneSpecification(errorHandler, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t1);\n" +" t2 = zoneSpecification;\n" +" t3 = t2.run;\n" +" t4 = t2.runUnary;\n" +" t5 = t2.runBinary;\n" +" t6 = t2.registerCallback;\n" +" t7 = t2.registerUnaryCallback;\n" +" t8 = t2.registerBinaryCallback;\n" +" t9 = t2.errorCallback;\n" +" t10 = t2.scheduleMicrotask;\n" +" t11 = t2.createTimer;\n" +" t12 = t2.createPeriodicTimer;\n" +" t13 = t2.print;\n" +" t2 = t2.fork;\n" +" zoneSpecification = new A.ZoneSpecification(t1, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t2);\n" " }\n" " try {\n" -" t1 = parentZone.fork\$2\$specification\$zoneValues(zoneSpecification, zoneValues).run\$1\$1(body, \$R);\n" +" newZone = parentZone._forkZoned\$3(parentZone, zoneSpecification, zoneValues);\n" +" t1 = newZone._runZoned\$1\$2(newZone, body, \$R);\n" " return t1;\n" " } catch (exception) {\n" " error = A.unwrapException(exception);\n" @@ -4358,125 +4277,22 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " return _null;\n" " },\n" -" _rootHandleUncaughtError(\$self, \$parent, zone, error, stackTrace) {\n" -" A._rootHandleError(error, stackTrace);\n" -" },\n" -" _rootHandleError(error, stackTrace) {\n" -" A._schedulePriorityAsyncCallback(new A._rootHandleError_closure(error, stackTrace));\n" -" },\n" -" _rootRun(\$self, \$parent, zone, f, \$R) {\n" -" var old, t1;\n" -" type\$.nullable_Zone._as(\$self);\n" -" type\$.nullable_ZoneDelegate._as(\$parent);\n" -" type\$.Zone._as(zone);\n" -" \$R._eval\$1(\"0()\")._as(f);\n" -" t1 = \$.Zone__current;\n" -" if (t1 === zone)\n" -" return f.call\$0();\n" -" \$.Zone__current = zone;\n" -" old = t1;\n" -" try {\n" -" t1 = f.call\$0();\n" -" return t1;\n" -" } finally {\n" -" \$.Zone__current = old;\n" -" }\n" +" ZoneDelegate\$_() {\n" +" return new A.ZoneDelegate(B.Zone_jYP);\n" " },\n" -" _rootRunUnary(\$self, \$parent, zone, f, arg, \$R, \$T) {\n" -" var old, t1;\n" -" type\$.nullable_Zone._as(\$self);\n" -" type\$.nullable_ZoneDelegate._as(\$parent);\n" -" type\$.Zone._as(zone);\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(f);\n" -" \$T._as(arg);\n" -" t1 = \$.Zone__current;\n" -" if (t1 === zone)\n" -" return f.call\$1(arg);\n" -" \$.Zone__current = zone;\n" -" old = t1;\n" -" try {\n" -" t1 = f.call\$1(arg);\n" -" return t1;\n" -" } finally {\n" -" \$.Zone__current = old;\n" -" }\n" +" _rootHandleUncaughtError(error, stackTrace) {\n" +" A._schedulePriorityAsyncCallback(new A._rootHandleUncaughtError_closure(error, stackTrace));\n" " },\n" -" _rootRunBinary(\$self, \$parent, zone, f, arg1, arg2, \$R, \$T1, \$T2) {\n" -" var old, t1;\n" -" type\$.nullable_Zone._as(\$self);\n" -" type\$.nullable_ZoneDelegate._as(\$parent);\n" -" type\$.Zone._as(zone);\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(f);\n" -" \$T1._as(arg1);\n" -" \$T2._as(arg2);\n" -" t1 = \$.Zone__current;\n" -" if (t1 === zone)\n" -" return f.call\$2(arg1, arg2);\n" -" \$.Zone__current = zone;\n" -" old = t1;\n" -" try {\n" -" t1 = f.call\$2(arg1, arg2);\n" -" return t1;\n" -" } finally {\n" -" \$.Zone__current = old;\n" -" }\n" -" },\n" -" _rootRegisterCallback(\$self, \$parent, zone, f, \$R) {\n" -" var t1 = type\$.Zone;\n" -" t1._as(\$self);\n" -" type\$.ZoneDelegate._as(\$parent);\n" -" t1._as(zone);\n" -" return \$R._eval\$1(\"0()\")._as(f);\n" -" },\n" -" _rootRegisterUnaryCallback(\$self, \$parent, zone, f, \$R, \$T) {\n" -" var t1 = type\$.Zone;\n" -" t1._as(\$self);\n" -" type\$.ZoneDelegate._as(\$parent);\n" -" t1._as(zone);\n" -" return \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(f);\n" -" },\n" -" _rootRegisterBinaryCallback(\$self, \$parent, zone, f, \$R, \$T1, \$T2) {\n" -" var t1 = type\$.Zone;\n" -" t1._as(\$self);\n" -" type\$.ZoneDelegate._as(\$parent);\n" -" t1._as(zone);\n" -" return \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(f);\n" -" },\n" -" _rootErrorCallback(\$self, \$parent, zone, error, stackTrace) {\n" -" var t1 = type\$.Zone;\n" -" t1._as(\$self);\n" -" type\$.ZoneDelegate._as(\$parent);\n" -" t1._as(zone);\n" -" A._asObject(error);\n" -" type\$.nullable_StackTrace._as(stackTrace);\n" -" return null;\n" +" _rootScheduleMicrotask(zone, callback) {\n" +" if (B.Zone_jYP !== zone)\n" +" callback = zone._handleUncaughtErrorFunction != null ? zone.bindCallbackGuarded\$1(callback) : zone.bindCallback\$1\$1(callback, type\$.void);\n" +" A._scheduleAsyncCallback(callback);\n" " },\n" -" _rootScheduleMicrotask(\$self, \$parent, zone, f) {\n" -" var t1, t2;\n" -" type\$.void_Function._as(f);\n" -" if (B.C__RootZone !== zone) {\n" -" t1 = B.C__RootZone.get\$errorZone();\n" -" t2 = zone.get\$errorZone();\n" -" f = t1 !== t2 ? zone.bindCallbackGuarded\$1(f) : zone.bindCallback\$1\$1(f, type\$.void);\n" -" }\n" -" A._scheduleAsyncCallback(f);\n" -" },\n" -" _rootCreateTimer(\$self, \$parent, zone, duration, callback) {\n" -" callback = zone.bindCallback\$1\$1(type\$.void_Function._as(callback), type\$.void);\n" -" return A.Timer__createTimer(duration, callback);\n" -" },\n" -" _rootCreatePeriodicTimer(\$self, \$parent, zone, duration, callback) {\n" -" var milliseconds;\n" -" callback = zone.bindUnaryCallback\$2\$1(type\$.void_Function_Timer._as(callback), type\$.void, type\$.Timer);\n" -" milliseconds = duration.get\$inMilliseconds();\n" -" return A._TimerImpl\$periodic(milliseconds.\$lt(0, 0) ? 0 : milliseconds, callback);\n" -" },\n" -" _rootPrint(\$self, \$parent, zone, line) {\n" -" A.printString(line);\n" -" },\n" -" _rootFork(\$self, \$parent, zone, specification, zoneValues) {\n" -" var t1 = new A._CustomZone(zone.get\$_run(), zone.get\$_runUnary(), zone.get\$_runBinary(), zone.get\$_registerCallback(), zone.get\$_registerUnaryCallback(), zone.get\$_registerBinaryCallback(), zone.get\$_errorCallback(), zone.get\$_scheduleMicrotask(), zone.get\$_createTimer(), zone.get\$_createPeriodicTimer(), zone.get\$_print(), zone.get\$_fork(), zone.get\$_handleUncaughtError(), zone.get\$_zoneValues(), zone);\n" -" t1._handleUncaughtError = new A._ZoneHandleUncaughtError(t1, specification.handleUncaughtError);\n" +" _rootFork(zone, specification, zoneValues) {\n" +" var t1 = new A.ZoneDelegate(B.Zone_jYP),\n" +" t2 = new A._ZoneHandleUncaughtError(B.Zone_jYP, specification.handleUncaughtError);\n" +" t1 = t1._zone = new A.Zone(zone, t1, zone._runFunction, zone._runUnaryFunction, zone._runBinaryFunction, zone._registerCallbackFunction, zone._registerUnaryCallbackFunction, zone._registerBinaryCallbackFunction, zone._errorCallbackFunction, zone._scheduleMicrotaskFunction, zone._createTimerFunction, zone._createPeriodicTimerFunction, zone._printFunction, zone._forkFunction, t2, zone._zoneValues);\n" +" t2.zone = t1;\n" " return t1;\n" " },\n" " _AsyncRun__initializeScheduleImmediate_internalCallback: function _AsyncRun__initializeScheduleImmediate_internalCallback(t0) {\n" @@ -4493,22 +4309,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _AsyncRun__scheduleImmediateWithSetImmediate_internalCallback: function _AsyncRun__scheduleImmediateWithSetImmediate_internalCallback(t0) {\n" " this.callback = t0;\n" " },\n" -" _TimerImpl: function _TimerImpl(t0) {\n" -" this._once = t0;\n" +" _TimerImpl: function _TimerImpl() {\n" " this._handle = null;\n" -" this._tick = 0;\n" " },\n" " _TimerImpl_internalCallback: function _TimerImpl_internalCallback(t0, t1) {\n" " this.\$this = t0;\n" " this.callback = t1;\n" " },\n" -" _TimerImpl\$periodic_closure: function _TimerImpl\$periodic_closure(t0, t1, t2, t3) {\n" -" var _ = this;\n" -" _.\$this = t0;\n" -" _.milliseconds = t1;\n" -" _.start = t2;\n" -" _.callback = t3;\n" -" },\n" " _AsyncAwaitCompleter: function _AsyncAwaitCompleter(t0, t1) {\n" " this._future = t0;\n" " this.isSync = false;\n" @@ -4523,45 +4330,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _wrapJsFunctionForAsync_closure: function _wrapJsFunctionForAsync_closure(t0) {\n" " this.\$protected = t0;\n" " },\n" -" _asyncStarHelper_closure: function _asyncStarHelper_closure(t0, t1) {\n" -" this.controller = t0;\n" -" this.bodyFunction = t1;\n" -" },\n" -" _asyncStarHelper_closure0: function _asyncStarHelper_closure0(t0, t1) {\n" -" this.controller = t0;\n" -" this.bodyFunction = t1;\n" -" },\n" -" _AsyncStarStreamController: function _AsyncStarStreamController(t0) {\n" -" var _ = this;\n" -" _.___AsyncStarStreamController_controller_A = \$;\n" -" _.isSuspended = false;\n" -" _.cancelationFuture = null;\n" -" _.\$ti = t0;\n" -" },\n" -" _AsyncStarStreamController__resumeBody: function _AsyncStarStreamController__resumeBody(t0) {\n" -" this.body = t0;\n" -" },\n" -" _AsyncStarStreamController__resumeBody_closure: function _AsyncStarStreamController__resumeBody_closure(t0) {\n" -" this.body = t0;\n" -" },\n" -" _AsyncStarStreamController_closure0: function _AsyncStarStreamController_closure0(t0) {\n" -" this._resumeBody = t0;\n" -" },\n" -" _AsyncStarStreamController_closure1: function _AsyncStarStreamController_closure1(t0, t1) {\n" -" this.\$this = t0;\n" -" this._resumeBody = t1;\n" -" },\n" -" _AsyncStarStreamController_closure: function _AsyncStarStreamController_closure(t0, t1) {\n" -" this.\$this = t0;\n" -" this.body = t1;\n" -" },\n" -" _AsyncStarStreamController__closure: function _AsyncStarStreamController__closure(t0) {\n" -" this.body = t0;\n" -" },\n" -" _IterationMarker: function _IterationMarker(t0, t1) {\n" -" this.value = t0;\n" -" this.state = t1;\n" -" },\n" " AsyncError: function AsyncError(t0, t1) {\n" " this.error = t0;\n" " this.stackTrace = t1;\n" @@ -4721,21 +4489,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._async\$_target = t0;\n" " this.\$ti = t1;\n" " },\n" -" _AddStreamState: function _AddStreamState() {\n" -" },\n" -" _AddStreamState_makeErrorHandler_closure: function _AddStreamState_makeErrorHandler_closure(t0) {\n" -" this.controller = t0;\n" -" },\n" -" _AddStreamState_cancel_closure: function _AddStreamState_cancel_closure(t0) {\n" -" this.\$this = t0;\n" -" },\n" -" _StreamControllerAddStreamState: function _StreamControllerAddStreamState(t0, t1, t2, t3) {\n" -" var _ = this;\n" -" _._varData = t0;\n" -" _.addStreamFuture = t1;\n" -" _.addSubscription = t2;\n" -" _.\$ti = t3;\n" -" },\n" " _BufferingStreamSubscription: function _BufferingStreamSubscription() {\n" " },\n" " _BufferingStreamSubscription_asFuture_closure: function _BufferingStreamSubscription_asFuture_closure(t0, t1) {\n" @@ -4798,6 +4551,26 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _EmptyStream: function _EmptyStream(t0) {\n" " this.\$ti = t0;\n" " },\n" +" _MultiStream: function _MultiStream(t0, t1, t2) {\n" +" this.isBroadcast = t0;\n" +" this._onListen = t1;\n" +" this.\$ti = t2;\n" +" },\n" +" _MultiStream_listen_closure: function _MultiStream_listen_closure(t0, t1) {\n" +" this.\$this = t0;\n" +" this.controller = t1;\n" +" },\n" +" _MultiStreamController: function _MultiStreamController(t0, t1, t2, t3, t4) {\n" +" var _ = this;\n" +" _._varData = null;\n" +" _._state = 0;\n" +" _._doneFuture = null;\n" +" _.onListen = t0;\n" +" _.onPause = t1;\n" +" _.onResume = t2;\n" +" _.onCancel = t3;\n" +" _.\$ti = t4;\n" +" },\n" " _cancelAndValue_closure: function _cancelAndValue_closure(t0, t1) {\n" " this.future = t0;\n" " this.value = t1;\n" @@ -4821,119 +4594,51 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._source = t1;\n" " this.\$ti = t2;\n" " },\n" -" _ZoneRun: function _ZoneRun(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneRunUnary: function _ZoneRunUnary(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneRunBinary: function _ZoneRunBinary(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneRegisterCallback: function _ZoneRegisterCallback(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneRegisterUnaryCallback: function _ZoneRegisterUnaryCallback(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneRegisterBinaryCallback: function _ZoneRegisterBinaryCallback(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneErrorCallback: function _ZoneErrorCallback(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneScheduleMicrotask: function _ZoneScheduleMicrotask(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneCreateTimer: function _ZoneCreateTimer(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneCreatePeriodicTimer: function _ZoneCreatePeriodicTimer() {\n" -" },\n" -" _ZonePrint: function _ZonePrint(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" -" _ZoneFork: function _ZoneFork(t0, t1) {\n" -" this.zone = t0;\n" -" this.\$function = t1;\n" -" },\n" " _ZoneHandleUncaughtError: function _ZoneHandleUncaughtError(t0, t1) {\n" " this.zone = t0;\n" " this.\$function = t1;\n" " },\n" -" _ZoneValues: function _ZoneValues(t0, t1) {\n" -" this.zone = t0;\n" -" this.map = t1;\n" -" },\n" -" _Zone: function _Zone() {\n" -" },\n" -" _CustomZone: function _CustomZone(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) {\n" +" Zone: function Zone(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15) {\n" " var _ = this;\n" -" _._run = t0;\n" -" _._runUnary = t1;\n" -" _._runBinary = t2;\n" -" _._registerCallback = t3;\n" -" _._registerUnaryCallback = t4;\n" -" _._registerBinaryCallback = t5;\n" -" _._errorCallback = t6;\n" -" _._scheduleMicrotask = t7;\n" -" _._createTimer = t8;\n" -" _._createPeriodicTimer = t9;\n" -" _._print = t10;\n" -" _._fork = t11;\n" -" _._handleUncaughtError = t12;\n" -" _._zoneValues = t13;\n" -" _._delegateCache = null;\n" -" _.parent = t14;\n" -" },\n" -" _CustomZone_bindCallback_closure: function _CustomZone_bindCallback_closure(t0, t1, t2) {\n" +" _._parent = t0;\n" +" _._delegate = t1;\n" +" _._runFunction = t2;\n" +" _._runUnaryFunction = t3;\n" +" _._runBinaryFunction = t4;\n" +" _._registerCallbackFunction = t5;\n" +" _._registerUnaryCallbackFunction = t6;\n" +" _._registerBinaryCallbackFunction = t7;\n" +" _._errorCallbackFunction = t8;\n" +" _._scheduleMicrotaskFunction = t9;\n" +" _._createTimerFunction = t10;\n" +" _._createPeriodicTimerFunction = t11;\n" +" _._printFunction = t12;\n" +" _._forkFunction = t13;\n" +" _._handleUncaughtErrorFunction = t14;\n" +" _._zoneValues = t15;\n" +" },\n" +" Zone_bindCallback_closure: function Zone_bindCallback_closure(t0, t1, t2) {\n" " this.\$this = t0;\n" " this.registered = t1;\n" " this.R = t2;\n" " },\n" -" _CustomZone_bindCallbackGuarded_closure: function _CustomZone_bindCallbackGuarded_closure(t0, t1) {\n" +" Zone_bindCallbackGuarded_closure: function Zone_bindCallbackGuarded_closure(t0, t1) {\n" " this.\$this = t0;\n" " this.registered = t1;\n" " },\n" -" _CustomZone_bindUnaryCallbackGuarded_closure: function _CustomZone_bindUnaryCallbackGuarded_closure(t0, t1, t2) {\n" +" Zone_bindUnaryCallbackGuarded_closure: function Zone_bindUnaryCallbackGuarded_closure(t0, t1, t2) {\n" " this.\$this = t0;\n" " this.registered = t1;\n" " this.T = t2;\n" " },\n" -" _RootZone: function _RootZone() {\n" -" },\n" -" _RootZone_bindCallback_closure: function _RootZone_bindCallback_closure(t0, t1, t2) {\n" -" this.\$this = t0;\n" -" this.f = t1;\n" -" this.R = t2;\n" -" },\n" -" _RootZone_bindCallbackGuarded_closure: function _RootZone_bindCallbackGuarded_closure(t0, t1) {\n" -" this.\$this = t0;\n" -" this.f = t1;\n" -" },\n" -" _RootZone_bindUnaryCallbackGuarded_closure: function _RootZone_bindUnaryCallbackGuarded_closure(t0, t1, t2) {\n" -" this.\$this = t0;\n" -" this.f = t1;\n" -" this.T = t2;\n" -" },\n" -" runZonedGuarded_closure: function runZonedGuarded_closure(t0, t1) {\n" +" runZonedGuarded_errorHandler: function runZonedGuarded_errorHandler(t0, t1) {\n" " this.parentZone = t0;\n" " this.onError = t1;\n" " },\n" -" _ZoneDelegate: function _ZoneDelegate(t0) {\n" -" this._delegationTarget = t0;\n" +" ZoneDelegate: function ZoneDelegate(t0) {\n" +" this._zone = t0;\n" " },\n" -" _rootHandleError_closure: function _rootHandleError_closure(t0, t1) {\n" +" _rootHandleUncaughtError_closure: function _rootHandleUncaughtError_closure(t0, t1) {\n" " this.error = t0;\n" " this.stackTrace = t1;\n" " },\n" @@ -5268,7 +4973,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._data = null;\n" " },\n" " _JsonMapKeyIterable: function _JsonMapKeyIterable(t0) {\n" -" this._parent = t0;\n" +" this._convert\$_parent = t0;\n" " },\n" " _Utf8Decoder__decoder_closure: function _Utf8Decoder__decoder_closure() {\n" " },\n" @@ -7648,35 +7353,35 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " },\n" " BaseResponse: function BaseResponse() {\n" " },\n" -" _rethrowAsClientException(e, st, request) {\n" -" var t1, message;\n" -" if (type\$.JSObject._is(e))\n" -" t1 = A._asString(e.name) === \"AbortError\";\n" -" else\n" -" t1 = false;\n" -" if (t1)\n" -" A.Error_throwWithStackTrace(new A.RequestAbortedException(\"Request aborted by `abortTrigger`\", request.url), st);\n" +" _toClientException(e, request) {\n" +" var message;\n" +" if (type\$.JSObject._is(e) && \"AbortError\" === A._asString(e.name))\n" +" return new A.RequestAbortedException(\"Request aborted by `abortTrigger`\", request.url);\n" " if (!(e instanceof A.ClientException)) {\n" " message = J.toString\$0\$(e);\n" " if (B.JSString_methods.startsWith\$1(message, \"TypeError: \"))\n" " message = B.JSString_methods.substring\$1(message, 11);\n" " e = new A.ClientException(message, request.url);\n" " }\n" -" A.Error_throwWithStackTrace(e, st);\n" +" return e;\n" " },\n" -" _readBody(request, response) {\n" -" return A._readBody\$body(request, response);\n" +" _rethrowAsClientException(e, st, request) {\n" +" A.Error_throwWithStackTrace(A._toClientException(e, request), st);\n" " },\n" -" _readBody\$body(request, response) {\n" -" var \$async\$_readBody = A._wrapJsFunctionForAsync(function(\$async\$errorCode, \$async\$result) {\n" -" switch (\$async\$errorCode) {\n" -" case 2:\n" -" \$async\$next = \$async\$nextWhenCanceled;\n" -" \$async\$goto = \$async\$next.pop();\n" -" break;\n" -" case 1:\n" -" \$async\$errorStack.push(\$async\$result);\n" -" \$async\$goto = \$async\$handler;\n" +" _bodyToStream(request, response) {\n" +" return new A._MultiStream(false, new A._bodyToStream_closure(request, response), type\$._MultiStream_List_int);\n" +" },\n" +" _readStreamBody(request, response, controller) {\n" +" return A._readStreamBody\$body(request, response, controller);\n" +" },\n" +" _readStreamBody\$body(request, response, controller) {\n" +" var \$async\$goto = 0,\n" +" \$async\$completer = A._makeAsyncAwaitCompleter(type\$.void),\n" +" \$async\$returnValue, \$async\$handler = 2, \$async\$errorStack = [], chunk, e, s, t2, t3, t4, t5, exception, t6, t7, _box_0, t1, reader, \$async\$exception;\n" +" var \$async\$_readStreamBody = A._wrapJsFunctionForAsync(function(\$async\$errorCode, \$async\$result) {\n" +" if (\$async\$errorCode === 1) {\n" +" \$async\$errorStack.push(\$async\$result);\n" +" \$async\$goto = \$async\$handler;\n" " }\n" " for (;;)\n" " switch (\$async\$goto) {\n" @@ -7684,114 +7389,124 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " // Function start\n" " _box_0 = {};\n" " t1 = A._asJSObjectQ(response.body);\n" -" bodyStreamReader = t1 == null ? null : A._asJSObject(t1.getReader());\n" -" if (bodyStreamReader == null) {\n" -" // goto return\n" -" \$async\$goto = 1;\n" -" break;\n" -" }\n" -" isDone = false;\n" -" _box_0.isError = false;\n" -" \$async\$handler = 4;\n" -" t1 = type\$.NativeUint8List, t2 = type\$.JSObject;\n" -" case 7:\n" +" reader = t1 == null ? null : A._asJSObject(t1.getReader());\n" +" \$async\$goto = reader == null ? 3 : 4;\n" +" break;\n" +" case 3:\n" +" // then\n" +" \$async\$goto = 5;\n" +" return A._asyncAwait(controller.close\$0(), \$async\$_readStreamBody);\n" +" case 5:\n" +" // returning from await.\n" +" // goto return\n" +" \$async\$goto = 1;\n" +" break;\n" +" case 4:\n" +" // join\n" +" _box_0.resumeSignal = null;\n" +" _box_0.hadError = _box_0.cancelled = false;\n" +" controller.set\$onResume(new A._readStreamBody_closure(_box_0));\n" +" controller.set\$onCancel(new A._readStreamBody_closure0(_box_0, reader, request));\n" +" t1 = type\$.NativeUint8List, t2 = controller.\$ti._precomputed1, t3 = type\$.JSObject, t4 = type\$._Future_void, t5 = type\$._AsyncCompleter_void;\n" +" case 6:\n" " // for condition\n" " // trivial condition\n" -" \$async\$goto = 9;\n" -" return A._asyncStarHelper(A.promiseToFuture(A._asJSObject(bodyStreamReader.read()), t2), \$async\$_readBody, \$async\$controller);\n" -" case 9:\n" +" chunk = null;\n" +" \$async\$handler = 9;\n" +" \$async\$goto = 12;\n" +" return A._asyncAwait(A.promiseToFuture(A._asJSObject(reader.read()), t3), \$async\$_readStreamBody);\n" +" case 12:\n" " // returning from await.\n" " chunk = \$async\$result;\n" -" if (A._asBool(chunk.done)) {\n" -" isDone = true;\n" -" // goto after for\n" -" \$async\$goto = 8;\n" -" break;\n" -" }\n" -" t3 = chunk.value;\n" -" t3.toString;\n" -" \$async\$goto = 10;\n" -" \$async\$nextWhenCanceled = [1, 5];\n" -" return A._asyncStarHelper(A._IterationMarker_yieldSingle(t1._as(t3)), \$async\$_readBody, \$async\$controller);\n" -" case 10:\n" -" // after yield\n" -" // goto for condition\n" -" \$async\$goto = 7;\n" -" break;\n" -" case 8:\n" -" // after for\n" -" \$async\$next.push(6);\n" -" // goto finally\n" -" \$async\$goto = 5;\n" +" \$async\$handler = 2;\n" +" // goto after finally\n" +" \$async\$goto = 11;\n" " break;\n" -" case 4:\n" +" case 9:\n" " // catch\n" -" \$async\$handler = 3;\n" +" \$async\$handler = 8;\n" " \$async\$exception = \$async\$errorStack.pop();\n" " e = A.unwrapException(\$async\$exception);\n" -" st = A.getTraceFromException(\$async\$exception);\n" -" _box_0.isError = true;\n" -" A._rethrowAsClientException(e, st, request);\n" -" \$async\$next.push(6);\n" -" // goto finally\n" -" \$async\$goto = 5;\n" -" break;\n" -" case 3:\n" -" // uncaught\n" -" \$async\$next = [2];\n" -" case 5:\n" -" // finally\n" -" \$async\$handler = 2;\n" -" \$async\$goto = !isDone ? 11 : 12;\n" +" s = A.getTraceFromException(\$async\$exception);\n" +" \$async\$goto = !_box_0.cancelled ? 13 : 14;\n" " break;\n" -" case 11:\n" +" case 13:\n" " // then\n" -" \$async\$handler = 14;\n" -" \$async\$goto = 17;\n" -" return A._asyncStarHelper(A.promiseToFuture(A._asJSObject(bodyStreamReader.cancel()), type\$.nullable_Object).catchError\$2\$test(new A._readBody_closure(), new A._readBody_closure0(_box_0)), \$async\$_readBody, \$async\$controller);\n" -" case 17:\n" +" _box_0.hadError = true;\n" +" t1 = A._toClientException(e, request);\n" +" t2 = type\$.nullable_StackTrace._as(s);\n" +" t3 = controller._state;\n" +" if (t3 >= 4)\n" +" A.throwExpression(controller._badEventState\$0());\n" +" if ((t3 & 1) !== 0) {\n" +" t3 = controller.get\$_subscription();\n" +" t3._addError\$2(t1, t2 == null ? B._StringStackTrace_OdL : t2);\n" +" }\n" +" \$async\$goto = 15;\n" +" return A._asyncAwait(controller.close\$0(), \$async\$_readStreamBody);\n" +" case 15:\n" " // returning from await.\n" -" \$async\$handler = 2;\n" -" // goto after finally\n" -" \$async\$goto = 16;\n" -" break;\n" " case 14:\n" -" // catch\n" -" \$async\$handler = 13;\n" -" \$async\$exception1 = \$async\$errorStack.pop();\n" -" e0 = A.unwrapException(\$async\$exception1);\n" -" st0 = A.getTraceFromException(\$async\$exception1);\n" -" if (!_box_0.isError)\n" -" A._rethrowAsClientException(e0, st0, request);\n" +" // join\n" +" // goto after for\n" +" \$async\$goto = 7;\n" +" break;\n" " // goto after finally\n" -" \$async\$goto = 16;\n" +" \$async\$goto = 11;\n" " break;\n" -" case 13:\n" +" case 8:\n" " // uncaught\n" " // goto rethrow\n" " \$async\$goto = 2;\n" " break;\n" -" case 16:\n" +" case 11:\n" " // after finally\n" -" case 12:\n" -" // join\n" -" // goto the next finally handler\n" -" \$async\$goto = \$async\$next.pop();\n" +" if (A._asBool(chunk.done)) {\n" +" controller.closeSync\$0();\n" +" // goto after for\n" +" \$async\$goto = 7;\n" +" break;\n" +" } else {\n" +" t6 = chunk.value;\n" +" t6.toString;\n" +" t6 = t2._as(t1._as(t6));\n" +" t7 = controller._state;\n" +" if (t7 >= 4)\n" +" A.throwExpression(controller._badEventState\$0());\n" +" if ((t7 & 1) !== 0)\n" +" controller.get\$_subscription()._add\$1(t6);\n" +" }\n" +" t6 = controller._state;\n" +" \$async\$goto = ((t6 & 1) !== 0 ? (controller.get\$_subscription()._state & 4) !== 0 : (t6 & 2) === 0) ? 16 : 17;\n" " break;\n" -" case 6:\n" -" // after finally\n" -" case 1:\n" -" // return\n" -" return A._asyncStarHelper(null, 0, \$async\$controller);\n" -" case 2:\n" -" // rethrow\n" -" return A._asyncStarHelper(\$async\$errorStack.at(-1), 1, \$async\$controller);\n" -" }\n" +" case 16:\n" +" // then\n" +" t6 = _box_0.resumeSignal;\n" +" \$async\$goto = 18;\n" +" return A._asyncAwait((t6 == null ? _box_0.resumeSignal = new A._AsyncCompleter(new A._Future(\$.Zone__current, t4), t5) : t6).future, \$async\$_readStreamBody);\n" +" case 18:\n" +" // returning from await.\n" +" case 17:\n" +" // join\n" +" if ((controller._state & 1) === 0) {\n" +" // goto after for\n" +" \$async\$goto = 7;\n" +" break;\n" +" }\n" +" // goto for condition\n" +" \$async\$goto = 6;\n" +" break;\n" +" case 7:\n" +" // after for\n" +" case 1:\n" +" // return\n" +" return A._asyncReturn(\$async\$returnValue, \$async\$completer);\n" +" case 2:\n" +" // rethrow\n" +" return A._asyncRethrow(\$async\$errorStack.at(-1), \$async\$completer);\n" +" }\n" " });\n" -" var \$async\$goto = 0,\n" -" \$async\$controller = A._makeAsyncStarStreamController(\$async\$_readBody, type\$.List_int),\n" -" \$async\$nextWhenCanceled, \$async\$handler = 2, \$async\$errorStack = [], \$async\$next = [], isDone, chunk, e, st, e0, st0, t2, t3, exception, _box_0, t1, bodyStreamReader, \$async\$exception, \$async\$exception1;\n" -" return A._streamOfController(\$async\$controller);\n" +" return A._asyncStartSync(\$async\$_readStreamBody, \$async\$completer);\n" " },\n" " BrowserClient: function BrowserClient(t0) {\n" " this.withCredentials = false;\n" @@ -7800,10 +7515,17 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " BrowserClient_send_closure: function BrowserClient_send_closure(t0) {\n" " this.headers = t0;\n" " },\n" -" _readBody_closure: function _readBody_closure() {\n" +" _bodyToStream_closure: function _bodyToStream_closure(t0, t1) {\n" +" this.request = t0;\n" +" this.response = t1;\n" +" },\n" +" _readStreamBody_closure: function _readStreamBody_closure(t0) {\n" +" this._box_0 = t0;\n" " },\n" -" _readBody_closure0: function _readBody_closure0(t0) {\n" +" _readStreamBody_closure0: function _readStreamBody_closure0(t0, t1, t2) {\n" " this._box_0 = t0;\n" +" this.reader = t1;\n" +" this.request = t2;\n" " },\n" " ByteStream: function ByteStream(t0) {\n" " this._stream = t0;\n" @@ -8390,10 +8112,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _.text = t3;\n" " },\n" " SseClient\$(serverUrl, debugKey) {\n" -" var t3, t4, t5, _null = null,\n" +" var t3, t4, t5,\n" " t1 = type\$.String,\n" -" t2 = A.StreamController_StreamController(_null, _null, _null, t1);\n" -" t1 = A.StreamController_StreamController(_null, _null, _null, t1);\n" +" t2 = A.StreamController_StreamController(t1);\n" +" t1 = A.StreamController_StreamController(t1);\n" " t3 = A.Logger_Logger(\"SseClient\");\n" " t4 = \$.Zone__current;\n" " t5 = A.generateId();\n" @@ -8458,7 +8180,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " },\n" " _wrapZone(callback, \$T) {\n" " var t1 = \$.Zone__current;\n" -" if (t1 === B.C__RootZone)\n" +" if (t1 === B.Zone_jYP)\n" " return callback;\n" " return t1.bindUnaryCallbackGuarded\$1\$1(callback, \$T);\n" " },\n" @@ -8508,7 +8230,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1 = type\$.JSArray_nullable_Object._as(new t1());\n" " webSocket = A._asJSObject(new t2(t3, t1));\n" " webSocket.binaryType = \"arraybuffer\";\n" -" browserSocket = new A.BrowserWebSocket(webSocket, A.StreamController_StreamController(null, null, null, type\$.WebSocketEvent));\n" +" browserSocket = new A.BrowserWebSocket(webSocket, A.StreamController_StreamController(type\$.WebSocketEvent));\n" " t1 = new A._Future(\$.Zone__current, type\$._Future_BrowserWebSocket);\n" " webSocketConnected = new A._AsyncCompleter(t1, type\$._AsyncCompleter_BrowserWebSocket);\n" " if (A._asInt(webSocket.readyState) === 1)\n" @@ -9964,12 +9686,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return result;\n" " return result + other;\n" " },\n" -" \$tdiv(receiver, other) {\n" -" if ((receiver | 0) === receiver)\n" -" if (other >= 1)\n" -" return receiver / other | 0;\n" -" return this._tdivSlow\$1(receiver, other);\n" -" },\n" " _tdivFast\$1(receiver, other) {\n" " return (receiver | 0) === receiver ? receiver / other | 0 : this._tdivSlow\$1(receiver, other);\n" " },\n" @@ -10204,20 +9920,30 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return this.__internal\$_source.cancel\$0();\n" " },\n" " onData\$1(handleData) {\n" -" var t1 = this.\$ti;\n" +" var t2,\n" +" t1 = this.\$ti;\n" " t1._eval\$1(\"~(2)?\")._as(handleData);\n" -" this.__internal\$_handleData = handleData == null ? null : this.__internal\$_zone.registerUnaryCallback\$2\$1(handleData, type\$.dynamic, t1._rest[1]);\n" +" if (handleData == null)\n" +" t1 = null;\n" +" else {\n" +" t2 = this.__internal\$_zone;\n" +" t1 = t1._rest[1];\n" +" t1 = t2._registerUnaryCallbackZoned\$2\$2(t2, type\$.\$env_1_1_dynamic._bind\$1(t1)._eval\$1(\"1(2)\")._as(handleData), type\$.dynamic, t1);\n" +" }\n" +" this.__internal\$_handleData = t1;\n" " },\n" " onError\$1(handleError) {\n" -" var _this = this;\n" +" var t1, _this = this;\n" " _this.__internal\$_source.onError\$1(handleError);\n" " if (handleError == null)\n" " _this.__internal\$_handleError = null;\n" -" else if (type\$.void_Function_Object_StackTrace._is(handleError))\n" -" _this.__internal\$_handleError = _this.__internal\$_zone.registerBinaryCallback\$3\$1(handleError, type\$.dynamic, type\$.Object, type\$.StackTrace);\n" -" else if (type\$.void_Function_Object._is(handleError))\n" -" _this.__internal\$_handleError = _this.__internal\$_zone.registerUnaryCallback\$2\$1(handleError, type\$.dynamic, type\$.Object);\n" -" else\n" +" else if (type\$.void_Function_Object_StackTrace._is(handleError)) {\n" +" t1 = _this.__internal\$_zone;\n" +" _this.__internal\$_handleError = t1._registerBinaryCallbackZoned\$3\$2(t1, type\$.dynamic_Function_Object_StackTrace._as(handleError), type\$.dynamic, type\$.Object, type\$.StackTrace);\n" +" } else if (type\$.void_Function_Object._is(handleError)) {\n" +" t1 = _this.__internal\$_zone;\n" +" _this.__internal\$_handleError = t1._registerUnaryCallbackZoned\$2\$2(t1, type\$.dynamic_Function_Object._as(handleError), type\$.dynamic, type\$.Object);\n" +" } else\n" " throw A.wrapException(A.ArgumentError\$(string\$.handle, null));\n" " },\n" " __internal\$_onData\$1(data) {\n" @@ -10234,9 +9960,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " error = A.unwrapException(exception);\n" " stack = A.getTraceFromException(exception);\n" " handleError = _this.__internal\$_handleError;\n" -" if (handleError == null)\n" -" _this.__internal\$_zone.handleUncaughtError\$2(error, stack);\n" -" else {\n" +" if (handleError == null) {\n" +" t1 = _this.__internal\$_zone;\n" +" t1._handleUncaughtErrorZoned\$3(t1, A._asObject(error), type\$.StackTrace._as(stack));\n" +" } else {\n" " t1 = type\$.Object;\n" " t2 = _this.__internal\$_zone;\n" " if (type\$.void_Function_Object_StackTrace._is(handleError))\n" @@ -10423,7 +10150,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$0() {\n" " return A.Future_Future\$value(null, type\$.void);\n" " },\n" -" \$signature: 9\n" +" \$signature: 6\n" " };\n" " A.SentinelValue.prototype = {};\n" " A.EfficientLengthIterable.prototype = {};\n" @@ -10989,9 +10716,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$2(a0, a1) {\n" " return this._genericClosure.call\$1\$2(a0, a1, this.\$ti._rest[0]);\n" " },\n" -" call\$4(a0, a1, a2, a3) {\n" -" return this._genericClosure.call\$1\$4(a0, a1, a2, a3, this.\$ti._rest[0]);\n" -" },\n" " \$signature() {\n" " return A.instantiatedGenericFunctionType(A.closureFunctionType(this._genericClosure), this.\$ti);\n" " }\n" @@ -11428,13 +11152,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$2(o, tag) {\n" " return this.getUnknownTag(o, tag);\n" " },\n" -" \$signature: 31\n" +" \$signature: 73\n" " };\n" " A.initHooks_closure1.prototype = {\n" " call\$1(tag) {\n" " return this.prototypeForTag(A._asString(tag));\n" " },\n" -" \$signature: 30\n" +" \$signature: 59\n" " };\n" " A._Record.prototype = {\n" " get\$runtimeType(_) {\n" @@ -11942,7 +11666,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1.storedCallback = null;\n" " f.call\$0();\n" " },\n" -" \$signature: 4\n" +" \$signature: 8\n" " };\n" " A._AsyncRun__initializeScheduleImmediate_closure.prototype = {\n" " call\$1(callback) {\n" @@ -11952,7 +11676,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t2 = this.span;\n" " t1.firstChild ? t1.removeChild(t2) : t1.appendChild(t2);\n" " },\n" -" \$signature: 49\n" +" \$signature: 43\n" " };\n" " A._AsyncRun__scheduleImmediateJsOverride_internalCallback.prototype = {\n" " call\$0() {\n" @@ -11973,12 +11697,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " else\n" " throw A.wrapException(A.UnsupportedError\$(\"`setTimeout()` not found.\"));\n" " },\n" -" _TimerImpl\$periodic\$2(milliseconds, callback) {\n" -" if (self.setTimeout != null)\n" -" this._handle = self.setInterval(A.convertDartClosureToJS(new A._TimerImpl\$periodic_closure(this, milliseconds, Date.now(), callback), 0), milliseconds);\n" -" else\n" -" throw A.wrapException(A.UnsupportedError\$(\"Periodic timer.\"));\n" -" },\n" " get\$isActive() {\n" " return this._handle != null;\n" " },\n" @@ -11987,10 +11705,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " var t1 = this._handle;\n" " if (t1 == null)\n" " return;\n" -" if (this._once)\n" -" self.clearTimeout(t1);\n" -" else\n" -" self.clearInterval(t1);\n" +" self.clearTimeout(t1);\n" " this._handle = null;\n" " } else\n" " throw A.wrapException(A.UnsupportedError\$(\"Canceling a timer.\"));\n" @@ -11999,29 +11714,11 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._TimerImpl_internalCallback.prototype = {\n" " call\$0() {\n" -" var t1 = this.\$this;\n" -" t1._handle = null;\n" -" t1._tick = 1;\n" +" this.\$this._handle = null;\n" " this.callback.call\$0();\n" " },\n" " \$signature: 0\n" " };\n" -" A._TimerImpl\$periodic_closure.prototype = {\n" -" call\$0() {\n" -" var duration, _this = this,\n" -" t1 = _this.\$this,\n" -" tick = t1._tick + 1,\n" -" t2 = _this.milliseconds;\n" -" if (t2 > 0) {\n" -" duration = Date.now() - _this.start;\n" -" if (duration > (tick + 1) * t2)\n" -" tick = B.JSInt_methods.\$tdiv(duration, t2);\n" -" }\n" -" t1._tick = tick;\n" -" _this.callback.call\$1(t1);\n" -" },\n" -" \$signature: 1\n" -" };\n" " A._AsyncAwaitCompleter.prototype = {\n" " complete\$1(value) {\n" " var t2, _this = this,\n" @@ -12052,104 +11749,19 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(result) {\n" " return this.bodyFunction.call\$2(0, result);\n" " },\n" -" \$signature: 5\n" +" \$signature: 4\n" " };\n" " A._awaitOnObject_closure0.prototype = {\n" " call\$2(error, stackTrace) {\n" " this.bodyFunction.call\$2(1, new A.ExceptionAndStackTrace(error, type\$.StackTrace._as(stackTrace)));\n" " },\n" -" \$signature: 54\n" +" \$signature: 48\n" " };\n" " A._wrapJsFunctionForAsync_closure.prototype = {\n" " call\$2(errorCode, result) {\n" " this.\$protected(A._asInt(errorCode), result);\n" " },\n" -" \$signature: 59\n" -" };\n" -" A._asyncStarHelper_closure.prototype = {\n" -" call\$0() {\n" -" var t3,\n" -" t1 = this.controller,\n" -" t2 = t1.___AsyncStarStreamController_controller_A;\n" -" t2 === \$ && A.throwLateFieldNI(\"controller\");\n" -" t3 = t2._state;\n" -" if ((t3 & 1) !== 0 ? (t2.get\$_subscription()._state & 4) !== 0 : (t3 & 2) === 0) {\n" -" t1.isSuspended = true;\n" -" return;\n" -" }\n" -" t1 = t1.cancelationFuture != null ? 2 : 0;\n" -" this.bodyFunction.call\$2(t1, null);\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._asyncStarHelper_closure0.prototype = {\n" -" call\$1(__wc0_formal) {\n" -" var errorCode = this.controller.cancelationFuture != null ? 2 : 0;\n" -" this.bodyFunction.call\$2(errorCode, null);\n" -" },\n" -" \$signature: 4\n" -" };\n" -" A._AsyncStarStreamController.prototype = {\n" -" _AsyncStarStreamController\$1(body, \$T) {\n" -" var _this = this,\n" -" t1 = new A._AsyncStarStreamController__resumeBody(body);\n" -" _this.___AsyncStarStreamController_controller_A = _this.\$ti._eval\$1(\"StreamController<1>\")._as(A.StreamController_StreamController(new A._AsyncStarStreamController_closure(_this, body), new A._AsyncStarStreamController_closure0(t1), new A._AsyncStarStreamController_closure1(_this, t1), \$T));\n" -" }\n" -" };\n" -" A._AsyncStarStreamController__resumeBody.prototype = {\n" -" call\$0() {\n" -" A.scheduleMicrotask(new A._AsyncStarStreamController__resumeBody_closure(this.body));\n" -" },\n" -" \$signature: 1\n" -" };\n" -" A._AsyncStarStreamController__resumeBody_closure.prototype = {\n" -" call\$0() {\n" -" this.body.call\$2(0, null);\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._AsyncStarStreamController_closure0.prototype = {\n" -" call\$0() {\n" -" this._resumeBody.call\$0();\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._AsyncStarStreamController_closure1.prototype = {\n" -" call\$0() {\n" -" var t1 = this.\$this;\n" -" if (t1.isSuspended) {\n" -" t1.isSuspended = false;\n" -" this._resumeBody.call\$0();\n" -" }\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._AsyncStarStreamController_closure.prototype = {\n" -" call\$0() {\n" -" var t1 = this.\$this,\n" -" t2 = t1.___AsyncStarStreamController_controller_A;\n" -" t2 === \$ && A.throwLateFieldNI(\"controller\");\n" -" if ((t2._state & 4) === 0) {\n" -" t1.cancelationFuture = new A._Future(\$.Zone__current, type\$._Future_dynamic);\n" -" if (t1.isSuspended) {\n" -" t1.isSuspended = false;\n" -" A.scheduleMicrotask(new A._AsyncStarStreamController__closure(this.body));\n" -" }\n" -" return t1.cancelationFuture;\n" -" }\n" -" },\n" -" \$signature: 60\n" -" };\n" -" A._AsyncStarStreamController__closure.prototype = {\n" -" call\$0() {\n" -" this.body.call\$2(2, null);\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._IterationMarker.prototype = {\n" -" toString\$0(_) {\n" -" return \"IterationMarker(\" + this.state + \", \" + A.S(this.value) + \")\";\n" -" }\n" +" \$signature: 55\n" " };\n" " A.AsyncError.prototype = {\n" " toString\$0(_) {\n" @@ -12235,9 +11847,11 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._FutureListener.prototype = {\n" " matchesErrorTest\$1(asyncError) {\n" +" var t1;\n" " if ((this.state & 15) !== 6)\n" " return true;\n" -" return this.result._zone.runUnary\$2\$2(type\$.bool_Function_Object._as(this.callback), asyncError.error, type\$.bool, type\$.Object);\n" +" t1 = this.result._zone;\n" +" return t1._runUnaryZoned\$2\$3(t1, type\$.bool_Function_Object._as(this.callback), asyncError.error, type\$.bool, type\$.Object);\n" " },\n" " handleError\$1(asyncError) {\n" " var exception, _this = this,\n" @@ -12248,9 +11862,9 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t3 = asyncError.error,\n" " t4 = _this.result._zone;\n" " if (type\$.dynamic_Function_Object_StackTrace._is(errorCallback))\n" -" result = t4.runBinary\$3\$3(errorCallback, t3, asyncError.stackTrace, t1, t2, type\$.StackTrace);\n" +" result = t4._runBinaryZoned\$3\$4(t4, errorCallback, t3, asyncError.stackTrace, t1, t2, type\$.StackTrace);\n" " else\n" -" result = t4.runUnary\$2\$2(type\$.dynamic_Function_Object._as(errorCallback), t3, t1, t2);\n" +" result = t4._runUnaryZoned\$2\$3(t4, type\$.dynamic_Function_Object._as(errorCallback), t3, t1, t2);\n" " try {\n" " t1 = _this.\$ti._eval\$1(\"2/\")._as(result);\n" " return t1;\n" @@ -12266,15 +11880,16 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._Future.prototype = {\n" " then\$1\$2\$onError(f, onError, \$R) {\n" -" var currentZone, result, t2,\n" +" var currentZone, t2, result,\n" " t1 = this.\$ti;\n" " t1._bind\$1(\$R)._eval\$1(\"1/(2)\")._as(f);\n" " currentZone = \$.Zone__current;\n" -" if (currentZone === B.C__RootZone) {\n" +" if (currentZone === B.Zone_jYP) {\n" " if (onError != null && !type\$.dynamic_Function_Object_StackTrace._is(onError) && !type\$.dynamic_Function_Object._is(onError))\n" " throw A.wrapException(A.ArgumentError\$value(onError, \"onError\", string\$.Error_));\n" " } else {\n" -" f = currentZone.registerUnaryCallback\$2\$1(f, \$R._eval\$1(\"0/\"), t1._precomputed1);\n" +" t2 = t1._precomputed1;\n" +" f = currentZone._registerUnaryCallbackZoned\$2\$2(currentZone, \$R._eval\$1(\"@<0/>\")._bind\$1(t2)._eval\$1(\"1(2)\")._as(f), \$R._eval\$1(\"0/\"), t2);\n" " if (onError != null)\n" " onError = A._registerErrorHandler(onError, currentZone);\n" " }\n" @@ -12294,32 +11909,23 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._addListener\$1(new A._FutureListener(result, 19, f, onError, t1._eval\$1(\"@<1>\")._bind\$1(\$E)._eval\$1(\"_FutureListener<1,2>\")));\n" " return result;\n" " },\n" -" catchError\$2\$test(onError, test) {\n" -" var t1, t2, result;\n" -" type\$.nullable_bool_Function_Object._as(test);\n" -" t1 = this.\$ti;\n" -" t2 = \$.Zone__current;\n" -" result = new A._Future(t2, t1);\n" -" if (t2 !== B.C__RootZone) {\n" -" onError = A._registerErrorHandler(onError, t2);\n" -" if (test != null)\n" -" test = t2.registerUnaryCallback\$2\$1(test, type\$.bool, type\$.Object);\n" -" }\n" -" t2 = test == null ? 2 : 6;\n" -" this._addListener\$1(new A._FutureListener(result, t2, test, onError, t1._eval\$1(\"_FutureListener<1,1>\")));\n" -" return result;\n" -" },\n" " catchError\$1(onError) {\n" -" return this.catchError\$2\$test(onError, null);\n" +" var t1 = this.\$ti,\n" +" resultZone = \$.Zone__current,\n" +" result = new A._Future(resultZone, t1);\n" +" if (resultZone !== B.Zone_jYP)\n" +" onError = A._registerErrorHandler(onError, resultZone);\n" +" this._addListener\$1(new A._FutureListener(result, 2, null, onError, t1._eval\$1(\"_FutureListener<1,1>\")));\n" +" return result;\n" " },\n" " whenComplete\$1(action) {\n" -" var t1, t2, result;\n" +" var t1, resultZone, result;\n" " type\$.dynamic_Function._as(action);\n" " t1 = this.\$ti;\n" -" t2 = \$.Zone__current;\n" -" result = new A._Future(t2, t1);\n" -" if (t2 !== B.C__RootZone)\n" -" action = t2.registerCallback\$1\$1(action, type\$.dynamic);\n" +" resultZone = \$.Zone__current;\n" +" result = new A._Future(resultZone, t1);\n" +" if (resultZone !== B.Zone_jYP)\n" +" action = resultZone._registerCallbackZoned\$1\$2(resultZone, action, type\$.dynamic);\n" " this._addListener\$1(new A._FutureListener(result, 8, action, null, t1._eval\$1(\"_FutureListener<1,1>\")));\n" " return result;\n" " },\n" @@ -12346,7 +11952,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " _this._cloneResult\$1(source);\n" " }\n" -" _this._zone.scheduleMicrotask\$1(new A._Future__addListener_closure(_this, listener));\n" +" t1 = _this._zone;\n" +" t1._scheduleMicrotaskZoned\$2(t1, new A._Future__addListener_closure(_this, listener));\n" " }\n" " },\n" " _prependListeners\$1(listeners) {\n" @@ -12374,7 +11981,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _this._cloneResult\$1(source);\n" " }\n" " _box_0.listeners = _this._reverseListeners\$1(listeners);\n" -" _this._zone.scheduleMicrotask\$1(new A._Future__prependListeners_closure(_box_0, _this));\n" +" t1 = _this._zone;\n" +" t1._scheduleMicrotaskZoned\$2(t1, new A._Future__prependListeners_closure(_box_0, _this));\n" " }\n" " },\n" " _removeListeners\$0() {\n" @@ -12413,14 +12021,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " A._Future__propagateToListeners(_this, listeners);\n" " },\n" " _completeWithResultOf\$1(source) {\n" -" var t1, t2, listeners, _this = this;\n" -" if ((source._state & 16) !== 0) {\n" -" t1 = _this._zone;\n" -" t2 = source._zone;\n" -" t1 = !(t1 === t2 || t1.get\$errorZone() === t2.get\$errorZone());\n" -" } else\n" -" t1 = false;\n" -" if (t1)\n" +" var listeners, _this = this;\n" +" if ((source._state & 16) !== 0 && _this._zone._handleUncaughtErrorFunction != source._zone._handleUncaughtErrorFunction)\n" " return;\n" " listeners = _this._removeListeners\$0();\n" " _this._cloneResult\$1(source);\n" @@ -12446,18 +12048,21 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._asyncCompleteWithValue\$1(value);\n" " },\n" " _asyncCompleteWithValue\$1(value) {\n" -" var _this = this;\n" +" var t1, _this = this;\n" " _this.\$ti._precomputed1._as(value);\n" " _this._state ^= 2;\n" -" _this._zone.scheduleMicrotask\$1(new A._Future__asyncCompleteWithValue_closure(_this, value));\n" +" t1 = _this._zone;\n" +" t1._scheduleMicrotaskZoned\$2(t1, new A._Future__asyncCompleteWithValue_closure(_this, value));\n" " },\n" " _chainFuture\$1(value) {\n" " A._Future__chainCoreFuture(this.\$ti._eval\$1(\"Future<1>\")._as(value), this, false);\n" " return;\n" " },\n" " _asyncCompleteErrorObject\$1(error) {\n" +" var t1;\n" " this._state ^= 2;\n" -" this._zone.scheduleMicrotask\$1(new A._Future__asyncCompleteErrorObject_closure(this, error));\n" +" t1 = this._zone;\n" +" t1._scheduleMicrotaskZoned\$2(t1, new A._Future__asyncCompleteErrorObject_closure(this, error));\n" " },\n" " timeout\$2\$onTimeout(timeLimit, onTimeout) {\n" " var t3, _future, _this = this, t1 = {},\n" @@ -12471,7 +12076,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t3 = \$.Zone__current;\n" " _future = new A._Future(t3, t2);\n" " t1.timer = null;\n" -" t1.timer = A.Timer_Timer(timeLimit, new A._Future_timeout_closure(_this, _future, t3, t3.registerCallback\$1\$1(onTimeout, t2._eval\$1(\"1/\"))));\n" +" t1.timer = A.Timer_Timer(timeLimit, new A._Future_timeout_closure(_this, _future, t3, t3._registerCallbackZoned\$1\$2(t3, t2._eval\$1(\"1/()\")._as(onTimeout), t2._eval\$1(\"1/\"))));\n" " _this.then\$1\$2\$onError(new A._Future_timeout_closure0(t1, _this, _future), new A._Future_timeout_closure1(t1, _future), type\$.Null);\n" " return _future;\n" " },\n" @@ -12509,10 +12114,11 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._Future__propagateToListeners_handleWhenCompleteCallback.prototype = {\n" " call\$0() {\n" -" var e, s, t1, exception, t2, t3, originalSource, joinedResult, _this = this, completeResult = null;\n" +" var e, s, t1, t2, exception, t3, originalSource, joinedResult, _this = this, completeResult = null;\n" " try {\n" " t1 = _this._box_0.listener;\n" -" completeResult = t1.result._zone.run\$1\$1(type\$.dynamic_Function._as(t1.callback), type\$.dynamic);\n" +" t2 = t1.result._zone;\n" +" completeResult = t2._runZoned\$1\$2(t2, type\$.dynamic_Function._as(t1.callback), type\$.dynamic);\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" @@ -12554,7 +12160,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(__wc0_formal) {\n" " this.joinedResult._completeWithResultOf\$1(this.originalSource);\n" " },\n" -" \$signature: 4\n" +" \$signature: 8\n" " };\n" " A._Future__propagateToListeners_handleWhenCompleteCallback_closure0.prototype = {\n" " call\$2(e, s) {\n" @@ -12566,14 +12172,15 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._Future__propagateToListeners_handleValueCallback.prototype = {\n" " call\$0() {\n" -" var e, s, t1, t2, t3, t4, t5, exception;\n" +" var e, s, t1, t2, t3, t4, t5, t6, exception;\n" " try {\n" " t1 = this._box_0;\n" " t2 = t1.listener;\n" " t3 = t2.\$ti;\n" " t4 = t3._precomputed1;\n" " t5 = t4._as(this.sourceResult);\n" -" t1.listenerValueOrError = t2.result._zone.runUnary\$2\$2(t3._eval\$1(\"2/(1)\")._as(t2.callback), t5, t3._eval\$1(\"2/\"), t4);\n" +" t6 = t2.result._zone;\n" +" t1.listenerValueOrError = t6._runUnaryZoned\$2\$3(t6, t3._eval\$1(\"2/(1)\")._as(t2.callback), t5, t3._eval\$1(\"2/\"), t4);\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" @@ -12622,9 +12229,11 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._Future_timeout_closure.prototype = {\n" " call\$0() {\n" -" var e, s, exception, t1, t2, _this = this;\n" +" var e, s, t1, t2, exception, _this = this;\n" " try {\n" -" _this._future._complete\$1(_this.zone.run\$1\$1(_this.onTimeoutHandler, _this.\$this.\$ti._eval\$1(\"1/\")));\n" +" t1 = _this.zone;\n" +" t2 = _this.\$this.\$ti;\n" +" _this._future._complete\$1(t1._runZoned\$1\$2(t1, t2._eval\$1(\"1/()\")._as(_this.onTimeoutHandler), t2._eval\$1(\"1/\")));\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" @@ -12733,10 +12342,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " if ((_this._state & 8) === 0)\n" " return A._instanceType(_this)._eval\$1(\"_PendingEvents<1>?\")._as(_this._varData);\n" " t1 = A._instanceType(_this);\n" -" return t1._eval\$1(\"_PendingEvents<1>?\")._as(t1._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData)._varData);\n" +" return t1._eval\$1(\"_PendingEvents<1>?\")._as(t1._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData).get\$_varData());\n" " },\n" " _ensurePendingEvents\$0() {\n" -" var events, t1, state, _this = this;\n" +" var events, t1, _this = this;\n" " if ((_this._state & 8) === 0) {\n" " events = _this._varData;\n" " if (events == null)\n" @@ -12744,16 +12353,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return A._instanceType(_this)._eval\$1(\"_PendingEvents<1>\")._as(events);\n" " }\n" " t1 = A._instanceType(_this);\n" -" state = t1._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData);\n" -" events = state._varData;\n" -" if (events == null)\n" -" events = state._varData = new A._PendingEvents(t1._eval\$1(\"_PendingEvents<1>\"));\n" +" events = t1._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData).get\$_varData();\n" " return t1._eval\$1(\"_PendingEvents<1>\")._as(events);\n" " },\n" " get\$_subscription() {\n" " var varData = this._varData;\n" " if ((this._state & 8) !== 0)\n" -" varData = type\$._StreamControllerAddStreamState_nullable_Object._as(varData)._varData;\n" +" varData = type\$._StreamControllerAddStreamState_nullable_Object._as(varData).get\$_varData();\n" " return A._instanceType(this)._eval\$1(\"_ControllerSubscription<1>\")._as(varData);\n" " },\n" " _badEventState\$0() {\n" @@ -12761,31 +12367,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return new A.StateError(\"Cannot add event after closing\");\n" " return new A.StateError(\"Cannot add event while adding a stream\");\n" " },\n" -" addStream\$2\$cancelOnError(source, cancelOnError) {\n" -" var t2, t3, t4, t5, t6, _this = this,\n" -" t1 = A._instanceType(_this);\n" -" t1._eval\$1(\"Stream<1>\")._as(source);\n" -" t2 = _this._state;\n" -" if (t2 >= 4)\n" -" throw A.wrapException(_this._badEventState\$0());\n" -" if ((t2 & 2) !== 0) {\n" -" t1 = new A._Future(\$.Zone__current, type\$._Future_dynamic);\n" -" t1._asyncComplete\$1(null);\n" -" return t1;\n" -" }\n" -" t2 = _this._varData;\n" -" t3 = cancelOnError === true;\n" -" t4 = new A._Future(\$.Zone__current, type\$._Future_dynamic);\n" -" t5 = t1._eval\$1(\"~(1)\")._as(_this.get\$_add());\n" -" t6 = t3 ? A._AddStreamState_makeErrorHandler(_this) : _this.get\$_addError();\n" -" t6 = source.listen\$4\$cancelOnError\$onDone\$onError(t5, t3, _this.get\$_close(), t6);\n" -" t3 = _this._state;\n" -" if ((t3 & 1) !== 0 ? (_this.get\$_subscription()._state & 4) !== 0 : (t3 & 2) === 0)\n" -" t6.pause\$0();\n" -" _this._varData = new A._StreamControllerAddStreamState(t2, t4, t6, t1._eval\$1(\"_StreamControllerAddStreamState<1>\"));\n" -" _this._state |= 8;\n" -" return t4;\n" -" },\n" " _ensureDoneFuture\$0() {\n" " var t1 = this._doneFuture;\n" " if (t1 == null)\n" @@ -12799,16 +12380,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " throw A.wrapException(_this._badEventState\$0());\n" " _this._add\$1(value);\n" " },\n" -" addError\$2(error, stackTrace) {\n" -" var _0_0;\n" -" if (this._state >= 4)\n" -" throw A.wrapException(this._badEventState\$0());\n" -" _0_0 = A._interceptUserError(error, stackTrace);\n" -" this._addError\$2(_0_0.error, _0_0.stackTrace);\n" -" },\n" -" addError\$1(error) {\n" -" return this.addError\$2(error, null);\n" -" },\n" " close\$0() {\n" " var _this = this,\n" " t1 = _this._state;\n" @@ -12836,23 +12407,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " else if ((t2 & 3) === 0)\n" " _this._ensurePendingEvents\$0().add\$1(0, new A._DelayedData(value, t1._eval\$1(\"_DelayedData<1>\")));\n" " },\n" -" _addError\$2(error, stackTrace) {\n" -" var t1;\n" -" A._asObject(error);\n" -" type\$.StackTrace._as(stackTrace);\n" -" t1 = this._state;\n" -" if ((t1 & 1) !== 0)\n" -" this._sendError\$2(error, stackTrace);\n" -" else if ((t1 & 3) === 0)\n" -" this._ensurePendingEvents\$0().add\$1(0, new A._DelayedError(error, stackTrace));\n" -" },\n" -" _close\$0() {\n" -" var _this = this,\n" -" addState = A._instanceType(_this)._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData);\n" -" _this._varData = addState._varData;\n" -" _this._state &= 4294967287;\n" -" addState.addStreamFuture._asyncComplete\$1(null);\n" -" },\n" " _subscribe\$4(onData, onError, onDone, cancelOnError) {\n" " var t2, t3, t4, t5, t6, t7, subscription, pendingEvents, addState, _this = this,\n" " t1 = A._instanceType(_this);\n" @@ -12866,12 +12420,12 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t5 = A._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._precomputed1);\n" " t6 = A._BufferingStreamSubscription__registerErrorHandler(t2, onError);\n" " t7 = onDone == null ? A.async___nullDoneHandler\$closure() : onDone;\n" -" subscription = new A._ControllerSubscription(_this, t5, t6, t2.registerCallback\$1\$1(t7, type\$.void), t2, t3 | t4, t1._eval\$1(\"_ControllerSubscription<1>\"));\n" +" subscription = new A._ControllerSubscription(_this, t5, t6, t2._registerCallbackZoned\$1\$2(t2, type\$.void_Function._as(t7), type\$.void), t2, t3 | t4, t1._eval\$1(\"_ControllerSubscription<1>\"));\n" " pendingEvents = _this.get\$_pendingEvents();\n" " if (((_this._state |= 1) & 8) !== 0) {\n" " addState = t1._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(_this._varData);\n" -" addState._varData = subscription;\n" -" addState.addSubscription.resume\$0();\n" +" addState.set\$_varData(subscription);\n" +" addState.resume\$0();\n" " } else\n" " _this._varData = subscription;\n" " subscription._setPendingEvents\$1(pendingEvents);\n" @@ -12915,6 +12469,12 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " set\$onListen(onListen) {\n" " this.onListen = type\$.nullable_void_Function._as(onListen);\n" " },\n" +" set\$onResume(onResume) {\n" +" this.onResume = type\$.nullable_void_Function._as(onResume);\n" +" },\n" +" set\$onCancel(onCancel) {\n" +" this.onCancel = type\$.nullable_void_Function._as(onCancel);\n" +" },\n" " \$isStreamSink: 1,\n" " \$isStreamController: 1,\n" " \$is_StreamControllerLifecycle: 1,\n" @@ -12937,7 +12497,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._AsyncStreamControllerDispatch.prototype = {\n" " _sendData\$1(data) {\n" -" var t1 = this.\$ti;\n" +" var t1 = A._instanceType(this);\n" " t1._precomputed1._as(data);\n" " this.get\$_subscription()._addPending\$1(new A._DelayedData(data, t1._eval\$1(\"_DelayedData<1>\")));\n" " },\n" @@ -12970,7 +12530,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t2 = A._instanceType(t1);\n" " t2._eval\$1(\"StreamSubscription<1>\")._as(this);\n" " if ((t1._state & 8) !== 0)\n" -" t2._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(t1._varData).addSubscription.pause\$0();\n" +" t2._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(t1._varData).pause\$0();\n" " A._runGuarded(t1.onPause);\n" " },\n" " _onResume\$0() {\n" @@ -12978,32 +12538,11 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t2 = A._instanceType(t1);\n" " t2._eval\$1(\"StreamSubscription<1>\")._as(this);\n" " if ((t1._state & 8) !== 0)\n" -" t2._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(t1._varData).addSubscription.resume\$0();\n" +" t2._eval\$1(\"_StreamControllerAddStreamState<1>\")._as(t1._varData).resume\$0();\n" " A._runGuarded(t1.onResume);\n" " }\n" " };\n" " A._StreamSinkWrapper.prototype = {\$isStreamSink: 1};\n" -" A._AddStreamState.prototype = {\n" -" cancel\$0() {\n" -" var cancel = this.addSubscription.cancel\$0();\n" -" return cancel.whenComplete\$1(new A._AddStreamState_cancel_closure(this));\n" -" }\n" -" };\n" -" A._AddStreamState_makeErrorHandler_closure.prototype = {\n" -" call\$2(e, s) {\n" -" var t1 = this.controller;\n" -" t1._addError\$2(A._asObject(e), type\$.StackTrace._as(s));\n" -" t1._close\$0();\n" -" },\n" -" \$signature: 3\n" -" };\n" -" A._AddStreamState_cancel_closure.prototype = {\n" -" call\$0() {\n" -" this.\$this.addStreamFuture._asyncComplete\$1(null);\n" -" },\n" -" \$signature: 1\n" -" };\n" -" A._StreamControllerAddStreamState.prototype = {};\n" " A._BufferingStreamSubscription.prototype = {\n" " _setPendingEvents\$1(pendingEvents) {\n" " var _this = this;\n" @@ -13457,7 +12996,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1 = new A._DoneStreamSubscription(t2, t1._eval\$1(\"_DoneStreamSubscription<1>\"));\n" " A.scheduleMicrotask(t1.get\$_onMicrotask());\n" " if (onDone != null)\n" -" t1._onDone = t2.registerCallback\$1\$1(onDone, type\$.void);\n" +" t1._onDone = t2._registerCallbackZoned\$1\$2(t2, type\$.void_Function._as(onDone), type\$.void);\n" " return t1;\n" " },\n" " listen\$3\$onDone\$onError(onData, onDone, onError) {\n" @@ -13467,6 +13006,44 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return this.listen\$4\$cancelOnError\$onDone\$onError(onData, cancelOnError, onDone, null);\n" " }\n" " };\n" +" A._MultiStream.prototype = {\n" +" listen\$4\$cancelOnError\$onDone\$onError(onData, cancelOnError, onDone, onError) {\n" +" var controller, _null = null,\n" +" t1 = this.\$ti;\n" +" t1._eval\$1(\"~(1)?\")._as(onData);\n" +" type\$.nullable_void_Function._as(onDone);\n" +" controller = new A._MultiStreamController(_null, _null, _null, _null, t1._eval\$1(\"_MultiStreamController<1>\"));\n" +" controller.set\$onListen(new A._MultiStream_listen_closure(this, controller));\n" +" return controller._subscribe\$4(onData, onError, onDone, cancelOnError === true);\n" +" },\n" +" listen\$3\$onDone\$onError(onData, onDone, onError) {\n" +" return this.listen\$4\$cancelOnError\$onDone\$onError(onData, null, onDone, onError);\n" +" },\n" +" listen\$3\$cancelOnError\$onDone(onData, cancelOnError, onDone) {\n" +" return this.listen\$4\$cancelOnError\$onDone\$onError(onData, cancelOnError, onDone, null);\n" +" }\n" +" };\n" +" A._MultiStream_listen_closure.prototype = {\n" +" call\$0() {\n" +" this.\$this._onListen.call\$1(this.controller);\n" +" },\n" +" \$signature: 0\n" +" };\n" +" A._MultiStreamController.prototype = {\n" +" closeSync\$0() {\n" +" var _this = this,\n" +" t1 = _this._state;\n" +" if ((t1 & 4) !== 0)\n" +" return;\n" +" if (t1 >= 4)\n" +" throw A.wrapException(_this._badEventState\$0());\n" +" t1 |= 4;\n" +" _this._state = t1;\n" +" if ((t1 & 1) !== 0)\n" +" _this.get\$_subscription()._close\$0();\n" +" },\n" +" \$isMultiStreamController: 1\n" +" };\n" " A._cancelAndValue_closure.prototype = {\n" " call\$0() {\n" " return this.future._complete\$1(this.value);\n" @@ -13485,7 +13062,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t5 = A._BufferingStreamSubscription__registerDataHandler(t2, onData, t1._rest[1]);\n" " t6 = A._BufferingStreamSubscription__registerErrorHandler(t2, onError);\n" " t7 = onDone == null ? A.async___nullDoneHandler\$closure() : onDone;\n" -" t1 = new A._ForwardingStreamSubscription(this, t5, t6, t2.registerCallback\$1\$1(t7, type\$.void), t2, t3 | t4, t1._eval\$1(\"_ForwardingStreamSubscription<1,2>\"));\n" +" t1 = new A._ForwardingStreamSubscription(this, t5, t6, t2._registerCallbackZoned\$1\$2(t2, type\$.void_Function._as(t7), type\$.void), t2, t3 | t4, t1._eval\$1(\"_ForwardingStreamSubscription<1,2>\"));\n" " t1._subscription = this._source.listen\$3\$onDone\$onError(t1.get\$_handleData(), t1.get\$_handleDone(), t1.get\$_handleError());\n" " return t1;\n" " },\n" @@ -13567,453 +13144,270 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " sink._add\$1(outputEvent);\n" " }\n" " };\n" -" A._ZoneRun.prototype = {};\n" -" A._ZoneRunUnary.prototype = {};\n" -" A._ZoneRunBinary.prototype = {};\n" -" A._ZoneRegisterCallback.prototype = {};\n" -" A._ZoneRegisterUnaryCallback.prototype = {};\n" -" A._ZoneRegisterBinaryCallback.prototype = {};\n" -" A._ZoneErrorCallback.prototype = {};\n" -" A._ZoneScheduleMicrotask.prototype = {};\n" -" A._ZoneCreateTimer.prototype = {};\n" -" A._ZoneCreatePeriodicTimer.prototype = {};\n" -" A._ZonePrint.prototype = {};\n" -" A._ZoneFork.prototype = {};\n" -" A._ZoneHandleUncaughtError.prototype = {\n" -" function\$5(arg0, arg1, arg2, arg3, arg4) {\n" -" return this.\$function.call\$5(arg0, arg1, arg2, arg3, arg4);\n" -" }\n" -" };\n" -" A._ZoneValues.prototype = {};\n" -" A._Zone.prototype = {\n" -" _processUncaughtError\$3(zone, error, stackTrace) {\n" -" var implementation, implZone, parentZone, currentZone, e, s, t1, exception;\n" -" type\$.StackTrace._as(stackTrace);\n" -" implementation = this.get\$_handleUncaughtError();\n" -" implZone = implementation.zone;\n" -" if (implZone === B.C__RootZone) {\n" -" A._rootHandleError(error, stackTrace);\n" -" return;\n" -" }\n" -" t1 = implZone.get\$parent();\n" -" t1.toString;\n" -" parentZone = t1;\n" -" currentZone = \$.Zone__current;\n" -" try {\n" -" \$.Zone__current = parentZone;\n" -" implementation.function\$5(implZone, implZone.get\$_parentDelegate(), zone, error, stackTrace);\n" -" \$.Zone__current = currentZone;\n" -" } catch (exception) {\n" -" e = A.unwrapException(exception);\n" -" s = A.getTraceFromException(exception);\n" -" \$.Zone__current = currentZone;\n" -" t1 = error === e ? stackTrace : s;\n" -" parentZone._processUncaughtError\$3(implZone, e, t1);\n" -" }\n" -" },\n" -" \$isZone: 1\n" -" };\n" -" A._CustomZone.prototype = {\n" -" get\$_delegate() {\n" -" var t1 = this._delegateCache;\n" -" return t1 == null ? this._delegateCache = new A._ZoneDelegate(this) : t1;\n" -" },\n" -" get\$_parentDelegate() {\n" -" return this.parent.get\$_delegate();\n" -" },\n" -" get\$errorZone() {\n" -" return this._handleUncaughtError.zone;\n" +" A._ZoneHandleUncaughtError.prototype = {};\n" +" A.Zone.prototype = {\n" +" run\$1\$1(action, \$R) {\n" +" return this._runZoned\$1\$2(this, \$R._eval\$1(\"0()\")._as(action), \$R);\n" " },\n" -" runGuarded\$1(f) {\n" -" var e, s, exception;\n" -" type\$.void_Function._as(f);\n" -" try {\n" -" this.run\$1\$1(f, type\$.void);\n" -" } catch (exception) {\n" -" e = A.unwrapException(exception);\n" -" s = A.getTraceFromException(exception);\n" -" this._processUncaughtError\$3(this, A._asObject(e), type\$.StackTrace._as(s));\n" -" }\n" -" },\n" -" runUnaryGuarded\$1\$2(f, arg, \$T) {\n" -" var e, s, exception;\n" -" \$T._eval\$1(\"~(0)\")._as(f);\n" -" \$T._as(arg);\n" -" try {\n" -" this.runUnary\$2\$2(f, arg, type\$.void, \$T);\n" -" } catch (exception) {\n" -" e = A.unwrapException(exception);\n" -" s = A.getTraceFromException(exception);\n" -" this._processUncaughtError\$3(this, A._asObject(e), type\$.StackTrace._as(s));\n" -" }\n" -" },\n" -" runBinaryGuarded\$2\$3(f, arg1, arg2, \$T1, \$T2) {\n" -" var e, s, exception;\n" -" \$T1._eval\$1(\"@<0>\")._bind\$1(\$T2)._eval\$1(\"~(1,2)\")._as(f);\n" -" \$T1._as(arg1);\n" -" \$T2._as(arg2);\n" -" try {\n" -" this.runBinary\$3\$3(f, arg1, arg2, type\$.void, \$T1, \$T2);\n" -" } catch (exception) {\n" -" e = A.unwrapException(exception);\n" -" s = A.getTraceFromException(exception);\n" -" this._processUncaughtError\$3(this, A._asObject(e), type\$.StackTrace._as(s));\n" -" }\n" -" },\n" -" bindCallback\$1\$1(f, \$R) {\n" -" return new A._CustomZone_bindCallback_closure(this, this.registerCallback\$1\$1(\$R._eval\$1(\"0()\")._as(f), \$R), \$R);\n" -" },\n" -" bindCallbackGuarded\$1(f) {\n" -" return new A._CustomZone_bindCallbackGuarded_closure(this, this.registerCallback\$1\$1(type\$.void_Function._as(f), type\$.void));\n" -" },\n" -" bindUnaryCallbackGuarded\$1\$1(f, \$T) {\n" -" return new A._CustomZone_bindUnaryCallbackGuarded_closure(this, this.registerUnaryCallback\$2\$1(\$T._eval\$1(\"~(0)\")._as(f), type\$.void, \$T), \$T);\n" -" },\n" -" handleUncaughtError\$2(error, stackTrace) {\n" -" this._processUncaughtError\$3(this, error, type\$.StackTrace._as(stackTrace));\n" -" },\n" -" fork\$2\$specification\$zoneValues(specification, zoneValues) {\n" -" var implementation = this._fork,\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$5(zone, zone.get\$_parentDelegate(), this, specification, zoneValues);\n" -" },\n" -" run\$1\$1(f, \$R) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"0()\")._as(f);\n" -" implementation = this._run;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$1\$4(zone, zone.get\$_parentDelegate(), this, f, \$R);\n" -" },\n" -" runUnary\$2\$2(f, arg, \$R, \$T) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(f);\n" -" \$T._as(arg);\n" -" implementation = this._runUnary;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$2\$5(zone, zone.get\$_parentDelegate(), this, f, arg, \$R, \$T);\n" -" },\n" -" runBinary\$3\$3(f, arg1, arg2, \$R, \$T1, \$T2) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(f);\n" -" \$T1._as(arg1);\n" -" \$T2._as(arg2);\n" -" implementation = this._runBinary;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$3\$6(zone, zone.get\$_parentDelegate(), this, f, arg1, arg2, \$R, \$T1, \$T2);\n" -" },\n" -" registerCallback\$1\$1(callback, \$R) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"0()\")._as(callback);\n" -" implementation = this._registerCallback;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$1\$4(zone, zone.get\$_parentDelegate(), this, callback, \$R);\n" -" },\n" -" registerUnaryCallback\$2\$1(callback, \$R, \$T) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(callback);\n" -" implementation = this._registerUnaryCallback;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$2\$4(zone, zone.get\$_parentDelegate(), this, callback, \$R, \$T);\n" -" },\n" -" registerBinaryCallback\$3\$1(callback, \$R, \$T1, \$T2) {\n" -" var implementation, zone;\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(callback);\n" -" implementation = this._registerBinaryCallback;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$3\$4(zone, zone.get\$_parentDelegate(), this, callback, \$R, \$T1, \$T2);\n" -" },\n" -" errorCallback\$2(error, stackTrace) {\n" -" var implementation = this._errorCallback,\n" -" zone = implementation.zone;\n" -" if (zone === B.C__RootZone)\n" -" return null;\n" -" return implementation.\$function.call\$5(zone, zone.get\$_parentDelegate(), this, error, stackTrace);\n" -" },\n" -" scheduleMicrotask\$1(f) {\n" -" var implementation, zone;\n" -" type\$.void_Function._as(f);\n" -" implementation = this._scheduleMicrotask;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$4(zone, zone.get\$_parentDelegate(), this, f);\n" -" },\n" -" createTimer\$2(duration, f) {\n" -" var implementation, zone;\n" -" type\$.void_Function._as(f);\n" -" implementation = this._createTimer;\n" -" zone = implementation.zone;\n" -" return implementation.\$function.call\$5(zone, zone.get\$_parentDelegate(), this, duration, f);\n" -" },\n" -" get\$_run() {\n" -" return this._run;\n" -" },\n" -" get\$_runUnary() {\n" -" return this._runUnary;\n" -" },\n" -" get\$_runBinary() {\n" -" return this._runBinary;\n" -" },\n" -" get\$_registerCallback() {\n" -" return this._registerCallback;\n" -" },\n" -" get\$_registerUnaryCallback() {\n" -" return this._registerUnaryCallback;\n" -" },\n" -" get\$_registerBinaryCallback() {\n" -" return this._registerBinaryCallback;\n" -" },\n" -" get\$_errorCallback() {\n" -" return this._errorCallback;\n" -" },\n" -" get\$_scheduleMicrotask() {\n" -" return this._scheduleMicrotask;\n" -" },\n" -" get\$_createTimer() {\n" -" return this._createTimer;\n" -" },\n" -" get\$_createPeriodicTimer() {\n" -" return this._createPeriodicTimer;\n" -" },\n" -" get\$_print() {\n" -" return this._print;\n" -" },\n" -" get\$_fork() {\n" -" return this._fork;\n" -" },\n" -" get\$_handleUncaughtError() {\n" -" return this._handleUncaughtError;\n" -" },\n" -" get\$_zoneValues() {\n" -" return this._zoneValues;\n" -" },\n" -" get\$parent() {\n" -" return this.parent;\n" -" }\n" -" };\n" -" A._CustomZone_bindCallback_closure.prototype = {\n" -" call\$0() {\n" -" return this.\$this.run\$1\$1(this.registered, this.R);\n" -" },\n" -" \$signature() {\n" -" return this.R._eval\$1(\"0()\");\n" -" }\n" -" };\n" -" A._CustomZone_bindCallbackGuarded_closure.prototype = {\n" -" call\$0() {\n" -" return this.\$this.runGuarded\$1(this.registered);\n" -" },\n" -" \$signature: 0\n" -" };\n" -" A._CustomZone_bindUnaryCallbackGuarded_closure.prototype = {\n" -" call\$1(arg) {\n" -" var t1 = this.T;\n" -" return this.\$this.runUnaryGuarded\$1\$2(this.registered, t1._as(arg), t1);\n" -" },\n" -" \$signature() {\n" -" return this.T._eval\$1(\"~(0)\");\n" -" }\n" -" };\n" -" A._RootZone.prototype = {\n" -" get\$_run() {\n" -" return B._ZoneRun__RootZone__rootRun;\n" -" },\n" -" get\$_runUnary() {\n" -" return B._ZoneRunUnary__RootZone__rootRunUnary;\n" -" },\n" -" get\$_runBinary() {\n" -" return B._ZoneRunBinary__RootZone__rootRunBinary;\n" -" },\n" -" get\$_registerCallback() {\n" -" return B._ZoneRegisterCallback__RootZone__rootRegisterCallback;\n" -" },\n" -" get\$_registerUnaryCallback() {\n" -" return B._ZoneRegisterUnaryCallback_a9v;\n" -" },\n" -" get\$_registerBinaryCallback() {\n" -" return B._ZoneRegisterBinaryCallback_sk0;\n" -" },\n" -" get\$_errorCallback() {\n" -" return B._ZoneErrorCallback__RootZone__rootErrorCallback;\n" -" },\n" -" get\$_scheduleMicrotask() {\n" -" return B._ZoneScheduleMicrotask__RootZone__rootScheduleMicrotask;\n" -" },\n" -" get\$_createTimer() {\n" -" return B._ZoneCreateTimer__RootZone__rootCreateTimer;\n" -" },\n" -" get\$_createPeriodicTimer() {\n" -" return B.C__ZoneCreatePeriodicTimer;\n" -" },\n" -" get\$_print() {\n" -" return B._ZonePrint__RootZone__rootPrint;\n" -" },\n" -" get\$_fork() {\n" -" return B._ZoneFork__RootZone__rootFork;\n" -" },\n" -" get\$_handleUncaughtError() {\n" -" return B._ZoneHandleUncaughtError_wQ6;\n" -" },\n" -" get\$_zoneValues() {\n" -" return B._ZoneValues__RootZone_Map_empty;\n" -" },\n" -" get\$parent() {\n" -" return null;\n" -" },\n" -" get\$_delegate() {\n" -" var t1 = \$._RootZone__rootDelegate;\n" -" return t1 == null ? \$._RootZone__rootDelegate = new A._ZoneDelegate(this) : t1;\n" -" },\n" -" get\$_parentDelegate() {\n" -" var t1 = \$._RootZone__rootDelegate;\n" -" return t1 == null ? \$._RootZone__rootDelegate = new A._ZoneDelegate(this) : t1;\n" -" },\n" -" get\$errorZone() {\n" -" return this;\n" -" },\n" -" runGuarded\$1(f) {\n" -" var e, s, exception;\n" -" type\$.void_Function._as(f);\n" -" try {\n" -" if (B.C__RootZone === \$.Zone__current) {\n" -" f.call\$0();\n" -" return;\n" -" }\n" -" A._rootRun(null, null, this, f, type\$.void);\n" +" runGuarded\$1(action) {\n" +" var e, s, t1, exception, _this = this;\n" +" type\$.void_Function._as(action);\n" +" try {\n" +" t1 = _this._runZoned\$1\$2(_this, action, type\$.void);\n" +" return t1;\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" -" A._rootHandleError(A._asObject(e), type\$.StackTrace._as(s));\n" +" _this._handleUncaughtErrorZoned\$3(_this, e, s);\n" " }\n" " },\n" -" runUnaryGuarded\$1\$2(f, arg, \$T) {\n" -" var e, s, exception;\n" -" \$T._eval\$1(\"~(0)\")._as(f);\n" -" \$T._as(arg);\n" +" runUnaryGuarded\$1\$2(action, argument, \$T) {\n" +" var e, s, t1, exception, _this = this;\n" +" \$T._eval\$1(\"~(0)\")._as(action);\n" +" \$T._as(argument);\n" " try {\n" -" if (B.C__RootZone === \$.Zone__current) {\n" -" f.call\$1(arg);\n" -" return;\n" -" }\n" -" A._rootRunUnary(null, null, this, f, arg, type\$.void, \$T);\n" +" t1 = _this._runUnaryZoned\$2\$3(_this, action, argument, type\$.void, \$T);\n" +" return t1;\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" -" A._rootHandleError(A._asObject(e), type\$.StackTrace._as(s));\n" +" _this._handleUncaughtErrorZoned\$3(_this, e, s);\n" " }\n" " },\n" -" runBinaryGuarded\$2\$3(f, arg1, arg2, \$T1, \$T2) {\n" -" var e, s, exception;\n" -" \$T1._eval\$1(\"@<0>\")._bind\$1(\$T2)._eval\$1(\"~(1,2)\")._as(f);\n" -" \$T1._as(arg1);\n" -" \$T2._as(arg2);\n" +" runBinaryGuarded\$2\$3(action, argument1, argument2, \$T1, \$T2) {\n" +" var e, s, t1, exception, _this = this;\n" +" \$T1._eval\$1(\"@<0>\")._bind\$1(\$T2)._eval\$1(\"~(1,2)\")._as(action);\n" +" \$T1._as(argument1);\n" +" \$T2._as(argument2);\n" " try {\n" -" if (B.C__RootZone === \$.Zone__current) {\n" -" f.call\$2(arg1, arg2);\n" -" return;\n" -" }\n" -" A._rootRunBinary(null, null, this, f, arg1, arg2, type\$.void, \$T1, \$T2);\n" +" t1 = _this._runBinaryZoned\$3\$4(_this, action, argument1, argument2, type\$.void, \$T1, \$T2);\n" +" return t1;\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" -" A._rootHandleError(A._asObject(e), type\$.StackTrace._as(s));\n" +" _this._handleUncaughtErrorZoned\$3(_this, e, s);\n" " }\n" " },\n" -" bindCallback\$1\$1(f, \$R) {\n" -" return new A._RootZone_bindCallback_closure(this, \$R._eval\$1(\"0()\")._as(f), \$R);\n" +" bindCallback\$1\$1(callback, \$R) {\n" +" return new A.Zone_bindCallback_closure(this, this._registerCallbackZoned\$1\$2(this, \$R._eval\$1(\"0()\")._as(callback), \$R), \$R);\n" " },\n" -" bindCallbackGuarded\$1(f) {\n" -" return new A._RootZone_bindCallbackGuarded_closure(this, type\$.void_Function._as(f));\n" +" bindCallbackGuarded\$1(callback) {\n" +" return new A.Zone_bindCallbackGuarded_closure(this, this._registerCallbackZoned\$1\$2(this, type\$.void_Function._as(callback), type\$.void));\n" " },\n" -" bindUnaryCallbackGuarded\$1\$1(f, \$T) {\n" -" return new A._RootZone_bindUnaryCallbackGuarded_closure(this, \$T._eval\$1(\"~(0)\")._as(f), \$T);\n" +" bindUnaryCallbackGuarded\$1\$1(callback, \$T) {\n" +" return new A.Zone_bindUnaryCallbackGuarded_closure(this, this._registerUnaryCallbackZoned\$2\$2(this, \$T._eval\$1(\"~(0)\")._as(callback), type\$.void, \$T), \$T);\n" " },\n" -" handleUncaughtError\$2(error, stackTrace) {\n" -" A._rootHandleError(error, type\$.StackTrace._as(stackTrace));\n" +" get\$_parentDelegate() {\n" +" var t1 = this._parent;\n" +" t1 = t1 == null ? null : t1._delegate;\n" +" return t1 == null ? \$.\$get\$_rootDelegate() : t1;\n" +" },\n" +" _handleUncaughtErrorZoned\$3(zone, error, stackTrace) {\n" +" var implementation, implZone, parentZone, currentZone, e, s, t1, exception;\n" +" type\$.StackTrace._as(stackTrace);\n" +" implementation = this._handleUncaughtErrorFunction;\n" +" if (implementation == null) {\n" +" A._rootHandleUncaughtError(error, stackTrace);\n" +" return;\n" +" }\n" +" implZone = implementation.zone;\n" +" t1 = implZone._parent;\n" +" t1.toString;\n" +" parentZone = t1;\n" +" currentZone = \$.Zone__current;\n" +" try {\n" +" \$.Zone__current = parentZone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" implementation.\$function.call\$5(implZone, t1, zone, error, stackTrace);\n" +" \$.Zone__current = currentZone;\n" +" } catch (exception) {\n" +" e = A.unwrapException(exception);\n" +" s = A.getTraceFromException(exception);\n" +" \$.Zone__current = currentZone;\n" +" t1 = error === e ? stackTrace : s;\n" +" parentZone._handleUncaughtErrorZoned\$3(implZone, e, t1);\n" +" }\n" " },\n" -" fork\$2\$specification\$zoneValues(specification, zoneValues) {\n" -" return A._rootFork(null, null, this, specification, zoneValues);\n" +" _forkZoned\$3(zone, specification, zoneValues) {\n" +" var implZone, t1,\n" +" implementation = this._forkFunction;\n" +" if (implementation == null)\n" +" return A._rootFork(zone, specification, zoneValues);\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$5(implZone, t1, zone, specification, zoneValues);\n" " },\n" -" run\$1\$1(f, \$R) {\n" -" \$R._eval\$1(\"0()\")._as(f);\n" -" if (\$.Zone__current === B.C__RootZone)\n" -" return f.call\$0();\n" -" return A._rootRun(null, null, this, f, \$R);\n" +" _runZoned\$1\$2(zone, callback, \$R) {\n" +" var oldZone, implementation, t1, implZone;\n" +" \$R._eval\$1(\"0()\")._as(callback);\n" +" implementation = this._runFunction;\n" +" if (implementation == null) {\n" +" t1 = \$.Zone__current;\n" +" if (t1 === zone)\n" +" return callback.call\$0();\n" +" oldZone = t1;\n" +" \$.Zone__current = zone;\n" +" try {\n" +" t1 = callback.call\$0();\n" +" return t1;\n" +" } finally {\n" +" \$.Zone__current = oldZone;\n" +" }\n" +" }\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$1\$4(implZone, t1, zone, callback, \$R);\n" " },\n" -" runUnary\$2\$2(f, arg, \$R, \$T) {\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(f);\n" -" \$T._as(arg);\n" -" if (\$.Zone__current === B.C__RootZone)\n" -" return f.call\$1(arg);\n" -" return A._rootRunUnary(null, null, this, f, arg, \$R, \$T);\n" +" _runUnaryZoned\$2\$3(zone, callback, argument, \$R, \$T) {\n" +" var oldZone, implementation, t1, implZone;\n" +" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(callback);\n" +" \$T._as(argument);\n" +" implementation = this._runUnaryFunction;\n" +" if (implementation == null) {\n" +" t1 = \$.Zone__current;\n" +" if (t1 === zone)\n" +" return callback.call\$1(argument);\n" +" oldZone = t1;\n" +" \$.Zone__current = zone;\n" +" try {\n" +" t1 = callback.call\$1(argument);\n" +" return t1;\n" +" } finally {\n" +" \$.Zone__current = oldZone;\n" +" }\n" +" }\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$2\$5(implZone, t1, zone, callback, argument, \$R, \$T);\n" " },\n" -" runBinary\$3\$3(f, arg1, arg2, \$R, \$T1, \$T2) {\n" -" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(f);\n" -" \$T1._as(arg1);\n" -" \$T2._as(arg2);\n" -" if (\$.Zone__current === B.C__RootZone)\n" -" return f.call\$2(arg1, arg2);\n" -" return A._rootRunBinary(null, null, this, f, arg1, arg2, \$R, \$T1, \$T2);\n" +" _runBinaryZoned\$3\$4(zone, callback, argument1, argument2, \$R, \$T1, \$T2) {\n" +" var oldZone, implementation, t1, implZone;\n" +" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(callback);\n" +" \$T1._as(argument1);\n" +" \$T2._as(argument2);\n" +" implementation = this._runBinaryFunction;\n" +" if (implementation == null) {\n" +" t1 = \$.Zone__current;\n" +" if (t1 === zone)\n" +" return callback.call\$2(argument1, argument2);\n" +" oldZone = t1;\n" +" \$.Zone__current = zone;\n" +" try {\n" +" t1 = callback.call\$2(argument1, argument2);\n" +" return t1;\n" +" } finally {\n" +" \$.Zone__current = oldZone;\n" +" }\n" +" }\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$3\$6(implZone, t1, zone, callback, argument1, argument2, \$R, \$T1, \$T2);\n" " },\n" -" registerCallback\$1\$1(f, \$R) {\n" -" return \$R._eval\$1(\"0()\")._as(f);\n" +" _registerCallbackZoned\$1\$2(zone, callback, \$R) {\n" +" var implementation, implZone, t1;\n" +" \$R._eval\$1(\"0()\")._as(callback);\n" +" implementation = this._registerCallbackFunction;\n" +" if (implementation == null)\n" +" return callback;\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$1\$4(implZone, t1, zone, callback, \$R);\n" " },\n" -" registerUnaryCallback\$2\$1(f, \$R, \$T) {\n" -" return \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(f);\n" +" _registerUnaryCallbackZoned\$2\$2(zone, callback, \$R, \$T) {\n" +" var implementation, implZone, t1;\n" +" \$R._eval\$1(\"@<0>\")._bind\$1(\$T)._eval\$1(\"1(2)\")._as(callback);\n" +" implementation = this._registerUnaryCallbackFunction;\n" +" if (implementation == null)\n" +" return callback;\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$2\$4(implZone, t1, zone, callback, \$R, \$T);\n" " },\n" -" registerBinaryCallback\$3\$1(f, \$R, \$T1, \$T2) {\n" -" return \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(f);\n" +" _registerBinaryCallbackZoned\$3\$2(zone, callback, \$R, \$T1, \$T2) {\n" +" var implementation, implZone, t1;\n" +" \$R._eval\$1(\"@<0>\")._bind\$1(\$T1)._bind\$1(\$T2)._eval\$1(\"1(2,3)\")._as(callback);\n" +" implementation = this._registerBinaryCallbackFunction;\n" +" if (implementation == null)\n" +" return callback;\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$3\$4(implZone, t1, zone, callback, \$R, \$T1, \$T2);\n" " },\n" -" errorCallback\$2(error, stackTrace) {\n" -" return null;\n" +" _errorCallbackZoned\$3(zone, error, stackTrace) {\n" +" var implZone, t1,\n" +" implementation = this._errorCallbackFunction;\n" +" if (implementation == null)\n" +" return null;\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$5(implZone, t1, zone, error, stackTrace);\n" " },\n" -" scheduleMicrotask\$1(f) {\n" -" A._rootScheduleMicrotask(null, null, this, type\$.void_Function._as(f));\n" +" _scheduleMicrotaskZoned\$2(zone, callback) {\n" +" var implementation, implZone, t1;\n" +" type\$.void_Function._as(callback);\n" +" implementation = this._scheduleMicrotaskFunction;\n" +" if (implementation == null) {\n" +" A._rootScheduleMicrotask(zone, callback);\n" +" return;\n" +" }\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" implementation.\$function.call\$4(implZone, t1, zone, callback);\n" " },\n" -" createTimer\$2(duration, f) {\n" -" return A.Timer__createTimer(duration, type\$.void_Function._as(f));\n" +" _createTimerZoned\$3(zone, duration, callback) {\n" +" var implementation, implZone, t1;\n" +" type\$.void_Function._as(callback);\n" +" implementation = this._createTimerFunction;\n" +" if (implementation == null)\n" +" return A.Timer__createTimer(duration, B.Zone_jYP !== zone ? zone.bindCallback\$1\$1(callback, type\$.void) : callback);\n" +" implZone = implementation.zone;\n" +" t1 = implZone.get\$_parentDelegate();\n" +" return implementation.\$function.call\$5(implZone, t1, zone, duration, callback);\n" " }\n" " };\n" -" A._RootZone_bindCallback_closure.prototype = {\n" +" A.Zone_bindCallback_closure.prototype = {\n" " call\$0() {\n" -" return this.\$this.run\$1\$1(this.f, this.R);\n" +" var t1 = this.\$this;\n" +" return t1._runZoned\$1\$2(t1, this.registered, this.R);\n" " },\n" " \$signature() {\n" " return this.R._eval\$1(\"0()\");\n" " }\n" " };\n" -" A._RootZone_bindCallbackGuarded_closure.prototype = {\n" +" A.Zone_bindCallbackGuarded_closure.prototype = {\n" " call\$0() {\n" -" return this.\$this.runGuarded\$1(this.f);\n" +" return this.\$this.runGuarded\$1(this.registered);\n" " },\n" " \$signature: 0\n" " };\n" -" A._RootZone_bindUnaryCallbackGuarded_closure.prototype = {\n" -" call\$1(arg) {\n" +" A.Zone_bindUnaryCallbackGuarded_closure.prototype = {\n" +" call\$1(argument) {\n" " var t1 = this.T;\n" -" return this.\$this.runUnaryGuarded\$1\$2(this.f, t1._as(arg), t1);\n" +" return this.\$this.runUnaryGuarded\$1\$2(this.registered, t1._as(argument), t1);\n" " },\n" " \$signature() {\n" " return this.T._eval\$1(\"~(0)\");\n" " }\n" " };\n" -" A.runZonedGuarded_closure.prototype = {\n" +" A.runZonedGuarded_errorHandler.prototype = {\n" " call\$5(\$self, \$parent, zone, error, stackTrace) {\n" -" var e, s, exception, t1;\n" +" var e, s, t1, exception, t2;\n" " try {\n" -" this.parentZone.runBinary\$3\$3(this.onError, error, stackTrace, type\$.void, type\$.Object, type\$.StackTrace);\n" +" t1 = this.parentZone;\n" +" t1._runBinaryZoned\$3\$4(t1, type\$.void_Function_Object_StackTrace._as(this.onError), error, stackTrace, type\$.void, type\$.Object, type\$.StackTrace);\n" " } catch (exception) {\n" " e = A.unwrapException(exception);\n" " s = A.getTraceFromException(exception);\n" -" t1 = \$parent._delegationTarget;\n" -" if (e === error)\n" -" t1._processUncaughtError\$3(zone, error, stackTrace);\n" -" else\n" -" t1._processUncaughtError\$3(zone, A._asObject(e), type\$.StackTrace._as(s));\n" +" t1 = e === error ? stackTrace : s;\n" +" t2 = A._asObject(e);\n" +" type\$.StackTrace._as(t1);\n" +" \$parent._zone._handleUncaughtErrorZoned\$3(zone, t2, t1);\n" " }\n" " },\n" -" \$signature: 42\n" +" \$signature: 32\n" " };\n" -" A._ZoneDelegate.prototype = {\$isZoneDelegate: 1};\n" -" A._rootHandleError_closure.prototype = {\n" +" A.ZoneDelegate.prototype = {};\n" +" A._rootHandleUncaughtError_closure.prototype = {\n" " call\$0() {\n" " A.Error_throwWithStackTrace(this.error, this.stackTrace);\n" " },\n" @@ -14284,7 +13678,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(v) {\n" " return this.K._is(v);\n" " },\n" -" \$signature: 44\n" +" \$signature: 41\n" " };\n" " A._HashSet.prototype = {\n" " get\$iterator(_) {\n" @@ -14507,21 +13901,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " take\$1(receiver, count) {\n" " return A.SubListIterable\$(receiver, 0, A.checkNotNullable(count, \"count\", type\$.int), A.instanceType(receiver)._eval\$1(\"ListBase.E\"));\n" " },\n" -" toList\$1\$growable(receiver, growable) {\n" -" var t1, first, result, i, _this = this;\n" -" if (_this.get\$isEmpty(receiver)) {\n" -" t1 = J.JSArray_JSArray\$growable(0, A.instanceType(receiver)._eval\$1(\"ListBase.E\"));\n" -" return t1;\n" -" }\n" -" first = _this.\$index(receiver, 0);\n" -" result = A.List_List\$filled(_this.get\$length(receiver), first, true, A.instanceType(receiver)._eval\$1(\"ListBase.E\"));\n" -" for (i = 1; i < _this.get\$length(receiver); ++i)\n" -" B.JSArray_methods.\$indexSet(result, i, _this.\$index(receiver, i));\n" -" return result;\n" -" },\n" -" toList\$0(receiver) {\n" -" return this.toList\$1\$growable(receiver, true);\n" -" },\n" " add\$1(receiver, element) {\n" " var t1;\n" " A.instanceType(receiver)._eval\$1(\"ListBase.E\")._as(element);\n" @@ -15144,8 +14523,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " containsKey\$1(key) {\n" " if (this._processed == null)\n" " return this._data.containsKey\$1(key);\n" -" if (typeof key != \"string\")\n" -" return false;\n" " return Object.prototype.hasOwnProperty.call(this._original, key);\n" " },\n" " forEach\$1(_, f) {\n" @@ -15199,10 +14576,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " };\n" " A._JsonMapKeyIterable.prototype = {\n" " get\$length(_) {\n" -" return this._parent.get\$length(0);\n" +" return this._convert\$_parent.get\$length(0);\n" " },\n" " elementAt\$1(_, index) {\n" -" var t1 = this._parent;\n" +" var t1 = this._convert\$_parent;\n" " if (t1._processed == null)\n" " t1 = t1.get\$keys().elementAt\$1(0, index);\n" " else {\n" @@ -15214,7 +14591,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return t1;\n" " },\n" " get\$iterator(_) {\n" -" var t1 = this._parent;\n" +" var t1 = this._convert\$_parent;\n" " if (t1._processed == null) {\n" " t1 = t1.get\$keys();\n" " t1 = t1.get\$iterator(t1);\n" @@ -15225,7 +14602,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return t1;\n" " },\n" " contains\$1(_, key) {\n" -" return this._parent.containsKey\$1(key);\n" +" return this._convert\$_parent.containsKey\$1(key);\n" " }\n" " };\n" " A._Utf8Decoder__decoder_closure.prototype = {\n" @@ -16433,7 +15810,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$2(msg, position) {\n" " throw A.wrapException(A.FormatException\$(\"Illegal IPv6 address, \" + msg, this.host, position));\n" " },\n" -" \$signature: 56\n" +" \$signature: 53\n" " };\n" " A._Uri.prototype = {\n" " get\$_text() {\n" @@ -16733,7 +16110,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(s) {\n" " return A._Uri__uriEncode(64, A._asString(s), B.C_Utf8Codec, false);\n" " },\n" -" \$signature: 10\n" +" \$signature: 9\n" " };\n" " A.UriData.prototype = {\n" " get\$uri() {\n" @@ -17073,7 +16450,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1.call(t1, value);\n" " return value;\n" " },\n" -" \$signature: 11\n" +" \$signature: 10\n" " };\n" " A.FutureOfJSAnyToJSPromise_get_toJS__closure0.prototype = {\n" " call\$2(error, stackTrace) {\n" @@ -17091,7 +16468,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1.call(t1, wrapper);\n" " return wrapper;\n" " },\n" -" \$signature: 68\n" +" \$signature: 61\n" " };\n" " A.FutureOfVoidToJSPromise_get_toJS_closure.prototype = {\n" " call\$2(resolve, reject) {\n" @@ -17105,7 +16482,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " var t1 = this.resolve;\n" " return t1.call(t1);\n" " },\n" -" \$signature: 74\n" +" \$signature: 67\n" " };\n" " A.FutureOfVoidToJSPromise_get_toJS__closure0.prototype = {\n" " call\$2(error, stackTrace) {\n" @@ -17148,13 +16525,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " } else\n" " return o;\n" " },\n" -" \$signature: 11\n" +" \$signature: 10\n" " };\n" " A.promiseToFuture_closure.prototype = {\n" " call\$1(r) {\n" " return this.completer.complete\$1(this.T._eval\$1(\"0/?\")._as(r));\n" " },\n" -" \$signature: 5\n" +" \$signature: 4\n" " };\n" " A.promiseToFuture_closure0.prototype = {\n" " call\$1(e) {\n" @@ -17162,7 +16539,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return this.completer.completeError\$1(new A.NullRejectionException(e === undefined));\n" " return this.completer.completeError\$1(e);\n" " },\n" -" \$signature: 5\n" +" \$signature: 4\n" " };\n" " A.dartify_convert.prototype = {\n" " call\$1(o) {\n" @@ -17214,7 +16591,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " return o;\n" " },\n" -" \$signature: 11\n" +" \$signature: 10\n" " };\n" " A._JSRandom.prototype = {\n" " nextInt\$1(max) {\n" @@ -17630,13 +17007,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(e) {\n" " return type\$.BuildStatus._as(e)._name === this.json;\n" " },\n" -" \$signature: 75\n" +" \$signature: 29\n" " };\n" " A.BuildStatus_BuildStatus\$fromJson_closure0.prototype = {\n" " call\$0() {\n" " throw A.wrapException(A.ArgumentError\$(\"Unknown BuildStatus: \" + this.json, null));\n" " },\n" -" \$signature: 89\n" +" \$signature: 74\n" " };\n" " A.BuildResult.prototype = {\n" " toJson\$0() {\n" @@ -17712,7 +17089,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(e) {\n" " return type\$.DebugEvent._as(e).toJson\$0();\n" " },\n" -" \$signature: 90\n" +" \$signature: 75\n" " };\n" " A.DebugInfo.prototype = {\n" " toJson\$0() {\n" @@ -18125,14 +17502,14 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(o) {\n" " return J.toString\$0\$(o);\n" " },\n" -" \$signature: 29\n" +" \$signature: 30\n" " };\n" " A.PersistentWebSocket.prototype = {\n" " get\$_incomingStreamController() {\n" " var result, _this = this,\n" " value = _this.__PersistentWebSocket__incomingStreamController_FI;\n" " if (value === \$) {\n" -" result = A.StreamController_StreamController(null, null, null, type\$.dynamic);\n" +" result = A.StreamController_StreamController(type\$.dynamic);\n" " result.set\$onListen(_this.get\$_listenWithRetry());\n" " _this.__PersistentWebSocket__incomingStreamController_FI !== \$ && A.throwLateFieldADI(\"_incomingStreamController\");\n" " _this.__PersistentWebSocket__incomingStreamController_FI = result;\n" @@ -18302,9 +17679,9 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(socket) {\n" " var _this = this;\n" " type\$.WebSocket._as(socket);\n" -" return new A.PersistentWebSocket(_this.logger, _this.debugName, _this.maxRetryAttempts, new A._AsyncCompleter(new A._Future(\$.Zone__current, type\$._Future_void), type\$._AsyncCompleter_void), _this.uri, _this.onReconnect, socket, A.StreamController_StreamController(null, null, null, type\$.dynamic));\n" +" return new A.PersistentWebSocket(_this.logger, _this.debugName, _this.maxRetryAttempts, new A._AsyncCompleter(new A._Future(\$.Zone__current, type\$._Future_void), type\$._AsyncCompleter_void), _this.uri, _this.onReconnect, socket, A.StreamController_StreamController(type\$.dynamic));\n" " },\n" -" \$signature: 32\n" +" \$signature: 31\n" " };\n" " A.PersistentWebSocket__listenWithRetry_attemptRetry.prototype = {\n" " call\$1(message) {\n" @@ -18398,7 +17775,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " });\n" " return A._asyncStartSync(\$async\$call\$1, \$async\$completer);\n" " },\n" -" \$signature: 34\n" +" \$signature: 33\n" " };\n" " A._PersistentWebSocket_Object_StreamChannelMixin.prototype = {};\n" " A.safeUnawaited_closure.prototype = {\n" @@ -18407,7 +17784,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " type\$.StackTrace._as(stackTrace);\n" " return \$.\$get\$_logger().log\$4(B.Level_WARNING_900, \"Error in unawaited Future:\", error, stackTrace);\n" " },\n" -" \$signature: 6\n" +" \$signature: 7\n" " };\n" " A.Uuid.prototype = {\n" " v4\$0() {\n" @@ -18476,13 +17853,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$2(key1, key2) {\n" " return A._asString(key1).toLowerCase() === A._asString(key2).toLowerCase();\n" " },\n" -" \$signature: 35\n" +" \$signature: 34\n" " };\n" " A.BaseRequest_closure0.prototype = {\n" " call\$1(key) {\n" " return B.JSString_methods.get\$hashCode(A._asString(key).toLowerCase());\n" " },\n" -" \$signature: 36\n" +" \$signature: 35\n" " };\n" " A.BaseResponse.prototype = {\n" " BaseResponse\$7\$contentLength\$headers\$isRedirect\$persistentConnection\$reasonPhrase\$request(statusCode, contentLength, headers, isRedirect, persistentConnection, reasonPhrase, request) {\n" @@ -18577,7 +17954,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }(A._callDartFunctionFast3, t2);\n" " result[\$.\$get\$DART_CLOSURE_DART_JSINTEROP_PROPERTY_NAME()] = t2;\n" " t1.forEach(result);\n" -" t1 = A._readBody(request, response);\n" +" t1 = A._bodyToStream(request, response);\n" " t2 = A._asInt(response.status);\n" " t4 = headers;\n" " t5 = contentLength0;\n" @@ -18636,20 +18013,77 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$2(value, header) {\n" " return this.call\$3(value, header, null);\n" " },\n" +" \$signature: 36\n" +" };\n" +" A._bodyToStream_closure.prototype = {\n" +" call\$1(listener) {\n" +" return A._readStreamBody(this.request, this.response, type\$.MultiStreamController_List_int._as(listener));\n" +" },\n" " \$signature: 37\n" " };\n" -" A._readBody_closure.prototype = {\n" -" call\$1(_) {\n" -" return null;\n" +" A._readStreamBody_closure.prototype = {\n" +" call\$0() {\n" +" var t1 = this._box_0,\n" +" _0_0 = t1.resumeSignal;\n" +" if (_0_0 != null) {\n" +" t1.resumeSignal = null;\n" +" _0_0.complete\$0();\n" +" }\n" " },\n" -" \$signature: 4\n" +" \$signature: 0\n" " };\n" -" A._readBody_closure0.prototype = {\n" -" call\$1(_) {\n" -" A._asObject(_);\n" -" return this._box_0.isError;\n" +" A._readStreamBody_closure0.prototype = {\n" +" call\$0() {\n" +" var \$async\$goto = 0,\n" +" \$async\$completer = A._makeAsyncAwaitCompleter(type\$.void),\n" +" \$async\$handler = 1, \$async\$errorStack = [], \$async\$self = this, e, s, exception, \$async\$exception;\n" +" var \$async\$call\$0 = A._wrapJsFunctionForAsync(function(\$async\$errorCode, \$async\$result) {\n" +" if (\$async\$errorCode === 1) {\n" +" \$async\$errorStack.push(\$async\$result);\n" +" \$async\$goto = \$async\$handler;\n" +" }\n" +" for (;;)\n" +" switch (\$async\$goto) {\n" +" case 0:\n" +" // Function start\n" +" \$async\$handler = 3;\n" +" \$async\$self._box_0.cancelled = true;\n" +" \$async\$goto = 6;\n" +" return A._asyncAwait(A.promiseToFuture(A._asJSObject(\$async\$self.reader.cancel()), type\$.nullable_Object), \$async\$call\$0);\n" +" case 6:\n" +" // returning from await.\n" +" \$async\$handler = 1;\n" +" // goto after finally\n" +" \$async\$goto = 5;\n" +" break;\n" +" case 3:\n" +" // catch\n" +" \$async\$handler = 2;\n" +" \$async\$exception = \$async\$errorStack.pop();\n" +" e = A.unwrapException(\$async\$exception);\n" +" s = A.getTraceFromException(\$async\$exception);\n" +" if (!\$async\$self._box_0.hadError)\n" +" A._rethrowAsClientException(e, s, \$async\$self.request);\n" +" // goto after finally\n" +" \$async\$goto = 5;\n" +" break;\n" +" case 2:\n" +" // uncaught\n" +" // goto rethrow\n" +" \$async\$goto = 1;\n" +" break;\n" +" case 5:\n" +" // after finally\n" +" // implicit return\n" +" return A._asyncReturn(null, \$async\$completer);\n" +" case 1:\n" +" // rethrow\n" +" return A._asyncRethrow(\$async\$errorStack.at(-1), \$async\$completer);\n" +" }\n" +" });\n" +" return A._asyncStartSync(\$async\$call\$0, \$async\$completer);\n" " },\n" -" \$signature: 38\n" +" \$signature: 6\n" " };\n" " A.ByteStream.prototype = {\n" " toBytes\$0() {\n" @@ -18664,7 +18098,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(bytes) {\n" " return this.completer.complete\$1(new Uint8Array(A._ensureNativeList(type\$.List_int._as(bytes))));\n" " },\n" -" \$signature: 39\n" +" \$signature: 38\n" " };\n" " A.ClientException.prototype = {\n" " toString\$0(_) {\n" @@ -18752,7 +18186,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " scanner.expectDone\$0();\n" " return A.MediaType\$(t4, t5, parameters);\n" " },\n" -" \$signature: 40\n" +" \$signature: 39\n" " };\n" " A.MediaType_toString_closure.prototype = {\n" " call\$2(attribute, value) {\n" @@ -18771,7 +18205,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " } else\n" " t1._contents = t3 + value;\n" " },\n" -" \$signature: 41\n" +" \$signature: 40\n" " };\n" " A.MediaType_toString__closure.prototype = {\n" " call\$1(match) {\n" @@ -18874,7 +18308,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " \$parent._children.\$indexSet(0, thisName, t1);\n" " return t1;\n" " },\n" -" \$signature: 43\n" +" \$signature: 42\n" " };\n" " A.Context.prototype = {\n" " absolute\$15(part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14, part15) {\n" @@ -19121,7 +18555,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " A._asStringQ(arg);\n" " return arg == null ? \"null\" : '\"' + arg + '\"';\n" " },\n" -" \$signature: 45\n" +" \$signature: 44\n" " };\n" " A.InternalStyle.prototype = {\n" " getRoot\$1(path) {\n" @@ -19575,7 +19009,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " var t1 = this.\$this;\n" " t1._onReleaseCompleters.removeFirst\$0().complete\$1(new A.PoolResource(t1));\n" " },\n" -" \$signature: 46\n" +" \$signature: 45\n" " };\n" " A.Pool__runOnRelease_closure0.prototype = {\n" " call\$2(error, stackTrace) {\n" @@ -19593,23 +19027,27 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " get\$lines() {\n" " return this._lineStarts.length;\n" " },\n" -" SourceFile\$decoded\$2\$url(decodedChars, url) {\n" -" var t1, t2, t3, i, c, j, t4;\n" -" for (t1 = this._decodedChars, t2 = t1.length, t3 = this._lineStarts, i = 0; i < t2; ++i) {\n" -" c = t1[i];\n" +" SourceFile\$_fromList\$2\$url(decodedChars, url) {\n" +" var t1, t2, t3, t4, t5, t6, i, c, j, t7;\n" +" for (t1 = this._decodedChars, t2 = t1.length, t3 = decodedChars.__internal\$_string, t4 = t3.length, t5 = t1.\$flags | 0, t6 = this._lineStarts, i = 0; i < t2; ++i) {\n" +" if (!(i < t4))\n" +" return A.ioore(t3, i);\n" +" c = t3.charCodeAt(i);\n" +" t5 & 2 && A.throwUnsupportedOperation(t1);\n" +" t1[i] = c;\n" " if (c === 13) {\n" " j = i + 1;\n" -" if (j < t2) {\n" -" if (!(j < t2))\n" -" return A.ioore(t1, j);\n" -" t4 = t1[j] !== 10;\n" +" if (j < t4) {\n" +" if (!(j < t4))\n" +" return A.ioore(t3, j);\n" +" t7 = t3.charCodeAt(j) !== 10;\n" " } else\n" -" t4 = true;\n" -" if (t4)\n" +" t7 = true;\n" +" if (t7)\n" " c = 10;\n" " }\n" " if (c === 10)\n" -" B.JSArray_methods.add\$1(t3, i + 1);\n" +" B.JSArray_methods.add\$1(t6, i + 1);\n" " }\n" " },\n" " getLine\$1(offset) {\n" @@ -20015,7 +19453,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$0() {\n" " return this.color;\n" " },\n" -" \$signature: 47\n" +" \$signature: 46\n" " };\n" " A.Highlighter\$__closure.prototype = {\n" " call\$1(line) {\n" @@ -20023,7 +19461,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t2 = A._arrayInstanceType(t1);\n" " return new A.WhereIterable(t1, t2._eval\$1(\"bool(1)\")._as(new A.Highlighter\$___closure()), t2._eval\$1(\"WhereIterable<1>\")).get\$length(0);\n" " },\n" -" \$signature: 48\n" +" \$signature: 47\n" " };\n" " A.Highlighter\$___closure.prototype = {\n" " call\$1(highlight) {\n" @@ -20036,21 +19474,21 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(line) {\n" " return type\$._Line._as(line).url;\n" " },\n" -" \$signature: 50\n" +" \$signature: 49\n" " };\n" " A.Highlighter__collateLines_closure.prototype = {\n" " call\$1(highlight) {\n" " var t1 = type\$._Highlight._as(highlight).span.get\$sourceUrl();\n" " return t1 == null ? new A.Object() : t1;\n" " },\n" -" \$signature: 51\n" +" \$signature: 50\n" " };\n" " A.Highlighter__collateLines_closure0.prototype = {\n" " call\$2(highlight1, highlight2) {\n" " var t1 = type\$._Highlight;\n" " return t1._as(highlight1).span.compareTo\$1(0, t1._as(highlight2).span);\n" " },\n" -" \$signature: 52\n" +" \$signature: 51\n" " };\n" " A.Highlighter__collateLines_closure1.prototype = {\n" " call\$1(entry) {\n" @@ -20093,7 +19531,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " return lines;\n" " },\n" -" \$signature: 53\n" +" \$signature: 78\n" " };\n" " A.Highlighter__collateLines__closure.prototype = {\n" " call\$1(highlight) {\n" @@ -20260,7 +19698,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }\n" " return A._Highlight__normalizeEndOfLine(A._Highlight__normalizeTrailingNewline(A._Highlight__normalizeNewlines(newSpan)));\n" " },\n" -" \$signature: 55\n" +" \$signature: 54\n" " };\n" " A._Line.prototype = {\n" " toString\$0(_) {\n" @@ -20473,8 +19911,18 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _this._outgoingController.close\$0();\n" " },\n" " _closeWithError\$1(error) {\n" -" var t1;\n" -" this._incomingController.addError\$1(error);\n" +" var _0_0, error0, stackTrace, t2,\n" +" t1 = this._incomingController;\n" +" if (t1._state >= 4)\n" +" A.throwExpression(t1._badEventState\$0());\n" +" _0_0 = A._interceptUserError(error, null);\n" +" error0 = _0_0.error;\n" +" stackTrace = _0_0.stackTrace;\n" +" t2 = t1._state;\n" +" if ((t2 & 1) !== 0)\n" +" t1._sendError\$2(error0, stackTrace);\n" +" else if ((t2 & 3) === 0)\n" +" t1._ensurePendingEvents\$0().add\$1(0, new A._DelayedError(error0, stackTrace));\n" " this.close\$0();\n" " t1 = this._onConnected;\n" " if ((t1.future._state & 30) === 0)\n" @@ -20628,7 +20076,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " });\n" " return A._asyncStartSync(\$async\$call\$0, \$async\$completer);\n" " },\n" -" \$signature: 58\n" +" \$signature: 57\n" " };\n" " A.StreamChannelMixin.prototype = {};\n" " A.StringScannerException.prototype = {\n" @@ -20675,7 +20123,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this._fail\$1(\"no more input\");\n" " },\n" " error\$3\$length\$position(message, \$length, position) {\n" -" var t2, t3, t4, t5, sourceFile, end,\n" +" var t2, t3, end, sourceFile, end0,\n" " t1 = this.string;\n" " if (position < 0)\n" " A.throwExpression(A.RangeError\$(\"position must be greater than or equal to 0.\"));\n" @@ -20685,17 +20133,16 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " if (t2)\n" " A.throwExpression(A.RangeError\$(\"position plus length must not go beyond the end of the string.\"));\n" " t2 = this.sourceUrl;\n" -" t3 = new A.CodeUnits(t1);\n" -" t4 = A._setArrayType([0], type\$.JSArray_int);\n" -" t5 = new Uint32Array(A._ensureNativeList(t3.toList\$0(t3)));\n" -" sourceFile = new A.SourceFile(t2, t4, t5);\n" -" sourceFile.SourceFile\$decoded\$2\$url(t3, t2);\n" -" end = position + \$length;\n" -" if (end > t5.length)\n" -" A.throwExpression(A.RangeError\$(\"End \" + end + string\$.x20must_ + sourceFile.get\$length(0) + \".\"));\n" +" t3 = A._setArrayType([0], type\$.JSArray_int);\n" +" end = t1.length;\n" +" sourceFile = new A.SourceFile(t2, t3, new Uint32Array(end));\n" +" sourceFile.SourceFile\$_fromList\$2\$url(new A.CodeUnits(t1), t2);\n" +" end0 = position + \$length;\n" +" if (end0 > end)\n" +" A.throwExpression(A.RangeError\$(\"End \" + end0 + string\$.x20must_ + sourceFile.get\$length(0) + \".\"));\n" " else if (position < 0)\n" " A.throwExpression(A.RangeError\$(\"Start may not be negative, was \" + position + \".\"));\n" -" throw A.wrapException(new A.StringScannerException(t1, message, new A._FileSpan(sourceFile, position, end)));\n" +" throw A.wrapException(new A.StringScannerException(t1, message, new A._FileSpan(sourceFile, position, end0)));\n" " },\n" " _fail\$1(\$name) {\n" " this.error\$3\$length\$position(\"expected \" + \$name + \".\", 0, this._string_scanner\$_position);\n" @@ -21001,8 +20448,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " t1.\$dartReadyToRunMain = A._functionToJS0(new A.main__closure4(_box_0));\n" " t2 = \$.Zone__current;\n" " t3 = Math.max(100, 1);\n" -" t4 = A.StreamController_StreamController(null, null, null, type\$.DebugEvent);\n" -" t5 = A.StreamController_StreamController(null, null, null, type\$.List_DebugEvent);\n" +" t4 = A.StreamController_StreamController(type\$.DebugEvent);\n" +" t5 = A.StreamController_StreamController(type\$.List_DebugEvent);\n" " debugEventController = new A.BatchedStreamController(t3, 1000, t4, t5, new A._AsyncCompleter(new A._Future(t2, type\$._Future_bool), type\$._AsyncCompleter_bool), type\$.BatchedStreamController_DebugEvent);\n" " t2 = A.List_List\$filled(A.QueueList__computeInitialCapacity(null), null, false, type\$.nullable_Result_DebugEvent);\n" " t3 = A.ListQueue\$(type\$._EventRequest_dynamic);\n" @@ -21024,25 +20471,25 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " });\n" " return A._asyncStartSync(\$async\$call\$0, \$async\$completer);\n" " },\n" -" \$signature: 9\n" +" \$signature: 6\n" " };\n" " A.main__closure.prototype = {\n" " call\$0() {\n" " return A.FutureOfJSAnyToJSPromise_get_toJS(this.manager._restarter.hotReloadStart\$1(A._asStringQ(init.G.\$reloadedSourcesPath)), type\$.JSArray_nullable_Object);\n" " },\n" -" \$signature: 7\n" +" \$signature: 5\n" " };\n" " A.main__closure0.prototype = {\n" " call\$0() {\n" " return A.FutureOfVoidToJSPromise_get_toJS(this.manager.hotReloadEnd\$0());\n" " },\n" -" \$signature: 7\n" +" \$signature: 5\n" " };\n" " A.main__closure1.prototype = {\n" " call\$0() {\n" " return A.FutureOfJSAnyToJSPromise_get_toJS(this.manager.hotRestartBegin\$1(A._asStringQ(init.G.\$reloadedSourcesPath)), type\$.JSArray_nullable_Object);\n" " },\n" -" \$signature: 7\n" +" \$signature: 5\n" " };\n" " A.main__closure2.prototype = {\n" " call\$2(runId, pauseIsolatesOnStart) {\n" @@ -21062,7 +20509,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(runId) {\n" " return this.call\$2(runId, null);\n" " },\n" -" \$signature: 92\n" +" \$signature: 60\n" " };\n" " A.main__closure3.prototype = {\n" " call\$1(runId) {\n" @@ -21092,7 +20539,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " if (A._asBool(init.G.\$dartEmitDebugEvents))\n" " A._trySendEvent(this.client.get\$sink(), B.C_JsonCodec.encode\$2\$toEncodable(A._setArrayType([\"BatchedDebugEvents\", new A.BatchedDebugEvents(events).toJson\$0()], type\$.JSArray_Object), null), type\$.dynamic);\n" " },\n" -" \$signature: 63\n" +" \$signature: 62\n" " };\n" " A.main__closure6.prototype = {\n" " call\$2(kind, eventData) {\n" @@ -21104,7 +20551,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " A._trySendEvent(new A._StreamSinkWrapper(t1, A._instanceType(t1)._eval\$1(\"_StreamSinkWrapper<1>\")), new A.DebugEvent(kind, eventData, Date.now()), type\$.DebugEvent);\n" " }\n" " },\n" -" \$signature: 64\n" +" \$signature: 63\n" " };\n" " A.main__closure7.prototype = {\n" " call\$1(eventData) {\n" @@ -21316,7 +20763,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " A.main__closure10.prototype = {\n" " call\$1(error) {\n" " },\n" -" \$signature: 4\n" +" \$signature: 8\n" " };\n" " A.main__closure11.prototype = {\n" " call\$1(e) {\n" @@ -21335,25 +20782,25 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " type\$.StackTrace._as(stackTrace);\n" " A.print(\"Unhandled error detected in the injected client.js script.\\n\\nYou can disable this script in webdev by passing --no-injected-client if it\\nis preventing your app from loading, but note that this will also prevent\\nall debugging and hot reload/restart functionality from working.\\n\\nThe original error is below, please file an issue at\\nhttps://github.com/dart-lang/webdev/issues/new and attach this output:\\n\\n\" + A.S(error) + \"\\n\" + stackTrace.toString\$0(0) + \"\\n\");\n" " },\n" -" \$signature: 6\n" +" \$signature: 7\n" " };\n" " A._handleAuthRequest_closure.prototype = {\n" " call\$1(isAuthenticated) {\n" " return A._dispatchEvent(\"dart-auth-response\", \"\" + A._asBool(isAuthenticated));\n" " },\n" -" \$signature: 65\n" +" \$signature: 64\n" " };\n" " A._sendHotReloadResponse_closure.prototype = {\n" " call\$3(id, success, errorMessage) {\n" " return new A.HotReloadResponse(id, success, errorMessage);\n" " },\n" -" \$signature: 66\n" +" \$signature: 65\n" " };\n" " A._sendHotRestartResponse_closure.prototype = {\n" " call\$3(id, success, errorMessage) {\n" " return new A.HotRestartResponse(id, success, errorMessage);\n" " },\n" -" \$signature: 67\n" +" \$signature: 66\n" " };\n" " A.DdcLibraryBundleRestarter.prototype = {\n" " _runMainWhenReady\$2(readyToRunMain, runMain) {\n" @@ -21761,7 +21208,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " this.sub.cancel\$0();\n" " return value;\n" " },\n" -" \$signature: 69\n" +" \$signature: 68\n" " };\n" " A.ReloadingManager.prototype = {\n" " hotRestart\$3\$readyToRunMain\$reloadedSourcesPath\$runId(readyToRunMain, reloadedSourcesPath, runId) {\n" @@ -22327,7 +21774,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " call\$1(e) {\n" " this.completer.completeError\$2(new A.HotReloadFailedException(A._asString(type\$.JavaScriptObject._as(e).message)), this.stackTrace);\n" " },\n" -" \$signature: 72\n" +" \$signature: 71\n" " };\n" " A._createScript_closure.prototype = {\n" " call\$0() {\n" @@ -22336,13 +21783,13 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " return new A._createScript__closure();\n" " return new A._createScript__closure0(nonce);\n" " },\n" -" \$signature: 73\n" +" \$signature: 72\n" " };\n" " A._createScript__closure.prototype = {\n" " call\$0() {\n" " return A._asJSObject(A._asJSObject(init.G.document).createElement(\"script\"));\n" " },\n" -" \$signature: 7\n" +" \$signature: 5\n" " };\n" " A._createScript__closure0.prototype = {\n" " call\$0() {\n" @@ -22350,7 +21797,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " scriptElement.setAttribute(\"nonce\", this.nonce);\n" " return scriptElement;\n" " },\n" -" \$signature: 7\n" +" \$signature: 5\n" " };\n" " A.runMain_closure.prototype = {\n" " call\$0() {\n" @@ -22389,52 +21836,23 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _instance_1_u = hunkHelpers._instance_1u,\n" " _static_1 = hunkHelpers._static_1,\n" " _static_0 = hunkHelpers._static_0,\n" -" _static = hunkHelpers.installStaticTearOff,\n" " _instance = hunkHelpers.installInstanceTearOff,\n" " _instance_2_u = hunkHelpers._instance_2u,\n" " _instance_0_u = hunkHelpers._instance_0u,\n" -" _instance_1_i = hunkHelpers._instance_1i;\n" +" _instance_1_i = hunkHelpers._instance_1i,\n" +" _static = hunkHelpers.installStaticTearOff;\n" " _static_2(J, \"_interceptors_JSArray__compareAny\$closure\", \"JSArray__compareAny\", 27);\n" -" _instance_1_u(A.CastStreamSubscription.prototype, \"get\$__internal\$_onData\", \"__internal\$_onData\$1\", 8);\n" +" _instance_1_u(A.CastStreamSubscription.prototype, \"get\$__internal\$_onData\", \"__internal\$_onData\$1\", 11);\n" " _static_1(A, \"async__AsyncRun__scheduleImmediateJsOverride\$closure\", \"_AsyncRun__scheduleImmediateJsOverride\", 14);\n" " _static_1(A, \"async__AsyncRun__scheduleImmediateWithSetImmediate\$closure\", \"_AsyncRun__scheduleImmediateWithSetImmediate\", 14);\n" " _static_1(A, \"async__AsyncRun__scheduleImmediateWithTimer\$closure\", \"_AsyncRun__scheduleImmediateWithTimer\", 14);\n" " _static_0(A, \"async___startMicrotaskLoop\$closure\", \"_startMicrotaskLoop\", 0);\n" -" _static_1(A, \"async___nullDataHandler\$closure\", \"_nullDataHandler\", 5);\n" -" _static_2(A, \"async___nullErrorHandler\$closure\", \"_nullErrorHandler\", 6);\n" +" _static_1(A, \"async___nullDataHandler\$closure\", \"_nullDataHandler\", 4);\n" +" _static_2(A, \"async___nullErrorHandler\$closure\", \"_nullErrorHandler\", 7);\n" " _static_0(A, \"async___nullDoneHandler\$closure\", \"_nullDoneHandler\", 0);\n" -" _static(A, \"async___rootHandleUncaughtError\$closure\", 5, null, [\"call\$5\"], [\"_rootHandleUncaughtError\"], 76, 0);\n" -" _static(A, \"async___rootRun\$closure\", 4, null, [\"call\$1\$4\", \"call\$4\"], [\"_rootRun\", function(\$self, \$parent, zone, f) {\n" -" return A._rootRun(\$self, \$parent, zone, f, type\$.dynamic);\n" -" }], 77, 0);\n" -" _static(A, \"async___rootRunUnary\$closure\", 5, null, [\"call\$2\$5\", \"call\$5\"], [\"_rootRunUnary\", function(\$self, \$parent, zone, f, arg) {\n" -" var t1 = type\$.dynamic;\n" -" return A._rootRunUnary(\$self, \$parent, zone, f, arg, t1, t1);\n" -" }], 78, 0);\n" -" _static(A, \"async___rootRunBinary\$closure\", 6, null, [\"call\$3\$6\"], [\"_rootRunBinary\"], 79, 0);\n" -" _static(A, \"async___rootRegisterCallback\$closure\", 4, null, [\"call\$1\$4\", \"call\$4\"], [\"_rootRegisterCallback\", function(\$self, \$parent, zone, f) {\n" -" return A._rootRegisterCallback(\$self, \$parent, zone, f, type\$.dynamic);\n" -" }], 80, 0);\n" -" _static(A, \"async___rootRegisterUnaryCallback\$closure\", 4, null, [\"call\$2\$4\", \"call\$4\"], [\"_rootRegisterUnaryCallback\", function(\$self, \$parent, zone, f) {\n" -" var t1 = type\$.dynamic;\n" -" return A._rootRegisterUnaryCallback(\$self, \$parent, zone, f, t1, t1);\n" -" }], 81, 0);\n" -" _static(A, \"async___rootRegisterBinaryCallback\$closure\", 4, null, [\"call\$3\$4\", \"call\$4\"], [\"_rootRegisterBinaryCallback\", function(\$self, \$parent, zone, f) {\n" -" var t1 = type\$.dynamic;\n" -" return A._rootRegisterBinaryCallback(\$self, \$parent, zone, f, t1, t1, t1);\n" -" }], 82, 0);\n" -" _static(A, \"async___rootErrorCallback\$closure\", 5, null, [\"call\$5\"], [\"_rootErrorCallback\"], 83, 0);\n" -" _static(A, \"async___rootScheduleMicrotask\$closure\", 4, null, [\"call\$4\"], [\"_rootScheduleMicrotask\"], 84, 0);\n" -" _static(A, \"async___rootCreateTimer\$closure\", 5, null, [\"call\$5\"], [\"_rootCreateTimer\"], 85, 0);\n" -" _static(A, \"async___rootCreatePeriodicTimer\$closure\", 5, null, [\"call\$5\"], [\"_rootCreatePeriodicTimer\"], 86, 0);\n" -" _static(A, \"async___rootPrint\$closure\", 4, null, [\"call\$4\"], [\"_rootPrint\"], 87, 0);\n" -" _static(A, \"async___rootFork\$closure\", 5, null, [\"call\$5\"], [\"_rootFork\"], 88, 0);\n" -" _instance(A._Completer.prototype, \"get\$completeError\", 0, 1, null, [\"call\$2\", \"call\$1\"], [\"completeError\$2\", \"completeError\$1\"], 62, 0, 0);\n" -" _instance_2_u(A._Future.prototype, \"get\$_completeError\", \"_completeError\$2\", 6);\n" +" _instance(A._Completer.prototype, \"get\$completeError\", 0, 1, null, [\"call\$2\", \"call\$1\"], [\"completeError\$2\", \"completeError\$1\"], 58, 0, 0);\n" +" _instance_2_u(A._Future.prototype, \"get\$_completeError\", \"_completeError\$2\", 7);\n" " var _;\n" -" _instance_1_u(_ = A._StreamController.prototype, \"get\$_add\", \"_add\$1\", 8);\n" -" _instance_2_u(_, \"get\$_addError\", \"_addError\$2\", 6);\n" -" _instance_0_u(_, \"get\$_close\", \"_close\$0\", 0);\n" " _instance_0_u(_ = A._ControllerSubscription.prototype, \"get\$_onPause\", \"_onPause\$0\", 0);\n" " _instance_0_u(_, \"get\$_onResume\", \"_onResume\$0\", 0);\n" " _instance_0_u(_ = A._BufferingStreamSubscription.prototype, \"get\$_onPause\", \"_onPause\$0\", 0);\n" @@ -22442,59 +21860,59 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _instance_0_u(A._DoneStreamSubscription.prototype, \"get\$_onMicrotask\", \"_onMicrotask\$0\", 0);\n" " _instance_0_u(_ = A._ForwardingStreamSubscription.prototype, \"get\$_onPause\", \"_onPause\$0\", 0);\n" " _instance_0_u(_, \"get\$_onResume\", \"_onResume\$0\", 0);\n" -" _instance_1_u(_, \"get\$_handleData\", \"_handleData\$1\", 8);\n" -" _instance_2_u(_, \"get\$_handleError\", \"_handleError\$2\", 33);\n" +" _instance_1_u(_, \"get\$_handleData\", \"_handleData\$1\", 11);\n" +" _instance_2_u(_, \"get\$_handleError\", \"_handleError\$2\", 76);\n" " _instance_0_u(_, \"get\$_handleDone\", \"_handleDone\$0\", 0);\n" " _static_2(A, \"collection___defaultEquals\$closure\", \"_defaultEquals0\", 28);\n" " _static_1(A, \"collection___defaultHashCode\$closure\", \"_defaultHashCode\", 15);\n" " _static_2(A, \"collection_ListBase__compareAny\$closure\", \"ListBase__compareAny\", 27);\n" " _static_1(A, \"convert___defaultToEncodable\$closure\", \"_defaultToEncodable\", 16);\n" -" _instance_1_i(_ = A._ByteCallbackSink.prototype, \"get\$add\", \"add\$1\", 8);\n" +" _instance_1_i(_ = A._ByteCallbackSink.prototype, \"get\$add\", \"add\$1\", 11);\n" " _instance_0_u(_, \"get\$close\", \"close\$0\", 0);\n" " _static_1(A, \"core__identityHashCode\$closure\", \"identityHashCode\", 15);\n" " _static_2(A, \"core__identical\$closure\", \"identical\", 28);\n" -" _static_1(A, \"core_Uri_decodeComponent\$closure\", \"Uri_decodeComponent\", 10);\n" +" _static_1(A, \"core_Uri_decodeComponent\$closure\", \"Uri_decodeComponent\", 9);\n" " _static(A, \"math__max\$closure\", 2, null, [\"call\$1\$2\", \"call\$2\"], [\"max\", function(a, b) {\n" " return A.max(a, b, type\$.num);\n" -" }], 91, 0);\n" -" _instance_1_u(_ = A.PersistentWebSocket.prototype, \"get\$_writeToWebSocket\", \"_writeToWebSocket\$1\", 5);\n" -" _instance_0_u(_, \"get\$_listenWithRetry\", \"_listenWithRetry\$0\", 9);\n" -" _static_1(A, \"case_insensitive_map_CaseInsensitiveMap__canonicalizer\$closure\", \"CaseInsensitiveMap__canonicalizer\", 10);\n" +" }], 77, 0);\n" +" _instance_1_u(_ = A.PersistentWebSocket.prototype, \"get\$_writeToWebSocket\", \"_writeToWebSocket\$1\", 4);\n" +" _instance_0_u(_, \"get\$_listenWithRetry\", \"_listenWithRetry\$0\", 6);\n" +" _static_1(A, \"case_insensitive_map_CaseInsensitiveMap__canonicalizer\$closure\", \"CaseInsensitiveMap__canonicalizer\", 9);\n" " _instance_1_u(_ = A.SseClient.prototype, \"get\$_onIncomingControlMessage\", \"_onIncomingControlMessage\$1\", 2);\n" " _instance_1_u(_, \"get\$_onIncomingMessage\", \"_onIncomingMessage\$1\", 2);\n" " _instance_0_u(_, \"get\$_onOutgoingDone\", \"_onOutgoingDone\$0\", 0);\n" -" _instance_1_u(_, \"get\$_onOutgoingMessage\", \"_onOutgoingMessage\$1\", 57);\n" -" _static_1(A, \"client__initializeConnection\$closure\", \"initializeConnection\", 61);\n" +" _instance_1_u(_, \"get\$_onOutgoingMessage\", \"_onOutgoingMessage\$1\", 56);\n" +" _static_1(A, \"client__initializeConnection\$closure\", \"initializeConnection\", 52);\n" " _static_1(A, \"client___handleAuthRequest\$closure\", \"_handleAuthRequest\", 2);\n" " _instance_0_u(A.ReloadingManager.prototype, \"get\$hotRestartEnd\", \"hotRestartEnd\$0\", 0);\n" -" _instance_1_u(_ = A.RequireRestarter.prototype, \"get\$_moduleParents\", \"_moduleParents\$1\", 70);\n" -" _instance_2_u(_, \"get\$_moduleTopologicalCompare\", \"_moduleTopologicalCompare\$2\", 71);\n" +" _instance_1_u(_ = A.RequireRestarter.prototype, \"get\$_moduleParents\", \"_moduleParents\$1\", 69);\n" +" _instance_2_u(_, \"get\$_moduleTopologicalCompare\", \"_moduleTopologicalCompare\$2\", 70);\n" " })();\n" " (function inheritance() {\n" " var _mixin = hunkHelpers.mixin,\n" " _inherit = hunkHelpers.inherit,\n" " _inheritMany = hunkHelpers.inheritMany;\n" " _inherit(A.Object, null);\n" -" _inheritMany(A.Object, [A.JS_CONST, J.Interceptor, A.SafeToStringHook, J.ArrayIterator, A.Stream, A.CastStreamSubscription, A.Iterable, A.CastIterator, A.Closure, A.MapBase, A.Error, A.ListBase, A.SentinelValue, A.ListIterator, A.MappedIterator, A.WhereIterator, A.ExpandIterator, A.TakeIterator, A.SkipIterator, A.EmptyIterator, A.WhereTypeIterator, A.FixedLengthListMixin, A.UnmodifiableListMixin, A._Record, A.ConstantMap, A._KeysOrValuesOrElementsIterator, A.TypeErrorDecoder, A.NullThrownFromJavaScriptException, A.ExceptionAndStackTrace, A._StackTrace, A.LinkedHashMapCell, A.LinkedHashMapKeyIterator, A.LinkedHashMapValueIterator, A.LinkedHashMapEntryIterator, A.JSSyntaxRegExp, A._MatchImplementation, A._AllMatchesIterator, A.StringMatch, A._StringAllMatchesIterator, A._Cell, A._UnmodifiableNativeByteBufferView, A.Rti, A._FunctionParameters, A._Type, A._TimerImpl, A._AsyncAwaitCompleter, A._AsyncStarStreamController, A._IterationMarker, A.AsyncError, A._Completer, A._FutureListener, A._Future, A._AsyncCallbackEntry, A._StreamController, A._AsyncStreamControllerDispatch, A._BufferingStreamSubscription, A._StreamSinkWrapper, A._AddStreamState, A._DelayedEvent, A._DelayedDone, A._PendingEvents, A._DoneStreamSubscription, A._StreamIterator, A._ZoneRun, A._ZoneRunUnary, A._ZoneRunBinary, A._ZoneRegisterCallback, A._ZoneRegisterUnaryCallback, A._ZoneRegisterBinaryCallback, A._ZoneErrorCallback, A._ZoneScheduleMicrotask, A._ZoneCreateTimer, A._ZoneCreatePeriodicTimer, A._ZonePrint, A._ZoneFork, A._ZoneHandleUncaughtError, A._ZoneValues, A._Zone, A._ZoneDelegate, A.ZoneSpecification, A._HashMapKeyIterator, A.SetBase, A._HashSetIterator, A._UnmodifiableMapMixin, A.MapView, A._ListQueueIterator, A._SplayTreeNode, A._SplayTree, A._SplayTreeIterator, A.Codec, A.Converter, A.ByteConversionSink, A._JsonStringifier, A._Utf8Encoder, A._Utf8Decoder, A.DateTime, A.Duration, A._Enum, A.OutOfMemoryError, A.StackOverflowError, A._Exception, A.FormatException, A.MapEntry, A.Null, A._StringStackTrace, A.StringBuffer, A._Uri, A.UriData, A._SimpleUri, A.NullRejectionException, A._JSRandom, A._JSSecureRandom, A.AsyncMemoizer, A.ErrorResult, A.ValueResult, A.StreamQueue, A._NextRequest, A._HasNextRequest, A.CanonicalizedMap, A._QueueList_Object_ListMixin, A.BuildResult, A.ConnectRequest, A.DebugEvent, A.BatchedDebugEvents, A.DebugInfo, A.DevToolsRequest, A.DevToolsResponse, A.ErrorResponse, A.HotReloadRequest, A.HotReloadResponse, A.HotRestartRequest, A.HotRestartResponse, A.PingRequest, A.RegisterEvent, A.RunRequest, A.ServiceExtensionRequest, A.ServiceExtensionResponse, A.BatchedStreamController, A.SocketClient, A._PersistentWebSocket_Object_StreamChannelMixin, A.Uuid, A._StackState, A.ClientException, A.BaseClient, A.BaseRequest, A.BaseResponse, A.MediaType, A.Level, A.LogRecord, A.Logger, A.Context, A.Style, A.ParsedPath, A.PathException, A.Pool, A.PoolResource, A.SourceFile, A.SourceLocationMixin, A.SourceSpanMixin, A.Highlighter, A._Highlight, A._Line, A.SourceLocation, A.SourceSpanException, A.StreamChannelMixin, A.StringScanner, A.EventStreamProvider, A._EventStreamSubscription, A.BrowserWebSocket, A.WebSocketEvent, A.WebSocketException, A.DdcLibraryBundleRestarter, A.DdcRestarter, A.ReloadingManager, A.HotReloadFailedException, A.RequireRestarter]);\n" +" _inheritMany(A.Object, [A.JS_CONST, J.Interceptor, A.SafeToStringHook, J.ArrayIterator, A.Stream, A.CastStreamSubscription, A.Iterable, A.CastIterator, A.Closure, A.MapBase, A.Error, A.ListBase, A.SentinelValue, A.ListIterator, A.MappedIterator, A.WhereIterator, A.ExpandIterator, A.TakeIterator, A.SkipIterator, A.EmptyIterator, A.WhereTypeIterator, A.FixedLengthListMixin, A.UnmodifiableListMixin, A._Record, A.ConstantMap, A._KeysOrValuesOrElementsIterator, A.TypeErrorDecoder, A.NullThrownFromJavaScriptException, A.ExceptionAndStackTrace, A._StackTrace, A.LinkedHashMapCell, A.LinkedHashMapKeyIterator, A.LinkedHashMapValueIterator, A.LinkedHashMapEntryIterator, A.JSSyntaxRegExp, A._MatchImplementation, A._AllMatchesIterator, A.StringMatch, A._StringAllMatchesIterator, A._Cell, A._UnmodifiableNativeByteBufferView, A.Rti, A._FunctionParameters, A._Type, A._TimerImpl, A._AsyncAwaitCompleter, A.AsyncError, A._Completer, A._FutureListener, A._Future, A._AsyncCallbackEntry, A._StreamController, A._AsyncStreamControllerDispatch, A._BufferingStreamSubscription, A._StreamSinkWrapper, A._DelayedEvent, A._DelayedDone, A._PendingEvents, A._DoneStreamSubscription, A._StreamIterator, A._ZoneHandleUncaughtError, A.Zone, A.ZoneDelegate, A.ZoneSpecification, A._HashMapKeyIterator, A.SetBase, A._HashSetIterator, A._UnmodifiableMapMixin, A.MapView, A._ListQueueIterator, A._SplayTreeNode, A._SplayTree, A._SplayTreeIterator, A.Codec, A.Converter, A.ByteConversionSink, A._JsonStringifier, A._Utf8Encoder, A._Utf8Decoder, A.DateTime, A.Duration, A._Enum, A.OutOfMemoryError, A.StackOverflowError, A._Exception, A.FormatException, A.MapEntry, A.Null, A._StringStackTrace, A.StringBuffer, A._Uri, A.UriData, A._SimpleUri, A.NullRejectionException, A._JSRandom, A._JSSecureRandom, A.AsyncMemoizer, A.ErrorResult, A.ValueResult, A.StreamQueue, A._NextRequest, A._HasNextRequest, A.CanonicalizedMap, A._QueueList_Object_ListMixin, A.BuildResult, A.ConnectRequest, A.DebugEvent, A.BatchedDebugEvents, A.DebugInfo, A.DevToolsRequest, A.DevToolsResponse, A.ErrorResponse, A.HotReloadRequest, A.HotReloadResponse, A.HotRestartRequest, A.HotRestartResponse, A.PingRequest, A.RegisterEvent, A.RunRequest, A.ServiceExtensionRequest, A.ServiceExtensionResponse, A.BatchedStreamController, A.SocketClient, A._PersistentWebSocket_Object_StreamChannelMixin, A.Uuid, A._StackState, A.ClientException, A.BaseClient, A.BaseRequest, A.BaseResponse, A.MediaType, A.Level, A.LogRecord, A.Logger, A.Context, A.Style, A.ParsedPath, A.PathException, A.Pool, A.PoolResource, A.SourceFile, A.SourceLocationMixin, A.SourceSpanMixin, A.Highlighter, A._Highlight, A._Line, A.SourceLocation, A.SourceSpanException, A.StreamChannelMixin, A.StringScanner, A.EventStreamProvider, A._EventStreamSubscription, A.BrowserWebSocket, A.WebSocketEvent, A.WebSocketException, A.DdcLibraryBundleRestarter, A.DdcRestarter, A.ReloadingManager, A.HotReloadFailedException, A.RequireRestarter]);\n" " _inheritMany(J.Interceptor, [J.JSBool, J.JSNull, J.JavaScriptObject, J.JavaScriptBigInt, J.JavaScriptSymbol, J.JSNumber, J.JSString]);\n" " _inheritMany(J.JavaScriptObject, [J.LegacyJavaScriptObject, J.JSArray, A.NativeByteBuffer, A.NativeTypedData]);\n" " _inheritMany(J.LegacyJavaScriptObject, [J.PlainJavaScriptObject, J.UnknownJavaScriptObject, J.JavaScriptFunction]);\n" " _inherit(J.JSArraySafeToStringHook, A.SafeToStringHook);\n" " _inherit(J.JSUnmodifiableArray, J.JSArray);\n" " _inheritMany(J.JSNumber, [J.JSInt, J.JSNumNotInt]);\n" -" _inheritMany(A.Stream, [A.CastStream, A.StreamView, A._StreamImpl, A._EmptyStream, A._ForwardingStream, A._EventStream]);\n" +" _inheritMany(A.Stream, [A.CastStream, A.StreamView, A._StreamImpl, A._EmptyStream, A._MultiStream, A._ForwardingStream, A._EventStream]);\n" " _inheritMany(A.Iterable, [A._CastIterableBase, A.EfficientLengthIterable, A.MappedIterable, A.WhereIterable, A.ExpandIterable, A.TakeIterable, A.SkipIterable, A.WhereTypeIterable, A._KeysOrValues, A._AllMatchesIterable, A._StringAllMatchesIterable]);\n" " _inheritMany(A._CastIterableBase, [A.CastIterable, A.__CastListBase__CastIterableBase_ListMixin]);\n" " _inherit(A._EfficientLengthCastIterable, A.CastIterable);\n" " _inherit(A._CastListBase, A.__CastListBase__CastIterableBase_ListMixin);\n" -" _inheritMany(A.Closure, [A.Closure2Args, A.Closure0Args, A.Instantiation, A.TearOffClosure, A.initHooks_closure, A.initHooks_closure1, A._AsyncRun__initializeScheduleImmediate_internalCallback, A._AsyncRun__initializeScheduleImmediate_closure, A._awaitOnObject_closure, A._asyncStarHelper_closure0, A._Future__propagateToListeners_handleWhenCompleteCallback_closure, A._Future_timeout_closure0, A.Stream_length_closure, A.Stream_first_closure0, A._CustomZone_bindUnaryCallbackGuarded_closure, A._RootZone_bindUnaryCallbackGuarded_closure, A.runZonedGuarded_closure, A._LinkedCustomHashMap_closure, A._Uri__makePath_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure, A.FutureOfVoidToJSPromise_get_toJS__closure, A.jsify__convert, A.promiseToFuture_closure, A.promiseToFuture_closure0, A.dartify_convert, A.StreamQueue__ensureListening_closure, A.CanonicalizedMap_keys_closure, A.BuildStatus_BuildStatus\$fromJson_closure, A.BatchedDebugEvents_toJson_closure, A.WebSocketClient_stream_closure, A.PersistentWebSocket_connect_closure, A.PersistentWebSocket__listenWithRetry_attemptRetry, A.PersistentWebSocket__listenWithRetry_closure, A.BaseRequest_closure0, A.BrowserClient_send_closure, A._readBody_closure, A._readBody_closure0, A.ByteStream_toBytes_closure, A.MediaType_toString__closure, A.expectQuotedString_closure, A.Context_joinAll_closure, A.Context_split_closure, A._validateArgList_closure, A.Pool__runOnRelease_closure, A.Highlighter\$__closure, A.Highlighter\$___closure, A.Highlighter\$__closure0, A.Highlighter__collateLines_closure, A.Highlighter__collateLines_closure1, A.Highlighter__collateLines__closure, A.Highlighter_highlight_closure, A.SseClient_closure0, A.SseClient_closure1, A._EventStreamSubscription_closure, A._EventStreamSubscription_onData_closure, A.BrowserWebSocket_connect_closure, A.BrowserWebSocket_connect_closure0, A.BrowserWebSocket_connect_closure1, A.BrowserWebSocket_connect_closure2, A.main__closure2, A.main__closure3, A.main__closure5, A.main__closure7, A.main__closure9, A.main__closure10, A.main__closure11, A._handleAuthRequest_closure, A._sendHotReloadResponse_closure, A._sendHotRestartResponse_closure, A.DdcLibraryBundleRestarter_restart_closure, A.DdcLibraryBundleRestarter_hotReloadStart_closure, A.DdcRestarter_restart_closure0, A.DdcRestarter_restart_closure, A.RequireRestarter__reloadModule_closure0, A.JSArrayExtension_toDartIterable_closure]);\n" -" _inheritMany(A.Closure2Args, [A._CastListBase_sort_closure, A.CastMap_forEach_closure, A.initHooks_closure0, A._awaitOnObject_closure0, A._wrapJsFunctionForAsync_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure0, A._Future_timeout_closure1, A._AddStreamState_makeErrorHandler_closure, A._BufferingStreamSubscription_asFuture_closure0, A.MapBase_mapToString_closure, A._JsonStringifier_writeMap_closure, A.Uri_parseIPv6Address_error, A.FutureOfJSAnyToJSPromise_get_toJS_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure0, A.FutureOfVoidToJSPromise_get_toJS_closure, A.FutureOfVoidToJSPromise_get_toJS__closure0, A.StreamQueue__ensureListening_closure1, A.CanonicalizedMap_addAll_closure, A.CanonicalizedMap_forEach_closure, A.safeUnawaited_closure, A.BaseRequest_closure, A.MediaType_toString_closure, A.Pool__runOnRelease_closure0, A.Highlighter__collateLines_closure0, A.main__closure6, A.main_closure0]);\n" +" _inheritMany(A.Closure, [A.Closure2Args, A.Closure0Args, A.Instantiation, A.TearOffClosure, A.initHooks_closure, A.initHooks_closure1, A._AsyncRun__initializeScheduleImmediate_internalCallback, A._AsyncRun__initializeScheduleImmediate_closure, A._awaitOnObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure, A._Future_timeout_closure0, A.Stream_length_closure, A.Stream_first_closure0, A.Zone_bindUnaryCallbackGuarded_closure, A.runZonedGuarded_errorHandler, A._LinkedCustomHashMap_closure, A._Uri__makePath_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure, A.FutureOfVoidToJSPromise_get_toJS__closure, A.jsify__convert, A.promiseToFuture_closure, A.promiseToFuture_closure0, A.dartify_convert, A.StreamQueue__ensureListening_closure, A.CanonicalizedMap_keys_closure, A.BuildStatus_BuildStatus\$fromJson_closure, A.BatchedDebugEvents_toJson_closure, A.WebSocketClient_stream_closure, A.PersistentWebSocket_connect_closure, A.PersistentWebSocket__listenWithRetry_attemptRetry, A.PersistentWebSocket__listenWithRetry_closure, A.BaseRequest_closure0, A.BrowserClient_send_closure, A._bodyToStream_closure, A.ByteStream_toBytes_closure, A.MediaType_toString__closure, A.expectQuotedString_closure, A.Context_joinAll_closure, A.Context_split_closure, A._validateArgList_closure, A.Pool__runOnRelease_closure, A.Highlighter\$__closure, A.Highlighter\$___closure, A.Highlighter\$__closure0, A.Highlighter__collateLines_closure, A.Highlighter__collateLines_closure1, A.Highlighter__collateLines__closure, A.Highlighter_highlight_closure, A.SseClient_closure0, A.SseClient_closure1, A._EventStreamSubscription_closure, A._EventStreamSubscription_onData_closure, A.BrowserWebSocket_connect_closure, A.BrowserWebSocket_connect_closure0, A.BrowserWebSocket_connect_closure1, A.BrowserWebSocket_connect_closure2, A.main__closure2, A.main__closure3, A.main__closure5, A.main__closure7, A.main__closure9, A.main__closure10, A.main__closure11, A._handleAuthRequest_closure, A._sendHotReloadResponse_closure, A._sendHotRestartResponse_closure, A.DdcLibraryBundleRestarter_restart_closure, A.DdcLibraryBundleRestarter_hotReloadStart_closure, A.DdcRestarter_restart_closure0, A.DdcRestarter_restart_closure, A.RequireRestarter__reloadModule_closure0, A.JSArrayExtension_toDartIterable_closure]);\n" +" _inheritMany(A.Closure2Args, [A._CastListBase_sort_closure, A.CastMap_forEach_closure, A.initHooks_closure0, A._awaitOnObject_closure0, A._wrapJsFunctionForAsync_closure, A._Future__propagateToListeners_handleWhenCompleteCallback_closure0, A._Future_timeout_closure1, A._BufferingStreamSubscription_asFuture_closure0, A.MapBase_mapToString_closure, A._JsonStringifier_writeMap_closure, A.Uri_parseIPv6Address_error, A.FutureOfJSAnyToJSPromise_get_toJS_closure, A.FutureOfJSAnyToJSPromise_get_toJS__closure0, A.FutureOfVoidToJSPromise_get_toJS_closure, A.FutureOfVoidToJSPromise_get_toJS__closure0, A.StreamQueue__ensureListening_closure1, A.CanonicalizedMap_addAll_closure, A.CanonicalizedMap_forEach_closure, A.safeUnawaited_closure, A.BaseRequest_closure, A.MediaType_toString_closure, A.Pool__runOnRelease_closure0, A.Highlighter__collateLines_closure0, A.main__closure6, A.main_closure0]);\n" " _inherit(A.CastList, A._CastListBase);\n" " _inheritMany(A.MapBase, [A.CastMap, A.JsLinkedHashMap, A._HashMap, A._JsonMap]);\n" " _inheritMany(A.Error, [A.LateError, A.TypeError, A.JsNoSuchMethodError, A.UnknownJsTypeError, A.RuntimeError, A._Error, A.JsonUnsupportedObjectError, A.AssertionError, A.ArgumentError, A.UnsupportedError, A.UnimplementedError, A.StateError, A.ConcurrentModificationError]);\n" " _inherit(A.UnmodifiableListBase, A.ListBase);\n" " _inherit(A.CodeUnits, A.UnmodifiableListBase);\n" -" _inheritMany(A.Closure0Args, [A.nullFuture_closure, A._AsyncRun__scheduleImmediateJsOverride_internalCallback, A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, A._TimerImpl_internalCallback, A._TimerImpl\$periodic_closure, A._asyncStarHelper_closure, A._AsyncStarStreamController__resumeBody, A._AsyncStarStreamController__resumeBody_closure, A._AsyncStarStreamController_closure0, A._AsyncStarStreamController_closure1, A._AsyncStarStreamController_closure, A._AsyncStarStreamController__closure, A.Future_Future\$microtask_closure, A.Future_Future\$delayed_closure, A._Future__addListener_closure, A._Future__prependListeners_closure, A._Future__chainCoreFuture_closure, A._Future__asyncCompleteWithValue_closure, A._Future__asyncCompleteErrorObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback, A._Future__propagateToListeners_handleValueCallback, A._Future__propagateToListeners_handleError, A._Future_timeout_closure, A.Stream_length_closure0, A.Stream_first_closure, A._StreamController__subscribe_closure, A._StreamController__recordCancel_complete, A._AddStreamState_cancel_closure, A._BufferingStreamSubscription_asFuture_closure, A._BufferingStreamSubscription_asFuture__closure, A._BufferingStreamSubscription__sendError_sendError, A._BufferingStreamSubscription__sendDone_sendDone, A._PendingEvents_schedule_closure, A._cancelAndValue_closure, A._CustomZone_bindCallback_closure, A._CustomZone_bindCallbackGuarded_closure, A._RootZone_bindCallback_closure, A._RootZone_bindCallbackGuarded_closure, A._rootHandleError_closure, A._Utf8Decoder__decoder_closure, A._Utf8Decoder__decoderNonfatal_closure, A.StreamQueue__ensureListening_closure0, A.BuildStatus_BuildStatus\$fromJson_closure0, A.BatchedStreamController__hasEventOrTimeOut_closure, A.BatchedStreamController__hasEventDuring_closure, A.MediaType_MediaType\$parse_closure, A.Logger_Logger_closure, A.Highlighter_closure, A.Highlighter__writeFileStart_closure, A.Highlighter__writeMultilineHighlights_closure, A.Highlighter__writeMultilineHighlights_closure0, A.Highlighter__writeMultilineHighlights_closure1, A.Highlighter__writeMultilineHighlights_closure2, A.Highlighter__writeMultilineHighlights__closure, A.Highlighter__writeMultilineHighlights__closure0, A.Highlighter__writeHighlightedText_closure, A.Highlighter__writeIndicator_closure, A.Highlighter__writeIndicator_closure0, A.Highlighter__writeIndicator_closure1, A.Highlighter__writeSidebar_closure, A._Highlight_closure, A.SseClient_closure, A.SseClient__closure, A.SseClient__onOutgoingMessage_closure, A.main_closure, A.main__closure, A.main__closure0, A.main__closure1, A.main__closure4, A.main__closure8, A.DdcLibraryBundleRestarter__getSrcModuleLibraries_closure, A.RequireRestarter__reload_closure, A.RequireRestarter__reloadModule_closure, A._createScript_closure, A._createScript__closure, A._createScript__closure0, A.runMain_closure]);\n" +" _inheritMany(A.Closure0Args, [A.nullFuture_closure, A._AsyncRun__scheduleImmediateJsOverride_internalCallback, A._AsyncRun__scheduleImmediateWithSetImmediate_internalCallback, A._TimerImpl_internalCallback, A.Future_Future\$microtask_closure, A.Future_Future\$delayed_closure, A._Future__addListener_closure, A._Future__prependListeners_closure, A._Future__chainCoreFuture_closure, A._Future__asyncCompleteWithValue_closure, A._Future__asyncCompleteErrorObject_closure, A._Future__propagateToListeners_handleWhenCompleteCallback, A._Future__propagateToListeners_handleValueCallback, A._Future__propagateToListeners_handleError, A._Future_timeout_closure, A.Stream_length_closure0, A.Stream_first_closure, A._StreamController__subscribe_closure, A._StreamController__recordCancel_complete, A._BufferingStreamSubscription_asFuture_closure, A._BufferingStreamSubscription_asFuture__closure, A._BufferingStreamSubscription__sendError_sendError, A._BufferingStreamSubscription__sendDone_sendDone, A._PendingEvents_schedule_closure, A._MultiStream_listen_closure, A._cancelAndValue_closure, A.Zone_bindCallback_closure, A.Zone_bindCallbackGuarded_closure, A._rootHandleUncaughtError_closure, A._Utf8Decoder__decoder_closure, A._Utf8Decoder__decoderNonfatal_closure, A.StreamQueue__ensureListening_closure0, A.BuildStatus_BuildStatus\$fromJson_closure0, A.BatchedStreamController__hasEventOrTimeOut_closure, A.BatchedStreamController__hasEventDuring_closure, A._readStreamBody_closure, A._readStreamBody_closure0, A.MediaType_MediaType\$parse_closure, A.Logger_Logger_closure, A.Highlighter_closure, A.Highlighter__writeFileStart_closure, A.Highlighter__writeMultilineHighlights_closure, A.Highlighter__writeMultilineHighlights_closure0, A.Highlighter__writeMultilineHighlights_closure1, A.Highlighter__writeMultilineHighlights_closure2, A.Highlighter__writeMultilineHighlights__closure, A.Highlighter__writeMultilineHighlights__closure0, A.Highlighter__writeHighlightedText_closure, A.Highlighter__writeIndicator_closure, A.Highlighter__writeIndicator_closure0, A.Highlighter__writeIndicator_closure1, A.Highlighter__writeSidebar_closure, A._Highlight_closure, A.SseClient_closure, A.SseClient__closure, A.SseClient__onOutgoingMessage_closure, A.main_closure, A.main__closure, A.main__closure0, A.main__closure1, A.main__closure4, A.main__closure8, A.DdcLibraryBundleRestarter__getSrcModuleLibraries_closure, A.RequireRestarter__reload_closure, A.RequireRestarter__reloadModule_closure, A._createScript_closure, A._createScript__closure, A._createScript__closure0, A.runMain_closure]);\n" " _inheritMany(A.EfficientLengthIterable, [A.ListIterable, A.EmptyIterable, A.LinkedHashMapKeysIterable, A.LinkedHashMapValuesIterable, A.LinkedHashMapEntriesIterable, A._HashMapKeyIterable]);\n" " _inheritMany(A.ListIterable, [A.SubListIterable, A.MappedListIterable, A.ReversedListIterable, A.ListQueue, A._JsonMapKeyIterable]);\n" " _inherit(A.EfficientLengthMappedIterable, A.MappedIterable);\n" @@ -22521,10 +21939,9 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _inherit(A._AsyncStreamController, A._StreamController);\n" " _inherit(A._ControllerStream, A._StreamImpl);\n" " _inheritMany(A._BufferingStreamSubscription, [A._ControllerSubscription, A._ForwardingStreamSubscription]);\n" -" _inherit(A._StreamControllerAddStreamState, A._AddStreamState);\n" " _inheritMany(A._DelayedEvent, [A._DelayedData, A._DelayedError]);\n" +" _inherit(A._MultiStreamController, A._AsyncStreamController);\n" " _inherit(A._MapStream, A._ForwardingStream);\n" -" _inheritMany(A._Zone, [A._CustomZone, A._RootZone]);\n" " _inherit(A._IdentityHashMap, A._HashMap);\n" " _inherit(A._SetBase, A.SetBase);\n" " _inherit(A._HashSet, A._SetBase);\n" @@ -22585,7 +22002,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " typeUniverse: {eC: new Map(), tR: {}, eT: {}, tPV: {}, sEA: []},\n" " mangledGlobalNames: {int: \"int\", double: \"double\", num: \"num\", String: \"String\", bool: \"bool\", Null: \"Null\", List: \"List\", Object: \"Object\", Map: \"Map\", JSObject: \"JSObject\"},\n" " mangledNames: {},\n" -" types: [\"~()\", \"Null()\", \"~(JSObject)\", \"Null(Object,StackTrace)\", \"Null(@)\", \"~(@)\", \"~(Object,StackTrace)\", \"JSObject()\", \"~(Object?)\", \"Future<~>()\", \"String(String)\", \"Object?(Object?)\", \"bool(_Highlight)\", \"Null(JSObject)\", \"~(~())\", \"int(Object?)\", \"@(@)\", \"~(Object?,Object?)\", \"@()\", \"Null(JavaScriptFunction,JavaScriptFunction)\", \"bool()\", \"Future<~>(String)\", \"String(Match)\", \"bool(String)\", \"int()\", \"Null(String)\", \"Null(JavaScriptFunction)\", \"int(@,@)\", \"bool(Object?,Object?)\", \"String(@)\", \"@(String)\", \"@(@,String)\", \"PersistentWebSocket(WebSocket)\", \"~(@,StackTrace)\", \"Future<~>(WebSocketEvent)\", \"bool(String,String)\", \"int(String)\", \"Null(String,String[Object?])\", \"bool(Object)\", \"~(List)\", \"MediaType()\", \"~(String,String)\", \"~(Zone,ZoneDelegate,Zone,Object,StackTrace)\", \"Logger()\", \"bool(Object?)\", \"String(String?)\", \"Null(~)\", \"String?()\", \"int(_Line)\", \"Null(~())\", \"Object(_Line)\", \"Object(_Highlight)\", \"int(_Highlight,_Highlight)\", \"List<_Line>(MapEntry>)\", \"Null(@,StackTrace)\", \"SourceSpanWithContext()\", \"0&(String,int?)\", \"~(String?)\", \"Future()\", \"~(int,@)\", \"_Future<@>?()\", \"~(StreamSink<@>)\", \"~(Object[StackTrace?])\", \"~(List)\", \"Null(String,String)\", \"~(bool)\", \"HotReloadResponse(String,bool,String?)\", \"HotRestartResponse(String,bool,String?)\", \"JSObject(Object,StackTrace)\", \"bool(bool)\", \"List(String)\", \"int(String,String)\", \"Null(JavaScriptObject)\", \"JSObject()()\", \"Object?(~)\", \"bool(BuildStatus)\", \"~(Zone?,ZoneDelegate?,Zone,Object,StackTrace)\", \"0^(Zone?,ZoneDelegate?,Zone,0^())\", \"0^(Zone?,ZoneDelegate?,Zone,0^(1^),1^)\", \"0^(Zone?,ZoneDelegate?,Zone,0^(1^,2^),1^,2^)\", \"0^()(Zone,ZoneDelegate,Zone,0^())\", \"0^(1^)(Zone,ZoneDelegate,Zone,0^(1^))\", \"0^(1^,2^)(Zone,ZoneDelegate,Zone,0^(1^,2^))\", \"AsyncError?(Zone,ZoneDelegate,Zone,Object,StackTrace?)\", \"~(Zone?,ZoneDelegate?,Zone,~())\", \"Timer(Zone,ZoneDelegate,Zone,Duration,~())\", \"Timer(Zone,ZoneDelegate,Zone,Duration,~(Timer))\", \"~(Zone,ZoneDelegate,Zone,String)\", \"Zone(Zone?,ZoneDelegate?,Zone,ZoneSpecification?,Map?)\", \"0&()\", \"Map(DebugEvent)\", \"0^(0^,0^)\", \"JSObject(String[bool?])\"],\n" +" types: [\"~()\", \"Null()\", \"~(JSObject)\", \"Null(Object,StackTrace)\", \"~(@)\", \"JSObject()\", \"Future<~>()\", \"~(Object,StackTrace)\", \"Null(@)\", \"String(String)\", \"Object?(Object?)\", \"~(Object?)\", \"bool(_Highlight)\", \"Null(JSObject)\", \"~(~())\", \"int(Object?)\", \"@(@)\", \"~(Object?,Object?)\", \"@()\", \"Null(JavaScriptFunction,JavaScriptFunction)\", \"bool()\", \"Future<~>(String)\", \"String(Match)\", \"bool(String)\", \"int()\", \"Null(String)\", \"Null(JavaScriptFunction)\", \"int(@,@)\", \"bool(Object?,Object?)\", \"bool(BuildStatus)\", \"String(@)\", \"PersistentWebSocket(WebSocket)\", \"~(Zone,ZoneDelegate,Zone,Object,StackTrace)\", \"Future<~>(WebSocketEvent)\", \"bool(String,String)\", \"int(String)\", \"Null(String,String[Object?])\", \"~(MultiStreamController>)\", \"~(List)\", \"MediaType()\", \"~(String,String)\", \"bool(Object?)\", \"Logger()\", \"Null(~())\", \"String(String?)\", \"Null(~)\", \"String?()\", \"int(_Line)\", \"Null(@,StackTrace)\", \"Object(_Line)\", \"Object(_Highlight)\", \"int(_Highlight,_Highlight)\", \"~(StreamSink<@>)\", \"0&(String,int?)\", \"SourceSpanWithContext()\", \"~(int,@)\", \"~(String?)\", \"Future()\", \"~(Object[StackTrace?])\", \"@(String)\", \"JSObject(String[bool?])\", \"JSObject(Object,StackTrace)\", \"~(List)\", \"Null(String,String)\", \"~(bool)\", \"HotReloadResponse(String,bool,String?)\", \"HotRestartResponse(String,bool,String?)\", \"Object?(~)\", \"bool(bool)\", \"List(String)\", \"int(String,String)\", \"Null(JavaScriptObject)\", \"JSObject()()\", \"@(@,String)\", \"0&()\", \"Map(DebugEvent)\", \"~(@,StackTrace)\", \"0^(0^,0^)\", \"List<_Line>(MapEntry>)\"],\n" " interceptorsByTag: null,\n" " leafTags: null,\n" " arrayRti: Symbol(\"\$ti\"),\n" @@ -22593,7 +22010,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " \"2;\": (t1, t2) => o => o instanceof A._Record_2 && t1._is(o._0) && t2._is(o._1)\n" " }\n" " };\n" -" A._Universe_addRules(init.typeUniverse, JSON.parse('{\"JavaScriptFunction\":\"LegacyJavaScriptObject\",\"PlainJavaScriptObject\":\"LegacyJavaScriptObject\",\"UnknownJavaScriptObject\":\"LegacyJavaScriptObject\",\"NativeSharedArrayBuffer\":\"NativeByteBuffer\",\"JavaScriptObject\":{\"JSObject\":[]},\"JSArray\":{\"List\":[\"1\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"1\"],\"JSObject\":[],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"JSBool\":{\"bool\":[],\"TrustedGetRuntimeType\":[]},\"JSNull\":{\"Null\":[],\"TrustedGetRuntimeType\":[]},\"LegacyJavaScriptObject\":{\"JavaScriptObject\":[],\"JSObject\":[]},\"JSArraySafeToStringHook\":{\"SafeToStringHook\":[]},\"JSUnmodifiableArray\":{\"JSArray\":[\"1\"],\"List\":[\"1\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"1\"],\"JSObject\":[],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"ArrayIterator\":{\"Iterator\":[\"1\"]},\"JSNumber\":{\"double\":[],\"num\":[],\"Comparable\":[\"num\"]},\"JSInt\":{\"double\":[],\"int\":[],\"num\":[],\"Comparable\":[\"num\"],\"TrustedGetRuntimeType\":[]},\"JSNumNotInt\":{\"double\":[],\"num\":[],\"Comparable\":[\"num\"],\"TrustedGetRuntimeType\":[]},\"JSString\":{\"String\":[],\"Comparable\":[\"String\"],\"Pattern\":[],\"TrustedGetRuntimeType\":[]},\"CastStream\":{\"Stream\":[\"2\"],\"Stream.T\":\"2\"},\"CastStreamSubscription\":{\"StreamSubscription\":[\"2\"]},\"_CastIterableBase\":{\"Iterable\":[\"2\"]},\"CastIterator\":{\"Iterator\":[\"2\"]},\"CastIterable\":{\"_CastIterableBase\":[\"1\",\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"_EfficientLengthCastIterable\":{\"CastIterable\":[\"1\",\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"_CastListBase\":{\"ListBase\":[\"2\"],\"List\":[\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"]},\"CastList\":{\"_CastListBase\":[\"1\",\"2\"],\"ListBase\":[\"2\"],\"List\":[\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListBase.E\":\"2\",\"Iterable.E\":\"2\"},\"CastMap\":{\"MapBase\":[\"3\",\"4\"],\"Map\":[\"3\",\"4\"],\"MapBase.K\":\"3\",\"MapBase.V\":\"4\"},\"LateError\":{\"Error\":[]},\"CodeUnits\":{\"ListBase\":[\"int\"],\"UnmodifiableListMixin\":[\"int\"],\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"UnmodifiableListMixin.E\":\"int\"},\"EfficientLengthIterable\":{\"Iterable\":[\"1\"]},\"ListIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"SubListIterable\":{\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"ListIterator\":{\"Iterator\":[\"1\"]},\"MappedIterable\":{\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"EfficientLengthMappedIterable\":{\"MappedIterable\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"MappedIterator\":{\"Iterator\":[\"2\"]},\"MappedListIterable\":{\"ListIterable\":[\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListIterable.E\":\"2\",\"Iterable.E\":\"2\"},\"WhereIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"WhereIterator\":{\"Iterator\":[\"1\"]},\"ExpandIterable\":{\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"ExpandIterator\":{\"Iterator\":[\"2\"]},\"TakeIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EfficientLengthTakeIterable\":{\"TakeIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"TakeIterator\":{\"Iterator\":[\"1\"]},\"SkipIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EfficientLengthSkipIterable\":{\"SkipIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"SkipIterator\":{\"Iterator\":[\"1\"]},\"EmptyIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EmptyIterator\":{\"Iterator\":[\"1\"]},\"WhereTypeIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"WhereTypeIterator\":{\"Iterator\":[\"1\"]},\"UnmodifiableListBase\":{\"ListBase\":[\"1\"],\"UnmodifiableListMixin\":[\"1\"],\"List\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"ReversedListIterable\":{\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"_Record_2\":{\"_Record2\":[],\"_Record\":[]},\"ConstantMap\":{\"Map\":[\"1\",\"2\"]},\"ConstantStringMap\":{\"ConstantMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"]},\"_KeysOrValues\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_KeysOrValuesOrElementsIterator\":{\"Iterator\":[\"1\"]},\"Instantiation\":{\"Closure\":[],\"Function\":[]},\"Instantiation1\":{\"Closure\":[],\"Function\":[]},\"NullError\":{\"TypeError\":[],\"Error\":[]},\"JsNoSuchMethodError\":{\"Error\":[]},\"UnknownJsTypeError\":{\"Error\":[]},\"NullThrownFromJavaScriptException\":{\"Exception\":[]},\"_StackTrace\":{\"StackTrace\":[]},\"Closure\":{\"Function\":[]},\"Closure0Args\":{\"Closure\":[],\"Function\":[]},\"Closure2Args\":{\"Closure\":[],\"Function\":[]},\"TearOffClosure\":{\"Closure\":[],\"Function\":[]},\"StaticClosure\":{\"Closure\":[],\"Function\":[]},\"BoundClosure\":{\"Closure\":[],\"Function\":[]},\"RuntimeError\":{\"Error\":[]},\"JsLinkedHashMap\":{\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"LinkedHashMapKeysIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"LinkedHashMapKeyIterator\":{\"Iterator\":[\"1\"]},\"LinkedHashMapValuesIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"LinkedHashMapValueIterator\":{\"Iterator\":[\"1\"]},\"LinkedHashMapEntriesIterable\":{\"EfficientLengthIterable\":[\"MapEntry<1,2>\"],\"Iterable\":[\"MapEntry<1,2>\"],\"Iterable.E\":\"MapEntry<1,2>\"},\"LinkedHashMapEntryIterator\":{\"Iterator\":[\"MapEntry<1,2>\"]},\"JsIdentityLinkedHashMap\":{\"JsLinkedHashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_Record2\":{\"_Record\":[]},\"JSSyntaxRegExp\":{\"RegExp\":[],\"Pattern\":[]},\"_MatchImplementation\":{\"RegExpMatch\":[],\"Match\":[]},\"_AllMatchesIterable\":{\"Iterable\":[\"RegExpMatch\"],\"Iterable.E\":\"RegExpMatch\"},\"_AllMatchesIterator\":{\"Iterator\":[\"RegExpMatch\"]},\"StringMatch\":{\"Match\":[]},\"_StringAllMatchesIterable\":{\"Iterable\":[\"Match\"],\"Iterable.E\":\"Match\"},\"_StringAllMatchesIterator\":{\"Iterator\":[\"Match\"]},\"NativeByteBuffer\":{\"JavaScriptObject\":[],\"JSObject\":[],\"ByteBuffer\":[],\"TrustedGetRuntimeType\":[]},\"NativeArrayBuffer\":{\"NativeByteBuffer\":[],\"JavaScriptObject\":[],\"JSObject\":[],\"ByteBuffer\":[],\"TrustedGetRuntimeType\":[]},\"NativeTypedData\":{\"JavaScriptObject\":[],\"JSObject\":[]},\"_UnmodifiableNativeByteBufferView\":{\"ByteBuffer\":[]},\"NativeByteData\":{\"JavaScriptObject\":[],\"ByteData\":[],\"JSObject\":[],\"TrustedGetRuntimeType\":[]},\"NativeTypedArray\":{\"JavaScriptIndexingBehavior\":[\"1\"],\"JavaScriptObject\":[],\"JSObject\":[]},\"NativeTypedArrayOfDouble\":{\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"]},\"NativeTypedArrayOfInt\":{\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"]},\"NativeFloat32List\":{\"Float32List\":[],\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"double\",\"Iterable.E\":\"double\",\"FixedLengthListMixin.E\":\"double\"},\"NativeFloat64List\":{\"Float64List\":[],\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"double\",\"Iterable.E\":\"double\",\"FixedLengthListMixin.E\":\"double\"},\"NativeInt16List\":{\"NativeTypedArrayOfInt\":[],\"Int16List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeInt32List\":{\"NativeTypedArrayOfInt\":[],\"Int32List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeInt8List\":{\"NativeTypedArrayOfInt\":[],\"Int8List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint16List\":{\"NativeTypedArrayOfInt\":[],\"Uint16List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint32List\":{\"NativeTypedArrayOfInt\":[],\"Uint32List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint8ClampedList\":{\"NativeTypedArrayOfInt\":[],\"Uint8ClampedList\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint8List\":{\"NativeTypedArrayOfInt\":[],\"Uint8List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"_Error\":{\"Error\":[]},\"_TypeError\":{\"TypeError\":[],\"Error\":[]},\"AsyncError\":{\"Error\":[]},\"_Future\":{\"Future\":[\"1\"]},\"_TimerImpl\":{\"Timer\":[]},\"_AsyncAwaitCompleter\":{\"Completer\":[\"1\"]},\"_Completer\":{\"Completer\":[\"1\"]},\"_AsyncCompleter\":{\"_Completer\":[\"1\"],\"Completer\":[\"1\"]},\"_SyncCompleter\":{\"_Completer\":[\"1\"],\"Completer\":[\"1\"]},\"StreamView\":{\"Stream\":[\"1\"]},\"_StreamController\":{\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"],\"_StreamControllerLifecycle\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"]},\"_AsyncStreamController\":{\"_AsyncStreamControllerDispatch\":[\"1\"],\"_StreamController\":[\"1\"],\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"],\"_StreamControllerLifecycle\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"]},\"_ControllerStream\":{\"_StreamImpl\":[\"1\"],\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_ControllerSubscription\":{\"_BufferingStreamSubscription\":[\"1\"],\"StreamSubscription\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"],\"_BufferingStreamSubscription.T\":\"1\"},\"_StreamSinkWrapper\":{\"StreamSink\":[\"1\"]},\"_StreamControllerAddStreamState\":{\"_AddStreamState\":[\"1\"]},\"_BufferingStreamSubscription\":{\"StreamSubscription\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"],\"_BufferingStreamSubscription.T\":\"1\"},\"_StreamImpl\":{\"Stream\":[\"1\"]},\"_DelayedData\":{\"_DelayedEvent\":[\"1\"]},\"_DelayedError\":{\"_DelayedEvent\":[\"@\"]},\"_DelayedDone\":{\"_DelayedEvent\":[\"@\"]},\"_DoneStreamSubscription\":{\"StreamSubscription\":[\"1\"]},\"_EmptyStream\":{\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_ForwardingStream\":{\"Stream\":[\"2\"]},\"_ForwardingStreamSubscription\":{\"_BufferingStreamSubscription\":[\"2\"],\"StreamSubscription\":[\"2\"],\"_EventSink\":[\"2\"],\"_EventDispatch\":[\"2\"],\"_BufferingStreamSubscription.T\":\"2\"},\"_MapStream\":{\"_ForwardingStream\":[\"1\",\"2\"],\"Stream\":[\"2\"],\"Stream.T\":\"2\"},\"_Zone\":{\"Zone\":[]},\"_CustomZone\":{\"_Zone\":[],\"Zone\":[]},\"_RootZone\":{\"_Zone\":[],\"Zone\":[]},\"_ZoneDelegate\":{\"ZoneDelegate\":[]},\"_SplayTreeSetNode\":{\"_SplayTreeNode\":[\"1\",\"_SplayTreeSetNode<1>\"],\"_SplayTreeNode.K\":\"1\",\"_SplayTreeNode.1\":\"_SplayTreeSetNode<1>\"},\"_HashMap\":{\"MapBase\":[\"1\",\"2\"],\"HashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_IdentityHashMap\":{\"_HashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"HashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_HashMapKeyIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_HashMapKeyIterator\":{\"Iterator\":[\"1\"]},\"_LinkedCustomHashMap\":{\"JsLinkedHashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_HashSet\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_HashSetIterator\":{\"Iterator\":[\"1\"]},\"ListBase\":{\"List\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"MapBase\":{\"Map\":[\"1\",\"2\"]},\"MapView\":{\"Map\":[\"1\",\"2\"]},\"UnmodifiableMapView\":{\"_UnmodifiableMapView_MapView__UnmodifiableMapMixin\":[\"1\",\"2\"],\"MapView\":[\"1\",\"2\"],\"_UnmodifiableMapMixin\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"]},\"ListQueue\":{\"Queue\":[\"1\"],\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"_ListQueueIterator\":{\"Iterator\":[\"1\"]},\"SetBase\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"_SetBase\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"_SplayTreeIterator\":{\"Iterator\":[\"3\"]},\"_SplayTreeKeyIterator\":{\"_SplayTreeIterator\":[\"1\",\"2\",\"1\"],\"Iterator\":[\"1\"],\"_SplayTreeIterator.K\":\"1\",\"_SplayTreeIterator.T\":\"1\",\"_SplayTreeIterator.1\":\"2\"},\"SplayTreeSet\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"_SplayTree\":[\"1\",\"_SplayTreeSetNode<1>\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\",\"_SplayTree.1\":\"_SplayTreeSetNode<1>\",\"_SplayTree.K\":\"1\"},\"Encoding\":{\"Codec\":[\"String\",\"List\"]},\"_JsonMap\":{\"MapBase\":[\"String\",\"@\"],\"Map\":[\"String\",\"@\"],\"MapBase.K\":\"String\",\"MapBase.V\":\"@\"},\"_JsonMapKeyIterable\":{\"ListIterable\":[\"String\"],\"EfficientLengthIterable\":[\"String\"],\"Iterable\":[\"String\"],\"ListIterable.E\":\"String\",\"Iterable.E\":\"String\"},\"AsciiCodec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"_UnicodeSubsetEncoder\":{\"Converter\":[\"String\",\"List\"]},\"AsciiEncoder\":{\"Converter\":[\"String\",\"List\"]},\"_UnicodeSubsetDecoder\":{\"Converter\":[\"List\",\"String\"]},\"AsciiDecoder\":{\"Converter\":[\"List\",\"String\"]},\"Base64Codec\":{\"Codec\":[\"List\",\"String\"]},\"Base64Encoder\":{\"Converter\":[\"List\",\"String\"]},\"JsonUnsupportedObjectError\":{\"Error\":[]},\"JsonCyclicError\":{\"Error\":[]},\"JsonCodec\":{\"Codec\":[\"Object?\",\"String\"]},\"JsonEncoder\":{\"Converter\":[\"Object?\",\"String\"]},\"JsonDecoder\":{\"Converter\":[\"String\",\"Object?\"]},\"Latin1Codec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"Latin1Encoder\":{\"Converter\":[\"String\",\"List\"]},\"Latin1Decoder\":{\"Converter\":[\"List\",\"String\"]},\"Utf8Codec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"Utf8Encoder\":{\"Converter\":[\"String\",\"List\"]},\"Utf8Decoder\":{\"Converter\":[\"List\",\"String\"]},\"DateTime\":{\"Comparable\":[\"DateTime\"]},\"double\":{\"num\":[],\"Comparable\":[\"num\"]},\"Duration\":{\"Comparable\":[\"Duration\"]},\"int\":{\"num\":[],\"Comparable\":[\"num\"]},\"List\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"num\":{\"Comparable\":[\"num\"]},\"RegExpMatch\":{\"Match\":[]},\"String\":{\"Comparable\":[\"String\"],\"Pattern\":[]},\"AssertionError\":{\"Error\":[]},\"TypeError\":{\"Error\":[]},\"ArgumentError\":{\"Error\":[]},\"RangeError\":{\"Error\":[]},\"IndexError\":{\"Error\":[]},\"UnsupportedError\":{\"Error\":[]},\"UnimplementedError\":{\"Error\":[]},\"StateError\":{\"Error\":[]},\"ConcurrentModificationError\":{\"Error\":[]},\"OutOfMemoryError\":{\"Error\":[]},\"StackOverflowError\":{\"Error\":[]},\"_Exception\":{\"Exception\":[]},\"FormatException\":{\"Exception\":[]},\"_StringStackTrace\":{\"StackTrace\":[]},\"StringBuffer\":{\"StringSink\":[]},\"_Uri\":{\"Uri\":[]},\"_SimpleUri\":{\"Uri\":[]},\"_DataUri\":{\"Uri\":[]},\"NullRejectionException\":{\"Exception\":[]},\"ErrorResult\":{\"Result\":[\"0&\"]},\"ValueResult\":{\"Result\":[\"1\"]},\"_NextRequest\":{\"_EventRequest\":[\"1\"]},\"_HasNextRequest\":{\"_EventRequest\":[\"1\"]},\"CanonicalizedMap\":{\"Map\":[\"2\",\"3\"]},\"QueueList\":{\"ListBase\":[\"1\"],\"List\":[\"1\"],\"Queue\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListBase.E\":\"1\",\"QueueList.E\":\"1\",\"Iterable.E\":\"1\"},\"_CastQueueList\":{\"QueueList\":[\"2\"],\"ListBase\":[\"2\"],\"List\":[\"2\"],\"Queue\":[\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListBase.E\":\"2\",\"QueueList.E\":\"2\",\"Iterable.E\":\"2\"},\"PersistentWebSocket\":{\"StreamChannelMixin\":[\"@\"]},\"SseSocketClient\":{\"SocketClient\":[]},\"WebSocketClient\":{\"SocketClient\":[]},\"RequestAbortedException\":{\"Exception\":[]},\"ByteStream\":{\"StreamView\":[\"List\"],\"Stream\":[\"List\"],\"Stream.T\":\"List\",\"StreamView.T\":\"List\"},\"ClientException\":{\"Exception\":[]},\"Request\":{\"BaseRequest\":[]},\"StreamedResponseV2\":{\"StreamedResponse\":[]},\"CaseInsensitiveMap\":{\"CanonicalizedMap\":[\"String\",\"String\",\"1\"],\"Map\":[\"String\",\"1\"],\"CanonicalizedMap.K\":\"String\",\"CanonicalizedMap.V\":\"1\",\"CanonicalizedMap.C\":\"String\"},\"Level\":{\"Comparable\":[\"Level\"]},\"PathException\":{\"Exception\":[]},\"PosixStyle\":{\"InternalStyle\":[]},\"UrlStyle\":{\"InternalStyle\":[]},\"WindowsStyle\":{\"InternalStyle\":[]},\"FileLocation\":{\"SourceLocation\":[],\"Comparable\":[\"SourceLocation\"]},\"_FileSpan\":{\"SourceSpanWithContext\":[],\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceLocation\":{\"Comparable\":[\"SourceLocation\"]},\"SourceLocationMixin\":{\"SourceLocation\":[],\"Comparable\":[\"SourceLocation\"]},\"SourceSpan\":{\"Comparable\":[\"SourceSpan\"]},\"SourceSpanBase\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceSpanException\":{\"Exception\":[]},\"SourceSpanFormatException\":{\"FormatException\":[],\"Exception\":[]},\"SourceSpanMixin\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceSpanWithContext\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SseClient\":{\"StreamChannelMixin\":[\"String?\"]},\"StringScannerException\":{\"FormatException\":[],\"Exception\":[]},\"_EventStream\":{\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_EventStreamSubscription\":{\"StreamSubscription\":[\"1\"]},\"BrowserWebSocket\":{\"WebSocket\":[]},\"TextDataReceived\":{\"WebSocketEvent\":[]},\"BinaryDataReceived\":{\"WebSocketEvent\":[]},\"CloseReceived\":{\"WebSocketEvent\":[]},\"WebSocketException\":{\"Exception\":[]},\"WebSocketConnectionClosed\":{\"Exception\":[]},\"DdcLibraryBundleRestarter\":{\"TwoPhaseRestarter\":[],\"Restarter\":[]},\"DdcRestarter\":{\"Restarter\":[]},\"RequireRestarter\":{\"Restarter\":[]},\"HotReloadFailedException\":{\"Exception\":[]},\"Int8List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint8List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint8ClampedList\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Int16List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint16List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Int32List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint32List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Float32List\":{\"List\":[\"double\"],\"EfficientLengthIterable\":[\"double\"],\"Iterable\":[\"double\"]},\"Float64List\":{\"List\":[\"double\"],\"EfficientLengthIterable\":[\"double\"],\"Iterable\":[\"double\"]}}'));\n" +" A._Universe_addRules(init.typeUniverse, JSON.parse('{\"JavaScriptFunction\":\"LegacyJavaScriptObject\",\"PlainJavaScriptObject\":\"LegacyJavaScriptObject\",\"UnknownJavaScriptObject\":\"LegacyJavaScriptObject\",\"NativeSharedArrayBuffer\":\"NativeByteBuffer\",\"JavaScriptObject\":{\"JSObject\":[]},\"JSArray\":{\"List\":[\"1\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"1\"],\"JSObject\":[],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"JSBool\":{\"bool\":[],\"TrustedGetRuntimeType\":[]},\"JSNull\":{\"Null\":[],\"TrustedGetRuntimeType\":[]},\"LegacyJavaScriptObject\":{\"JavaScriptObject\":[],\"JSObject\":[]},\"JSArraySafeToStringHook\":{\"SafeToStringHook\":[]},\"JSUnmodifiableArray\":{\"JSArray\":[\"1\"],\"List\":[\"1\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"1\"],\"JSObject\":[],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"ArrayIterator\":{\"Iterator\":[\"1\"]},\"JSNumber\":{\"double\":[],\"num\":[],\"Comparable\":[\"num\"]},\"JSInt\":{\"double\":[],\"int\":[],\"num\":[],\"Comparable\":[\"num\"],\"TrustedGetRuntimeType\":[]},\"JSNumNotInt\":{\"double\":[],\"num\":[],\"Comparable\":[\"num\"],\"TrustedGetRuntimeType\":[]},\"JSString\":{\"String\":[],\"Comparable\":[\"String\"],\"Pattern\":[],\"TrustedGetRuntimeType\":[]},\"CastStream\":{\"Stream\":[\"2\"],\"Stream.T\":\"2\"},\"CastStreamSubscription\":{\"StreamSubscription\":[\"2\"]},\"_CastIterableBase\":{\"Iterable\":[\"2\"]},\"CastIterator\":{\"Iterator\":[\"2\"]},\"CastIterable\":{\"_CastIterableBase\":[\"1\",\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"_EfficientLengthCastIterable\":{\"CastIterable\":[\"1\",\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"_CastListBase\":{\"ListBase\":[\"2\"],\"List\":[\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"]},\"CastList\":{\"_CastListBase\":[\"1\",\"2\"],\"ListBase\":[\"2\"],\"List\":[\"2\"],\"_CastIterableBase\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListBase.E\":\"2\",\"Iterable.E\":\"2\"},\"CastMap\":{\"MapBase\":[\"3\",\"4\"],\"Map\":[\"3\",\"4\"],\"MapBase.K\":\"3\",\"MapBase.V\":\"4\"},\"LateError\":{\"Error\":[]},\"CodeUnits\":{\"ListBase\":[\"int\"],\"UnmodifiableListMixin\":[\"int\"],\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"UnmodifiableListMixin.E\":\"int\"},\"EfficientLengthIterable\":{\"Iterable\":[\"1\"]},\"ListIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"SubListIterable\":{\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"ListIterator\":{\"Iterator\":[\"1\"]},\"MappedIterable\":{\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"EfficientLengthMappedIterable\":{\"MappedIterable\":[\"1\",\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"MappedIterator\":{\"Iterator\":[\"2\"]},\"MappedListIterable\":{\"ListIterable\":[\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListIterable.E\":\"2\",\"Iterable.E\":\"2\"},\"WhereIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"WhereIterator\":{\"Iterator\":[\"1\"]},\"ExpandIterable\":{\"Iterable\":[\"2\"],\"Iterable.E\":\"2\"},\"ExpandIterator\":{\"Iterator\":[\"2\"]},\"TakeIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EfficientLengthTakeIterable\":{\"TakeIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"TakeIterator\":{\"Iterator\":[\"1\"]},\"SkipIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EfficientLengthSkipIterable\":{\"SkipIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"SkipIterator\":{\"Iterator\":[\"1\"]},\"EmptyIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"EmptyIterator\":{\"Iterator\":[\"1\"]},\"WhereTypeIterable\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"WhereTypeIterator\":{\"Iterator\":[\"1\"]},\"UnmodifiableListBase\":{\"ListBase\":[\"1\"],\"UnmodifiableListMixin\":[\"1\"],\"List\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"ReversedListIterable\":{\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"_Record_2\":{\"_Record2\":[],\"_Record\":[]},\"ConstantMap\":{\"Map\":[\"1\",\"2\"]},\"ConstantStringMap\":{\"ConstantMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"]},\"_KeysOrValues\":{\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_KeysOrValuesOrElementsIterator\":{\"Iterator\":[\"1\"]},\"Instantiation\":{\"Closure\":[],\"Function\":[]},\"Instantiation1\":{\"Closure\":[],\"Function\":[]},\"NullError\":{\"TypeError\":[],\"Error\":[]},\"JsNoSuchMethodError\":{\"Error\":[]},\"UnknownJsTypeError\":{\"Error\":[]},\"NullThrownFromJavaScriptException\":{\"Exception\":[]},\"_StackTrace\":{\"StackTrace\":[]},\"Closure\":{\"Function\":[]},\"Closure0Args\":{\"Closure\":[],\"Function\":[]},\"Closure2Args\":{\"Closure\":[],\"Function\":[]},\"TearOffClosure\":{\"Closure\":[],\"Function\":[]},\"StaticClosure\":{\"Closure\":[],\"Function\":[]},\"BoundClosure\":{\"Closure\":[],\"Function\":[]},\"RuntimeError\":{\"Error\":[]},\"JsLinkedHashMap\":{\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"LinkedHashMapKeysIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"LinkedHashMapKeyIterator\":{\"Iterator\":[\"1\"]},\"LinkedHashMapValuesIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"LinkedHashMapValueIterator\":{\"Iterator\":[\"1\"]},\"LinkedHashMapEntriesIterable\":{\"EfficientLengthIterable\":[\"MapEntry<1,2>\"],\"Iterable\":[\"MapEntry<1,2>\"],\"Iterable.E\":\"MapEntry<1,2>\"},\"LinkedHashMapEntryIterator\":{\"Iterator\":[\"MapEntry<1,2>\"]},\"JsIdentityLinkedHashMap\":{\"JsLinkedHashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_Record2\":{\"_Record\":[]},\"JSSyntaxRegExp\":{\"RegExp\":[],\"Pattern\":[]},\"_MatchImplementation\":{\"RegExpMatch\":[],\"Match\":[]},\"_AllMatchesIterable\":{\"Iterable\":[\"RegExpMatch\"],\"Iterable.E\":\"RegExpMatch\"},\"_AllMatchesIterator\":{\"Iterator\":[\"RegExpMatch\"]},\"StringMatch\":{\"Match\":[]},\"_StringAllMatchesIterable\":{\"Iterable\":[\"Match\"],\"Iterable.E\":\"Match\"},\"_StringAllMatchesIterator\":{\"Iterator\":[\"Match\"]},\"NativeByteBuffer\":{\"JavaScriptObject\":[],\"JSObject\":[],\"ByteBuffer\":[],\"TrustedGetRuntimeType\":[]},\"NativeArrayBuffer\":{\"NativeByteBuffer\":[],\"JavaScriptObject\":[],\"JSObject\":[],\"ByteBuffer\":[],\"TrustedGetRuntimeType\":[]},\"NativeTypedData\":{\"JavaScriptObject\":[],\"JSObject\":[]},\"_UnmodifiableNativeByteBufferView\":{\"ByteBuffer\":[]},\"NativeByteData\":{\"JavaScriptObject\":[],\"ByteData\":[],\"JSObject\":[],\"TrustedGetRuntimeType\":[]},\"NativeTypedArray\":{\"JavaScriptIndexingBehavior\":[\"1\"],\"JavaScriptObject\":[],\"JSObject\":[]},\"NativeTypedArrayOfDouble\":{\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"]},\"NativeTypedArrayOfInt\":{\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"]},\"NativeFloat32List\":{\"Float32List\":[],\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"double\",\"Iterable.E\":\"double\",\"FixedLengthListMixin.E\":\"double\"},\"NativeFloat64List\":{\"Float64List\":[],\"ListBase\":[\"double\"],\"NativeTypedArray\":[\"double\"],\"List\":[\"double\"],\"JavaScriptIndexingBehavior\":[\"double\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"double\"],\"JSObject\":[],\"Iterable\":[\"double\"],\"FixedLengthListMixin\":[\"double\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"double\",\"Iterable.E\":\"double\",\"FixedLengthListMixin.E\":\"double\"},\"NativeInt16List\":{\"NativeTypedArrayOfInt\":[],\"Int16List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeInt32List\":{\"NativeTypedArrayOfInt\":[],\"Int32List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeInt8List\":{\"NativeTypedArrayOfInt\":[],\"Int8List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint16List\":{\"NativeTypedArrayOfInt\":[],\"Uint16List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint32List\":{\"NativeTypedArrayOfInt\":[],\"Uint32List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint8ClampedList\":{\"NativeTypedArrayOfInt\":[],\"Uint8ClampedList\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"NativeUint8List\":{\"NativeTypedArrayOfInt\":[],\"Uint8List\":[],\"ListBase\":[\"int\"],\"NativeTypedArray\":[\"int\"],\"List\":[\"int\"],\"JavaScriptIndexingBehavior\":[\"int\"],\"JavaScriptObject\":[],\"EfficientLengthIterable\":[\"int\"],\"JSObject\":[],\"Iterable\":[\"int\"],\"FixedLengthListMixin\":[\"int\"],\"TrustedGetRuntimeType\":[],\"ListBase.E\":\"int\",\"Iterable.E\":\"int\",\"FixedLengthListMixin.E\":\"int\"},\"_Error\":{\"Error\":[]},\"_TypeError\":{\"TypeError\":[],\"Error\":[]},\"AsyncError\":{\"Error\":[]},\"MultiStreamController\":{\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"]},\"_TimerImpl\":{\"Timer\":[]},\"_AsyncAwaitCompleter\":{\"Completer\":[\"1\"]},\"_Completer\":{\"Completer\":[\"1\"]},\"_AsyncCompleter\":{\"_Completer\":[\"1\"],\"Completer\":[\"1\"]},\"_SyncCompleter\":{\"_Completer\":[\"1\"],\"Completer\":[\"1\"]},\"_Future\":{\"Future\":[\"1\"]},\"StreamView\":{\"Stream\":[\"1\"]},\"_StreamController\":{\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"],\"_StreamControllerLifecycle\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"]},\"_AsyncStreamController\":{\"_AsyncStreamControllerDispatch\":[\"1\"],\"_StreamController\":[\"1\"],\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"],\"_StreamControllerLifecycle\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"]},\"_ControllerStream\":{\"_StreamImpl\":[\"1\"],\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_ControllerSubscription\":{\"_BufferingStreamSubscription\":[\"1\"],\"StreamSubscription\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"],\"_BufferingStreamSubscription.T\":\"1\"},\"_StreamSinkWrapper\":{\"StreamSink\":[\"1\"]},\"_BufferingStreamSubscription\":{\"StreamSubscription\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"],\"_BufferingStreamSubscription.T\":\"1\"},\"_StreamImpl\":{\"Stream\":[\"1\"]},\"_DelayedData\":{\"_DelayedEvent\":[\"1\"]},\"_DelayedError\":{\"_DelayedEvent\":[\"@\"]},\"_DelayedDone\":{\"_DelayedEvent\":[\"@\"]},\"_DoneStreamSubscription\":{\"StreamSubscription\":[\"1\"]},\"_EmptyStream\":{\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_MultiStream\":{\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_MultiStreamController\":{\"_AsyncStreamController\":[\"1\"],\"_AsyncStreamControllerDispatch\":[\"1\"],\"_StreamController\":[\"1\"],\"MultiStreamController\":[\"1\"],\"StreamController\":[\"1\"],\"StreamSink\":[\"1\"],\"_StreamControllerLifecycle\":[\"1\"],\"_EventSink\":[\"1\"],\"_EventDispatch\":[\"1\"]},\"_ForwardingStream\":{\"Stream\":[\"2\"]},\"_ForwardingStreamSubscription\":{\"_BufferingStreamSubscription\":[\"2\"],\"StreamSubscription\":[\"2\"],\"_EventSink\":[\"2\"],\"_EventDispatch\":[\"2\"],\"_BufferingStreamSubscription.T\":\"2\"},\"_MapStream\":{\"_ForwardingStream\":[\"1\",\"2\"],\"Stream\":[\"2\"],\"Stream.T\":\"2\"},\"_SplayTreeSetNode\":{\"_SplayTreeNode\":[\"1\",\"_SplayTreeSetNode<1>\"],\"_SplayTreeNode.K\":\"1\",\"_SplayTreeNode.1\":\"_SplayTreeSetNode<1>\"},\"_HashMap\":{\"MapBase\":[\"1\",\"2\"],\"HashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_IdentityHashMap\":{\"_HashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"HashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_HashMapKeyIterable\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_HashMapKeyIterator\":{\"Iterator\":[\"1\"]},\"_LinkedCustomHashMap\":{\"JsLinkedHashMap\":[\"1\",\"2\"],\"MapBase\":[\"1\",\"2\"],\"LinkedHashMap\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"],\"MapBase.K\":\"1\",\"MapBase.V\":\"2\"},\"_HashSet\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\"},\"_HashSetIterator\":{\"Iterator\":[\"1\"]},\"ListBase\":{\"List\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"MapBase\":{\"Map\":[\"1\",\"2\"]},\"MapView\":{\"Map\":[\"1\",\"2\"]},\"UnmodifiableMapView\":{\"_UnmodifiableMapView_MapView__UnmodifiableMapMixin\":[\"1\",\"2\"],\"MapView\":[\"1\",\"2\"],\"_UnmodifiableMapMixin\":[\"1\",\"2\"],\"Map\":[\"1\",\"2\"]},\"ListQueue\":{\"Queue\":[\"1\"],\"ListIterable\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListIterable.E\":\"1\",\"Iterable.E\":\"1\"},\"_ListQueueIterator\":{\"Iterator\":[\"1\"]},\"SetBase\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"_SetBase\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"_SplayTreeIterator\":{\"Iterator\":[\"3\"]},\"_SplayTreeKeyIterator\":{\"_SplayTreeIterator\":[\"1\",\"2\",\"1\"],\"Iterator\":[\"1\"],\"_SplayTreeIterator.K\":\"1\",\"_SplayTreeIterator.T\":\"1\",\"_SplayTreeIterator.1\":\"2\"},\"SplayTreeSet\":{\"SetBase\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"_SplayTree\":[\"1\",\"_SplayTreeSetNode<1>\"],\"Iterable\":[\"1\"],\"Iterable.E\":\"1\",\"_SplayTree.1\":\"_SplayTreeSetNode<1>\",\"_SplayTree.K\":\"1\"},\"Encoding\":{\"Codec\":[\"String\",\"List\"]},\"_JsonMap\":{\"MapBase\":[\"String\",\"@\"],\"Map\":[\"String\",\"@\"],\"MapBase.K\":\"String\",\"MapBase.V\":\"@\"},\"_JsonMapKeyIterable\":{\"ListIterable\":[\"String\"],\"EfficientLengthIterable\":[\"String\"],\"Iterable\":[\"String\"],\"ListIterable.E\":\"String\",\"Iterable.E\":\"String\"},\"AsciiCodec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"_UnicodeSubsetEncoder\":{\"Converter\":[\"String\",\"List\"]},\"AsciiEncoder\":{\"Converter\":[\"String\",\"List\"]},\"_UnicodeSubsetDecoder\":{\"Converter\":[\"List\",\"String\"]},\"AsciiDecoder\":{\"Converter\":[\"List\",\"String\"]},\"Base64Codec\":{\"Codec\":[\"List\",\"String\"]},\"Base64Encoder\":{\"Converter\":[\"List\",\"String\"]},\"JsonUnsupportedObjectError\":{\"Error\":[]},\"JsonCyclicError\":{\"Error\":[]},\"JsonCodec\":{\"Codec\":[\"Object?\",\"String\"]},\"JsonEncoder\":{\"Converter\":[\"Object?\",\"String\"]},\"JsonDecoder\":{\"Converter\":[\"String\",\"Object?\"]},\"Latin1Codec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"Latin1Encoder\":{\"Converter\":[\"String\",\"List\"]},\"Latin1Decoder\":{\"Converter\":[\"List\",\"String\"]},\"Utf8Codec\":{\"Encoding\":[],\"Codec\":[\"String\",\"List\"]},\"Utf8Encoder\":{\"Converter\":[\"String\",\"List\"]},\"Utf8Decoder\":{\"Converter\":[\"List\",\"String\"]},\"DateTime\":{\"Comparable\":[\"DateTime\"]},\"double\":{\"num\":[],\"Comparable\":[\"num\"]},\"Duration\":{\"Comparable\":[\"Duration\"]},\"int\":{\"num\":[],\"Comparable\":[\"num\"]},\"List\":{\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"]},\"num\":{\"Comparable\":[\"num\"]},\"RegExpMatch\":{\"Match\":[]},\"String\":{\"Comparable\":[\"String\"],\"Pattern\":[]},\"AssertionError\":{\"Error\":[]},\"TypeError\":{\"Error\":[]},\"ArgumentError\":{\"Error\":[]},\"RangeError\":{\"Error\":[]},\"IndexError\":{\"Error\":[]},\"UnsupportedError\":{\"Error\":[]},\"UnimplementedError\":{\"Error\":[]},\"StateError\":{\"Error\":[]},\"ConcurrentModificationError\":{\"Error\":[]},\"OutOfMemoryError\":{\"Error\":[]},\"StackOverflowError\":{\"Error\":[]},\"_Exception\":{\"Exception\":[]},\"FormatException\":{\"Exception\":[]},\"_StringStackTrace\":{\"StackTrace\":[]},\"StringBuffer\":{\"StringSink\":[]},\"_Uri\":{\"Uri\":[]},\"_SimpleUri\":{\"Uri\":[]},\"_DataUri\":{\"Uri\":[]},\"NullRejectionException\":{\"Exception\":[]},\"ErrorResult\":{\"Result\":[\"0&\"]},\"ValueResult\":{\"Result\":[\"1\"]},\"_NextRequest\":{\"_EventRequest\":[\"1\"]},\"_HasNextRequest\":{\"_EventRequest\":[\"1\"]},\"CanonicalizedMap\":{\"Map\":[\"2\",\"3\"]},\"QueueList\":{\"ListBase\":[\"1\"],\"List\":[\"1\"],\"Queue\":[\"1\"],\"EfficientLengthIterable\":[\"1\"],\"Iterable\":[\"1\"],\"ListBase.E\":\"1\",\"QueueList.E\":\"1\",\"Iterable.E\":\"1\"},\"_CastQueueList\":{\"QueueList\":[\"2\"],\"ListBase\":[\"2\"],\"List\":[\"2\"],\"Queue\":[\"2\"],\"EfficientLengthIterable\":[\"2\"],\"Iterable\":[\"2\"],\"ListBase.E\":\"2\",\"QueueList.E\":\"2\",\"Iterable.E\":\"2\"},\"PersistentWebSocket\":{\"StreamChannelMixin\":[\"@\"]},\"SseSocketClient\":{\"SocketClient\":[]},\"WebSocketClient\":{\"SocketClient\":[]},\"RequestAbortedException\":{\"Exception\":[]},\"ByteStream\":{\"StreamView\":[\"List\"],\"Stream\":[\"List\"],\"Stream.T\":\"List\",\"StreamView.T\":\"List\"},\"ClientException\":{\"Exception\":[]},\"Request\":{\"BaseRequest\":[]},\"StreamedResponseV2\":{\"StreamedResponse\":[]},\"CaseInsensitiveMap\":{\"CanonicalizedMap\":[\"String\",\"String\",\"1\"],\"Map\":[\"String\",\"1\"],\"CanonicalizedMap.K\":\"String\",\"CanonicalizedMap.V\":\"1\",\"CanonicalizedMap.C\":\"String\"},\"Level\":{\"Comparable\":[\"Level\"]},\"PathException\":{\"Exception\":[]},\"PosixStyle\":{\"InternalStyle\":[]},\"UrlStyle\":{\"InternalStyle\":[]},\"WindowsStyle\":{\"InternalStyle\":[]},\"FileLocation\":{\"SourceLocation\":[],\"Comparable\":[\"SourceLocation\"]},\"_FileSpan\":{\"SourceSpanWithContext\":[],\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceLocation\":{\"Comparable\":[\"SourceLocation\"]},\"SourceLocationMixin\":{\"SourceLocation\":[],\"Comparable\":[\"SourceLocation\"]},\"SourceSpan\":{\"Comparable\":[\"SourceSpan\"]},\"SourceSpanBase\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceSpanException\":{\"Exception\":[]},\"SourceSpanFormatException\":{\"FormatException\":[],\"Exception\":[]},\"SourceSpanMixin\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SourceSpanWithContext\":{\"SourceSpan\":[],\"Comparable\":[\"SourceSpan\"]},\"SseClient\":{\"StreamChannelMixin\":[\"String?\"]},\"StringScannerException\":{\"FormatException\":[],\"Exception\":[]},\"_EventStream\":{\"Stream\":[\"1\"],\"Stream.T\":\"1\"},\"_EventStreamSubscription\":{\"StreamSubscription\":[\"1\"]},\"BrowserWebSocket\":{\"WebSocket\":[]},\"TextDataReceived\":{\"WebSocketEvent\":[]},\"BinaryDataReceived\":{\"WebSocketEvent\":[]},\"CloseReceived\":{\"WebSocketEvent\":[]},\"WebSocketException\":{\"Exception\":[]},\"WebSocketConnectionClosed\":{\"Exception\":[]},\"DdcLibraryBundleRestarter\":{\"TwoPhaseRestarter\":[],\"Restarter\":[]},\"DdcRestarter\":{\"Restarter\":[]},\"RequireRestarter\":{\"Restarter\":[]},\"HotReloadFailedException\":{\"Exception\":[]},\"Int8List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint8List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint8ClampedList\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Int16List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint16List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Int32List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Uint32List\":{\"List\":[\"int\"],\"EfficientLengthIterable\":[\"int\"],\"Iterable\":[\"int\"]},\"Float32List\":{\"List\":[\"double\"],\"EfficientLengthIterable\":[\"double\"],\"Iterable\":[\"double\"]},\"Float64List\":{\"List\":[\"double\"],\"EfficientLengthIterable\":[\"double\"],\"Iterable\":[\"double\"]}}'));\n" " A._Universe_addErasedTypes(init.typeUniverse, JSON.parse('{\"UnmodifiableListBase\":1,\"__CastListBase__CastIterableBase_ListMixin\":2,\"NativeTypedArray\":1,\"_DelayedEvent\":1,\"_SetBase\":1,\"_SplayTreeSet__SplayTree_Iterable\":1,\"_SplayTreeSet__SplayTree_Iterable_SetMixin\":1,\"_QueueList_Object_ListMixin\":1,\"StreamChannelMixin\":1}'));\n" " var string\$ = {\n" " x00_____: \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\u03f6\\x00\\u0404\\u03f4 \\u03f4\\u03f6\\u01f6\\u01f6\\u03f6\\u03fc\\u01f4\\u03ff\\u03ff\\u0584\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u05d4\\u01f4\\x00\\u01f4\\x00\\u0504\\u05c4\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u0400\\x00\\u0400\\u0200\\u03f7\\u0200\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u03ff\\u0200\\u0200\\u0200\\u03f7\\x00\",\n" @@ -22610,6 +22027,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " var type\$ = (function rtii() {\n" " var findType = A.findType;\n" " return {\n" +" \$env_1_1_dynamic: findType(\"@<@>\"),\n" +" \$env_1_1_void: findType(\"@<~>\"),\n" " AsyncError: findType(\"AsyncError\"),\n" " BatchedStreamController_DebugEvent: findType(\"BatchedStreamController\"),\n" " BrowserWebSocket: findType(\"BrowserWebSocket\"),\n" @@ -22667,6 +22086,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " Map_dynamic_dynamic: findType(\"Map<@,@>\"),\n" " MappedListIterable_String_dynamic: findType(\"MappedListIterable\"),\n" " MediaType: findType(\"MediaType\"),\n" +" MultiStreamController_List_int: findType(\"MultiStreamController>\"),\n" " NativeArrayBuffer: findType(\"NativeArrayBuffer\"),\n" " NativeTypedArrayOfInt: findType(\"NativeTypedArrayOfInt\"),\n" " NativeUint8List: findType(\"NativeUint8List\"),\n" @@ -22688,11 +22108,9 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " SplayTreeSet_String: findType(\"SplayTreeSet\"),\n" " StackTrace: findType(\"StackTrace\"),\n" " StreamQueue_DebugEvent: findType(\"StreamQueue\"),\n" -" Stream_dynamic: findType(\"Stream<@>\"),\n" " StreamedResponse: findType(\"StreamedResponse\"),\n" " String: findType(\"String\"),\n" " String_Function_Match: findType(\"String(Match)\"),\n" -" Timer: findType(\"Timer\"),\n" " TrustedGetRuntimeType: findType(\"TrustedGetRuntimeType\"),\n" " TwoPhaseRestarter: findType(\"TwoPhaseRestarter\"),\n" " TypeError: findType(\"TypeError\"),\n" @@ -22706,8 +22124,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " WebSocket: findType(\"WebSocket\"),\n" " WebSocketEvent: findType(\"WebSocketEvent\"),\n" " WhereTypeIterable_String: findType(\"WhereTypeIterable\"),\n" -" Zone: findType(\"Zone\"),\n" -" ZoneDelegate: findType(\"ZoneDelegate\"),\n" " _AsyncCompleter_BrowserWebSocket: findType(\"_AsyncCompleter\"),\n" " _AsyncCompleter_PoolResource: findType(\"_AsyncCompleter\"),\n" " _AsyncCompleter_String: findType(\"_AsyncCompleter\"),\n" @@ -22729,6 +22145,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " _Highlight: findType(\"_Highlight\"),\n" " _IdentityHashMap_of_nullable_Object_and_nullable_Object: findType(\"_IdentityHashMap\"),\n" " _Line: findType(\"_Line\"),\n" +" _MultiStream_List_int: findType(\"_MultiStream>\"),\n" " _StreamControllerAddStreamState_nullable_Object: findType(\"_StreamControllerAddStreamState\"),\n" " _SyncCompleter_PoolResource: findType(\"_SyncCompleter\"),\n" " bool: findType(\"bool\"),\n" @@ -22752,13 +22169,10 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " nullable_StackTrace: findType(\"StackTrace?\"),\n" " nullable_String: findType(\"String?\"),\n" " nullable_String_Function_Match: findType(\"String(Match)?\"),\n" -" nullable_Zone: findType(\"Zone?\"),\n" -" nullable_ZoneDelegate: findType(\"ZoneDelegate?\"),\n" " nullable__DelayedEvent_dynamic: findType(\"_DelayedEvent<@>?\"),\n" " nullable__FutureListener_dynamic_dynamic: findType(\"_FutureListener<@,@>?\"),\n" " nullable__Highlight: findType(\"_Highlight?\"),\n" " nullable_bool: findType(\"bool?\"),\n" -" nullable_bool_Function_Object: findType(\"bool(Object)?\"),\n" " nullable_double: findType(\"double?\"),\n" " nullable_int: findType(\"int?\"),\n" " nullable_num: findType(\"num?\"),\n" @@ -22771,7 +22185,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " void_Function_Object: findType(\"~(Object)\"),\n" " void_Function_Object_StackTrace: findType(\"~(Object,StackTrace)\"),\n" " void_Function_String_dynamic: findType(\"~(String,@)\"),\n" -" void_Function_Timer: findType(\"~(Timer)\"),\n" " void_Function_int_dynamic: findType(\"~(int,@)\")\n" " };\n" " })();\n" @@ -22931,8 +22344,6 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " B.C_Uuid = new A.Uuid();\n" " B.C__DelayedDone = new A._DelayedDone();\n" " B.C__JSRandom = new A._JSRandom();\n" -" B.C__RootZone = new A._RootZone();\n" -" B.C__ZoneCreatePeriodicTimer = new A._ZoneCreatePeriodicTimer();\n" " B.Duration_0 = new A.Duration(0);\n" " B.Duration_5000000 = new A.Duration(5000000);\n" " B.JsonDecoder_null = new A.JsonDecoder(null);\n" @@ -22968,21 +22379,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " B.Type_Uint8ClampedList_04U = A.typeLiteral(\"Uint8ClampedList\");\n" " B.Type_Uint8List_8Eb = A.typeLiteral(\"Uint8List\");\n" " B.Utf8Decoder_false = new A.Utf8Decoder(false);\n" +" B.Zone_jYP = new A.Zone(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);\n" " B._StringStackTrace_OdL = new A._StringStackTrace(\"\");\n" -" B._ZoneCreateTimer__RootZone__rootCreateTimer = new A._ZoneCreateTimer(B.C__RootZone, A.async___rootCreateTimer\$closure());\n" -" B._ZoneErrorCallback__RootZone__rootErrorCallback = new A._ZoneErrorCallback(B.C__RootZone, A.async___rootErrorCallback\$closure());\n" -" B._ZoneFork__RootZone__rootFork = new A._ZoneFork(B.C__RootZone, A.async___rootFork\$closure());\n" -" B._ZoneHandleUncaughtError_wQ6 = new A._ZoneHandleUncaughtError(B.C__RootZone, A.async___rootHandleUncaughtError\$closure());\n" -" B._ZonePrint__RootZone__rootPrint = new A._ZonePrint(B.C__RootZone, A.async___rootPrint\$closure());\n" -" B._ZoneRegisterBinaryCallback_sk0 = new A._ZoneRegisterBinaryCallback(B.C__RootZone, A.async___rootRegisterBinaryCallback\$closure());\n" -" B._ZoneRegisterCallback__RootZone__rootRegisterCallback = new A._ZoneRegisterCallback(B.C__RootZone, A.async___rootRegisterCallback\$closure());\n" -" B._ZoneRegisterUnaryCallback_a9v = new A._ZoneRegisterUnaryCallback(B.C__RootZone, A.async___rootRegisterUnaryCallback\$closure());\n" -" B._ZoneRunBinary__RootZone__rootRunBinary = new A._ZoneRunBinary(B.C__RootZone, A.async___rootRunBinary\$closure());\n" -" B._ZoneRunUnary__RootZone__rootRunUnary = new A._ZoneRunUnary(B.C__RootZone, A.async___rootRunUnary\$closure());\n" -" B._ZoneRun__RootZone__rootRun = new A._ZoneRun(B.C__RootZone, A.async___rootRun\$closure());\n" -" B._ZoneScheduleMicrotask__RootZone__rootScheduleMicrotask = new A._ZoneScheduleMicrotask(B.C__RootZone, A.async___rootScheduleMicrotask\$closure());\n" -" B.Map_empty1 = new A.ConstantStringMap(B.Object_empty, [], A.findType(\"ConstantStringMap\"));\n" -" B._ZoneValues__RootZone_Map_empty = new A._ZoneValues(B.C__RootZone, B.Map_empty1);\n" " })();\n" " (function staticFields() {\n" " \$._JS_INTEROP_INTERCEPTOR_TAG = null;\n" @@ -23002,8 +22400,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " \$._lastCallback = null;\n" " \$._lastPriorityCallback = null;\n" " \$._isInCallbackLoop = false;\n" -" \$.Zone__current = B.C__RootZone;\n" -" \$._RootZone__rootDelegate = null;\n" +" \$.Zone__current = B.Zone_jYP;\n" " \$.Uri__cachedBaseString = \"\";\n" " \$.Uri__cachedBaseUri = null;\n" " \$.LogRecord__nextNumber = 0;\n" @@ -23016,7 +22413,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " var _lazyFinal = hunkHelpers.lazyFinal;\n" " _lazyFinal(\$, \"DART_CLOSURE_PROPERTY_NAME\", \"\$get\$DART_CLOSURE_PROPERTY_NAME\", () => A.getIsolateAffinityTag(\"_\$dart_dartClosure\"));\n" " _lazyFinal(\$, \"DART_CLOSURE_DART_JSINTEROP_PROPERTY_NAME\", \"\$get\$DART_CLOSURE_DART_JSINTEROP_PROPERTY_NAME\", () => A.getIsolateAffinityTag(\"_\$dart_dartClosure_dartJSInterop\"));\n" -" _lazyFinal(\$, \"nullFuture\", \"\$get\$nullFuture\", () => B.C__RootZone.run\$1\$1(new A.nullFuture_closure(), type\$.Future_void));\n" +" _lazyFinal(\$, \"nullFuture\", \"\$get\$nullFuture\", () => B.Zone_jYP.run\$1\$1(new A.nullFuture_closure(), type\$.Future_void));\n" " _lazyFinal(\$, \"_safeToStringHooks\", \"\$get\$_safeToStringHooks\", () => A._setArrayType([new J.JSArraySafeToStringHook()], A.findType(\"JSArray\")));\n" " _lazyFinal(\$, \"TypeErrorDecoder_noSuchMethodPattern\", \"\$get\$TypeErrorDecoder_noSuchMethodPattern\", () => A.TypeErrorDecoder_extractPattern(A.TypeErrorDecoder_provokeCallErrorOn({\n" " toString: function() {\n" @@ -23064,6 +22461,7 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " }()));\n" " _lazyFinal(\$, \"_AsyncRun__scheduleImmediateClosure\", \"\$get\$_AsyncRun__scheduleImmediateClosure\", () => A._AsyncRun__initializeScheduleImmediate());\n" " _lazyFinal(\$, \"Future__nullFuture\", \"\$get\$Future__nullFuture\", () => \$.\$get\$nullFuture());\n" +" _lazyFinal(\$, \"_rootDelegate\", \"\$get\$_rootDelegate\", () => A.ZoneDelegate\$_());\n" " _lazyFinal(\$, \"_Utf8Decoder__reusableBuffer\", \"\$get\$_Utf8Decoder__reusableBuffer\", () => A.NativeUint8List_NativeUint8List(4096));\n" " _lazyFinal(\$, \"_Utf8Decoder__decoder\", \"\$get\$_Utf8Decoder__decoder\", () => new A._Utf8Decoder__decoder_closure().call\$0());\n" " _lazyFinal(\$, \"_Utf8Decoder__decoderNonfatal\", \"\$get\$_Utf8Decoder__decoderNonfatal\", () => new A._Utf8Decoder__decoderNonfatal_closure().call\$0());\n" @@ -23153,11 +22551,8 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " Function.prototype.call\$0 = function() {\n" " return this();\n" " };\n" -" Function.prototype.call\$1\$1 = function(a) {\n" -" return this(a);\n" -" };\n" -" Function.prototype.call\$3\$3 = function(a, b, c) {\n" -" return this(a, b, c);\n" +" Function.prototype.call\$1\$4 = function(a, b, c, d) {\n" +" return this(a, b, c, d);\n" " };\n" " Function.prototype.call\$5 = function(a, b, c, d, e) {\n" " return this(a, b, c, d, e);\n" @@ -23165,38 +22560,23 @@ const injectedClientJs = "// Generated by dart2js (, csp, intern-composite-value " Function.prototype.call\$3 = function(a, b, c) {\n" " return this(a, b, c);\n" " };\n" -" Function.prototype.call\$3\$6 = function(a, b, c, d, e, f) {\n" -" return this(a, b, c, d, e, f);\n" -" };\n" -" Function.prototype.call\$1\$4 = function(a, b, c, d) {\n" -" return this(a, b, c, d);\n" -" };\n" -" Function.prototype.call\$2\$1 = function(a) {\n" -" return this(a);\n" -" };\n" " Function.prototype.call\$4 = function(a, b, c, d) {\n" " return this(a, b, c, d);\n" " };\n" -" Function.prototype.call\$3\$1 = function(a) {\n" -" return this(a);\n" +" Function.prototype.call\$3\$6 = function(a, b, c, d, e, f) {\n" +" return this(a, b, c, d, e, f);\n" " };\n" " Function.prototype.call\$3\$4 = function(a, b, c, d) {\n" " return this(a, b, c, d);\n" " };\n" -" Function.prototype.call\$2\$4 = function(a, b, c, d) {\n" -" return this(a, b, c, d);\n" -" };\n" -" Function.prototype.call\$2\$2 = function(a, b) {\n" -" return this(a, b);\n" -" };\n" " Function.prototype.call\$2\$5 = function(a, b, c, d, e) {\n" " return this(a, b, c, d, e);\n" " };\n" -" Function.prototype.call\$2\$3 = function(a, b, c) {\n" -" return this(a, b, c);\n" +" Function.prototype.call\$2\$4 = function(a, b, c, d) {\n" +" return this(a, b, c, d);\n" " };\n" -" Function.prototype.call\$1\$2 = function(a, b) {\n" -" return this(a, b);\n" +" Function.prototype.call\$1\$1 = function(a) {\n" +" return this(a);\n" " };\n" " Function.prototype.call\$2\$0 = function() {\n" " return this();\n" diff --git a/dwds/test/integration/dart_uri_test.dart b/dwds/test/integration/dart_uri_test.dart index d436181ea2..f8e66ad84b 100644 --- a/dwds/test/integration/dart_uri_test.dart +++ b/dwds/test/integration/dart_uri_test.dart @@ -60,12 +60,12 @@ void main() { test('parses org-dartlang-app paths', () { final uri = DartUri('org-dartlang-app:///blah/main.dart'); - expect(uri.serverPath, '/blah/main.dart'); + expect(uri.serverPath, 'blah/main.dart'); }); test('parses google3 paths', () { final uri = DartUri('google3:///blah/main.dart'); - expect(uri.serverPath, '/blah/main.dart'); + expect(uri.serverPath, 'blah/main.dart'); }); test('parses packages paths', () { diff --git a/dwds/test/integration/fixtures/frontend_server_context.dart b/dwds/test/integration/fixtures/frontend_server_context.dart index 9381de83c8..e6f7b7a05f 100644 --- a/dwds/test/integration/fixtures/frontend_server_context.dart +++ b/dwds/test/integration/fixtures/frontend_server_context.dart @@ -74,6 +74,7 @@ class FrontendServerTestContext extends TestContext { canaryFeatures: testSettings.canaryFeatures, isFlutterApp: testSettings.isFlutterApp, experiments: testSettings.experiments, + useDebuggerModuleNames: testSettings.useDebuggerModuleNames, ); final filePathToServe = webCompatiblePath([ diff --git a/dwds/test/integration/frontend_server/hot_reload_breakpoints_ddc_library_bundle_test.dart b/dwds/test/integration/frontend_server/hot_reload_breakpoints_ddc_library_bundle_test.dart index e5a82e148c..17a74d6705 100644 --- a/dwds/test/integration/frontend_server/hot_reload_breakpoints_ddc_library_bundle_test.dart +++ b/dwds/test/integration/frontend_server/hot_reload_breakpoints_ddc_library_bundle_test.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/expression_compiler.dart'; + import 'package:dwds_test_common/integration/hot_reload_breakpoints.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/dwds/test/integration/frontend_server/hot_reload_ddc_library_bundle_test.dart b/dwds/test/integration/frontend_server/hot_reload_ddc_library_bundle_test.dart index 6c64f6a0a4..2b7f507d48 100644 --- a/dwds/test/integration/frontend_server/hot_reload_ddc_library_bundle_test.dart +++ b/dwds/test/integration/frontend_server/hot_reload_ddc_library_bundle_test.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/expression_compiler.dart'; + import 'package:dwds_test_common/integration/hot_reload.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/dwds/test/integration/frontend_server/instances/instance_inspection_ddc_library_bundle_test.dart b/dwds/test/integration/frontend_server/instances/instance_inspection_ddc_library_bundle_test.dart index fb605dbbc9..9f10fb10bc 100644 --- a/dwds/test/integration/frontend_server/instances/instance_inspection_ddc_library_bundle_test.dart +++ b/dwds/test/integration/frontend_server/instances/instance_inspection_ddc_library_bundle_test.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'package:dwds/src/services/expression_compiler.dart'; + import 'package:dwds_test_common/integration/instance_inspection.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/dwds/test/integration/package_uri_mapper_test.dart b/dwds/test/integration/package_uri_mapper_test.dart index f362797497..f104ae1c47 100644 --- a/dwds/test/integration/package_uri_mapper_test.dart +++ b/dwds/test/integration/package_uri_mapper_test.dart @@ -33,7 +33,7 @@ void main() { final resolvedPath = '${project.packageDirectory}/lib/test_library.dart'; - late final BuildRunnerPathResolver pathResolver; + late final PathResolver packageUriMapper; setUpAll(() async { await project.setUp(); // Note: Run `dart pub upgrade` before the test cases to fix @@ -51,25 +51,31 @@ void main() { ), ); - pathResolver = await BuildRunnerPathResolver.create( - fileSystem, - packageConfigFile, - useDebuggerModuleNames: useDebuggerModuleNames, - ); + packageUriMapper = useDebuggerModuleNames + ? await FrontendServerPathResolver.create( + fileSystem, + packageConfigFile, + useDebuggerModuleNames: useDebuggerModuleNames, + ) + : await BuildRunnerPathResolver.create( + fileSystem, + packageConfigFile, + useDebuggerModuleNames: useDebuggerModuleNames, + ); }); tearDownAll(project.tearDown); test('Can convert package urls to server paths', () { expect( - pathResolver.appUriToServerPath(packageUri.toString()), + packageUriMapper.appUriToServerPath(packageUri.toString()), serverPath, ); }); test('Can convert server paths to file paths', () { expect( - pathResolver.serverPathToResolvedUri(serverPath), + packageUriMapper.serverPathToResolvedUri(serverPath), isA() .having((uri) => uri.scheme, 'scheme', 'file') .having((uri) => uri.path, 'path', endsWith(resolvedPath)), diff --git a/dwds/test/utilities/web_path_translator_test.dart b/dwds/test/utilities/web_path_translator_test.dart new file mode 100644 index 0000000000..cb6434e916 --- /dev/null +++ b/dwds/test/utilities/web_path_translator_test.dart @@ -0,0 +1,308 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:dwds/src/loaders/asset_scheme.dart'; +import 'package:dwds/src/utilities/web_path_translator.dart'; +import 'package:test/test.dart'; + +const fesAssetScheme = FrontendServerAssetScheme(); +const buildAssetScheme = BuildRunnerAssetScheme(); + +void main() { + group('WebPathTranslator', () { + group('addLibSegment', () { + test('adds lib/ to packages paths', () { + // Checks: packages/foo/bar.dart -> packages/foo/lib/bar.dart + expect( + WebPathTranslator.addLibSegment('packages/foo/bar.dart'), + 'packages/foo/lib/bar.dart', + ); + }); + + test('is no-op if lib/ is already present', () { + // Checks: packages/foo/lib/bar.dart -> packages/foo/lib/bar.dart + expect( + WebPathTranslator.addLibSegment('packages/foo/lib/bar.dart'), + 'packages/foo/lib/bar.dart', + ); + }); + + test('is no-op for non-packages paths', () { + // Checks: web/main.dart -> web/main.dart + expect( + WebPathTranslator.addLibSegment('web/main.dart'), + 'web/main.dart', + ); + }); + }); + + group('removeLibSegment', () { + test('removes lib/ from packages paths', () { + // Checks: packages/foo/lib/bar.dart -> packages/foo/bar.dart + expect( + WebPathTranslator.removeLibSegment('packages/foo/lib/bar.dart'), + 'packages/foo/bar.dart', + ); + }); + + test('is no-op if lib/ is not present', () { + // Checks: packages/foo/bar.dart -> packages/foo/bar.dart + expect( + WebPathTranslator.removeLibSegment('packages/foo/bar.dart'), + 'packages/foo/bar.dart', + ); + }); + + test('is no-op for non-packages paths', () { + // Checks: web/main.dart -> web/main.dart + expect( + WebPathTranslator.removeLibSegment('web/main.dart'), + 'web/main.dart', + ); + }); + }); + + group('packagePathToPackageUri', () { + test('converts packages/ paths with lib to package: URIs', () { + expect( + WebPathTranslator.packagePathToPackageUri( + 'packages/foo/lib/bar.dart', + ), + 'package:foo/bar.dart', + ); + }); + + test('converts packages/ paths without lib to package: URIs', () { + expect( + WebPathTranslator.packagePathToPackageUri('packages/foo/bar.dart'), + 'package:foo/bar.dart', + ); + }); + + test('returns null for non-package paths', () { + expect( + WebPathTranslator.packagePathToPackageUri('web/main.dart'), + isNull, + ); + }); + }); + + group('translateLibPathToPackagePath', () { + test('translates lib/ paths to packages/ paths', () { + // Checks: lib/foo.dart -> packages/my_package/foo.dart + expect( + WebPathTranslator.translateLibPathToPackagePath( + 'lib/foo.dart', + 'my_package', + ), + 'packages/my_package/foo.dart', + ); + }); + + test('translates lib/src/ paths to packages/ paths', () { + // Checks: lib/src/foo.dart -> packages/my_package/src/foo.dart + expect( + WebPathTranslator.translateLibPathToPackagePath( + 'lib/src/foo.dart', + 'my_package', + ), + 'packages/my_package/src/foo.dart', + ); + }); + + test('is no-op for non-lib paths', () { + // Checks: web/main.dart -> web/main.dart + expect( + WebPathTranslator.translateLibPathToPackagePath( + 'web/main.dart', + 'my_package', + ), + 'web/main.dart', + ); + }); + + test( + 'throws StateError if rootPackageName is null or empty for lib/ path', + () { + // Checks: lib/foo.dart (with null package) -> StateError + expect( + () => WebPathTranslator.translateLibPathToPackagePath( + 'lib/foo.dart', + null, + ), + throwsStateError, + ); + // Checks: lib/foo.dart (with empty package) -> StateError + expect( + () => WebPathTranslator.translateLibPathToPackagePath( + 'lib/foo.dart', + '', + ), + throwsStateError, + ); + }, + ); + }); + + group('translatePackagePath', () { + test('removes lib/ segment when translating FES to BuildRunner', () { + expect( + WebPathTranslator.translatePackagePath( + 'packages/foo/lib/bar.dart', + from: fesAssetScheme, + to: buildAssetScheme, + ), + 'packages/foo/bar.dart', + ); + }); + + test('adds lib/ segment when translating BuildRunner to FES', () { + expect( + WebPathTranslator.translatePackagePath( + 'packages/foo/bar.dart', + from: buildAssetScheme, + to: fesAssetScheme, + ), + 'packages/foo/lib/bar.dart', + ); + }); + + test('is no-op when schemes are identical', () { + expect( + WebPathTranslator.translatePackagePath( + 'packages/foo/lib/bar.dart', + from: fesAssetScheme, + to: fesAssetScheme, + ), + 'packages/foo/lib/bar.dart', + ); + }); + }); + + group('translateModuleExtension', () { + test( + 'translates .dart.lib to .ddc (frontendServerOnly to buildRunner)', + () { + // Checks: main.dart.lib -> main.ddc + expect( + WebPathTranslator.translateModuleExtension( + 'main.dart.lib', + from: fesAssetScheme, + to: buildAssetScheme, + ), + 'main.ddc', + ); + // Checks: main.dart.lib.js -> main.ddc.js + expect( + WebPathTranslator.translateModuleExtension( + 'main.dart.lib.js', + from: fesAssetScheme, + to: buildAssetScheme, + ), + 'main.ddc.js', + ); + }, + ); + + test( + 'translates .ddc to .dart.lib (buildRunner to frontendServerOnly)', + () { + // Checks: main.ddc -> main.dart.lib + expect( + WebPathTranslator.translateModuleExtension( + 'main.ddc', + from: buildAssetScheme, + to: fesAssetScheme, + ), + 'main.dart.lib', + ); + // Checks: main.ddc.js -> main.dart.lib.js + expect( + WebPathTranslator.translateModuleExtension( + 'main.ddc.js', + from: buildAssetScheme, + to: fesAssetScheme, + ), + 'main.dart.lib.js', + ); + }, + ); + + test('is no-op if from and to are the same', () { + // Checks: main.dart.lib -> main.dart.lib + expect( + WebPathTranslator.translateModuleExtension( + 'main.dart.lib', + from: fesAssetScheme, + to: fesAssetScheme, + ), + 'main.dart.lib', + ); + }); + }); + + group('translateFesToBuildRunnerPath', () { + test('translates .dart.lib to .ddc', () { + // Checks: main.dart.lib -> main.ddc + expect( + WebPathTranslator.translateFesToBuildRunnerPath('main.dart.lib'), + 'main.ddc', + ); + // Checks: main.dart.lib.js -> main.ddc.js + expect( + WebPathTranslator.translateFesToBuildRunnerPath('main.dart.lib.js'), + 'main.ddc.js', + ); + }); + }); + + group('reconstructAppScheme', () { + test('is no-op if org-dartlang-app scheme is already present', () { + // Checks: org-dartlang-app:///web/main.dart -> org-dartlang-app:///web/main.dart + expect( + WebPathTranslator.reconstructAppScheme( + 'org-dartlang-app:///web/main.dart', + '/', + ), + 'org-dartlang-app:///web/main.dart', + ); + }); + + test('reconstructs scheme for default web dirs', () { + // Checks: web/main.dart -> org-dartlang-app:///web/main.dart + expect( + WebPathTranslator.reconstructAppScheme('web/main.dart', '/'), + 'org-dartlang-app:///web/main.dart', + ); + // Checks: /test/foo_test.dart -> org-dartlang-app:///test/foo_test.dart + expect( + WebPathTranslator.reconstructAppScheme('/test/foo_test.dart', '/'), + 'org-dartlang-app:///test/foo_test.dart', + ); + }); + + test('reconstructs scheme for package paths', () { + // Checks: /lib/src/library.dart -> org-dartlang-app:///packages/my_package/src/library.dart + expect( + WebPathTranslator.reconstructAppScheme( + '/lib/src/library.dart', + '/packages/my_package/subdir/main.ddc.js', + ), + 'org-dartlang-app:///packages/my_package/src/library.dart', + ); + }); + + test('handles package paths without leading slash', () { + // Checks: lib/src/library.dart -> org-dartlang-app:///packages/my_package/src/library.dart + expect( + WebPathTranslator.reconstructAppScheme( + 'lib/src/library.dart', + '/packages/my_package/subdir/main.ddc.js', + ), + 'org-dartlang-app:///packages/my_package/src/library.dart', + ); + }); + }); + }); +} diff --git a/dwds_test_common/analysis_options.yaml b/dwds_test_common/analysis_options.yaml index 90e085774b..08f4768a7c 100644 --- a/dwds_test_common/analysis_options.yaml +++ b/dwds_test_common/analysis_options.yaml @@ -6,3 +6,4 @@ analyzer: prefer_relative_imports: ignore exclude: - fixtures/** + diff --git a/dwds_test_common/fixtures/_experiment/pubspec.yaml b/dwds_test_common/fixtures/_experiment/pubspec.yaml index b1064110b2..a471297711 100644 --- a/dwds_test_common/fixtures/_experiment/pubspec.yaml +++ b/dwds_test_common/fixtures/_experiment/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test/pubspec.yaml b/dwds_test_common/fixtures/_test/pubspec.yaml index 3e86a35057..4e2fa3ec83 100644 --- a/dwds_test_common/fixtures/_test/pubspec.yaml +++ b/dwds_test_common/fixtures/_test/pubspec.yaml @@ -13,5 +13,5 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.8.1 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_circular1/pubspec.yaml b/dwds_test_common/fixtures/_test_circular1/pubspec.yaml index b81da7fd68..b85726d8f4 100644 --- a/dwds_test_common/fixtures/_test_circular1/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_circular1/pubspec.yaml @@ -15,4 +15,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_circular2/pubspec.yaml b/dwds_test_common/fixtures/_test_circular2/pubspec.yaml index e814478484..6108e4275c 100644 --- a/dwds_test_common/fixtures/_test_circular2/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_circular2/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_dot_shorthands/pubspec.yaml b/dwds_test_common/fixtures/_test_dot_shorthands/pubspec.yaml index bbc2e8bb54..8c214d2a45 100644 --- a/dwds_test_common/fixtures/_test_dot_shorthands/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_dot_shorthands/pubspec.yaml @@ -9,4 +9,4 @@ environment: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_hot_reload/pubspec.yaml b/dwds_test_common/fixtures/_test_hot_reload/pubspec.yaml index 6dc814abea..9693eb2f98 100644 --- a/dwds_test_common/fixtures/_test_hot_reload/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_hot_reload/pubspec.yaml @@ -9,4 +9,4 @@ environment: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.8.1 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_hot_reload_breakpoints/pubspec.yaml b/dwds_test_common/fixtures/_test_hot_reload_breakpoints/pubspec.yaml index 916f64976a..bac3ee9f06 100644 --- a/dwds_test_common/fixtures/_test_hot_reload_breakpoints/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_hot_reload_breakpoints/pubspec.yaml @@ -9,4 +9,4 @@ environment: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.8.1 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_hot_restart1/pubspec.yaml b/dwds_test_common/fixtures/_test_hot_restart1/pubspec.yaml index 9acf0a4555..72fdaa2711 100644 --- a/dwds_test_common/fixtures/_test_hot_restart1/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_hot_restart1/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.6.0 diff --git a/dwds_test_common/fixtures/_test_hot_restart2/pubspec.yaml b/dwds_test_common/fixtures/_test_hot_restart2/pubspec.yaml index 1027a22740..eb2eef0d53 100644 --- a/dwds_test_common/fixtures/_test_hot_restart2/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_hot_restart2/pubspec.yaml @@ -15,4 +15,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.8.1 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_hot_restart_breakpoints/pubspec.yaml b/dwds_test_common/fixtures/_test_hot_restart_breakpoints/pubspec.yaml index 8bbeb523ef..4bbedce520 100644 --- a/dwds_test_common/fixtures/_test_hot_restart_breakpoints/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_hot_restart_breakpoints/pubspec.yaml @@ -9,5 +9,5 @@ environment: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.8.1 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_package/pubspec.yaml b/dwds_test_common/fixtures/_test_package/pubspec.yaml index 97258123ea..b0825d3c5f 100644 --- a/dwds_test_common/fixtures/_test_package/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_package/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 \ No newline at end of file + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_test_parts/pubspec.yaml b/dwds_test_common/fixtures/_test_parts/pubspec.yaml index c3129bf5ef..76ee24b689 100644 --- a/dwds_test_common/fixtures/_test_parts/pubspec.yaml +++ b/dwds_test_common/fixtures/_test_parts/pubspec.yaml @@ -13,4 +13,4 @@ dependencies: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/fixtures/_webdev_smoke/pubspec.yaml b/dwds_test_common/fixtures/_webdev_smoke/pubspec.yaml index f9bf432554..31bfa45baa 100644 --- a/dwds_test_common/fixtures/_webdev_smoke/pubspec.yaml +++ b/dwds_test_common/fixtures/_webdev_smoke/pubspec.yaml @@ -9,4 +9,4 @@ environment: dev_dependencies: build_daemon: ^4.1.4 build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/dwds_test_common/lib/fixtures/context.dart b/dwds_test_common/lib/fixtures/context.dart index b726144824..e4c502bb63 100644 --- a/dwds_test_common/lib/fixtures/context.dart +++ b/dwds_test_common/lib/fixtures/context.dart @@ -20,6 +20,7 @@ import 'package:dwds/src/utilities/dart_uri.dart'; import 'package:dwds/src/utilities/server.dart'; import 'package:http/http.dart'; import 'package:http/io_client.dart'; +import 'package:http/retry.dart'; import 'package:logging/logging.dart' as logging; import 'package:path/path.dart' as p; import 'package:shelf/shelf.dart' as shelf; @@ -164,11 +165,17 @@ abstract class TestContext { configureLogWriter(); - _client = IOClient( - HttpClient() - ..maxConnectionsPerHost = 200 - ..idleTimeout = const Duration(seconds: 30) - ..connectionTimeout = const Duration(seconds: 30), + _client = RetryClient( + IOClient( + HttpClient() + ..maxConnectionsPerHost = 200 + ..idleTimeout = const Duration(seconds: 30) + ..connectionTimeout = const Duration(seconds: 30), + ), + whenError: (error, stackTrace) { + _logger.warning('Retrying request due to network error: $error'); + return true; + }, ); final systemTempDir = Directory.systemTemp; @@ -429,9 +436,11 @@ abstract class TestContext { // clear the state for next setup _webDriver = null; _chromeDriver = null; + _testServer = null; _client = null; _outputDir = null; + lastBuildFailed = false; } /// Given a list of edits, use file IO to write them to the file system. @@ -538,6 +547,9 @@ abstract class TestContext { return (request) { final path = request.url.path; if (path.endsWith(reloadedSourcesFileName)) { + if (lastBuildFailed) { + return shelf.Response.notFound('Build failed'); + } return shelf.Response.ok(jsonEncode(reloadedSources)); } return proxy(request); @@ -551,6 +563,7 @@ abstract class TestContext { Future waitForSuccessfulBuild({ Duration? timeout, bool propagateToBrowser = false, + bool allowFailure = false, }) => throw UnsupportedError( 'waitForSuccessfulBuild is only supported in Build Daemon mode', ); @@ -693,8 +706,51 @@ String _resolveChromeDriverExecutable() => _resolveExecutable( fallbackName: _chromeDriverName, ); -String _resolveChromeExecutable() => _resolveExecutable( - environmentKeys: const ['CHROME_EXECUTABLE', 'CHROME_PATH'], - sdkRelativePath: 'third_party/browsers/chrome/chrome/$_chromeExecutableName', - fallbackName: _chromeExecutableName, -); +String _resolveChromeExecutable() { + for (final env in const ['CHROME_EXECUTABLE', 'CHROME_PATH']) { + if (Platform.environment.containsKey(env)) { + return Platform.environment[env]!; + } + } + final sdkPath = _sdkRoot + .resolve('third_party/browsers/chrome/chrome/$_chromeExecutableName') + .toFilePath(); + if (File(sdkPath).existsSync()) { + return sdkPath; + } + if (Platform.isWindows) { + final defaultWindowsPaths = [ + if (Platform.environment.containsKey('PROGRAMFILES')) + p.join( + Platform.environment['PROGRAMFILES']!, + r'Google\Chrome\Application\chrome.exe', + ), + if (Platform.environment.containsKey('PROGRAMFILES(X86)')) + p.join( + Platform.environment['PROGRAMFILES(X86)']!, + r'Google\Chrome\Application\chrome.exe', + ), + if (Platform.environment.containsKey('LOCALAPPDATA')) + p.join( + Platform.environment['LOCALAPPDATA']!, + r'Google\Chrome\Application\chrome.exe', + ), + r'C:\Program Files\Google\Chrome\Application\chrome.exe', + r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', + ]; + for (final path in defaultWindowsPaths) { + if (File(path).existsSync()) { + return path; + } + } + return 'chrome.exe'; + } + if (Platform.isMacOS) { + const defaultMacPath = + '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'; + if (File(defaultMacPath).existsSync()) { + return defaultMacPath; + } + } + return _chromeExecutableName; +} diff --git a/dwds_test_common/lib/fixtures/project.dart b/dwds_test_common/lib/fixtures/project.dart index b2d8b809eb..f05df37357 100644 --- a/dwds_test_common/lib/fixtures/project.dart +++ b/dwds_test_common/lib/fixtures/project.dart @@ -1,14 +1,14 @@ // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. - import 'dart:io'; -import 'package:dwds_test_common/utilities.dart'; import 'package:io/io.dart'; import 'package:path/path.dart' as p; import 'package:yaml/yaml.dart'; +import '../utilities.dart'; + enum IndexBaseMode { noBase, base } /// Project definitions from projects defined in webdev/fixtures. diff --git a/dwds_test_common/lib/integration/dart_uri_file_uri.dart b/dwds_test_common/lib/integration/dart_uri_file_uri.dart index 9d9fa57cbf..dd00b126d8 100644 --- a/dwds_test_common/lib/integration/dart_uri_file_uri.dart +++ b/dwds_test_common/lib/integration/dart_uri_file_uri.dart @@ -32,7 +32,9 @@ void testAll({ setUpAll(() async { await context.setUp( - testSettings: const TestSettings( + testSettings: TestSettings( + canaryFeatures: provider.canaryFeatures, + moduleFormat: provider.ddcModuleFormat, useDebuggerModuleNames: useDebuggerModuleNames, ), ); diff --git a/dwds_test_common/lib/integration/dart_uri_file_uri_debugger_module_names.dart b/dwds_test_common/lib/integration/dart_uri_file_uri_debugger_module_names.dart index 9e1c30d0a6..ec9b3264d6 100644 --- a/dwds_test_common/lib/integration/dart_uri_file_uri_debugger_module_names.dart +++ b/dwds_test_common/lib/integration/dart_uri_file_uri_debugger_module_names.dart @@ -32,7 +32,9 @@ void testAll({ setUpAll(() async { await context.setUp( - testSettings: const TestSettings( + testSettings: TestSettings( + canaryFeatures: provider.canaryFeatures, + moduleFormat: provider.ddcModuleFormat, useDebuggerModuleNames: useDebuggerModuleNames, ), ); diff --git a/dwds_test_common/lib/integration/hot_reload.dart b/dwds_test_common/lib/integration/hot_reload.dart index f25b860186..01912c51d4 100644 --- a/dwds_test_common/lib/integration/hot_reload.dart +++ b/dwds_test_common/lib/integration/hot_reload.dart @@ -23,8 +23,18 @@ void runTests({ final project = TestProject.testHotReload; final context = contextFactory(project, provider); - Future recompile() async { - await context.recompile(fullRestart: false); + Future recompile({ + bool fullRestart = false, + bool hasEdits = false, + bool allowFailure = false, + }) async { + if (context.usesBuildDaemon) { + if (hasEdits) { + await context.waitForSuccessfulBuild(allowFailure: allowFailure); + } + } else { + await context.recompile(fullRestart: fullRestart); + } } Future makeEditAndRecompile() async { @@ -35,7 +45,7 @@ void runTests({ newString: newString, ), ]); - await recompile(); + await recompile(hasEdits: true); } // Call the method `evaluate` in the program and wait for `expectedString` to @@ -99,7 +109,7 @@ void runTests({ newString: anotherString, ), ]); - await recompile(); + await recompile(hasEdits: true); report = await fakeClient.reloadSources(isolate.id!); expect(report.success, true); @@ -150,7 +160,7 @@ class Foo extends Bar {} ''', ), ]); - await recompile(); + await recompile(hasEdits: true); final vm = await client.getVM(); final isolate = await client.getIsolate(vm.isolates!.first.id!); var report = await fakeClient.reloadSources(isolate.id!); @@ -164,12 +174,12 @@ class Foo extends Bar {} newString: 'class Foo extends Bar', ), ]); - await context.recompile(fullRestart: false); + await recompile(hasEdits: true, allowFailure: true); report = await fakeClient.reloadSources(isolate.id!); expect(report.success, false); // Successfully recover with hot restart. - await context.recompile(fullRestart: true); + await recompile(fullRestart: true, hasEdits: false); await callEvaluateAndWaitForLog(newString); }); }, timeout: const Timeout.factor(2)); diff --git a/dwds_test_common/lib/integration/hot_reload_breakpoints.dart b/dwds_test_common/lib/integration/hot_reload_breakpoints.dart index fdd7799432..5b6c7d13ad 100644 --- a/dwds_test_common/lib/integration/hot_reload_breakpoints.dart +++ b/dwds_test_common/lib/integration/hot_reload_breakpoints.dart @@ -22,9 +22,22 @@ void runTests({ final callLogMarker = 'callLog'; final capturedStringMarker = 'capturedString'; + Future recompile({ + bool fullRestart = false, + bool hasEdits = false, + }) async { + if (context.usesBuildDaemon) { + if (hasEdits) { + await context.waitForSuccessfulBuild(); + } + } else { + await context.recompile(fullRestart: fullRestart); + } + } + Future makeEditsAndRecompile(List edits) async { await context.makeEdits(edits); - await context.recompile(fullRestart: true); + await recompile(fullRestart: true, hasEdits: true); } group('when pause_isolates_on_start is true', () { @@ -220,7 +233,7 @@ void runTests({ await breakpointFuture; await resumeAndWaitForLog(genString); - await context.recompile(fullRestart: false); + await recompile(fullRestart: false, hasEdits: false); await hotReloadAndHandlePausePost([ (file: mainFile, breakpointMarker: callLogMarker, bp: bp), @@ -356,13 +369,6 @@ void runTests({ final libFile = 'library.dart'; final libGenLog = 'library gen0'; final libValueMarker = 'libValue'; - context.addLibraryFile( - libFileName: libFile, - contents: - '''String get libraryValue { - return '$libGenLog'; // Breakpoint: $libValueMarker - }''', - ); final oldImports = "import 'dart:js_interop';"; final newImports = '$oldImports\n' @@ -373,7 +379,18 @@ void runTests({ final oldLog = "log('\$mainValue');"; final newLog = "log('\$libraryValue');"; edits.add((file: mainFile, originalString: oldLog, newString: newLog)); - await makeEditsAndRecompile(edits); + + await context.makeEdits(edits); + + context.addLibraryFile( + libFileName: libFile, + contents: + '''String get libraryValue { + return '$libGenLog'; // Breakpoint: $libValueMarker + }''', + ); + + await recompile(fullRestart: true, hasEdits: true); await hotReloadAndHandlePausePost([ (file: mainFile, breakpointMarker: callLogMarker, bp: bp), @@ -420,13 +437,6 @@ void runTests({ final edits = []; for (var i = 1; i <= numFiles; i++) { final libFile = 'library$i.dart'; - context.addLibraryFile( - libFileName: libFile, - contents: - '''String get libraryValue$i { - return 'library$i gen1'; // Breakpoint: libValue$i - }''', - ); final oldImports = "import 'dart:js_interop';"; final newImports = '$oldImports\n' @@ -440,7 +450,21 @@ void runTests({ final oldLog = "log('\$mainValue');"; final newLog = "log('\$libraryValue$numFiles');"; edits.add((file: mainFile, originalString: oldLog, newString: newLog)); - await makeEditsAndRecompile(edits); + + await context.makeEdits(edits); + + for (var i = 1; i <= numFiles; i++) { + final libFile = 'library$i.dart'; + context.addLibraryFile( + libFileName: libFile, + contents: + '''String get libraryValue$i { + return 'library$i gen1'; // Breakpoint: libValue$i + }''', + ); + } + + await recompile(fullRestart: true, hasEdits: true); await hotReloadAndHandlePausePost([ (file: mainFile, breakpointMarker: callLogMarker, bp: bp), diff --git a/dwds_test_common/lib/integration/hot_restart_breakpoints.dart b/dwds_test_common/lib/integration/hot_restart_breakpoints.dart index b03ab5f910..5e055d2bb4 100644 --- a/dwds_test_common/lib/integration/hot_restart_breakpoints.dart +++ b/dwds_test_common/lib/integration/hot_restart_breakpoints.dart @@ -23,13 +23,22 @@ void runTests({ final mainFile = project.dartEntryFileName; final callLogMarker = 'callLog'; + Future recompile({ + bool fullRestart = false, + bool hasEdits = false, + }) async { + if (context.usesBuildDaemon) { + if (hasEdits) { + await context.waitForSuccessfulBuild(); + } + } else if (context.usesFrontendServer) { + await context.recompile(fullRestart: fullRestart); + } + } + Future makeEditsAndRecompile(List edits) async { await context.makeEdits(edits); - if (context.usesFrontendServer) { - await context.recompile(fullRestart: true); - } else { - await context.waitForSuccessfulBuild(); - } + await recompile(fullRestart: true, hasEdits: true); } group('when pause_isolates_on_start is true', () { @@ -189,9 +198,7 @@ void runTests({ final breakpointFuture = waitForBreakpoint(); - if (context.usesFrontendServer) { - await context.recompile(fullRestart: false); - } + await recompile(fullRestart: false, hasEdits: false); await hotRestartAndHandlePausePost([ (exists: true, file: mainFile, breakpointMarker: callLogMarker), diff --git a/dwds_test_common/lib/sdk_asset_generator.dart b/dwds_test_common/lib/sdk_asset_generator.dart index ea1f06ed01..ec3b4f273d 100644 --- a/dwds_test_common/lib/sdk_asset_generator.dart +++ b/dwds_test_common/lib/sdk_asset_generator.dart @@ -6,6 +6,7 @@ import 'package:file/file.dart'; import 'package:file/local.dart'; import 'package:logging/logging.dart'; import 'package:path/path.dart' as p; + import 'test_sdk_layout.dart'; /// Generates sdk.js, sdk.map, files. diff --git a/dwds_test_common/pubspec.yaml b/dwds_test_common/pubspec.yaml index 5be6324fea..ca1ae6d8fe 100644 --- a/dwds_test_common/pubspec.yaml +++ b/dwds_test_common/pubspec.yaml @@ -6,24 +6,25 @@ environment: sdk: ^3.12.0-0 dependencies: - dds: any - dwds: any - file: any + dds: ^5.3.0 + dwds: + path: ../dwds + file: ">=6.0.0 <8.0.0" http: any - io: any - logging: any - mime: any - package_config: any - path: any - pub_semver: any - shelf: any + io: ^1.0.5 + logging: ^1.0.1 + mime: ^2.0.0 + package_config: '>=2.0.2 <4.0.0' + path: ^1.8.1 + pub_semver: ^2.1.1 + shelf: ^1.3.0 shelf_proxy: any - test: any - vm_service: any + test: ^1.21.1 + vm_service: ">=14.2.4 <16.0.0" vm_service_interface: any webdriver: any - webkit_inspection_protocol: any - yaml: any + webkit_inspection_protocol: ^1.0.1 + yaml: ^3.1.3 dev_dependencies: dart_flutter_team_lints: ^3.5.2 diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 8e62594da2..2c02706e64 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -8,4 +8,4 @@ environment: dev_dependencies: build_runner: ^2.16.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 diff --git a/frontend_server_client/lib/src/frontend_server_client.dart b/frontend_server_client/lib/src/frontend_server_client.dart index 389f5e5c16..a29931824c 100644 --- a/frontend_server_client/lib/src/frontend_server_client.dart +++ b/frontend_server_client/lib/src/frontend_server_client.dart @@ -75,9 +75,10 @@ class FrontendServerClient { List additionalSources = const [], String? nativeAssets, }) async { + final sdk = sdkRoot ?? sdkDir; final commonArguments = [ '--sdk-root', - sdkRoot ?? sdkDir, + sdk, '--platform=$platformKernel', '--target=$target', if (target == 'dartdevc') @@ -100,7 +101,6 @@ class FrontendServerClient { if (nativeAssets != null) ...['--native-assets', nativeAssets], ]; - final sdk = sdkRoot ?? sdkDir; final dartExecutable = p.join( sdk, 'bin', diff --git a/test_uri.dart b/test_uri.dart deleted file mode 100644 index 985727269f..0000000000 --- a/test_uri.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'dart:io'; - -void main() { - final uri = Uri.parse('file:///Users/markzipan/Projects/webdev/dwds_test_common/lib/fixtures/context.dart'); - print('Base: $uri'); - print('..: ${uri.resolve('..')}'); - print('../..: ${uri.resolve('../..')}'); - print('../../../: ${uri.resolve('../../../')}'); - print('../../../..: ${uri.resolve('../../../../')}'); -} diff --git a/tool/ci.sh b/tool/ci.sh index 22c6b592f7..ddfcecd485 100755 --- a/tool/ci.sh +++ b/tool/ci.sh @@ -84,29 +84,29 @@ for PKG in ${PKGS}; do dart format --output=none --set-exit-if-changed . || EXIT_CODE=$? ;; test_0) + echo 'dart test -j 1' + dart test -j 1 || EXIT_CODE=$? + ;; + test_1) echo 'dart test test/build/ensure_version_test.dart' dart test test/build/ensure_version_test.dart || EXIT_CODE=$? ;; - test_1) + test_2) echo 'dart test --tags=extension' dart test --tags=extension || EXIT_CODE=$? ;; - test_2) + test_3) echo 'dart test --total-shards 3 --shard-index 0 --exclude-tags=extension' dart test --total-shards 3 --shard-index 0 --exclude-tags=extension || EXIT_CODE=$? ;; - test_3) + test_4) echo 'dart test --total-shards 3 --shard-index 1 --exclude-tags=extension' dart test --total-shards 3 --shard-index 1 --exclude-tags=extension || EXIT_CODE=$? ;; - test_4) + test_5) echo 'dart test --total-shards 3 --shard-index 2 --exclude-tags=extension' dart test --total-shards 3 --shard-index 2 --exclude-tags=extension || EXIT_CODE=$? ;; - test_5) - echo 'dart test -j 1' - dart test -j 1 || EXIT_CODE=$? - ;; test_6) echo 'dart test --exclude-tags=release' dart test --exclude-tags=release || EXIT_CODE=$? diff --git a/webdev/CHANGELOG.md b/webdev/CHANGELOG.md index 792eb60b33..b88686ee98 100644 --- a/webdev/CHANGELOG.md +++ b/webdev/CHANGELOG.md @@ -1,7 +1,15 @@ -## 4.1.0-wip +## 4.1.0 +- Enable hot reload support in Frontend Server + Build Daemon mode. +- Support expression evaluation in Frontend Server + Build Daemon mode via DaemonExpressionCompiler. +- Bump `build_web_compilers` constraint to `^4.8.8`. +- Bump `dwds` constraint to `^28.0.0`. - Internal test infrastructure refactoring: Move common test files to `dwds_test_common`. +## 4.0.2 + +- **Internal**: Resolve Chrome test flakes. + ## 4.0.1 - Catch and report version skew errors when incompatible versions of `build_daemon` are used. diff --git a/webdev/README.md b/webdev/README.md index ba81d1d0f9..110ce827d7 100644 --- a/webdev/README.md +++ b/webdev/README.md @@ -12,7 +12,7 @@ similar to: --- dev_dependencies: build_runner: ^2.4.0 - build_web_compilers: ^4.4.12 + build_web_compilers: ^4.8.9 ``` ## Installation diff --git a/webdev/lib/src/daemon/app_domain.dart b/webdev/lib/src/daemon/app_domain.dart index eea0bee5cd..8fbbf817ac 100644 --- a/webdev/lib/src/daemon/app_domain.dart +++ b/webdev/lib/src/daemon/app_domain.dart @@ -176,7 +176,23 @@ class AppDomain extends Domain { } final fullRestart = getBoolArg(args, 'fullRestart') ?? false; if (!fullRestart) { - return {'code': 1, 'message': 'hot reload not yet supported by webdev'}; + try { + final vm = await appState.vmService!.getVM(); + final isolateId = vm.isolates!.first.id!; + final report = await appState.vmService!.reloadSources(isolateId); + + if (report.success!) { + return {'code': 0, 'message': 'Hot reload successful'}; + } else { + return { + 'code': 1, + 'message': 'Hot reload failed', + 'notices': report.toJson()['notices'], + }; + } + } catch (e) { + return {'code': 1, 'message': 'Hot reload failed: $e'}; + } } // TODO(grouma) - Support pauseAfterRestart. // var pauseAfterRestart = getBoolArg(args, 'pause') ?? false; diff --git a/webdev/lib/src/pubspec.dart b/webdev/lib/src/pubspec.dart index b82d111bb5..c2bc6ec53d 100644 --- a/webdev/lib/src/pubspec.dart +++ b/webdev/lib/src/pubspec.dart @@ -188,7 +188,7 @@ Future> _validateBuildDaemonVersion( } final buildRunnerConstraint = VersionConstraint.parse('^2.4.0'); -final buildWebCompilersConstraint = VersionConstraint.parse('^4.4.12'); +final buildWebCompilersConstraint = VersionConstraint.parse('^4.8.9'); // Note the minimum versions should never be dev versions as users will not // get them by default. diff --git a/webdev/lib/src/serve/dev_workflow.dart b/webdev/lib/src/serve/dev_workflow.dart index 17542e592f..198f21e87a 100644 --- a/webdev/lib/src/serve/dev_workflow.dart +++ b/webdev/lib/src/serve/dev_workflow.dart @@ -15,6 +15,7 @@ import 'package:path/path.dart' as p; import '../command/configuration.dart'; import '../daemon_client.dart'; import '../logging.dart'; +import '../util.dart'; import 'chrome.dart'; import 'server_manager.dart'; import 'webdev_server.dart'; @@ -108,10 +109,7 @@ Future _startServerManager( ); } logWriter(logging.Level.INFO, 'Starting resource servers...'); - final serverManager = await ServerManager.start( - serverOptions, - client.buildResults, - ); + final serverManager = await ServerManager.start(serverOptions, client); for (final server in serverManager.servers) { logWriter( @@ -179,13 +177,19 @@ class DevWorkflow { final _doneCompleter = Completer(); final BuildDaemonClient _client; final Chrome? _chrome; + final Process? _fesProcess; final ServerManager serverManager; StreamSubscription? _resultsSub; final _wrapWidth = stdout.hasTerminal ? stdout.terminalColumns - 8 : 72; - DevWorkflow._(this._client, this._chrome, this.serverManager) { + DevWorkflow._( + this._client, + this._chrome, + this.serverManager, + this._fesProcess, + ) { _resultsSub = _client.buildResults.listen((data) { if (data.results.any( (result) => @@ -206,13 +210,56 @@ class DevWorkflow { Future get done => _doneCompleter.future; + static Future _startFesManager(String workingDirectory) async { + final sdkDir = p.dirname(p.dirname(dartPath)); + final packagesFile = p.join( + workingDirectory, + '.dart_tool', + 'package_config.json', + ); + + final args = [ + 'run', + 'build_web_compilers:fes_manager', + sdkDir, + p.toUri(workingDirectory).toString(), + p.toUri(packagesFile).toString(), + ]; + + return await Process.start( + dartPath, + args, + workingDirectory: workingDirectory, + ); + } + + static Future _waitForFile(File file) async { + while (!await file.exists()) { + await Future.delayed(const Duration(milliseconds: 100)); + } + } + static Future start( Configuration configuration, List buildOptions, Map targetPorts, ) async { final workingDirectory = Directory.current.path; - final client = await _startBuildDaemon(workingDirectory, buildOptions); + + Process? fesProcess; + if (configuration.webHotReload) { + logWriter(logging.Level.INFO, 'Starting Frontend Server Manager...'); + final configFile = File( + p.join(workingDirectory, '.dart_tool', 'build', 'fes_manager_config'), + ); + if (await configFile.exists()) { + await configFile.delete(); + } + fesProcess = await _startFesManager(workingDirectory); + await _waitForFile(configFile); + } + + final client = await _startBuildDaemon(workingDirectory, [...buildOptions]); logWriter(logging.Level.INFO, 'Registering build targets...'); _registerBuildTargets(client, configuration, targetPorts); logWriter(logging.Level.INFO, 'Starting initial build...'); @@ -224,7 +271,7 @@ class DevWorkflow { client, ); final chrome = await _startChrome(configuration, serverManager, client); - return DevWorkflow._(client, chrome, serverManager); + return DevWorkflow._(client, chrome, serverManager, fesProcess); } Future shutDown() async { @@ -232,6 +279,7 @@ class DevWorkflow { await _chrome?.close(); await _client.close(); await serverManager.stop(); + _fesProcess?.kill(); if (!_doneCompleter.isCompleted) _doneCompleter.complete(); } } diff --git a/webdev/lib/src/serve/server_manager.dart b/webdev/lib/src/serve/server_manager.dart index 39e237dbd6..cd708c3d6f 100644 --- a/webdev/lib/src/serve/server_manager.dart +++ b/webdev/lib/src/serve/server_manager.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:build_daemon/data/build_status.dart'; +import 'package:build_daemon/client.dart'; import 'webdev_server.dart'; @@ -16,11 +16,13 @@ class ServerManager { static Future start( Set serverOptions, - Stream buildResults, + BuildDaemonClient client, ) async { final servers = {}; for (final options in serverOptions) { - servers.add(await WebDevServer.start(options, buildResults)); + servers.add( + await WebDevServer.start(options, client.buildResults, client), + ); } return ServerManager._(servers); } diff --git a/webdev/lib/src/serve/webdev_server.dart b/webdev/lib/src/serve/webdev_server.dart index 10e8cf6f2f..4c680bf591 100644 --- a/webdev/lib/src/serve/webdev_server.dart +++ b/webdev/lib/src/serve/webdev_server.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; +import 'package:build_daemon/client.dart'; import 'package:build_daemon/data/build_status.dart' as daemon; import 'package:dwds/data/build_result.dart'; import 'package:dwds/dwds.dart'; @@ -15,7 +16,6 @@ import 'package:http/io_client.dart'; import 'package:http_multi_server/http_multi_server.dart'; import 'package:logging/logging.dart'; import 'package:path/path.dart' as p; - import 'package:shelf/shelf.dart'; import 'package:shelf_proxy/shelf_proxy.dart'; @@ -85,7 +85,7 @@ class WebDevServer { /// Can be null if client.js injection is disabled. final Dwds? dwds; - final ExpressionCompilerService? ddcService; + final ExpressionCompiler? ddcService; final String target; @@ -123,7 +123,10 @@ class WebDevServer { Future stop() async { await dwds?.stop(); - await ddcService?.stop(); + final service = ddcService; + if (service is ExpressionCompilerService) { + await service.stop(); + } await _server.close(force: true); _client.close(); } @@ -131,6 +134,7 @@ class WebDevServer { static Future start( ServerOptions options, Stream buildResults, + BuildDaemonClient daemonClient, ) async { final basePath = ''; var pipeline = const Pipeline(); @@ -168,19 +172,22 @@ class WebDevServer { // Only provide relevant build results final filteredBuildResults = buildResults.asyncMap((results) { + // Clear reloaded sources for the new build results. + reloadedSources.clear(); if (options.configuration.usesDdcLibraryBundle) { - // Clear reloaded sources for the new build results. - reloadedSources.clear(); - results.changedAssets?.forEach((uri) { - if (uri.path.endsWith(jsLibraryBundleExtension)) { - final reloadedSource = { - 'src': ddcUriToSourceUrl(basePath, options.target, uri), - 'module': ddcUriToLibraryId(uri), - 'libraries': [ddcUriToLibraryId(uri)], - }; - reloadedSources.add(reloadedSource); + final changedAssets = results.changedAssets; + if (changedAssets != null) { + for (final uri in changedAssets) { + if (uri.path.endsWith(jsLibraryBundleExtension)) { + final reloadedSource = { + 'src': ddcUriToSourceUrl(basePath, options.target, uri), + 'module': ddcUriToLibraryId(uri), + 'libraries': [ddcUriToLibraryId(uri)], + }; + reloadedSources.add(reloadedSource); + } } - }); + } } final result = results.results.firstWhere( (result) => result.target == options.target, @@ -211,35 +218,56 @@ class WebDevServer { ); Dwds? dwds; - ExpressionCompilerService? ddcService; + ExpressionCompiler? ddcService; if (options.configuration.enableInjectedClient) { final assetReader = ProxyServerAssetReader( options.daemonPort, root: options.target, ); + // Read the entrypoint metadata generated by build_web_compilers if + // available. This avoids having to hard code 'main.dart' and allows us + // to initialize the frontend server if the build is fully cached. + String? canonicalUri; + if (options.configuration.webHotReload && + !options.configuration.release) { + final entrypointJsonStr = await assetReader.dartSourceContents( + '.web.entrypoint.json', + ); + if (entrypointJsonStr != null) { + try { + final json = jsonDecode(entrypointJsonStr) as Map; + canonicalUri = json['canonicalUri'] as String?; + } catch (e) { + _logger.warning('Failed to parse .web.entrypoint.json', e); + } + } + } + // TODO(https://github.com/flutter/devtools/issues/5350): Figure out how // to determine the build settings from the build. // Can we save build metadata in build_web_compilers and and read it in // the load strategy? final buildSettings = BuildSettings( appEntrypoint: Uri.parse( - '$multiRootScheme:///${options.target}/main.dart', + canonicalUri ?? '$multiRootScheme:///${options.target}/main.dart', ), canaryFeatures: options.configuration.canaryFeatures, isFlutterApp: false, experiments: options.configuration.experiments, + useDebuggerModuleNames: false, ); final LoadStrategy loadStrategy; - if (options.configuration.webHotReload) { - final frontendServerFileSystem = LocalFileSystem(); + if (options.configuration.webHotReload && + !options.configuration.release) { + final frontendServerFileSystem = const LocalFileSystem(); final packageUriMapper = await BuildRunnerPathResolver.create( frontendServerFileSystem, findPackageConfigUri()!, useDebuggerModuleNames: false, ); - loadStrategy = FrontendServerDdcLibraryBundleStrategyProvider( + loadStrategy = FrontendServerBuildDaemonStrategyProvider( options.configuration.reload, assetReader, packageUriMapper, @@ -249,23 +277,21 @@ class WebDevServer { reloadedSourcesUri: Uri.parse('$basePath/$reloadedSourcesFileName'), injectScriptLoad: false, ).strategy; + } else if (options.configuration.moduleFormat == 'ddc') { + loadStrategy = BuildRunnerDdcLibraryBundleStrategyProvider( + options.configuration.reload, + assetReader, + buildSettings, + packageConfigPath: findPackageConfigFilePath(), + reloadedSourcesUri: Uri.parse('$basePath/$reloadedSourcesFileName'), + ).strategy; } else { - if (options.configuration.moduleFormat == 'ddc') { - loadStrategy = BuildRunnerDdcLibraryBundleStrategyProvider( - options.configuration.reload, - assetReader, - buildSettings, - packageConfigPath: findPackageConfigFilePath(), - reloadedSourcesUri: Uri.parse('$basePath/$reloadedSourcesFileName'), - ).strategy; - } else { - loadStrategy = BuildRunnerRequireStrategyProvider( - options.configuration.reload, - assetReader, - buildSettings, - packageConfigPath: findPackageConfigFilePath(), - ).strategy; - } + loadStrategy = BuildRunnerRequireStrategyProvider( + options.configuration.reload, + assetReader, + buildSettings, + packageConfigPath: findPackageConfigFilePath(), + ).strategy; } // Check that we're running from a compiled binary (like webdev.exe) and not @@ -290,7 +316,53 @@ class WebDevServer { } if (options.configuration.enableExpressionEvaluation) { - if (isAotMode && !useAotDdc) { + if (options.configuration.webHotReload && + !options.configuration.release) { + // Use the daemon expression compiler when web hot reload is enabled + // to reuse the Frontend Server's in-memory state. + var cachedFesPort = await _readFesPort(); + // Pre-initialize the Frontend Server if a port and canonical URI + // are found. Required for cached builds. + if (cachedFesPort != null && canonicalUri != null) { + _logger.info( + 'Early initializing Frontend Server with $canonicalUri', + ); + try { + final responseStr = await _sendFesRawRequest(cachedFesPort, { + 'instruction': 'COMPILE', + 'entrypoint': canonicalUri, + }); + _logger.fine('Early initialization response: $responseStr'); + } catch (e) { + _logger.warning('Failed to early initialize FES', e); + } + } + + ddcService = DaemonExpressionCompiler((request) async { + if (cachedFesPort != null) { + try { + return await _sendRequestToFes(cachedFesPort!, request); + } catch (e) { + _logger.warning( + 'Failed to connect to FES at $cachedFesPort, re-reading config file', + e, + ); + cachedFesPort = null; + } + } + + final port = await _readFesPort(); + if (port != null) { + cachedFesPort = port; + return await _sendRequestToFes(port, request); + } + return { + 'result': + 'InternalError: Failed to connect to Frontend Server worker.', + 'isError': true, + }; + }); + } else if (isAotMode && !useAotDdc) { _logger.warning( 'Expression evaluation will be disabled in AOT mode because ' 'dartdevc_aot.dart.snapshot was not found in the SDK.', @@ -445,3 +517,62 @@ String ddcUriToLibraryId(Uri uri) { ); return '$prefix.dart'; } + +Future _readFesPort() async { + try { + final file = File(p.join('.dart_tool', 'build', 'fes_manager_config')); + if (await file.exists()) { + final content = await file.readAsString(); + final json = jsonDecode(content) as Map; + return json['port'] as int?; + } + } catch (e) { + _logger.warning('Failed to read FES config', e); + } + return null; +} + +Future _sendFesRawRequest( + int port, + Map request, +) async { + final socket = await Socket.connect(InternetAddress.loopbackIPv4, port); + try { + socket.writeln(jsonEncode(request)); + await socket.flush(); + final responseStr = await socket + .cast>() + .transform(utf8.decoder) + .transform(const LineSplitter()) + .first; + return jsonDecode(responseStr); + } finally { + await socket.close(); + } +} + +Future> _sendRequestToFes( + int port, + Map request, +) async { + final compileResult = await _sendFesRawRequest(port, request); + if (compileResult is! Map) { + return { + 'errorMessage': + 'Unexpected response format from FES. ' + 'Expected a Map but got: $compileResult', + 'errorCount': 1, + }; + } + + final compileResultMap = compileResult as Map; + + // Ensure 'errorMessage' is populated if 'error' is present, + // to satisfy DaemonExpressionCompiler. + final error = compileResultMap['error'] as String?; + if (error != null && compileResultMap['errorMessage'] == null) { + compileResultMap['errorMessage'] = error; + } + + return compileResultMap; +} diff --git a/webdev/lib/src/util.dart b/webdev/lib/src/util.dart index 47033d5469..e241fbe69a 100644 --- a/webdev/lib/src/util.dart +++ b/webdev/lib/src/util.dart @@ -30,12 +30,12 @@ void serveHttpRequests( final String _sdkDir = (() { // The Dart executable is in "/path/to/sdk/bin/dart", so two levels up is // "/path/to/sdk". - final String dartExecutable = Platform.isWindows + final dartExecutable = Platform.isWindows // Use 'where.exe' to support powershell as well ? (Process.runSync('where.exe', ['dart.exe']).stdout as String) .split(RegExp('(\r\n|\r|\n)')) .first - : Process.runSync('which', ['dart']).stdout; + : (Process.runSync('which', ['dart']).stdout as String).trim(); final aboveExecutable = p.dirname(p.dirname(dartExecutable)); assert(FileSystemEntity.isFileSync(p.join(aboveExecutable, 'version'))); return aboveExecutable; diff --git a/webdev/lib/src/version.dart b/webdev/lib/src/version.dart index 78c01d1a64..2384f91ac4 100644 --- a/webdev/lib/src/version.dart +++ b/webdev/lib/src/version.dart @@ -1,2 +1,2 @@ // Generated code. Do not modify. -const packageVersion = '4.1.0-wip'; +const packageVersion = '4.1.0'; diff --git a/webdev/pubspec.yaml b/webdev/pubspec.yaml index 390aca6293..364572310b 100644 --- a/webdev/pubspec.yaml +++ b/webdev/pubspec.yaml @@ -1,6 +1,6 @@ name: webdev # Every time this changes you need to run `dart run build_runner build`. -version: 4.1.0-wip +version: 4.1.0 # We should not depend on a dev SDK before publishing. # publish_to: none description: >- @@ -18,7 +18,7 @@ dependencies: collection: ^1.15.0 crypto: ^3.0.2 dds: ^5.3.0 - dwds: ^27.1.2 + dwds: '>=27.1.2 <29.0.0' file: ^7.0.1 http: ^1.0.0 http_multi_server: ^3.2.0 diff --git a/webdev/test/asset_handler_ddc_library_bundle_test.dart b/webdev/test/asset_handler_ddc_library_bundle_test.dart index aaa97ad92a..367d8ce9f6 100644 --- a/webdev/test/asset_handler_ddc_library_bundle_test.dart +++ b/webdev/test/asset_handler_ddc_library_bundle_test.dart @@ -9,6 +9,7 @@ import 'package:dwds/expression_compiler.dart'; import 'package:dwds_test_common/integration/asset_handler.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; + import 'helpers/context.dart'; void main() { diff --git a/webdev/test/breakpoint_ddc_library_bundle_test.dart b/webdev/test/breakpoint_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..0928391b7f --- /dev/null +++ b/webdev/test/breakpoint_ddc_library_bundle_test.dart @@ -0,0 +1,40 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/breakpoint.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + final provider = TestSdkConfigurationProvider( + verbose: debug, + ddcModuleFormat: ModuleFormat.ddc, + canaryFeatures: true, + ); + tearDownAll(provider.dispose); + + group('Build Daemon |', () { + testBreakpoint( + provider: provider, + contextFactory: BuildDaemonTestContext.new, + ); + }); + + group('Build Daemon and Frontend Server |', () { + testBreakpoint( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/callstack_ddc_library_bundle_test.dart b/webdev/test/callstack_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..ec6d176fc0 --- /dev/null +++ b/webdev/test/callstack_ddc_library_bundle_test.dart @@ -0,0 +1,40 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/callstack.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + final provider = TestSdkConfigurationProvider( + verbose: debug, + ddcModuleFormat: ModuleFormat.ddc, + canaryFeatures: true, + ); + tearDownAll(provider.dispose); + + group('Build Daemon |', () { + testCallStack( + provider: provider, + contextFactory: BuildDaemonTestContext.new, + ); + }); + + group('Build Daemon and Frontend Server |', () { + testCallStack( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/chrome_proxy_service_amd_test.dart b/webdev/test/chrome_proxy_service_amd_test.dart index c5e241d660..f2f05b0fe0 100644 --- a/webdev/test/chrome_proxy_service_amd_test.dart +++ b/webdev/test/chrome_proxy_service_amd_test.dart @@ -8,6 +8,7 @@ library; import 'package:dwds/expression_compiler.dart'; + import 'package:dwds_test_common/integration/chrome_proxy_service.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/webdev/test/chrome_proxy_service_ddc_library_bundle_test.dart b/webdev/test/chrome_proxy_service_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..1c2a83b070 --- /dev/null +++ b/webdev/test/chrome_proxy_service_ddc_library_bundle_test.dart @@ -0,0 +1,56 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +@Tags(['daily']) +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/chrome_proxy_service.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canaryFeatures = true; + final moduleFormat = ModuleFormat.ddc; + + group('canary: $canaryFeatures | Build Daemon |', () { + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + final contextFactory = BuildDaemonTestContext.new; + tearDownAll(provider.dispose); + + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: $canaryFeatures | Build Daemon and Frontend Server |', () { + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + tearDownAll(provider.dispose); + + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/circular_evaluate_ddc_library_bundle_test.dart b/webdev/test/circular_evaluate_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..92b759371c --- /dev/null +++ b/webdev/test/circular_evaluate_ddc_library_bundle_test.dart @@ -0,0 +1,38 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/evaluate_circular.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() async { + // Enable verbose logging for debugging. + const debug = false; + + final provider = TestSdkConfigurationProvider( + verbose: debug, + ddcModuleFormat: ModuleFormat.ddc, + canaryFeatures: true, + ); + tearDownAll(provider.dispose); + + group('Build Daemon |', () { + testAll(provider: provider, contextFactory: BuildDaemonTestContext.new); + }); + + group('Build Daemon and Frontend Server |', () { + testAll( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/class_inspection_ddc_library_bundle_test.dart b/webdev/test/class_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..a5bd0084b2 --- /dev/null +++ b/webdev/test/class_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/class_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/daemon/app_domain_common.dart b/webdev/test/daemon/app_domain_common.dart index a6009ad55c..92b38a3bde 100644 --- a/webdev/test/daemon/app_domain_common.dart +++ b/webdev/test/daemon/app_domain_common.dart @@ -114,14 +114,21 @@ void appDomainTests({required TestRunner testRunner}) { '[{"method":"app.restart","id":0,' '"params" : { "appId" : "$appId", "fullRestart" : false}}]'; webdev.stdin.add(utf8.encode('$extensionCall\n')); - await expectLater( - webdev.stdout, - emitsThrough( - startsWith( - '[{"id":0,"result":{"code":1,"message":"hot reload not yet supported', - ), - ), - ); + + var success = false; + while (await webdev.stdout.hasNext) { + final line = await webdev.stdout.next; + if (line.startsWith('[{"id":0,')) { + final unwrapped = line.substring(1, line.length - 1); + final response = json.decode(unwrapped) as Map; + final result = response['result'] as Map; + expect(result['code'], equals(0)); + expect(result['message'], equals('Hot reload successful')); + success = true; + break; + } + } + expect(success, isTrue); await exitWebdev(webdev); }, timeout: const Timeout(Duration(minutes: 2))); diff --git a/webdev/test/daemon/app_domain_ddc_library_bundle_test.dart b/webdev/test/daemon/app_domain_ddc_library_bundle_test.dart index 1f6fa8b3e7..ab58ec869b 100644 --- a/webdev/test/daemon/app_domain_ddc_library_bundle_test.dart +++ b/webdev/test/daemon/app_domain_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import '../test_utils.dart'; import 'app_domain_common.dart'; void main() { - appDomainTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + appDomainTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + appDomainTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/daemon/daemon_domain_ddc_library_bundle_test.dart b/webdev/test/daemon/daemon_domain_ddc_library_bundle_test.dart index 30c04fb792..cad0ebcab1 100644 --- a/webdev/test/daemon/daemon_domain_ddc_library_bundle_test.dart +++ b/webdev/test/daemon/daemon_domain_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import '../test_utils.dart'; import 'daemon_domain_common.dart'; void main() { - daemonDomainTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + daemonDomainTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + daemonDomainTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/daemon/launch_app_common.dart b/webdev/test/daemon/launch_app_common.dart index d0319a9546..e8af6b7f29 100644 --- a/webdev/test/daemon/launch_app_common.dart +++ b/webdev/test/daemon/launch_app_common.dart @@ -5,6 +5,9 @@ @Timeout(Duration(minutes: 2)) library; +import 'dart:io'; + +import 'package:path/path.dart' as p; import 'package:test/test.dart'; import '../test_utils.dart'; @@ -16,6 +19,11 @@ void launchAppTests({required TestRunner testRunner}) { setUpAll(() async { await testRunner.setUpAll(); exampleDirectory = await testRunner.prepareWorkspace(); + // Delete 'main.dart' to ensure only one entrypoint exists. + final mainDart = File(p.join(exampleDirectory, 'web', 'main.dart')); + if (mainDart.existsSync()) { + mainDart.deleteSync(); + } }); tearDownAll(testRunner.tearDownAll); diff --git a/webdev/test/daemon/launch_app_ddc_library_bundle_test.dart b/webdev/test/daemon/launch_app_ddc_library_bundle_test.dart index d9746fe977..baac246471 100644 --- a/webdev/test/daemon/launch_app_ddc_library_bundle_test.dart +++ b/webdev/test/daemon/launch_app_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import '../test_utils.dart'; import 'launch_app_common.dart'; void main() { - launchAppTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + launchAppTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + launchAppTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/daemon/utils.dart b/webdev/test/daemon/utils.dart index b760eabc44..6909191bb8 100644 --- a/webdev/test/daemon/utils.dart +++ b/webdev/test/daemon/utils.dart @@ -19,18 +19,26 @@ Future exitWebdev(TestProcess webdev) async { } Future waitForAppId(TestProcess webdev) async { - var appId = ''; + final stdoutLines = []; while (await webdev.stdout.hasNext) { var line = await webdev.stdout.next; + stdoutLines.add(line); if (line.startsWith('[{"event":"app.started"')) { line = line.substring(1, line.length - 1); final message = json.decode(line) as Map; - appId = message['params']['appId'] as String; - break; + final appId = message['params']['appId'] as String; + if (appId.isNotEmpty) return appId; } } - assert(appId.isNotEmpty); - return appId; + final stderrLines = []; + while (await webdev.stderr.hasNext) { + stderrLines.add(await webdev.stderr.next); + } + throw StateError( + 'Failed to receive "app.started" event before process stdout closed.\n' + 'Captured stdout:\n${stdoutLines.join('\n')}\n' + 'Captured stderr:\n${stderrLines.join('\n')}', + ); } String? getDebugServiceUri(String line) { diff --git a/webdev/test/dds_port_amd_test.dart b/webdev/test/dds_port_amd_test.dart index 7d3b381f14..7fe4ce6425 100644 --- a/webdev/test/dds_port_amd_test.dart +++ b/webdev/test/dds_port_amd_test.dart @@ -9,6 +9,7 @@ library; import 'package:dwds_test_common/integration/dds_port.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; + import 'helpers/context.dart'; void main() { diff --git a/webdev/test/dds_port_ddc_library_bundle_test.dart b/webdev/test/dds_port_ddc_library_bundle_test.dart index 77a8e025d5..77f0e9883c 100644 --- a/webdev/test/dds_port_ddc_library_bundle_test.dart +++ b/webdev/test/dds_port_ddc_library_bundle_test.dart @@ -10,6 +10,7 @@ import 'package:dwds/expression_compiler.dart'; import 'package:dwds_test_common/integration/dds_port.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; + import 'helpers/context.dart'; void main() { diff --git a/webdev/test/dot_shorthands_ddc_library_bundle_test.dart b/webdev/test/dot_shorthands_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..a6427d37b0 --- /dev/null +++ b/webdev/test/dot_shorthands_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/src/services/expression_compiler.dart'; +import 'package:dwds_test_common/integration/dot_shorthands.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/e2e_common.dart b/webdev/test/e2e_common.dart index 9080a1ae13..b7c2205a53 100644 --- a/webdev/test/e2e_common.dart +++ b/webdev/test/e2e_common.dart @@ -14,13 +14,11 @@ import 'package:path/path.dart' as p; import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; import 'package:test_descriptor/test_descriptor.dart' as d; -import 'package:test_process/test_process.dart'; import 'package:vm_service/vm_service.dart'; import 'package:vm_service/vm_service_io.dart'; import 'package:webdev/src/logging.dart'; import 'package:webdev/src/pubspec.dart'; import 'package:webdev/src/serve/utils.dart'; -import 'package:webdev/src/util.dart'; import 'package:yaml/yaml.dart'; import 'daemon/utils.dart'; @@ -44,23 +42,20 @@ void e2eTests({required TestRunner testRunner}) { setUpAll(() async { configureLogWriter(debug); await testRunner.setUpAll(); - exampleDirectory = p.absolute( - p.join(p.current, '..', 'dwds_test_common', 'fixtures', '_webdev_smoke'), - ); - - final process = await TestProcess.start( - dartPath, - ['pub', 'upgrade'], - workingDirectory: exampleDirectory, - environment: getPubEnvironment(), - ); - - await process.shouldExit(0); - - await d - .file('.dart_tool/package_config.json', isNotEmpty) - .validate(exampleDirectory); - await d.file('pubspec.lock', isNotEmpty).validate(exampleDirectory); + exampleDirectory = await testRunner.prepareWorkspace(); + // Delete files other than main.dart and index.html to ensure a single + // entrypoint exists. + final webDir = Directory(p.join(exampleDirectory, 'web')); + if (await webDir.exists()) { + await for (final entity in webDir.list()) { + if (entity is File) { + final name = p.basename(entity.path); + if (name != 'main.dart' && name != 'index.html') { + await entity.delete(); + } + } + } + } }); tearDownAll(testRunner.tearDownAll); @@ -217,10 +212,10 @@ void e2eTests({required TestRunner testRunner}) { final hostUrl = 'http://localhost:$openPort'; - // Wait for the initial build to finish. + // Wait for the server to be ready for connections. await expectLater( process.stdout, - emitsThrough(contains('Built with build_runner')), + emitsThrough(contains('Serving `web` on')), ); final client = HttpClient(); diff --git a/webdev/test/e2e_ddc_library_bundle_test.dart b/webdev/test/e2e_ddc_library_bundle_test.dart index 6a685854c2..ab0788892b 100644 --- a/webdev/test/e2e_ddc_library_bundle_test.dart +++ b/webdev/test/e2e_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import 'e2e_common.dart'; import 'test_utils.dart'; void main() { - e2eTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + e2eTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + e2eTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/evaluate_ddc_library_bundle_test.dart b/webdev/test/evaluate_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..250e16edf2 --- /dev/null +++ b/webdev/test/evaluate_ddc_library_bundle_test.dart @@ -0,0 +1,40 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/evaluate.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() async { + // Enable verbose logging for debugging. + const debug = false; + + group('Canary: true |', () { + final provider = TestSdkConfigurationProvider( + verbose: debug, + ddcModuleFormat: ModuleFormat.ddc, + canaryFeatures: true, + ); + tearDownAll(provider.dispose); + + group('Build Daemon |', () { + testAll(provider: provider, contextFactory: BuildDaemonTestContext.new); + }); + + group('Build Daemon and Frontend Server |', () { + testAll( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); + }); +} diff --git a/webdev/test/events_ddc_library_bundle_test.dart b/webdev/test/events_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..063836374d --- /dev/null +++ b/webdev/test/events_ddc_library_bundle_test.dart @@ -0,0 +1,32 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/events.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canary = true; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canary, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + group('Build Daemon', () { + testWithDwds( + provider: provider, + contextFactory: BuildDaemonTestContext.new, + ); + }); +} diff --git a/webdev/test/helpers/context.dart b/webdev/test/helpers/context.dart index 2e36df756e..d26d567029 100644 --- a/webdev/test/helpers/context.dart +++ b/webdev/test/helpers/context.dart @@ -1,7 +1,6 @@ // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. - import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -45,7 +44,97 @@ Handler createBuildRunnerProxyHandler({ ); } -class BuildDaemonTestContext extends TestContext { +mixin BuildDaemonContextMixin on TestContext { + BuildDaemonClient get daemonClient; + + @override + Future waitForSuccessfulBuild({ + Duration? timeout, + bool propagateToBrowser = false, + bool allowFailure = false, + }) async { + final buildStartCompleter = Completer(); + final buildSuccessCompleter = Completer(); + final subscription = daemonClient.buildResults.listen((results) { + final isStartedEvent = results.results.any( + (r) => r.status == daemon.BuildStatus.started, + ); + final isSucceededEvent = results.results.any( + (r) => r.status == daemon.BuildStatus.succeeded, + ); + final isFailedEvent = results.results.any( + (r) => r.status == daemon.BuildStatus.failed, + ); + + if (isStartedEvent) { + if (!buildStartCompleter.isCompleted) buildStartCompleter.complete(); + } + if (isFailedEvent) { + if (!buildSuccessCompleter.isCompleted) { + final failedResult = results.results.firstWhere( + (r) => r.status == daemon.BuildStatus.failed, + ); + final daemonError = + failedResult.error ?? 'Unknown daemon compilation error'; + if (allowFailure) { + buildSuccessCompleter.complete(); + } else { + buildSuccessCompleter.completeError( + StateError('Build daemon build failed.\nError: $daemonError'), + ); + } + } + } + if (buildStartCompleter.isCompleted && isSucceededEvent) { + if (!buildSuccessCompleter.isCompleted) { + buildSuccessCompleter.complete(); + } + } + }); + + var isWaitingForSuccess = false; + try { + var timedOutWaitingForStart = false; + await buildStartCompleter.future.timeout( + const Duration(seconds: 5), + onTimeout: () { + timedOutWaitingForStart = true; + }, + ); + + if (timedOutWaitingForStart) { + return; + } + + isWaitingForSuccess = true; + await buildSuccessCompleter.future.timeout( + timeout ?? const Duration(seconds: 60), + ); + } catch (e) { + if (e is TimeoutException) { + // Return if an edit did not trigger a rebuild/recompile. + if (!isWaitingForSuccess) { + return; + } + // If the build started but never finished, the test has likely hung. + rethrow; + } + rethrow; + } finally { + await subscription.cancel(); + } + + if (propagateToBrowser) { + final delay = Platform.isWindows + ? const Duration(seconds: 5) + : const Duration(seconds: 2); + await Future.delayed(delay); + } + } +} + +class BuildDaemonTestContext extends TestContext with BuildDaemonContextMixin { + final _logger = logging.Logger('BuildDaemonTestContext'); BuildDaemonTestContext(super.project, super.sdkConfigurationProvider) : super.protected(); @@ -55,6 +144,7 @@ class BuildDaemonTestContext extends TestContext { late Stream _buildResults; ExpressionCompiler? _expressionCompiler; + @override late BuildDaemonClient daemonClient; ExpressionCompilerService? ddcService; @@ -92,6 +182,7 @@ class BuildDaemonTestContext extends TestContext { canaryFeatures: testSettings.canaryFeatures, isFlutterApp: testSettings.isFlutterApp, experiments: testSettings.experiments, + useDebuggerModuleNames: testSettings.useDebuggerModuleNames, ); final options = [ @@ -127,7 +218,12 @@ class BuildDaemonTestContext extends TestContext { (log) { final record = log.toLogRecord(); final name = record.loggerName == '' ? '' : '${record.loggerName}: '; - print('${record.level.name}: $name${record.message}'); + _logger.log( + record.level, + '$name${record.message}', + record.error, + record.stackTrace, + ); }, ); daemonClient.registerBuildTarget( @@ -167,6 +263,8 @@ class BuildDaemonTestContext extends TestContext { sdkConfigurationProvider: sdkConfigurationProvider, ); _expressionCompiler = ddcService; + } else { + _expressionCompiler = null; } _loadStrategy = switch (( @@ -209,11 +307,16 @@ class BuildDaemonTestContext extends TestContext { @override Future modeTearDown() async { await ddcService?.stop(); - await daemonClient.close(); + ddcService = null; + _expressionCompiler = null; + try { + await daemonClient.close(); + } catch (_) {} } } -class BuildDaemonAndFrontendServerTestContext extends TestContext { +class BuildDaemonAndFrontendServerTestContext extends TestContext + with BuildDaemonContextMixin { final _logger = logging.Logger('BuildDaemonAndFrontendServerTestContext'); BuildDaemonAndFrontendServerTestContext( @@ -227,6 +330,7 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { late Stream _buildResults; ExpressionCompiler? _expressionCompiler; + @override late BuildDaemonClient daemonClient; ExpressionCompilerService? ddcService; late LocalFileSystem frontendServerFileSystem; @@ -296,6 +400,7 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { canaryFeatures: testSettings.canaryFeatures, isFlutterApp: testSettings.isFlutterApp, experiments: testSettings.experiments, + useDebuggerModuleNames: testSettings.useDebuggerModuleNames, ); final options = [ @@ -325,42 +430,6 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { '--verbose', '--build-filter=${project.directoryToServe}/**', ]; - daemonClient = await connectClient( - sdkLayout.dartPath, - project.absolutePackageDirectory, - options, - (log) { - final record = log.toLogRecord(); - final name = record.loggerName == '' ? '' : '${record.loggerName}: '; - _logger.log( - record.level, - '$name${record.message}', - record.error, - record.stackTrace, - ); - }, - ); - daemonClient.registerBuildTarget( - DefaultBuildTarget((b) => b..target = project.directoryToServe), - ); - daemonClient.startBuild(); - - await waitForSuccessfulBuild(); - - final assetServerPort = daemonPort(project.absolutePackageDirectory); - _assetHandler = createBuildRunnerProxyHandler( - directoryToServe: project.directoryToServe, - client: client, - assetServerPort: assetServerPort, - ); - if (testSettings.moduleFormat == ModuleFormat.ddc && - buildSettings.canaryFeatures) { - _assetHandler = handleReloadedSources(_assetHandler); - } - _assetReader = ProxyServerAssetReader( - assetServerPort, - root: project.directoryToServe, - ); if (testSettings.enableExpressionEvaluation) { _logger.info('Starting Frontend Server Manager'); @@ -541,6 +610,7 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { daemonClient.startBuild(); await buildFuture; + final assetServerPort = daemonPort(project.absolutePackageDirectory); _assetHandler = _createBuildRunnerDdcLibraryBundleAssetHandler( this, @@ -553,6 +623,8 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { _expressionCompiler = DaemonExpressionCompiler( _compileExpressionWithDaemon, ); + } else { + _expressionCompiler = null; } frontendServerFileSystem = const LocalFileSystem(); final packageUriMapper = await BuildRunnerPathResolver.create( @@ -587,6 +659,7 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { 'Server + build_runner ${testSettings.moduleFormat.name}.', ), }; + // Map build results. _buildResults = testSettings.enableExpressionEvaluation ? const Stream.empty() @@ -609,7 +682,42 @@ class BuildDaemonAndFrontendServerTestContext extends TestContext { @override Future modeTearDown() async { await ddcService?.stop(); - await daemonClient.close(); + try { + await daemonClient.close(); + } catch (_) {} + } + + @override + Future waitForSuccessfulBuild({ + Duration? timeout, + bool propagateToBrowser = false, + bool allowFailure = false, + }) async { + lastBuildFailed = false; + // Wait for the build until the timeout is reached: + final results = await daemonClient.buildResults + .firstWhere( + (daemon.BuildResults results) => results.results.any( + (daemon.BuildResult result) => + result.status == daemon.BuildStatus.succeeded || + (allowFailure && result.status == daemon.BuildStatus.failed), + ), + ) + .timeout(timeout ?? const Duration(seconds: 60)); + + lastBuildFailed = results.results.any( + (daemon.BuildResult result) => result.status == daemon.BuildStatus.failed, + ); + + if (propagateToBrowser) { + // Allow change to propagate to the browser. + // Windows, or at least Travis on Windows, seems to need more time. + // TODO: Wait for an explicit finish signal instead of adding this delay. + final delay = Platform.isWindows + ? const Duration(seconds: 5) + : const Duration(seconds: 2); + await Future.delayed(delay); + } } } diff --git a/webdev/test/hot_reload_breakpoints_ddc_library_bundle_test.dart b/webdev/test/hot_reload_breakpoints_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..bec016b2f9 --- /dev/null +++ b/webdev/test/hot_reload_breakpoints_ddc_library_bundle_test.dart @@ -0,0 +1,34 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/hot_reload_breakpoints.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: true, + ddcModuleFormat: ModuleFormat.ddc, + ); + + tearDownAll(provider.dispose); + + group('Build Daemon and Frontend Server', () { + runTests( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/hot_reload_ddc_library_bundle_test.dart b/webdev/test/hot_reload_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..da1c2a0dce --- /dev/null +++ b/webdev/test/hot_reload_ddc_library_bundle_test.dart @@ -0,0 +1,34 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/hot_reload.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: true, + ddcModuleFormat: ModuleFormat.ddc, + ); + + tearDownAll(provider.dispose); + + group('Build Daemon and Frontend Server', () { + runTests( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/hot_restart_amd_test.dart b/webdev/test/hot_restart_amd_test.dart index 8cc3b784ef..546d00977b 100644 --- a/webdev/test/hot_restart_amd_test.dart +++ b/webdev/test/hot_restart_amd_test.dart @@ -8,6 +8,7 @@ library; import 'package:dwds/expression_compiler.dart'; + import 'package:dwds_test_common/integration/hot_restart.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/webdev/test/hot_restart_breakpoints_ddc_library_bundle_test.dart b/webdev/test/hot_restart_breakpoints_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..5d2fe05126 --- /dev/null +++ b/webdev/test/hot_restart_breakpoints_ddc_library_bundle_test.dart @@ -0,0 +1,38 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/hot_restart_breakpoints.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: true, + ddcModuleFormat: ModuleFormat.ddc, + ); + + tearDownAll(provider.dispose); + + group('Build Daemon', () { + runTests(provider: provider, contextFactory: BuildDaemonTestContext.new); + }); + + group('Build Daemon and Frontend Server', () { + runTests( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/hot_restart_correctness_amd_test.dart b/webdev/test/hot_restart_correctness_amd_test.dart index 9d8170775e..b25d999444 100644 --- a/webdev/test/hot_restart_correctness_amd_test.dart +++ b/webdev/test/hot_restart_correctness_amd_test.dart @@ -8,6 +8,7 @@ library; import 'package:dwds/expression_compiler.dart'; + import 'package:dwds_test_common/integration/hot_restart_correctness.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; diff --git a/webdev/test/hot_restart_correctness_ddc_library_bundle_test.dart b/webdev/test/hot_restart_correctness_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..b4c2fc2368 --- /dev/null +++ b/webdev/test/hot_restart_correctness_ddc_library_bundle_test.dart @@ -0,0 +1,52 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +@Tags(['daily']) +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/hot_restart_correctness.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canaryFeatures = true; + final moduleFormat = ModuleFormat.ddc; + + group('canary: $canaryFeatures | Build Daemon |', () { + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + final contextFactory = BuildDaemonTestContext.new; + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: $canaryFeatures | Build Daemon and Frontend Server |', () { + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/hot_restart_ddc_library_bundle_test.dart b/webdev/test/hot_restart_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..e12ad821fb --- /dev/null +++ b/webdev/test/hot_restart_ddc_library_bundle_test.dart @@ -0,0 +1,53 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@TestOn('vm') +@Tags(['daily']) +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/hot_restart.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canaryFeatures = true; + final moduleFormat = ModuleFormat.ddc; + + group('canary: $canaryFeatures | Build Daemon |', () { + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: $canaryFeatures | Build Daemon and Frontend Server |', () { + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: moduleFormat, + ); + runTests( + provider: provider, + moduleFormat: moduleFormat, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/instance_ddc_library_bundle_test.dart b/webdev/test/instance_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..1338d6bdf4 --- /dev/null +++ b/webdev/test/instance_ddc_library_bundle_test.dart @@ -0,0 +1,53 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/src/services/expression_compiler.dart'; +import 'package:dwds_test_common/integration/instance.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canaryFeatures = true; + final moduleFormat = ModuleFormat.ddc; + + group('canary: true | Build Daemon |', () { + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + canaryFeatures: canaryFeatures, + verbose: debug, + ddcModuleFormat: moduleFormat, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + canaryFeatures: canaryFeatures, + verbose: debug, + ddcModuleFormat: moduleFormat, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/instance_inspection_ddc_library_bundle_test.dart b/webdev/test/instance_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..c4974e6d28 --- /dev/null +++ b/webdev/test/instance_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/src/services/expression_compiler.dart'; +import 'package:dwds_test_common/integration/instance_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/integration_common.dart b/webdev/test/integration_common.dart index 629a2d1fc1..c04c930f7e 100644 --- a/webdev/test/integration_common.dart +++ b/webdev/test/integration_common.dart @@ -296,7 +296,7 @@ dependencies: } const _supportedBuildRunnerVersion = '2.4.0'; -const _supportedWebCompilersVersion = '4.4.12'; +const _supportedWebCompilersVersion = '4.8.9'; const _supportedBuildDaemonVersion = '4.0.0'; String _pubspecYaml = ''' diff --git a/webdev/test/integration_ddc_library_bundle_test.dart b/webdev/test/integration_ddc_library_bundle_test.dart index 43870d02b4..e35e5ba8a2 100644 --- a/webdev/test/integration_ddc_library_bundle_test.dart +++ b/webdev/test/integration_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import 'integration_common.dart'; import 'test_utils.dart'; void main() { - integrationTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + integrationTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + integrationTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/parts_evaluate_ddc_library_bundle_test.dart b/webdev/test/parts_evaluate_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..a85732d113 --- /dev/null +++ b/webdev/test/parts_evaluate_ddc_library_bundle_test.dart @@ -0,0 +1,38 @@ +// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 5)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/evaluate_parts.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() async { + // Enable verbose logging for debugging. + const debug = false; + + final provider = TestSdkConfigurationProvider( + verbose: debug, + ddcModuleFormat: ModuleFormat.ddc, + canaryFeatures: true, + ); + tearDownAll(provider.dispose); + + group('Build Daemon |', () { + testAll(provider: provider, contextFactory: BuildDaemonTestContext.new); + }); + + group('Build Daemon and Frontend Server |', () { + testAll( + provider: provider, + contextFactory: BuildDaemonAndFrontendServerTestContext.new, + ); + }); +} diff --git a/webdev/test/patterns_inspection_ddc_library_bundle_test.dart b/webdev/test/patterns_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..74fc033ae5 --- /dev/null +++ b/webdev/test/patterns_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/patterns_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/proxy_server_asset_reader_amd_test.dart b/webdev/test/proxy_server_asset_reader_amd_test.dart index 5005fdf085..88b2339b4a 100644 --- a/webdev/test/proxy_server_asset_reader_amd_test.dart +++ b/webdev/test/proxy_server_asset_reader_amd_test.dart @@ -9,6 +9,7 @@ import 'package:dwds/expression_compiler.dart'; import 'package:dwds_test_common/integration/readers/proxy_server_asset_reader.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; + import 'helpers/context.dart'; void main() { diff --git a/webdev/test/proxy_server_asset_reader_ddc_library_bundle_test.dart b/webdev/test/proxy_server_asset_reader_ddc_library_bundle_test.dart index 43d7b398dc..5791aee05c 100644 --- a/webdev/test/proxy_server_asset_reader_ddc_library_bundle_test.dart +++ b/webdev/test/proxy_server_asset_reader_ddc_library_bundle_test.dart @@ -9,6 +9,7 @@ import 'package:dwds/expression_compiler.dart'; import 'package:dwds_test_common/integration/readers/proxy_server_asset_reader.dart'; import 'package:dwds_test_common/test_sdk_configuration.dart'; import 'package:test/test.dart'; + import 'helpers/context.dart'; void main() { diff --git a/webdev/test/record_inspection_ddc_library_bundle_test.dart b/webdev/test/record_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..ee9db9fb19 --- /dev/null +++ b/webdev/test/record_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,51 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/src/services/expression_compiler.dart'; +import 'package:dwds_test_common/integration/record_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + final canaryFeatures = true; + + group('canary: true | Build Daemon |', () { + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/record_type_inspection_ddc_library_bundle_test.dart b/webdev/test/record_type_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..0935a060a6 --- /dev/null +++ b/webdev/test/record_type_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/record_type_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +} diff --git a/webdev/test/tls_common.dart b/webdev/test/tls_common.dart index 6984ae6507..939d6d3f6b 100644 --- a/webdev/test/tls_common.dart +++ b/webdev/test/tls_common.dart @@ -9,7 +9,6 @@ import 'package:logging/logging.dart'; import 'package:path/path.dart' as p; import 'package:test/test.dart'; import 'package:test_descriptor/test_descriptor.dart' as d; -import 'package:test_process/test_process.dart'; import 'package:webdev/src/logging.dart'; import 'package:webdev/src/serve/utils.dart'; @@ -26,24 +25,15 @@ void tlsTests({required TestRunner testRunner}) { setUpAll(() async { configureLogWriter(debug); await testRunner.setUpAll(); - exampleDirectory = p.absolute( - p.join( - p.current, - '..', - 'dwds_test_common', - 'fixtures', - '_webdev_smoke', - ), - ); + exampleDirectory = await testRunner.prepareWorkspace(); - final process = await TestProcess.start( - 'dart', - ['pub', 'upgrade'], - workingDirectory: exampleDirectory, - environment: getPubEnvironment(), + // Delete 'scopes_main.dart' to ensure only one entrypoint exists. + final scopesMainDart = File( + p.join(exampleDirectory, 'web', 'scopes_main.dart'), ); - - await process.shouldExit(0); + if (scopesMainDart.existsSync()) { + scopesMainDart.deleteSync(); + } await d .file('.dart_tool/package_config.json', isNotEmpty) @@ -65,9 +55,10 @@ void tlsTests({required TestRunner testRunner}) { args, workingDirectory: exampleDirectory, ); + // Wait for the server to be ready for connections. await expectLater( process.stdout, - emitsThrough(contains('Built with build_runner')), + emitsThrough(contains('Serving `web` on')), ); final client = HttpClient() @@ -101,9 +92,10 @@ void tlsTests({required TestRunner testRunner}) { args, workingDirectory: exampleDirectory, ); + // Wait for the server to be ready for connections. await expectLater( process.stdout, - emitsThrough(contains('Built with build_runner')), + emitsThrough(contains('Serving `web` on')), ); final interfaces = await NetworkInterface.list( diff --git a/webdev/test/tls_ddc_library_bundle_test.dart b/webdev/test/tls_ddc_library_bundle_test.dart index 7c83b42c25..a0dc36d591 100644 --- a/webdev/test/tls_ddc_library_bundle_test.dart +++ b/webdev/test/tls_ddc_library_bundle_test.dart @@ -12,11 +12,23 @@ import 'test_utils.dart'; import 'tls_common.dart'; void main() { - tlsTests( - testRunner: TestRunner( - canaryFeatures: true, - webHotReload: false, - ddcModuleFormat: ModuleFormat.ddc, - ), - ); + group('Build Daemon', () { + tlsTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: false, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); + + group('Build Daemon and Frontend Server', () { + tlsTests( + testRunner: TestRunner( + canaryFeatures: true, + webHotReload: true, + ddcModuleFormat: ModuleFormat.ddc, + ), + ); + }); } diff --git a/webdev/test/type_inspection_ddc_library_bundle_test.dart b/webdev/test/type_inspection_ddc_library_bundle_test.dart new file mode 100644 index 0000000000..3b81f349dc --- /dev/null +++ b/webdev/test/type_inspection_ddc_library_bundle_test.dart @@ -0,0 +1,54 @@ +// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@Tags(['daily']) +@TestOn('vm') +@Timeout(Duration(minutes: 2)) +library; + +import 'package:dwds/expression_compiler.dart'; +import 'package:dwds_test_common/integration/type_inspection.dart'; +import 'package:dwds_test_common/test_sdk_configuration.dart'; +import 'package:test/test.dart'; + +import 'helpers/context.dart'; + +void main() { + // Enable verbose logging for debugging. + const debug = false; + + group('canary: true | Build Daemon |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); + + group('canary: true | Build Daemon and Frontend Server |', () { + final canaryFeatures = true; + final contextFactory = BuildDaemonAndFrontendServerTestContext.new; + final provider = TestSdkConfigurationProvider( + verbose: debug, + canaryFeatures: canaryFeatures, + ddcModuleFormat: ModuleFormat.ddc, + ); + tearDownAll(provider.dispose); + + runTests( + provider: provider, + contextFactory: contextFactory, + canaryFeatures: canaryFeatures, + ); + }); +}