From 819090a3efe179665ddc699f524431095d76d912 Mon Sep 17 00:00:00 2001 From: Alexander Kachkaev Date: Sun, 1 Jan 2023 17:37:51 +0100 Subject: [PATCH] Support Wasm files that import JS resources (#13608) --- CHANGELOG.md | 1 + .../__snapshots__/nativeEsm.test.ts.snap | 2 +- .../__tests__/native-esm-wasm.test.js | 10 ++ e2e/native-esm/wasm-bindgen/index.js | 12 ++ e2e/native-esm/wasm-bindgen/index_bg.js | 141 ++++++++++++++++++ e2e/native-esm/wasm-bindgen/index_bg.wasm | Bin 0 -> 59838 bytes packages/jest-runtime/src/index.ts | 8 +- 7 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 e2e/native-esm/wasm-bindgen/index.js create mode 100644 e2e/native-esm/wasm-bindgen/index_bg.js create mode 100644 e2e/native-esm/wasm-bindgen/index_bg.wasm diff --git a/CHANGELOG.md b/CHANGELOG.md index f89c480e19c8..f32db97e7b63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - `[jest-environment-node]` fix non-configurable globals ([#13687](https://github.com/facebook/jest/pull/13687)) - `[@jest/expect-utils]` `toMatchObject` should handle `Symbol` properties ([#13639](https://github.com/facebook/jest/pull/13639)) - `[jest-resolve]` Add global paths to `require.resolve.paths` ([#13633](https://github.com/facebook/jest/pull/13633)) +- `[jest-runtime]` Support Wasm files that import JS resources ([#13608](https://github.com/facebook/jest/pull/13608)) - `[jest-snapshot]` Make sure to import `babel` outside of the sandbox ([#13694](https://github.com/facebook/jest/pull/13694)) ### Chore & Maintenance diff --git a/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap b/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap index 9d3fd2c87ec8..e711c1a45c02 100644 --- a/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap +++ b/e2e/__tests__/__snapshots__/nativeEsm.test.ts.snap @@ -10,7 +10,7 @@ Ran all test suites matching /native-esm-deep-cjs-reexport.test.js/i." exports[`runs WebAssembly (Wasm) test with native ESM 1`] = ` "Test Suites: 1 passed, 1 total -Tests: 5 passed, 5 total +Tests: 6 passed, 6 total Snapshots: 0 total Time: <> Ran all test suites matching /native-esm-wasm.test.js/i." diff --git a/e2e/native-esm/__tests__/native-esm-wasm.test.js b/e2e/native-esm/__tests__/native-esm-wasm.test.js index a48d6628eeff..fddc1d2f08f9 100644 --- a/e2e/native-esm/__tests__/native-esm-wasm.test.js +++ b/e2e/native-esm/__tests__/native-esm-wasm.test.js @@ -6,6 +6,7 @@ */ import {readFileSync} from 'node:fs'; +import {jest} from '@jest/globals'; // file origin: https://github.com/mdn/webassembly-examples/blob/2f2163287f86fe29deb162335bccca7d5d95ca4f/understanding-text-format/add.wasm // source code: https://github.com/mdn/webassembly-examples/blob/2f2163287f86fe29deb162335bccca7d5d95ca4f/understanding-text-format/add.was import {add} from '../add.wasm'; @@ -54,3 +55,12 @@ test('imports from "data:application/wasm" URI with invalid encoding fail', asyn import('data:application/wasm;charset=utf-8,oops'), ).rejects.toThrow('Invalid data URI encoding: charset=utf-8'); }); + +test('supports wasm files that import js resources (wasm-bindgen)', async () => { + globalThis.alert = jest.fn(); + + const {greet} = await import('../wasm-bindgen/index.js'); + greet('World'); + + expect(globalThis.alert).toHaveBeenCalledWith('Hello, World!'); +}); diff --git a/e2e/native-esm/wasm-bindgen/index.js b/e2e/native-esm/wasm-bindgen/index.js new file mode 100644 index 000000000000..1eec684e23fb --- /dev/null +++ b/e2e/native-esm/wasm-bindgen/index.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// folder source: https://github.com/rustwasm/wasm-bindgen/tree/4f865308afbe8d2463968457711ad356bae63b71/examples/hello_world +// docs: https://rustwasm.github.io/docs/wasm-bindgen/examples/hello-world.html + +import * as wasm from './index_bg.wasm'; +export * from './index_bg.js'; diff --git a/e2e/native-esm/wasm-bindgen/index_bg.js b/e2e/native-esm/wasm-bindgen/index_bg.js new file mode 100644 index 000000000000..a194a2f5fb2c --- /dev/null +++ b/e2e/native-esm/wasm-bindgen/index_bg.js @@ -0,0 +1,141 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import * as wasm from './index_bg.wasm'; + +const lTextDecoder = + typeof TextDecoder === 'undefined' + ? (0, module.require)('util').TextDecoder + : TextDecoder; + +const cachedTextDecoder = new lTextDecoder('utf-8', { + fatal: true, + ignoreBOM: true, +}); + +cachedTextDecoder.decode(); + +let cachedUint8Memory0 = new Uint8Array(); + +function getUint8Memory0() { + if (cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +function logError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const error = (function () { + try { + return e instanceof Error + ? `${e.message}\n\nStack:\n${e.stack}` + : e.toString(); + } catch (_) { + return ''; + } + })(); + console.error( + 'wasm-bindgen: imported JS function that was not marked as `catch` threw an error:', + error, + ); + throw e; + } +} + +let WASM_VECTOR_LEN = 0; + +const lTextEncoder = + typeof TextEncoder === 'undefined' + ? (0, module.require)('util').TextEncoder + : TextEncoder; + +const cachedTextEncoder = new lTextEncoder('utf-8'); + +const encodeString = + typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); + } + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length, + }; + }; + +function passStringToWasm0(arg, malloc, realloc) { + if (typeof arg !== 'string') throw new Error('expected a string argument'); + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0() + .subarray(ptr, ptr + buf.length) + .set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7f) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, (len = offset + arg.length * 3)); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + if (ret.read !== arg.length) throw new Error('failed to pass whole string'); + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} +/** + * @param {string} name + */ +export function greet(name) { + const ptr0 = passStringToWasm0( + name, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.greet(ptr0, len0); +} + +export function __wbg_alert_9ea5a791b0d4c7a3() { + return logError((arg0, arg1) => { + // eslint-disable-next-line no-undef + alert(getStringFromWasm0(arg0, arg1)); + }, arguments); +} + +export function __wbindgen_throw(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +} diff --git a/e2e/native-esm/wasm-bindgen/index_bg.wasm b/e2e/native-esm/wasm-bindgen/index_bg.wasm new file mode 100644 index 0000000000000000000000000000000000000000..e545fdfd14d352f0612be501c397c367013def38 GIT binary patch literal 59838 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 NPhl0nivUHZ{|gw(GKl~H literal 0 HcmV?d00001 diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index b9250afcd3bd..21bf82700fdf 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -1715,9 +1715,13 @@ export default class Runtime { const moduleLookup: Record = {}; for (const {module} of imports) { if (moduleLookup[module] === undefined) { - moduleLookup[module] = await this.loadEsmModule( - await this.resolveModule(module, identifier, context), + const resolvedModule = await this.resolveModule( + module, + identifier, + context, ); + + moduleLookup[module] = await this.linkAndEvaluateModule(resolvedModule); } }