Skip to content

jcto/anyfs

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Portable file system for Node

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%