From f4ab9c2e84ac8f7137fc7068710128f56acda107 Mon Sep 17 00:00:00 2001 From: Jan Martin Date: Thu, 26 Jun 2025 14:19:34 -0700 Subject: [PATCH] WHAT IFFFFFFF THOUGH --- packages/angular/ssr/package.json | 3 +- .../angular/ssr/test/utils/promise_spec.ts | 24 ++++++- packages/angular/ssr/vitest.config.ts | 8 +++ packages/ngtools/webpack/package.json | 1 + packages/ngtools/webpack/vitest.config.ts | 8 +++ pnpm-lock.yaml | 72 +++---------------- tools/vitest_test.bzl | 20 ++++++ 7 files changed, 72 insertions(+), 64 deletions(-) create mode 100644 packages/angular/ssr/vitest.config.ts create mode 100644 packages/ngtools/webpack/vitest.config.ts create mode 100644 tools/vitest_test.bzl diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index fb2fab874853..75e9251d7693 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -35,7 +35,8 @@ "@angular/platform-browser": "20.1.0-next.3", "@angular/platform-server": "20.1.0-next.3", "@angular/router": "20.1.0-next.3", - "@schematics/angular": "workspace:*" + "@schematics/angular": "workspace:*", + "vitest": "3.2.4" }, "sideEffects": false, "schematics": "./schematics/collection.json", diff --git a/packages/angular/ssr/test/utils/promise_spec.ts b/packages/angular/ssr/test/utils/promise_spec.ts index 5f33df85e71f..ca589198e49a 100644 --- a/packages/angular/ssr/test/utils/promise_spec.ts +++ b/packages/angular/ssr/test/utils/promise_spec.ts @@ -9,16 +9,36 @@ import { setTimeout } from 'node:timers/promises'; import { promiseWithAbort } from '../../src/utils/promise'; +function expectRejectedWithError(promise: Promise) { + if (typeof expectAsync === 'function') { + return expectAsync(promise).toBeRejectedWithError(); + } else { + // @ts-expect-error + return expect(promise).rejects.toThrowError(); + } +} + +function expectResolved(promise: Promise) { + if (typeof expectAsync === 'function') { + return expectAsync(promise).toBeResolved(); + } else { + // @ts-expect-error + return expect(promise).resolves; + } +} + describe('promiseWithAbort', () => { it('should reject with an AbortError when the signal is aborted', async () => { const abortController = new AbortController(); const promise = promiseWithAbort(setTimeout(500), abortController.signal, 'Test operation'); + console.error('queueMicrotask to abort the signal'); queueMicrotask(() => { abortController.abort('Test reason'); }); - await expectAsync(promise).toBeRejectedWithError(); + console.error('expectAsync to be rejected with AbortError'); + await expectRejectedWithError(promise); }); it('should not reject if the signal is not aborted', async () => { @@ -31,6 +51,6 @@ describe('promiseWithAbort', () => { // Wait briefly to ensure no rejection occurs await setTimeout(20); - await expectAsync(promise).toBeResolved(); + await expectResolved(promise); }); }); diff --git a/packages/angular/ssr/vitest.config.ts b/packages/angular/ssr/vitest.config.ts new file mode 100644 index 000000000000..f3049c02648f --- /dev/null +++ b/packages/angular/ssr/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['**/*_spec.ts'], + globals: true, + }, +}); diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 622a5b9ce86d..1cdefbf8b8a5 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -30,6 +30,7 @@ "@angular/compiler": "20.1.0-next.3", "@angular/compiler-cli": "20.1.0-next.3", "typescript": "5.8.3", + "vitest": "3.2.4", "webpack": "5.99.9" } } diff --git a/packages/ngtools/webpack/vitest.config.ts b/packages/ngtools/webpack/vitest.config.ts new file mode 100644 index 000000000000..f3049c02648f --- /dev/null +++ b/packages/ngtools/webpack/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['**/*_spec.ts'], + globals: true, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 088e09e772a3..41121d777e84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -550,6 +550,9 @@ importers: '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular + vitest: + specifier: 3.2.4 + version: 3.2.4(@types/node@20.19.1)(jiti@1.21.7)(jsdom@26.1.0)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) packages/angular_devkit/architect: dependencies: @@ -867,6 +870,9 @@ importers: typescript: specifier: 5.8.3 version: 5.8.3 + vitest: + specifier: 3.2.4 + version: 3.2.4(@types/node@20.19.1)(jiti@1.21.7)(jsdom@26.1.0)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) webpack: specifier: 5.99.9 version: 5.99.9(esbuild@0.25.5) @@ -6797,6 +6803,7 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qjobs@1.2.0: @@ -7891,46 +7898,6 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.3.5: - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vite@7.0.0: resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -10793,13 +10760,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) '@vitest/pretty-format@3.2.4': dependencies: @@ -16406,23 +16373,6 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): - dependencies: - esbuild: 0.25.5 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.6 - rollup: 4.44.0 - tinyglobby: 0.2.14 - optionalDependencies: - '@types/node': 20.19.1 - fsevents: 2.3.3 - jiti: 1.21.7 - less: 4.3.0 - sass: 1.89.2 - terser: 5.43.1 - yaml: 2.8.0 - vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): dependencies: esbuild: 0.25.5 @@ -16444,7 +16394,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@7.0.0(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -16462,7 +16412,7 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) vite-node: 3.2.4(@types/node@20.19.1)(jiti@1.21.7)(less@4.3.0)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: diff --git a/tools/vitest_test.bzl b/tools/vitest_test.bzl new file mode 100644 index 000000000000..80d91eeffc38 --- /dev/null +++ b/tools/vitest_test.bzl @@ -0,0 +1,20 @@ +def _vitest_test_impl(ctx): + pass + +_vitest_test = rule() + +def vitest_test(data = [], args = [], **kwargs): + # Create relative path to root, from current package dir. Necessary as + # we change the `chdir` below to the package directory. + relative_to_root = "/".join([".."] * len(native.package_name().split("/"))) + + _vitest_test( + node_modules = "//:node_modules", + chdir = native.package_name(), + args = [ + # Escape so that the `js_binary` launcher triggers Bash expansion. + "'**/*+(.|_)spec.js'", + ] + args, + data = data + ["//:node_modules/vitest"], + **kwargs + )