Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Stream everything, from/to everywhere
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
tests
.gitignore
.travis.yml
README.md
package.json

README.md

Build Status

Every-Stream -- Bi-directional DSN-based streams

The aim of this module is to provide a very simple API to move content from/to a lot of different file systems. In a not-so-far future you would be able to write this:

// Copy from Amazon S3 to your Dropbox
Stream('s3://amazon.com/path/to/file').pipe(Stream('dropbox://user:key@dropbox.com/path/to/file'))

Install

# Using NPM
npm install every-stream

Or from source:

# Install from sources...
git clone git://github.com/naholyr/node-every-stream.git every-stream
cd every-stream
npm link

# ...Then in your project
npm link every-stream

You can run unit tests:

# From your project where every-stream has been installed as a module
npm test every-stream

# Or directly from every-stream
npm test

Usage

Every-Stream is by design a simple bi-directional stream wrapper. The smart thing is the usage of DSN to define paths and use the proper driver.

var Stream = require('every-stream');

// Generic description of a source/destination
// The following stream can be readable and/or writable,
// depending on the driver and the way it's used
var stream = Stream('protocol://user:password@host/path')

// Example: copy "./file.txt" to a FTP server:
Stream('./file.txt').pipe(Stream('ftp://user:password@host/path/to/file.txt'))

Drivers

file

DSN: file:///path/to/file or directly /path/to/file

This is strictly equivalent to fs.createReadStream() and/or fs.createWriteStream().

Sample:

// cat
Stream('./file.txt').pipe(process.stdout)

dir

DSN: dir:///path/to/directory

This is a read-only driver, and it will emit filenames contained in the specified folder. This driver is equivalent to using fs.readdir().

Sample:

// ls
Stream('dir://' + path.resolve('.')).pipe(process.stdout)

ftp

DSN: ftp://user:password@host/path

This driver is read-only in current version. I'm working on a full implementation to allow read-write with no issues. Further versions could enable "list" command when path ends with a trailing slash.

Sample:

var FTPFile = Stream('ftp://user:password@server/path/to/file.txt')
// Download the file
FTPFile.pipe(Stream('./file.txt.bak'))

Roadmap

  • Add fake stream implementations in driver module (already used in FTP driver)
  • More documentation about advanced options
  • More documentation about custom drivers
  • New drivers
    • SFTP
    • HTTP (will be readonly, probably based on @mikael 's request)
    • WebDav
    • Dropbox (and any other easy-to-use storage service)
    • Twitter (hey, why not streaming tweets super-simply with this API ;))
    • Put your wish here
  • Some ad in the newsgroup :)
Something went wrong with that request. Please try again.