vitest-environment-webgpu-node 1.0.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
- ## [vitest-environment-webgpu-node-v1.0.2](https://github.com/bhouston/vitest-gpu/compare/vitest-environment-webgpu-node-v1.0.1...vitest-environment-webgpu-node-v1.0.2) (2026-09-21)
1
+ ## [vitest-environment-webgpu-node-v2.0.1](https://github.com/bhouston/vitest-gpu/compare/vitest-environment-webgpu-node-v2.0.0...vitest-environment-webgpu-node-v2.0.1) (2026-09-25)
2
2
 
3
3
  ### Bug Fixes
4
4
 
5
- * support public types across TypeScript versions ([0f3df06](https://github.com/bhouston/vitest-gpu/commit/0f3df067f28308e0154045304ecbcaf2ba840fcc)), closes [#24](https://github.com/bhouston/vitest-gpu/issues/24)
5
+ * drop deprecated transformMode from GPU environments ([28f736a](https://github.com/bhouston/vitest-gpu/commit/28f736ad629a2a3ca023839cadce460d0d5c6937)), closes [#54](https://github.com/bhouston/vitest-gpu/issues/54)
package/README.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # vitest-environment-webgpu-node
2
2
 
3
- Real, headless WebGPU inside Vitest, with no browser. Powered by Google's Dawn through the
3
+ [![npm version][npm-badge]][npm-url]
4
+ [![npm downloads][downloads-badge]][npm-url]
5
+ [![Tests][tests-badge]][tests-url]
6
+ [![Discord][discord-badge]][discord-url]
7
+
8
+ Real, headless WebGPU inside Vitest, with no browser. Native GPU testing is up to 2.4x faster
9
+ than running the same tests in a browser — see the
10
+ [blog post](https://ben3d.ca/blog/native-gpu-testing-for-vitest-and-jest) for details.
11
+ Powered by Google's Dawn through the
4
12
  [`webgpu`](https://github.com/dawn-gpu/node-webgpu) npm package.
5
13
 
6
14
  The environment puts `navigator.gpu` and every `GPU*` class and constant (`GPUBufferUsage`,
@@ -16,10 +24,14 @@ in [jest-gpu](https://github.com/bhouston/jest-gpu).
16
24
  pnpm add -D vitest vitest-environment-webgpu-node
17
25
  ```
18
26
 
27
+ Type checking needs TypeScript 6 or later (see [TypeScript types](#typescript-types)).
28
+
19
29
  ## Usage
20
30
 
21
31
  ```ts
22
32
  // vitest.config.ts
33
+ import { defineConfig } from 'vitest/config';
34
+
23
35
  export default defineConfig({
24
36
  test: {
25
37
  environment: 'webgpu-node',
@@ -30,9 +42,8 @@ export default defineConfig({
30
42
 
31
43
  ### TypeScript types
32
44
 
33
- The package selects WebGPU declarations for your compiler version. TypeScript 5 receives the bundled
34
- `@webgpu/types` dependency; TypeScript 6 and later use WebGPU declarations from their DOM library. Include
35
- the DOM library and keep `skipLibCheck` disabled to catch declaration conflicts:
45
+ Requires TypeScript 6 or later, whose DOM library declares the WebGPU API. Include the DOM library in
46
+ `lib` (a project without it can add `@webgpu/types` to `types` instead):
36
47
 
37
48
  ```json
38
49
  {
@@ -56,6 +67,20 @@ it('runs a compute shader', async () => {
56
67
  `dawnOptions` are passed straight to Dawn: `backend=<null|d3d11|d3d12|metal|vulkan|opengl|opengles>`,
57
68
  `adapter=<name>`, `enable-dawn-features=...`, `disable-dawn-features=...`.
58
69
 
70
+ ## Linux and CI
71
+
72
+ Dawn needs Vulkan. On a Linux box or CI runner without a real GPU, install Mesa's software Vulkan
73
+ driver (lavapipe) and force software rendering:
74
+
75
+ ```sh
76
+ sudo apt-get update && sudo apt-get install -y libegl1 libgles2 libgl1-mesa-dri mesa-vulkan-drivers
77
+ export LIBGL_ALWAYS_SOFTWARE=1
78
+ ```
79
+
80
+ This repo's own [CI workflow](../../.github/workflows/ci.yml) does exactly this, so WebGPU tests run
81
+ for real (not mocked) on `ubuntu-latest` on every PR. macOS runners use Dawn's Metal backend and need no
82
+ extra setup.
83
+
59
84
  ## Canvas
60
85
 
61
86
  Dawn has no `<canvas>`, so the environment ships a headless one whose `getContext('webgpu')` returns a
@@ -88,3 +113,11 @@ Created by [Ben Houston](https://ben3d.ca) and sponsored by [Land of Assets](htt
88
113
  ## License
89
114
 
90
115
  MIT
116
+
117
+ [npm-badge]: https://img.shields.io/npm/v/vitest-environment-webgpu-node.svg
118
+ [npm-url]: https://www.npmjs.com/package/vitest-environment-webgpu-node
119
+ [downloads-badge]: https://img.shields.io/npm/dm/vitest-environment-webgpu-node.svg
120
+ [tests-badge]: https://github.com/bhouston/vitest-gpu/actions/workflows/ci.yml/badge.svg
121
+ [tests-url]: https://github.com/bhouston/vitest-gpu/actions/workflows/ci.yml
122
+ [discord-badge]: https://img.shields.io/badge/Discord-Join%20Chat-5865F2?logo=discord&logoColor=white
123
+ [discord-url]: https://discord.gg/fwupDN493R
package/dist/index.d.ts CHANGED
@@ -6,7 +6,6 @@ export type WebgpuNodeOptions = {
6
6
  };
7
7
  declare const _default: {
8
8
  name: string;
9
- transformMode: "ssr";
10
9
  viteEnvironment: "ssr";
11
10
  setup(global: Record<string, unknown>, { webgpuNode }: {
12
11
  webgpuNode?: WebgpuNodeOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAElG,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;;;;;kBA0Cc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAuB;QAAE,UAAU,CAAC,EAAE,iBAAiB,CAAA;KAAE;2BA8BvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAElG,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;;;;kBAyCc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAAuB;QAAE,UAAU,CAAC,EAAE,iBAAiB,CAAA;KAAE;2BA8BvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC"}
package/dist/index.js CHANGED
@@ -35,7 +35,6 @@ const restore = (properties) => {
35
35
  };
36
36
  export default {
37
37
  name: 'webgpu-node',
38
- transformMode: 'ssr',
39
38
  viteEnvironment: 'ssr',
40
39
  setup(global, { webgpuNode = {} }) {
41
40
  const shims = { ...globals, ...domShims() };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vitest-environment-webgpu-node",
3
- "version": "1.0.2",
3
+ "version": "2.0.1",
4
4
  "description": "Vitest environment that provides real headless WebGPU (Dawn via the webgpu package) in Node",
5
5
  "keywords": [
6
6
  "dawn",
@@ -22,7 +22,6 @@
22
22
  "directory": "packages/vitest-environment-webgpu-node"
23
23
  },
24
24
  "files": [
25
- "legacy.d.ts",
26
25
  "dist/**/*.js",
27
26
  "dist/**/*.js.map",
28
27
  "dist/**/*.d.ts",
@@ -36,7 +35,6 @@
36
35
  "types": "./dist/index.d.ts",
37
36
  "exports": {
38
37
  ".": {
39
- "types@<6.0": "./legacy.d.ts",
40
38
  "types": "./dist/index.d.ts",
41
39
  "import": "./dist/index.js"
42
40
  }
@@ -49,12 +47,17 @@
49
47
  "tsc": "tsc"
50
48
  },
51
49
  "dependencies": {
52
- "@webgpu/types": "^0.1.72",
53
50
  "webgpu": "^0.6.1"
54
51
  },
55
52
  "peerDependencies": {
53
+ "typescript": ">=6",
56
54
  "vitest": ">=3 <5"
57
55
  },
56
+ "peerDependenciesMeta": {
57
+ "typescript": {
58
+ "optional": true
59
+ }
60
+ },
58
61
  "engines": {
59
62
  "node": ">=20.0.0"
60
63
  }
package/src/index.ts CHANGED
@@ -48,7 +48,6 @@ const restore = (properties: SavedProperty[]): void => {
48
48
 
49
49
  export default {
50
50
  name: 'webgpu-node',
51
- transformMode: 'ssr',
52
51
  viteEnvironment: 'ssr',
53
52
  setup(global: Record<string, unknown>, { webgpuNode = {} }: { webgpuNode?: WebgpuNodeOptions }) {
54
53
  const shims = { ...globals, ...domShims() } as Record<string, unknown>;
package/legacy.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /** WebGPU declarations for TypeScript versions whose DOM library predates the WebGPU API. */
2
- /// <reference types="@webgpu/types" />
3
-
4
- export { default } from './dist/index.js';
5
- export * from './dist/index.js';