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
- ~100 kB import
- Uses streams, minimizing memory overhead
Chrome | ✅ |
Safari | ✅ |
Edge | ✅ |
Firefox | ✅ |
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.
# With Yarn
yarn add conflux64
# With NPM
npm install --save conflux64
import { Reader, Writer } from 'conflux64';
<script src="https://cdn.jsdelivr.net/npm/@transcend-io/conflux@3"></script>
const { Reader, Writer } = window.conflux;
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();
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();
})();
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);
}
}
);