thisconnect / fildes

Magicless helps working with file descriptors
MIT License
8 stars 1 forks source link
filesystem fs promise

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?

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