# example.js ```javascript import { get, set, getNumber } from "./magic.js"; // accessing memory console.log(get()); set(42); console.log(get()); set(123); console.log(get()); // random numbers console.log(getNumber()); console.log(getNumber()); console.log(getNumber()); ``` # magic.js ```javascript // reexporting export * from "./magic.wat"; ``` # magic.wat ```wat (module (type $t0 (func (result i32))) (type $t1 (func (param i32))) (import "./memory.js" "memory" (memory 1)) (import "./magic-number.js" "getRandomNumber" (func $getRandomNumber (type $t0))) (func $get (export "get") (type $t0) (result i32) (i32.load (i32.const 0))) (func $set (export "set") (type $t1) (param $p i32) (i32.store (i32.const 0) (get_local $p))) (func $get (export "getNumber") (type $t0) (result i32) (call $getRandomNumber)) ) ``` # magic-number.js ```javascript export function getNumber() { return 42; } export function getRandomNumber() { return Math.floor(Math.random() * 256); } ``` # memory.js ```javascript async function getMemoryFromParentInWorker() { await new Promise(r => setTimeout(r, 200)); // fake return new WebAssembly.Memory({ initial: 1 }); } export const memory = await getMemoryFromParentInWorker(); ``` # dist/output.js ```javascript /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ([ /* 0 */ /*!********************!*\ !*** ./example.js ***! \********************/ /*! namespace exports */ /*! exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, module, __webpack_require__.a, __webpack_require__.* */ /***/ ((module, __webpack_exports__, __webpack_require__) => { __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { __webpack_require__.r(__webpack_exports__); /* harmony import */ var _magic_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./magic.js */ 1); var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_magic_js__WEBPACK_IMPORTED_MODULE_0__]); var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__); _magic_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0]; // accessing memory console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.get)()); (0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.set)(42); console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.get)()); (0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.set)(123); console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.get)()); // random numbers console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.getNumber)()); console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.getNumber)()); console.log((0,_magic_js__WEBPACK_IMPORTED_MODULE_0__.getNumber)()); __webpack_async_result__(); } catch(e) { __webpack_async_result__(e); } }); /***/ }), /* 1 */ /*!******************!*\ !*** ./magic.js ***! \******************/ /*! namespace exports */ /*! export get [provided] [no usage info] [missing usage info prevents renaming] -> ./magic.wat .get */ /*! export getNumber [provided] [no usage info] [missing usage info prevents renaming] -> ./magic.wat .getNumber */ /*! export set [provided] [no usage info] [missing usage info prevents renaming] -> ./magic.wat .set */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_exports__, __webpack_require__.d, __webpack_require__.r, module, __webpack_require__.a, __webpack_require__.* */ /***/ ((module, __webpack_exports__, __webpack_require__) => { __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ get: () => (/* reexport safe */ _magic_wat__WEBPACK_IMPORTED_MODULE_0__.get), /* harmony export */ getNumber: () => (/* reexport safe */ _magic_wat__WEBPACK_IMPORTED_MODULE_0__.getNumber), /* harmony export */ set: () => (/* reexport safe */ _magic_wat__WEBPACK_IMPORTED_MODULE_0__.set) /* harmony export */ }); /* harmony import */ var _magic_wat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./magic.wat */ 2); var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_magic_wat__WEBPACK_IMPORTED_MODULE_0__]); var __webpack_async_dependencies_result__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__); _magic_wat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_async_dependencies_result__[0]; // reexporting __webpack_async_result__(); } catch(e) { __webpack_async_result__(e); } }); /***/ }), /* 2 */ /*!*******************!*\ !*** ./magic.wat ***! \*******************/ /*! namespace exports */ /*! export get [provided] [no usage info] [provision prevents renaming (no use info)] */ /*! export getNumber [provided] [no usage info] [provision prevents renaming (no use info)] */ /*! export set [provided] [no usage info] [provision prevents renaming (no use info)] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: module, module.id, __webpack_exports__, __webpack_require__.v, __webpack_require__, __webpack_require__.a, __webpack_require__.* */ /***/ ((module, exports, __webpack_require__) => { var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => { return __webpack_require__.v(exports, module.id, "daa529a2a650ee3943a9", { "./memory.js": { "memory": WEBPACK_IMPORTED_MODULE_0.memory }, "./magic-number.js": { "getRandomNumber": WEBPACK_IMPORTED_MODULE_1.getRandomNumber } }); } __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { /* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./memory.js */ 3); /* harmony import */ var WEBPACK_IMPORTED_MODULE_1 = __webpack_require__(/*! ./magic-number.js */ 4); var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]); var [WEBPACK_IMPORTED_MODULE_0] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__; await __webpack_require__.v(exports, module.id, "daa529a2a650ee3943a9", { "./memory.js": { "memory": WEBPACK_IMPORTED_MODULE_0.memory }, "./magic-number.js": { "getRandomNumber": WEBPACK_IMPORTED_MODULE_1.getRandomNumber } }); __webpack_async_result__(); } catch(e) { __webpack_async_result__(e); } }, 1); /***/ }), /* 3 */ /*!*******************!*\ !*** ./memory.js ***! \*******************/ /*! namespace exports */ /*! export memory [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__.r, __webpack_exports__, module, __webpack_require__.a, __webpack_require__.d, __webpack_require__.* */ /***/ ((module, __webpack_exports__, __webpack_require__) => { __webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ memory: () => (/* binding */ memory) /* harmony export */ }); async function getMemoryFromParentInWorker() { await new Promise(r => setTimeout(r, 200)); // fake return new WebAssembly.Memory({ initial: 1 }); } const memory = await getMemoryFromParentInWorker(); __webpack_async_result__(); } catch(e) { __webpack_async_result__(e); } }, 1); /***/ }), /* 4 */ /*!*************************!*\ !*** ./magic-number.js ***! \*************************/ /*! namespace exports */ /*! export getNumber [provided] [no usage info] [missing usage info prevents renaming] */ /*! export getRandomNumber [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getNumber: () => (/* binding */ getNumber), /* harmony export */ getRandomNumber: () => (/* binding */ getRandomNumber) /* harmony export */ }); function getNumber() { return 42; } function getRandomNumber() { return Math.floor(Math.random() * 256); } /***/ }) /******/ ]); ```
/* webpack runtime code */ ``` js /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Check if module exists (development only) /******/ if (__webpack_modules__[moduleId] === undefined) { /******/ var e = new Error("Cannot find module '" + moduleId + "'"); /******/ e.code = 'MODULE_NOT_FOUND'; /******/ throw e; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/async module */ /******/ (() => { /******/ var hasSymbol = typeof Symbol === "function"; /******/ var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__"; /******/ var webpackExports = hasSymbol ? Symbol("webpack exports") : "__webpack_exports__"; /******/ var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__"; /******/ /******/ var resolveQueue = (queue) => { /******/ if(queue && queue.d < 1) { /******/ queue.d = 1; /******/ queue.forEach((fn) => (fn.r--)); /******/ queue.forEach((fn) => (fn.r-- ? fn.r++ : fn())); /******/ } /******/ } /******/ var wrapDeps = (deps) => (deps.map((dep) => { /******/ if(dep !== null && typeof dep === "object") { /******/ /******/ if(dep[webpackQueues]) return dep; /******/ if(dep.then) { /******/ var queue = []; /******/ queue.d = 0; /******/ dep.then((r) => { /******/ obj[webpackExports] = r; /******/ resolveQueue(queue); /******/ }, (e) => { /******/ obj[webpackError] = e; /******/ resolveQueue(queue); /******/ }); /******/ var obj = {}; /******/ /******/ obj[webpackQueues] = (fn) => (fn(queue)); /******/ return obj; /******/ } /******/ } /******/ var ret = {}; /******/ ret[webpackQueues] = x => {}; /******/ ret[webpackExports] = dep; /******/ return ret; /******/ })); /******/ __webpack_require__.a = (module, body, hasAwait) => { /******/ var queue; /******/ hasAwait && ((queue = []).d = -1); /******/ var depQueues = new Set(); /******/ var exports = module.exports; /******/ var currentDeps; /******/ var outerResolve; /******/ var reject; /******/ var promise = new Promise((resolve, rej) => { /******/ reject = rej; /******/ outerResolve = resolve; /******/ }); /******/ promise[webpackExports] = exports; /******/ promise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise["catch"](x => {})); /******/ module.exports = promise; /******/ var handle = (deps) => { /******/ currentDeps = wrapDeps(deps); /******/ var fn; /******/ var getResult = () => (currentDeps.map((d) => { /******/ /******/ if(d[webpackError]) throw d[webpackError]; /******/ return d[webpackExports]; /******/ })) /******/ var promise = new Promise((resolve) => { /******/ fn = () => (resolve(getResult)); /******/ fn.r = 0; /******/ var fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))); /******/ currentDeps.map((dep) => (dep[webpackQueues](fnQueue))); /******/ }); /******/ return fn.r ? promise : getResult(); /******/ } /******/ var done = (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)) /******/ body(handle, done); /******/ queue && queue.d < 0 && (queue.d = 0); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/wasm loading */ /******/ (() => { /******/ __webpack_require__.v = (exports, wasmModuleId, wasmModuleHash, importsObj) => { /******/ /******/ var req = fetch(__webpack_require__.p + "" + wasmModuleHash + ".module.wasm"); /******/ var fallback = () => (req /******/ .then((x) => (x.arrayBuffer())) /******/ .then((bytes) => (WebAssembly.instantiate(bytes, importsObj))) /******/ .then((res) => (Object.assign(exports, res.instance.exports)))); /******/ return req.then((res) => { /******/ if (typeof WebAssembly.instantiateStreaming === "function") { /******/ /******/ return WebAssembly.instantiateStreaming(res, importsObj) /******/ .then( /******/ (res) => (Object.assign(exports, res.instance.exports)), /******/ (e) => { /******/ if(res.headers.get("Content-Type") !== "application/wasm") { /******/ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); /******/ return fallback(); /******/ } /******/ throw e; /******/ } /******/ ); /******/ } /******/ return fallback(); /******/ }); /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/publicPath */ /******/ (() => { /******/ __webpack_require__.p = "dist/"; /******/ })(); /******/ /************************************************************************/ ```
``` js /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module used 'module' so it can't be inlined /******/ var __webpack_exports__ = __webpack_require__(0); /******/ /******/ })() ; ``` # Info ## Unoptimized ``` asset output.js 14.4 KiB [emitted] (name: main) asset daa529a2a650ee3943a9.module.wasm 139 bytes [emitted] [immutable] (auxiliary name: main) chunk (runtime: main) output.js (main) 696 bytes (javascript) 139 bytes (webassembly) 3.72 KiB (runtime) [entry] [rendered] > ./example.js main runtime modules 3.72 KiB 6 modules dependent modules 449 bytes (javascript) 139 bytes (webassembly) [dependent] 4 modules ./example.js 247 bytes [built] [code generated] [no exports] [used exports unknown] entry ./example.js main webpack X.X.X compiled successfully ``` ## Production mode ``` asset output.js 2.71 KiB [emitted] [minimized] (name: main) asset 03b5e050bc920dbbb73e.module.wasm 139 bytes [emitted] [immutable] (auxiliary name: main) chunk (runtime: main) output.js (main) 696 bytes (javascript) 139 bytes (webassembly) 3.45 KiB (runtime) [entry] [rendered] > ./example.js main runtime modules 3.45 KiB 5 modules dependent modules 449 bytes (javascript) 139 bytes (webassembly) [dependent] 4 modules ./example.js 247 bytes [built] [code generated] [no exports] [no exports used] entry ./example.js main webpack X.X.X compiled successfully ```