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 +2 -2
- package/README.md +37 -4
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +7 -4
- package/src/index.ts +0 -1
- package/legacy.d.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
## [vitest-environment-webgpu-node-
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
|
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
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAkB,MAAM,aAAa,CAAC;AAQlG,oHAAoH;AACpH,MAAM,qBAAqB,GAAG,CAAC,QAAgC,EAAkB,EAAE,CACjF,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAE5D,MAAM,QAAQ,GAAG,GAA4B,EAAE;IAC7C,MAAM,MAAM,GAAG;QACb,gBAAgB,EAAE,CAAC;QACnB,qBAAqB;QACrB,oBAAoB,EAAE,YAAY;QAClC,gBAAgB,KAAI,CAAC;QACrB,mBAAmB,KAAI,CAAC;KACzB,CAAC;IACF,OAAO;QACL,iBAAiB,EAAE,cAAc;QACjC,QAAQ,EAAE;YACR,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,eAAe,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,gBAAgB,KAAI,CAAC;YACrB,mBAAmB,KAAI,CAAC;SACzB;QACD,MAAM;QACN,IAAI,EAAE,MAAM;QACZ,qBAAqB;QACrB,oBAAoB,EAAE,YAAY;KACnC,CAAC;AACJ,CAAC,CAAC;AAIF,MAAM,OAAO,GAAG,CAAC,UAA2B,EAAQ,EAAE;IACpD,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;QAClE,IAAI,UAAU;YAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;;YAC1D,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC,CAAC;AAEF,eAAe;IACb,IAAI,EAAE,aAAa;IACnB,
|
|
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": "
|
|
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>;
|