Code Monkey home page Code Monkey logo

foras's Introduction

Foras

WebAssembly port of Deflate, Gzip, and Zlib compression algorithms

DEPRECATED: You should use native Compression Streams instead

npm i @hazae41/foras

Node Package ๐Ÿ“ฆ โ€ข Deno Module ๐Ÿฆ– โ€ข Next.js CodeSandbox ๐Ÿชฃ

Algorithms

  • Deflate from flate2
  • Gzip from flate2
  • Zlib from flate2

Features

  • Reproducible building
  • Pre-bundled and streamed
  • Zero-copy memory slices

Usage

Direct

import { Foras, deflate, inflate } from "@hazae41/foras";
// or { Foras, gzip, gunzip }
// or { Foras, zlib, unzlib }

// Wait for WASM to load
await Foras.initBundledOnce()

const bytes = new TextEncoder().encode("Hello world")

const compressed = deflate(bytes).copyAndDispose()
const decompressed = inflate(compressed).copyAndDispose()

Streaming

import { Foras, DeflateEncoder, DeflateDecoder } from "@hazae41/foras";
// or { Foras, GzEncoder, GzDecoder }
// or { Foras, ZlibEncoder, ZlibDecoder }

// Wait for WASM to load
await Foras.initBundledOnce()

const bytes = new TextEncoder().encode("Hello world")

const compresser = new DeflateEncoder()
compresser.write(bytes)
compresser.flush()

const compressed1 = compresser.read().copyAndDispose()
const compressed2 = compresser.finish().copyAndDispose()

compresser.free()

Building

Unreproducible building

You need to install Rust

Then, install wasm-pack

cargo install wasm-pack

Finally, do a clean install and build

npm ci && npm run build

Reproducible building

You can build the exact same bytecode using Docker, just be sure you're on a linux/amd64 host

docker compose up --build

Then check that all the files are the same using git status

git status --porcelain

If the output is empty then the bytecode is the same as the one I commited

Automated checks

Each time I commit to the repository, the GitHub's CI does the following:

  • Clone the repository
  • Reproduce the build using docker compose up --build
  • Throw an error if the git status --porcelain output is not empty

Each time I release a new version tag on GitHub, the GitHub's CI does the following:

  • Clone the repository
  • Do not reproduce the build, as it's already checked by the task above
  • Throw an error if there is a npm diff between the cloned repository and the same version tag on NPM

If a version is present on NPM but not on GitHub, do not use!

foras's People

Contributors

djdeveloperr avatar hazae41 avatar mocoso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

foras's Issues

Critical error using tests

Steps to reproduce:

deno cache -r https://deno.land/x/denoflate/test.ts
deno run --allow-net https://deno.land/x/denoflate/test.ts

Console:

error: Uncaught TypeError: WebAssembly.compile(): Argument 0 must be a buffer source

Deno version:

deno 1.3.2
v8 8.6.334
typescript 4.0.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.