New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

diff-zip

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

diff-zip

This module creates and applies differences/patches between two folders.

1.0.1
latest
Source
npm
Version published
Maintainers
1
Created
Source

dif-zipp

This module creates and applies differences/patches between two folders.

Raison d'etre

Although the module can't create diffs cross-platform, yet (Windows support is missing, see below) it can apply them cross-platform.

This means that this is a useful tool when building update-patches for desktop applications (think Electron, NW) etc. Because:

  • The end user does not have to have git (or even an unzipper) installed.
  • Diffs/patches can be easily downloaded and applied in a "user data" - folder, omitting the need to rebuild a binary on updates.

Inner workings

The module works by

  • Creating diffs

    • Identifying the differences using the Linux/Mac command "diff". (So it won't work on Windows. We might fix Windows-compatability in the future by using the FC command.)
    • Analyzing the output of the diff, thus sorting files and folders into three categories (add, change and remove).
    • Creating a manifest file with the differences.
    • Zipping the manifest file together with the files/folders that are additions and changes.
  • Applying diffs

    • Unzipping a "diff-zip".
    • Reading the manifest file.
    • Applying the changes to a folder.

Installation

npm install diff-zip

Then, in your program, require diff-zip:

const DiffZip = require('diff-zip')

Creating diffs

Choose any two folders or two different commits in a git repository.

If you choose a git repository you can run any commands (build scripts etc) on the folders before creating a diff.

Diffing between two folders

await DiffZip.create (
  'path to zip file to be created',
  
  'path to folder A (initial state)',
   // null: for empty initial state
  
  'path to folderB (final state)',
  
  // OPTIONAL
  
  true 
  // for verbose logging
  // default: false
)

Diffing between two commits in a git repository

await DiffZip.repoDiff (
  'path to temporary working dir',
  
  'path to git repo (ssh path)',

  'path to zip file to be created',
  
  'commitHash for initial state',
  
  // OPTIONAL
  
  'commitHash for final state',
  // default: head
  
  ['command1', 'command2' etc]
  // commands to apply on both folders
  // default: ['npm install --production']
  
  true,
  // remove temporary folder when done
  // default: true

  true 
  // for verbose logging
  // default: false
)

Applying diffs

Choose a folder to apply the diff to and decide if you want to apply it directly to the folder or to a copy of the folder.

await DiffZip.apply(
  'path to zip file to apply as diff',

  'path to folder to apply the diff to',

  // OPTIONAL

  'path to copy of folder to be created',
  // set this if you want the diff to be applied
  // to a copy of the folder instead of to the original folder

  true 
  // for verbose logging
  // default: false
)

FAQs

Package last updated on 24 Mar 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts