Skip to content

thisconnect/fildes

Repository files navigation

fildes

NPM Version MIT

Provides native promises for all file system methods involving file descriptors (FD), basically manages fs.open for you.

file descriptor (FD, less frequently fildes)

en.wikipedia.org/wiki/File_descriptor

Build Status Build Status Build Status Coverage Status Dependencies

Usage

fildes always return a new Promise!

const { write } = require('fildes');

write('./path/to/file.txt', 'The quick green fix')
  .then(() => console.log('done!'))
  .catch(console.error);

Why?

  • I needed an API that returns Promises
  • provides smart defaults i.e. suitable flags for open, read and write, see fildes/issues/1
  • creates a directories if flag is w, w+, a or a+
  • open is optional and useful for keeping the fd for multiple operations
  • uses no magic
  • some very popular node modules use fs.exists() which is deprecated…

fs.exists() should not be used to check if a file exists before calling fs.open(). Doing so introduces a race condition since other processes may change the file's state between the two calls. Instead, user code should call fs.open() directly and handle the error raised if the file is non-existent.

fs.exists Stability: 0 - Deprecated (Node.js v5.1.0 File System API)

Bad (NOT RECOMMENDED)
fs.exists('myfile', (exists) => {
  if (exists) {
    console.error('myfile already exists');
  } else {
    fs.open('myfile', 'wx', (err, fd) => {
      if (err) throw err;
      fs.write(fd, 'Hello', callback);
    });
  }
});
Good (RECOMMENDED)
fs.open('myfile', 'wx', (err, fd) => {
  if (err) {
    if (err.code === 'EEXIST') {
      console.error('myfile already exists');
      return;
    }

    throw err;
  }

  fs.write(fd, 'Hello', callback);
});
Using fildes
const { open, write, close } = require('fildes');

open('myfile', { flag: 'wx' })
  .then(fd => {
    return write(fd, 'Hello')
    .then(() => close(fd));
  })
  .catch(console.error);

This is the same as:

const { write } = require('fildes');

write('myfile', 'Hello', { flag: 'wx' })
  .catch(console.error);

Install

npm i --save fildes

fildes with support for Node.js 4.x can be found here https://github.com/thisconnect/fildes/tree/v1.x

API

Examples

About

Magicless helps working with file descriptors

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •