Skip to content

Zip/unzip files of any size in the browser using streams.

License

Notifications You must be signed in to change notification settings

get-net/conflux

 
 

Repository files navigation

Conflux by Transcend

Conflux64

Fork of conflux which unfortunately lacked support for zip64. Build and read zip files with whatwg streams in the browser. Now in zip64 format.

/ˈkänˌfləks/ (noun) a flowing together of two or more streams



Build Status Known Vulnerabilities Code Coverage


Blazing Fast

  • ~100 kB import
  • Uses streams, minimizing memory overhead

Compatibility

Chrome
Safari
Edge
Firefox

Issues

Some archivers, i.e. File-roller and Ark on Linux have problems reading archives created in conflux64. Yet, the majority of tested archivers have no problems reading the archives and report no issues. Since use case scenarios for this fork were pretty limited as well as time. Therefore, I left these issues unaddressed at the moment.

Examples

Usage

Importing Conflux

Package Manager

# With Yarn
yarn add conflux64

# With NPM
npm install --save conflux64
import { Reader, Writer } from 'conflux64';

CDN

<script src="https://cdn.jsdelivr.net/npm/@transcend-io/conflux@3"></script>
const { Reader, Writer } = window.conflux;

Writing a ZIP

import { Writer } from 'conflux64';

import streamSaver from "streamsaver";

// Set up conflux
const { readable, writable } = new Writer();
const writer = writable.getWriter();

// Set up streamsaver
const fileStream = streamSaver.createWriteStream("conflux.zip");

// Add a file
writer.write({
  name: "/cat.txt",
  lastModified: new Date(0),
  stream: () => new Response("mjau").body
});

readable.pipeTo(fileStream);

writer.close();

Incorporating other streams

import { Writer } from 'conflux64';

const { readable, writable } = new Writer();
const writer = writable.getWriter();
const reader = readable.getReader();

(async () => {
  writer.write({
    name: "/cat.txt",
    lastModified: new Date(0),
    stream: () => new Response("mjau").body
  });

  const imgStream = await fetch(
    "https://s3-us-west-2.amazonaws.com/bencmbrook/Earth.jpg"
  ).then(r => r.body);

  writer.write({
    name: "/Earth.jpg",
    lastModified: new Date(0),
    stream: () => imgStream
  });

  readable.pipeTo(fileStream);

  writer.close();
})();

Reading ZIP files

import { Reader } from 'conflux64';

fetch("https://cdn.jsdelivr.net/gh/Stuk/jszip/test/ref/deflate.zip").then(
  async res => {
    const zip = await res.blob();
    for await (const entry of Reader(zip)) {
      console.log(entry);
    }
  }
);

License

FOSSA Status

About

Zip/unzip files of any size in the browser using streams.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 98.7%
  • HTML 1.3%