0.0.6 • Published 5 years ago

@esmbly/transformer-wasm v0.0.6

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

@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.

OptionDescriptionTypeAsc 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 belowObject
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;
}
OptionDescriptionType
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.