Skip to content

Commit d914b37

Browse files
committed
feat: support [wasm_modules] for service-worker format workers
This lands support for `[wasm_modules]` as defined by cloudflare/wrangler-legacy#1677. wasm modules can be defined in service-worker format with configuration in wrangler.toml as - ``` [wasm_modules] MYWASM = "./path/to/my-wasm.wasm" ``` The module will then be available as the global `MYWASM` inside your code. Note that this ONLY makes sense in service-worker format workers (for now). (In the future, we MAY enable wasm module imports in service-worker format (i.e. `import MYWASM from './path/to/my-wasm.wasm'`) and global imports inside modules format workers.)
1 parent 14098af commit d914b37

File tree

19 files changed

+914
-20
lines changed

19 files changed

+914
-20
lines changed

.changeset/thick-cooks-leave.md

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
"wrangler": patch
3+
---
4+
5+
feat: support `[wasm_modules]` for service-worker format workers
6+
7+
This lands support for `[wasm_modules]` as defined by https://github.com/cloudflare/wrangler/pull/1677.
8+
9+
wasm modules can be defined in service-worker format with configuration in wrangler.toml as -
10+
11+
```
12+
[wasm_modules]
13+
MYWASM = "./path/to/my-wasm.wasm"
14+
```
15+
16+
The module will then be available as the global `MYWASM` inside your code. Note that this ONLY makes sense in service-worker format workers (for now).
17+
18+
(In the future, we MAY enable wasm module imports in service-worker format (i.e. `import MYWASM from './path/to/my-wasm.wasm'`) and global imports inside modules format workers.)

packages/example-wasm-app/README.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
## example-wasm-app
22

3-
This is a sample wasm worker. It was created by creating a [`workers-rs`](https://github.com/cloudflare/workers-rs) project, running a build, removing unneeded artifacts, and copying the output folder here. You can run this worker with `npx wrangler dev worker/shim.js` (or from the `wrangler` package directory with `npm start -- dev ../example-wasm-app/worker/shim.js`).
3+
There are 2 workers in this package. They were both created with a [`workers-rs`](https://github.com/cloudflare/workers-rs) project, running a build, removing unneeded artifacts, and copying the output folders.
4+
5+
The wasm file generated, `index_bg.wasm` is copied into `./worker`, and shared by the 2 workers. `./worker/module` contains a "modules" format worker and imports the wasm module as a regular es module, while `./worker/service-worker` contains a "service-worker" format worker and uses wrangler.toml to bind the wasm module as a global `MYWASM`. They're otherwise identical.
6+
7+
You can run the module worker with `npx wrangler dev worker/module/index.js` (or from the `wrangler` package directory with `npm start -- dev ../example-wasm-app/worker/module/index.js`).
8+
9+
You can run the service-worker worker with `npx wrangler dev worker/service-worker/index.js --config worker/service-worker/wrangler.toml` (or from the `wrangler` package directory with `npm start -- dev ../example-wasm-app/worker/service-worker/index.js --config ../example-wasm-app/worker/service-worker/wrangler.toml`).
-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"name": "example-wasm-app",
33
"version": "1.0.0",
4-
"module": "worker/shim.js",
54
"private": true
65
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as index_bg from "./index_bg.js";
2+
import _wasm from "../index_bg.wasm";
3+
4+
const _wasm_memory = new WebAssembly.Memory({ initial: 512 });
5+
let importsObject = {
6+
env: { memory: _wasm_memory },
7+
"./index_bg.js": index_bg,
8+
};
9+
10+
export default new WebAssembly.Instance(_wasm, importsObject).exports;

packages/example-wasm-app/worker/export_wasm.js renamed to packages/example-wasm-app/worker/service-worker/export_wasm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as index_bg from "./index_bg.js";
2-
import _wasm from "./index_bg.wasm";
2+
const _wasm = MYWASM;
33

44
const _wasm_memory = new WebAssembly.Memory({ initial: 512 });
55
let importsObject = {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import * as worker from "./index_bg.js";
2+
3+
addEventListener("fetch", (event) => {
4+
event.respondWith(worker.fetch(event.request));
5+
});

0 commit comments

Comments
 (0)