Skip to content

Commit 3f25683

Browse files
feat: wasm text format and import support (vercel/turborepo#5636)
1 parent 53cff8e commit 3f25683

File tree

20 files changed

+749
-239
lines changed

20 files changed

+749
-239
lines changed

crates/turbopack-ecmascript/src/chunk/item.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use crate::{
2424
};
2525

2626
#[turbo_tasks::value(shared)]
27-
#[derive(Default)]
27+
#[derive(Default, Clone)]
2828
pub struct EcmascriptChunkItemContent {
2929
pub inner_code: Rope,
3030
pub source_map: Option<Vc<ParseResultSourceMap>>,

crates/turbopack-ecmascript/src/references/esm/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pub use self::{
1111
base::EsmAssetReference,
1212
binding::EsmBinding,
1313
dynamic::EsmAsyncAssetReference,
14-
export::EsmExports,
14+
export::{EsmExport, EsmExports},
1515
meta::{ImportMetaBinding, ImportMetaRef},
1616
module_item::EsmModuleItem,
1717
url::UrlAssetReference,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Adapted from webpack
2+
https://github.com/webpack/webpack/blob/6be4065ade1e252c1d8dcba4af0f43e32af1bdc1/examples/wasm-complex/README.md
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
describe("complex wasm", () => {
2+
it("should be possible to use imported memory", async () => {
3+
// magic.js is an async module, so we import it inside this function to make sure the entrypoint isn't async.
4+
const { get, set } = await import("./magic.js");
5+
6+
set(42);
7+
expect(get()).toEqual(42);
8+
set(123);
9+
expect(get()).toEqual(123);
10+
});
11+
12+
it("should be possible to use imported functions", async () => {
13+
// magic.js is an async module, so we import it inside this function to make sure the entrypoint isn't async.
14+
const { getNumber } = await import("./magic.js");
15+
16+
// random numbers
17+
expect(getNumber()).toBeGreaterThanOrEqual(0);
18+
expect(getNumber()).toBeGreaterThanOrEqual(0);
19+
});
20+
})
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function getNumber() {
2+
return 42;
3+
}
4+
5+
export function getRandomNumber() {
6+
return Math.floor(Math.random() * 256);
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// reexporting
2+
export * from "./magic.wat";
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
(module
2+
(type $t0 (func (result i32)))
3+
(type $t1 (func (param i32)))
4+
(import "./memory.js" "memory" (memory 1))
5+
(import "./magic-number.js" "getRandomNumber" (func $getRandomNumber (type $t0)))
6+
(func $get (export "get") (type $t0) (result i32)
7+
(i32.load
8+
(i32.const 0)))
9+
(func $set (export "set") (type $t1) (param $p i32)
10+
(i32.store
11+
(i32.const 0)
12+
(get_local $p)))
13+
(func $getNumber (export "getNumber") (type $t0) (result i32)
14+
(call $getRandomNumber))
15+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
async function getMemoryFromParentInWorker() {
2+
await new Promise(r => setTimeout(r, 200));
3+
// fake
4+
return new WebAssembly.Memory({ initial: 1 });
5+
}
6+
7+
export const memory = await getMemoryFromParentInWorker();

crates/turbopack-tests/tests/execution/turbopack/wasm/simple/input/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
it("should handle wasm imports", async () => {
2-
// math.js is an async module, so we import it in here
2+
// magic.js is an async module, so we import it inside this function to make sure the entrypoint isn't async.
33
const {
44
add,
55
factorial,

crates/turbopack-wasm/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ bench = false
1212
[dependencies]
1313
anyhow = { workspace = true }
1414
indexmap = { workspace = true }
15-
15+
indoc = { workspace = true }
16+
serde = { workspace = true }
1617
turbo-tasks = { workspace = true }
1718
turbo-tasks-fs = { workspace = true }
1819
turbo-tasks-hash = { workspace = true }
1920
turbopack-core = { workspace = true }
20-
turbopack-css = { workspace = true }
2121
turbopack-ecmascript = { workspace = true }
22-
23-
serde = { workspace = true }
22+
wasmparser = "0.110.0"
23+
wat = "1.0.69"
2424

2525
[build-dependencies]
2626
turbo-tasks-build = { workspace = true }

0 commit comments

Comments
 (0)