Skip to content

hpcc-systems/hpcc-js-wasm

Folders and files

NameName
Last commit message
Last commit date
Mar 13, 2025
Aug 30, 2024
Mar 13, 2025
Aug 30, 2024
Aug 6, 2024
Mar 13, 2025
Aug 21, 2022
Mar 13, 2025
Dec 30, 2022
Aug 30, 2024
Aug 5, 2024
Jan 22, 2025
Dec 30, 2022
Jul 8, 2022
Sep 29, 2024
Dec 10, 2024
Dec 10, 2024
Mar 13, 2025
Aug 30, 2024
Jan 18, 2021
Mar 13, 2025
Dec 30, 2022
Aug 12, 2024
Dec 10, 2024
Jan 12, 2023
Jan 12, 2023
Jan 12, 2023
Aug 15, 2024
Aug 15, 2024
Aug 12, 2024
Mar 13, 2025
Mar 13, 2025
Aug 14, 2024
Nov 7, 2022
Aug 12, 2024
Sep 29, 2024
Aug 13, 2024
Aug 30, 2024
Sep 10, 2024
Jul 8, 2022
Aug 30, 2024
Sep 29, 2024

Repository files navigation

@hpcc-js/wasm - Version 3

Test PR release-please Coverage Status

This repository contains a collection of useful c++ libraries compiled to WASM for (re)use in Node JS, Web Browsers and JavaScript Libraries:

Built with:

Homepage and Documents

Version 3 Changes

Converted this repository to a monorepo with the following packages:

  • @hpcc-js/wasm-base91
  • @hpcc-js/wasm-duckdb
  • @hpcc-js/wasm-expat
  • @hpcc-js/wasm-graphviz
  • @hpcc-js/wasm-graphviz-cli
  • @hpcc-js/wasm-zstd
  • @hpcc-js/wasm (meta package for backward compatibility)

Quick Start

import { Base91 } from "@hpcc-js/wasm-base91";
import { Graphviz } from "@hpcc-js/wasm-graphviz";
import { Zstd } from "@hpcc-js/wasm-zstd";

// Graphviz  ---
async function dot2svg() {
    const graphviz = await Graphviz.load();
    console.log("svg:  ", graphviz.dot('digraph G { Hello -> World }'));
}

dot2svg();

// Base91 + Zstd ---
const text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi.  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi.";
const data = new TextEncoder().encode(text);

async function compressDecompress() {
    const zstd = await Zstd.load();
    const compressed_data = zstd.compress(data);
    const base91 = await Base91.load();
    const base91Str = base91.encode(compressed_data);

    const compressed_data2 = base91.decode(base91Str);
    const data2 = zstd.decompress(compressed_data2);
    const text2 = new TextDecoder().decode(data2);

    console.log("Text Length:  ", text.length);
    console.log("Compressed Length:  ", compressed_data.length);
    console.log("Base91 Length:  ", base91Str.length);
    console.log("Passed:  ", text === text2);
}

compressDecompress();

Quick Migration from v1

v1.x.x

import { graphviz, wasmFolder } from "@hpcc-js/wasm";

wasmFolder("https://cdn.jsdelivr.net/npm/@hpcc-js/wasm/dist");

const dot = "digraph G { Hello -> World }";

graphviz.dot(dot).then(svg => {
    const div = document.getElementById("placeholder");
    div.innerHTML = svg;    
});

graphvizVersion.then(version => console.log(version));

v2.x.x

import { Graphviz } from "@hpcc-js/wasm";

const dot = "digraph G { Hello -> World }";

Graphviz.load().then(graphviz => {
    const svg = graphviz.dot(dot);
    const div = document.getElementById("placeholder");
    div.innerHTML = svg;    

    console.log(graphviz.version());
});

Notes:

  • wasmFolder is no longer needed
  • All wasm libraries have the same asynchronous load pattern
    • const instance = await <Wasm>.load();

v3.x.x

import { Graphviz } from "@hpcc-js/wasm-graphviz";

const dot = "digraph G { Hello -> World }";

Graphviz.load().then(graphviz => {
    const svg = graphviz.dot(dot);
    const div = document.getElementById("placeholder");
    div.innerHTML = svg;    

    console.log(graphviz.version());
});

Build Instructions

The following instructions are for building the entire repository from scratch. In general the instructions assume you are running from within a bash terminal.

  • Windows (With WSL2 and Git Bash installed)
  • Linux (native or WSL2)
  • MacOS
  • Docker

Pre-requisites

To get an idea of what pre-requisites are required, please see the following files:

Steps (Docker)

git clone https://github.com/hpcc-systems/hpcc-js-wasm.git
cd hpcc-js-wasm
npm ci
npm run build-docker

Steps (Windows, Linux, MacOS)

git clone https://github.com/hpcc-systems/hpcc-js-wasm.git
cd hpcc-js-wasm
npm ci
npm run install-build-deps
npm run build