@react-native-windows/fs
TypeScript icon, indicating that this package has built-in type declarations

0.74.0 • Public • Published

@react-native-windows/fs

@react-native-windows/fs is a minimal-dependency drop-in replacement to fs with changes for resiliency, promises, and convenience. It has several opinionated changes, targeted towards CLI applications handling JavaScript-oriented files.

Usage Thumbnail

Async Usage (Default)

@react-native-windows/fs exposes a Promise-based API, mostly matching that of fs.promises, with several methods added extra methods.

// import {promises as fs} from 'fs'
import fs from '@react-native-windows/fs';

const fileContent = await fs.readFile('foo.txt');

Sync Usage

@react-native-windows/fs exports all fs.*Sync Where an async version has a graceful implementation, and the synchronous version does not, the method is marked as deprecated.

// import fs from 'fs'
import fs from '@react-native-windows/fs';

const fileContent = fs.readFileSync('foo.txt');

Extra Methods

exists

NodeJS deprecated fs.exists, and removed fs.promises.exists. The recommendation is to instead acquire a lock to the file via fs.open for the duration of file-use. One-shot existence checks are still useful, and because fs.existsSyncis not deprecated, more likely means usage of blocking synchronous APIs.

import fs from '@react-native-windows/fs';

const fooExists = await fs.exists('foo.txt');

readJsonFile and readJsonFileSync

@react-native-windows/fs provides convenience methods to handle JSON files. The following methods are added:

Method Return type
readJsonFile<T> Promise<T> or Promise<Record<string, unknown>>
readJsonFileSync<T> T or Record<string, unknown>
import fs from '@react-native-windows/fs';

// foo is type: Record<string, unknown> by default
const foo = await fs.readJsonFile('foo.json');

// foo is type: FooProps
type FooProps = { name: string, version: string };
const foo = await fs.readJsonFile<FooProps>('foo.json');

Resiliency

@react-native-windows/fs uses graceful-fs to gracefully handle transient filesystem conditions, at the cost of extra latency. This includes transient EPERM, EACCESS, EMFILE, ENFILE. This can be important when handling files that a subject to antivirus, which may temporarily lock mutation of files on Windows.

eslint

We reccomend adding the following rules to your eslint config if you would like to use @react-native-windows/fs everywhere:

module.exports = {
  rules: {
    'no-restricted-imports': [
      'error', {
        name: 'fs',
        message: 'Please use `@react-native-windows/fs` instead of `fs`'
      }
    ],
  }
}

Readme

Keywords

none

Package Sidebar

Install

npm i @react-native-windows/fs

Weekly Downloads

25,023

Version

0.74.0

License

MIT

Unpacked Size

169 kB

Total Files

12

Last publish

Collaborators

  • acoates
  • microsoft1es
  • dannyvv
  • rnbot