Giter VIP home page Giter VIP logo

compress's Introduction

compress

compress and uncompress for Deno

  • tar
  • deflate
  • gzip
  • tgz
  • zip

Useage

If you read and write files, need the following permissions

--allow-read --allow-write

tar

Deno v1.2.2+ required.(version >= v1.2.2)

if you use deno <= v1.2.1, you can use [email protected]. But there is a bug: the added folders have a wrong type "file".

The reason can be seen here:

denoland/deno#6905

defination

// deno >= v1.2.2
import { tar } from "https://deno.land/x/[email protected]/mod.ts";
// deno < v1.2.2
// import { tar } from "https://deno.land/x/[email protected]/mod.ts";
export interface compressInterface {
  excludeSrc?: boolean; // exclude src directory, default: include src directory
}
tar.compress(src, dest, options?: compressInterface): Promise<void>;
tar.uncompress(src, dest): Promise<void>;

exmaple

import { tar } from "https://deno.land/x/[email protected]/mod.ts";
// compress folder
await tar.compress("./test","./test.tar");
// compress folder, exclude src directory
await tar.compress("./test","./test.tar", { excludeSrc: true });
// compress file
await tar.compress("./test.txt","./test.tar");
// uncompress
await tar.uncompress("./test.tar","./dest");

deflate

This is a pure TypeScript implementation of deflate.

import { 
  deflate, 
  inflate, 
  /** Compress data using deflate, and do not append a zlib header. */
  deflateRaw, 
  inflateRaw
 } from "https://deno.land/x/[email protected]/mod.ts";
const str = "hello world!";
const bytes = new TextEncoder().encode(str);
// with zlib header
const compressed = deflate(bytes);
const decompressed = inflate(compressed);
// no zlib header
const compressed = deflateRaw(bytes);
const decompressed = inflateRaw(compressed);

gzip

defination

interface GzipOptions {
  level: number;
  timestamp?: number;
  name?: string;
}
gzip(bytes: Uint8Array, options?:GzipOptions): Uint8Array;
gunzip(bytes: Uint8Array): Uint8Array;
gzipFile(src: string, dest: string): Promise<void>;
gunzipFile(src: string, dest: string): Promise<void>;
class GzipStream {
  compress(src: string, dest: string): Promise<void>;
  uncompress(src: string, dest: string): Promise<void>;
  on(event: "progress", listener: (percent: string) => void): this;
}

exmaple

compress and uncompress file, only supports compressing and decompressing a single file

stream mode
used to read and write large files

import { GzipStream } from "https://deno.land/x/[email protected]/mod.ts";
const gzip = new GzipStream();
gzip.on("progress", (progress: string) => {
  console.log(progress); // 0.00% => 100.00%
});
await gzip.compress("./big.mkv", "./big.mkv.gz");
await gzip.uncompress("./big.mkv.gz", "./big.mkv");

no stream mode
loading all data into memory, so can't get progress event

import { gzipFile, gunzipFile } from "https://deno.land/x/[email protected]/mod.ts";
await gzipFile("./deno.txt", "./deno.txt.gz"); // stream
await gunzipFile("./deno.txt.gz", "./deno.txt");

gzip/gunzip string or bytes

This is a pure TypeScript implementation. Almost as fast as Rust implementation.

import { gzip, gunzip } from "https://deno.land/x/[email protected]/mod.ts";
// gzip
const bytes = new TextEncoder().encode("hello");
const compressed = gzip(bytes);
// gunzip
const decompressed = gunzip(compressed);

tgz

defination

import { tgz } from "https://deno.land/x/[email protected]/mod.ts";
interface compressInterface {
  excludeSrc?: boolean; // exclude src directory, default: include src directory
}
tgz.compress(src, dest, options?: compressInterface): Promise<void>;
tgz.uncompress(src, dest): Promise<void>;

exmaple

import { tgz } from "https://deno.land/x/[email protected]/mod.ts";
// compress folder
await tgz.compress("./test","./test.tar.gz");
// compress folder, exclude src directory
await tgz.compress("./test","./test.tar.gz", { excludeSrc: true });
// compress file
await tgz.compress("./test.txt","./test.tar.gz");
// uncompress 
await tgz.uncompress("./test.tar.gz","./dest");

zip

defination

import { zip } from "https://deno.land/x/[email protected]/mod.ts";
interface compressInterface {
  excludeSrc?: boolean; // exclude src directory, default: include src directory
}
zip.compress(src, dest, options?: compressInterface): Promise<void>;
zip.uncompress(src, dest): Promise<void>;

test

deno test --allow-read --allow-write

compress's People

Contributors

bidek56 avatar fuxingzhang avatar

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.