anyfs

Portable file system for Node

17
6
JavaScript

anyfs

npm
npm
Travis
npm

AnyFS is a portable filesystem abstraction for Node. It aims to provide a
consistent API for different file systems.

WARNING: AnyFS is under heavy development, things may change at any time!
a

Features

  • Extensible with plugins
  • Super portable with file system adapters
  • Works well with Gulp (vinyl-fs plugin)
  • API with Promise support

Adapters

AnyFS comes with following adapters.

  • Dropbox - NPM: anyfs-dropbox-adapter
  • FTP - NPM: anyfs-ftp-adapter
  • AWS S3 - NPM: anyfs-s3-adapter
  • Memory - Builtin, access with AnyFS.MemoryAdapter
  • Local: local file system
  • SFTP
  • Baidu
  • GIT
  • SVN

Plugins

  • Core: builtin, basic filesystem support.
  • glob: match files easily.
  • vinyl-fs: vinyl-fs port, works well with gulp

Usage

var AnyFs = require('anyfs');
var FtpAdapter = require('anyfs-ftp-adapter');
var DropboxAdapter = require('anyfs-dropbox-adapter');
var VinylFsPlugin = require('anyfs-vinyl-fs-plugin');
AnyFS.addPlugin(new VinylFsPlugin());

var fs1 = new AnyFS(new FtpAdapter({
    server: 'ftp.example.com',
    username: 'user',
    password: 'password',
}));

var fs2 = new AnyFS(new DropboxAdapter({
    key: 'appkey',
    secret: 'appsecret',
    token: 'token',
}));

// Copy files across filesystems(requires the vinyl-fs plugin)
fs1.src('/**/*.jpg')
    .pipe(fs2.dest('/backup/abc/'));

// Promise style API
fs1.mkdir('/doc')
    .then(function() {
        return this.writeFile('/doc/index.md', "content");
    })
    .then(function() {
        return this.metadata('/doc/index.md');
    })
    .done(function(metadata) {
        console.log(metadata.size);
    }, function(err) {
        console.log('Error occured: ', err);
    });

// callback API
fs.mkdir('/doc', function(err) {
    if (err) {
        console.log(err);
    } else {
        console.log('mkdir ok');
    }
});

API

Core API

Following APIs are basic file system APIs.

constructor(adapter, options)

The constructor accepts an adapter and an options object.

Common options:

  • cwd: Current working directory.

metadata(path[, callback(error, metadata)])

Retrieves file and folder metadata.

Folder metadata:

{
    "name": "dir1",
    "time": [Date Object],
    "is_dir": true,
}

File metadata:

{
    "name": "file1.txt",
    "time": [Date Object],
    "is_dir": false,
    "size": 123,
    ...
}

If callback is not provided, a promise is returned.

list(path[, callback(error, list)])

Get contents of directory.

[
    {
        // metadata
    },
    ...
]

mkdir(path[, callback(error)])

Create directory recursively.

If callback is not provided, a promise is returned.

delete(path[, callback(error)])

Delete file.

If callback is not provided, a promise is returned.

deleteDir(path[, callback(error)])

Delete directory recursively.

If callback is not provided, a promise is returned.

move(oldPath, newPath[, callback(error)])

Move file or directory to a new place.

Parent folder of newPath is created automaticly.

If callback is not provided, a promise is returned.

writeFile(path, content[, options][, callback(error)])

Write file content, will try to create parent directory.

If callback is not provided, a promise is returned.

readFile(path[, options][, callback(error, data)])

Read file content.

If callback is not provided, a promise is returned.

createWriteStream(path[, options])

Create write stream.

createReadStream(path[, options])

Create read stream.

Extra API

Extra APIs are supported by plugins

Create Custom Adapters

See adapter specification

Create Plugins

Acknowledgement

Logo by denjello

Inspired by Flysystem