@esmbly/transformer-wasm
TypeScript icon, indicating that this package has built-in type declarations

0.0.6 • Public • Published

@esmbly/transformer-wasm

Transform TypeScript programs to WebAssembly, Wat, Asm.js and AssemblyScript. The @esmbly/transformer-wasm can be used directly on TypeScript files, or chained together with other transformers that generates TypeScript output.

Installation

# Using Yarn:
yarn add @esmbly/transformer-wasm

# Or, using NPM:
npm install @esmbly/transformer-wasm --save

Getting Started

Check out Using the WebAssembly transformer for a step-by-step guide on how to get started with @esmbly/transformer-wasm and the command-line interface.

Try

Try it out in the Esmbly version of WebAssembly Studio!

Usage

The @esmbly/transformer-wasm transforms TypeScript programs to WebAssembly, Wat, Asm.js and AssemblyScript. In order to use it, make sure you have @esmbly/cli installed.

The following Esmbly configuration will transform the file add.js located in the src directory, first to TypeScript using @esmbly/transformer-jsdoc, and then to WebAssembly and Wat using @esmbly/transformer-wasm. Two output formats are specified, which will output add.wat and add.wasm to the dist directory.

// esmbly.config.js

const JSDoc = require('@esmbly/transformer-jsdoc');
const Wasm = require('@esmbly/transformer-wasm');

module.exports = {
  input: ['./src/add.js'],
  transformers: [
    JSDoc.createTransformer(),
    Wasm.createTransformer(),
  ],
  output: [
    {
      format: '.wat',
      outFile: path.join(__dirname, 'dist', 'add.wat'),
    },
    {
      format: '.wasm',
      outFile: path.join(__dirname, 'dist', 'add.wasm'),
    },
  ],
};

Configuration

The createTransformer() method accepts an optional configuration object (see the WasmTransformerOptions interface). Under the hood, @esmbly/transformer-wasm uses the AssemblyScript compiler to output WebAssembly, Wat and Asm.js. The following configuration options correspond to the specified asc flags.

Option Description Type Asc flag
optimize (optional) Optimizes the module. string --optimize
optimizeLevel (optional) How much to focus on optimizing code. [0-3]. number --optimizeLevel
shrinkLevel (optional) How much to focus on shrinking code size. [0-2, s=1, z=2]. number --shrinkLevel
validate (optional) Validates the module using Binaryen. Exits if invalid. boolean -validate
use (optional) Aliases a global object under another name, e.g., to switch the default 'Math' implementation used: ['Math=JSMath']. string[] --use
memory (optional) See Memory options below Object
customRules (optional) An object containing any custom rules which should be applied (existing rules can be overridden). Check out the custom-rule example for further details. CustomRules

Memory options

For further details about memory layout and management, have a look at the AssemblyScript Wiki.

{ 
  import: boolean;
  export: boolean;
  allocator: string;
}
Option Description Type
import (optional) Imports the memory instance provided by the embedder. (asc flag: --importMemory) boolean
export (optional) Exports memory by injecting export { memory }; to the top of the TypeScript files before running asc. boolean
allocator (optional) Imports the specified allocator by injecting an import statement to the top of the TypeScript files before running asc. Ex: import "allocator/tlsf"; string

Examples

Contributing

All types of contributions are very much welcome. Check out our Contributing Guide for instructions on how to get started.

Package Sidebar

Install

npm i @esmbly/transformer-wasm

Weekly Downloads

2

Version

0.0.6

License

MIT

Unpacked Size

1.84 MB

Total Files

50

Last publish

Collaborators

  • ollelauribostrom