diff --git a/src/bindings/js.ts b/src/bindings/js.ts index 52f0e6d08d..68c4bbd3a5 100644 --- a/src/bindings/js.ts +++ b/src/bindings/js.ts @@ -864,6 +864,12 @@ export class JSBuilder extends ExportsWalker { if (this.esm) { sb.push("export const {\n "); + if (this.program.options.exportMemory) { + sb.push("memory,\n "); + } + if (this.program.options.exportTable) { + sb.push("table,\n "); + } for (let i = 0, k = exports.length; i < k; ++i) { if (i > 0) sb.push(",\n "); sb.push(exports[i]); diff --git a/src/bindings/tsd.ts b/src/bindings/tsd.ts index ffab273e0b..6eafb57908 100644 --- a/src/bindings/tsd.ts +++ b/src/bindings/tsd.ts @@ -186,6 +186,18 @@ export class TSDBuilder extends ExportsWalker { sb.push("declare namespace __AdaptedExports {\n"); ++this.indentLevel; } + if (this.program.options.exportMemory) { + indent(sb, this.indentLevel); + sb.push("/** Exported memory */\n"); + indent(sb, this.indentLevel); + sb.push(`export ${this.esm ? "declare " : ""}const memory: WebAssembly.Memory;\n`); + } + if (this.program.options.exportTable) { + indent(sb, this.indentLevel); + sb.push("/** Exported table */\n"); + indent(sb, this.indentLevel); + sb.push(`export ${this.esm ? "declare " : ""}const table: WebAssembly.Table;\n`); + } this.walk(); if (!this.esm) { --this.indentLevel; diff --git a/tests/compiler/bindings/esm.debug.d.ts b/tests/compiler/bindings/esm.debug.d.ts index a9d795fee1..b23f4d687d 100644 --- a/tests/compiler/bindings/esm.debug.d.ts +++ b/tests/compiler/bindings/esm.debug.d.ts @@ -1,3 +1,5 @@ +/** Exported memory */ +export declare const memory: WebAssembly.Memory; /** bindings/esm/plainGlobal */ export declare const plainGlobal: { /** @type `i32` */ diff --git a/tests/compiler/bindings/esm.debug.js b/tests/compiler/bindings/esm.debug.js index ad6cfd1467..2ed8899ad1 100644 --- a/tests/compiler/bindings/esm.debug.js +++ b/tests/compiler/bindings/esm.debug.js @@ -352,6 +352,7 @@ async function instantiate(module, imports = {}) { return adaptedExports; } export const { + memory, plainGlobal, plainMutableGlobal, stringGlobal, diff --git a/tests/compiler/bindings/esm.release.d.ts b/tests/compiler/bindings/esm.release.d.ts index a9d795fee1..b23f4d687d 100644 --- a/tests/compiler/bindings/esm.release.d.ts +++ b/tests/compiler/bindings/esm.release.d.ts @@ -1,3 +1,5 @@ +/** Exported memory */ +export declare const memory: WebAssembly.Memory; /** bindings/esm/plainGlobal */ export declare const plainGlobal: { /** @type `i32` */ diff --git a/tests/compiler/bindings/esm.release.js b/tests/compiler/bindings/esm.release.js index f2b51c2895..0904cae7e7 100644 --- a/tests/compiler/bindings/esm.release.js +++ b/tests/compiler/bindings/esm.release.js @@ -352,6 +352,7 @@ async function instantiate(module, imports = {}) { return adaptedExports; } export const { + memory, plainGlobal, plainMutableGlobal, stringGlobal, diff --git a/tests/compiler/bindings/raw.debug.d.ts b/tests/compiler/bindings/raw.debug.d.ts index 14bc6d53ec..5ad9b47785 100644 --- a/tests/compiler/bindings/raw.debug.d.ts +++ b/tests/compiler/bindings/raw.debug.d.ts @@ -1,4 +1,6 @@ declare namespace __AdaptedExports { + /** Exported memory */ + export const memory: WebAssembly.Memory; /** bindings/esm/plainGlobal */ export const plainGlobal: { /** @type `i32` */ diff --git a/tests/compiler/bindings/raw.release.d.ts b/tests/compiler/bindings/raw.release.d.ts index 14bc6d53ec..5ad9b47785 100644 --- a/tests/compiler/bindings/raw.release.d.ts +++ b/tests/compiler/bindings/raw.release.d.ts @@ -1,4 +1,6 @@ declare namespace __AdaptedExports { + /** Exported memory */ + export const memory: WebAssembly.Memory; /** bindings/esm/plainGlobal */ export const plainGlobal: { /** @type `i32` */