From 4786b05f462149b8759a0ab6d16d738a5d644f44 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sat, 28 Jun 2025 12:46:01 +0200 Subject: [PATCH 1/2] feat: Allow `unknown` module type --- src/wasm.rs | 31 ++++++++++++++++++++++++++++--- tests/wasm/tests.mjs | 6 +++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/wasm.rs b/src/wasm.rs index 43ebdd4..de32630 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -3,6 +3,32 @@ use std::path::PathBuf; use swc::config::IsModule; use wasm_bindgen::prelude::*; +#[cfg_attr( + feature = "serde", + derive(serde::Serialize, serde::Deserialize), + serde(rename_all = "lowercase") +)] +#[cfg_attr( + feature = "wasm", + derive(tsify::Tsify), + tsify(into_wasm_abi, from_wasm_abi) +)] +pub enum ModuleType { + ESM, + CJS, + Unknown, +} + +impl From for IsModule { + fn from(value: ModuleType) -> Self { + match value { + ModuleType::ESM => IsModule::Bool(true), + ModuleType::CJS => IsModule::Bool(false), + ModuleType::Unknown => IsModule::Unknown, + } + } +} + #[wasm_bindgen] pub struct InstrumentationMatcher(Instrumentor); @@ -33,10 +59,9 @@ pub struct Transformer(InstrumentationVisitor); #[wasm_bindgen] impl Transformer { #[wasm_bindgen] - pub fn transform(&mut self, contents: &str, is_module: bool) -> Result { - let is_module = IsModule::Bool(is_module); + pub fn transform(&mut self, contents: &str, is_module: ModuleType) -> Result { self.0 - .transform(contents, is_module) + .transform(contents, is_module.into()) .map_err(|e| JsError::new(&e.to_string())) } } diff --git a/tests/wasm/tests.mjs b/tests/wasm/tests.mjs index 773d522..fedb719 100644 --- a/tests/wasm/tests.mjs +++ b/tests/wasm/tests.mjs @@ -29,13 +29,13 @@ const matchedTransforms = instrumentor.getTransformer( assert.ok(matchedTransforms); const original = await fs.readFile(path.join(import.meta.dirname, './testdata/original.mjs')) -const output = matchedTransforms.transform(original.toString('utf8'), true); +const output = matchedTransforms.transform(original.toString('utf8'), 'unknown'); const expected = await fs.readFile(path.join(import.meta.dirname, './testdata/expected.mjs')) assert.strictEqual(output, expected.toString('utf8')); const originalCjs = await fs.readFile(path.join(import.meta.dirname, './testdata/original-cjs.js')) -const outputCjs = matchedTransforms.transform(originalCjs.toString('utf8'), false); +const outputCjs = matchedTransforms.transform(originalCjs.toString('utf8'), 'unknown'); const expectedCjs = await fs.readFile(path.join(import.meta.dirname, './testdata/expected-cjs.js')) @@ -44,5 +44,5 @@ assert.strictEqual(outputCjs, expectedCjs.toString('utf8')); const noMatch = await fs.readFile(path.join(import.meta.dirname, './testdata/no-match.mjs')); assert.throws(() => { - matchedTransforms.transform(noMatch.toString('utf8'), true); + matchedTransforms.transform(noMatch.toString('utf8'), 'unknown'); }, { message: "Failed to find injection points for: [\"constructor\", \"fetch\"]" }); From 2ffdb27f23dd9aac71b6216066687ae9447b23d4 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Mon, 30 Jun 2025 17:48:29 +0100 Subject: [PATCH 2/2] Test esm and cjs too --- tests/wasm/tests.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/wasm/tests.mjs b/tests/wasm/tests.mjs index fedb719..53ff8cd 100644 --- a/tests/wasm/tests.mjs +++ b/tests/wasm/tests.mjs @@ -29,13 +29,13 @@ const matchedTransforms = instrumentor.getTransformer( assert.ok(matchedTransforms); const original = await fs.readFile(path.join(import.meta.dirname, './testdata/original.mjs')) -const output = matchedTransforms.transform(original.toString('utf8'), 'unknown'); +const output = matchedTransforms.transform(original.toString('utf8'), 'esm'); const expected = await fs.readFile(path.join(import.meta.dirname, './testdata/expected.mjs')) assert.strictEqual(output, expected.toString('utf8')); const originalCjs = await fs.readFile(path.join(import.meta.dirname, './testdata/original-cjs.js')) -const outputCjs = matchedTransforms.transform(originalCjs.toString('utf8'), 'unknown'); +const outputCjs = matchedTransforms.transform(originalCjs.toString('utf8'), 'cjs'); const expectedCjs = await fs.readFile(path.join(import.meta.dirname, './testdata/expected-cjs.js'))