New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@wasmer/wasm-transformer

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wasmer/wasm-transformer

Library to run transformations on WebAssembly binaries. 🦀♻️

latest
Source
npmnpm
Version
0.12.0
Version published
Weekly downloads
219
-46.72%
Maintainers
1
Weekly downloads
 
Created
Source

wasm-transformer

Library to run transformations on WebAssembly binaries. 🦀♻️

Documentation for Wasmer-JS Stack can be found on the Wasmer Docs.

This README covers the instructions for installing, using, and contributing to the wasm-transformer Javascript package. The wasm_transformer Rust crate is available here.

Table of Contents

Features

This project depends on wasmparser, and the wasm-pack workflow. Huge shoutout to them! 🙏

  • Runs transformations on Wasm binaries to modify the actual code that gets run, and introduces new features (such as introducing trampoline functions for i64 WASI imports). ✨

  • Installable on both crates.io, and npm! 📦

  • The project builds with wasm-pack. Thus, you can use this library in a Javascript library, to modify WebAssembly Binaries, with WebAssembly. 🤯

  • Super fast! Can run the lower_i64_imports transformations on my 2018 MackBook Pro, with the Chrome Devtools 6x CPU slowdown in ~ 1 second. ⚡

Installation

npm install --save @wasmer/wasm-transformer

Quick Start

For a larger example, see the wasm-terminal package.

Node

const wasmTransformer = require("@wasmer/wasm-transformer");

// Read in the input Wasm file
const wasmBuffer = fs.readFileSync("./my-wasm-file.wasm");

// Transform the binary
const wasmBinary = new Uint8Array(wasmBuffer);
const loweredBinary = wasmTransformer.lowerI64Imports(wasmBinary);

// Do something with loweredBinary

Browser

import { lowerI64Imports } from "@wasmer/wasm-transformer";

const fetchAndTransformWasmBinary = async () => {
  // Get the original Wasm binary
  const fetchedOriginalWasmBinary = await fetch("/original-wasm-module.wasm");
  const originalWasmBinaryBuffer = await fetchedOriginalWasmBinary.arrayBuffer();
  const originalWasmBinary = new Uint8Array(originalWasmBinaryBuffer);

  // Transform the binary, by running the lower_i64_imports from the wasm-transformer
  const transformedBinary = await lowerI64Imports(originalWasmBinary);

  // Compile the transformed binary
  const transformedWasmModule = await WebAssembly.compile(transformedBinary);
  return transformedWasmModule;
};

Reference API

The Reference API Documentation can be found on the @wasmer/wasm-transformer Reference API Wasmer Docs.

Contributing

Guidelines

This project follows the all-contributors specification.

Contributions of any kind are welcome! 👍

Building the project

To get started using the project:

  • Set up the wasm_transformer rust crate

  • Install the latest LTS version of Node.js (which includes npm and npx). An easy way to do so is with nvm. (Mac and Linux: here, Windows: here).

  • npm run build.

FAQs

Package last updated on 16 Sep 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts