3.1.6 • Published 4 months ago

zip-a-folder v3.1.6

Weekly downloads
21,426
License
MIT
Repository
github
Last release
4 months ago

NPM

CircleCI Coverage Status Known Vulnerabilities

zip-a-folder

Easy to use zip (or tar) a complete folder or a list of globs plain into a zip/tar/tgz file including compression ratio handling and custom write streams.

incompatible changes

  • Version 2 adds glob lists handling as a src. So please be aware that using globs intentionally breaks up the "create-a-zip/tar-file-from-a-folder" approach.
  • Version 3 adds the possibility to zip-a-folder to be usable either in commonjs or esm module environments.
  • Version 3.1 adds the possibility to specify target folder within a zip file. By default the structure within a zip file doesn't contain the src folder, but the files and folder underneath.

Basic Usage

Install via npm

npm install zip-a-folder

Creating a ZIP file

import { zip } from 'zip-a-folder';

class TestMe {

    static async main() {
        await zip('/path/to/the/folder', '/path/to/archive.zip');
    }
}

TestMe.main();

Creating a gzipped TAR file

import { tar } from 'zip-a-folder';

class TestMe {

    static async main() {
        await tar('/path/to/the/folder', '/path/to/archive.tgz');
    }
}

TestMe.main();

Compression handling

For the sake of easy use, supported compression levels are (by now): COMPRESSION_LEVEL.high, COMPRESSION_LEVEL.medium or COMPRESSION_LEVEL.uncompressed.

The default compression - level is high.

import { zip, COMPRESSION_LEVEL } from 'zip-a-folder';

class TestMe {

    static async main() {
        await zip('/path/to/the/folder', '/path/to/archive.zip', {compression: COMPRESSION_LEVEL.high});
    }
}

TestMe.main();

Custom writeStreams

You can now pipe output to any WriteStream (just pass WriteStream as a parameter).

To keep the existing api stable the 2nd parameter (targetFilePath) can now be either undefined or an empty string.

ATTENTION: customWriteStream is not checked. So it is up to the user to check on non-existing target folders or if the targetfolder equals to the sourcefolder (ending up in circularity).

import { zip, COMPRESSION_LEVEL } from 'zip-a-folder';
import { fs } from 'fs';

class TestMe {
    static async main() {
        const customWS = fs.createWriteStream('test/1234.zip');
        await zipafolder.zip(path.resolve(__dirname, 'data/'), undefined, {customWriteStream: customWS});    
    }
}

TestMe.main();

Glob handling

The first parameter can be either a path or a glob. Globs are separated by comma.

import {zip} from 'zip-a-folder';

class TestMe {

    static async main() {
        // zip all json into an archive
        await zip('**/*.json', '/path/to/archive.zip');
        // zip all json AND txt files into a second archive
        await zip('**/*.json, **/*.txt', '/path/to/archive2.zip');
    }
}

TestMe.main();

Destination path handling (>=3.1.x)

With passing a destination path to zip-a-folder options object you can define the target folder structure within the generated zip.

import {zip} from 'zip-a-folder';

class TestMe {

    static async main() {
        // zip all json into an archive
        await zip('data/', '/path/to/archive.zip', {destPath: 'data/'});
    }
}

TestMe.main();

Tests

Tests can be found in /test and run by jest. To run the tests call npm test.

Thanks

  • Special thanks to @sole for her initial work.
  • Thanks to YOONBYEONGIN
  • Thanks to Wunschik
  • Thanks to ratbeard
  • Thanks to Xotabu4
  • Thanks to dallenbaldwin
  • Thanks to wiralegawa
  • Thanks to karan-gaur
  • Thanks to malthe
@microsoft/teamsfx-core@poolminer/bjspm@lrfmedia/lrfmedia_climy-app-common-codcodestore-cli@daysmart/frankenstack-clifrankenstack-clirocketcloudcatalysis-clipublish-cdk-assets@everything-registry/sub-chunk-3233@kasif-apps/plugin-compileryarle-evernote-to-mdyoui-project-graphwbdlwebgme-taxonomyweb_auto_codeceptjswp-plugin-helperwincc-cliterractsk-js@fowapps/fow-clizip-quasar-buildvoroniyx-dbtoolsuniform_structure_filevkma-alpha@hisorange/housekeeper@hanakla/cep-app-scripts@haravan/clitamnt-imagetangle-cli-alphatangle-cli-testzeta-quick@gveditor/sdkreport-type-sorterring-ucs-toolbeltring-websites-toolbeltrevery-packagersadaivsci-rest-clientscorm-multi-sco-manifestsce-generate-reposimple-typescript-startersimple-zip-uploadsmart-console-interactionsspurtcartspdkspoodev-clisrn-clistitch-cli-toolsussdk@owlworks/composer-extension-bot-publish@orseki/gcloud-samplexkite-core@fm2/sdk@glueit/learn-infrastructure@greenwood/plugin-adapter-netlify@nesvet/conveyer@punks/ci@sap/generator-adaptation-project-deployment@redcup/vk-mini-cli@vkontakte/vk-miniapps-deploy@wyswill/wys_cli@vpa-h5/shared@studiokloek/vite-config@studenfy/clienvpack@kupihao/mongo-connection@mendix/pluggable-widgets-toolsdynamicsmobiledynamicsmobile-clieasy-backupereasy-backups@thanhvo-cse/dev-env@the-point-ai/point_ext_cli@unified-ux/cli@virtual-beans/editor@sportsdigita/ddcomponents-cli@spurtcommerce/cli@sap/abap-deploy@sap/adp-common@redoute/deploy@0xengine/xmlrpcfx-corefx-core-csfirebase-backup-collectionsfow-command-line@zion-cli/publishfalak@aaneto/lambda-ts-cli@abcnews/shrink-rayfloxt-upload-distfilegergcloud-sampleanalysis-sdm@atomist/sdm-pack-drift@atomist/sdm-pack-aspectghosler-cliggb-toolsapi.server.lib
3.1.6

4 months ago

3.1.5

5 months ago

1.1.7

11 months ago

1.1.6

11 months ago

2.0.2

8 months ago

2.0.1

8 months ago

2.0.0

11 months ago

3.1.3

7 months ago

3.1.2

7 months ago

3.1.1

7 months ago

3.1.0

7 months ago

3.0.0

7 months ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.1

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.0

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.1.0

3 years ago

0.0.12

4 years ago

0.0.11

4 years ago

0.0.10

4 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

6 years ago

0.0.5

6 years ago