0.0.0-alpha.15 • Published 3 years ago

@primal/filesystem v0.0.0-alpha.15

Weekly downloads
454
License
MIT
Repository
-
Last release
3 years ago

In-memory file-system with Node's fs API.

Usage

Create instance of FileSystem FileSystem constructor can be initialized with Object that represents filesystem

  • '/Users/user/projects/my-project': 'true' -> isDirectory
  • '/Users/user/projects/my-project/file': object | Buffer | string -> isFile
const { FileSystem } = require('./packages/filesystem')

const myFileSystem = new FileSystem({
    '/Users/user/projects/my-project': 'true',
    '/Users/user/projects/my-project/file': Buffer.from('Dummy data'),
})

Create as many filesystem volumes as you need:

const { FileSystem } = require('./packages/filesystem')

const myFileSystem1 = new FileSystem({ '/foo': 'bar' })
const myFileSystem2 = new FileSystem({ '/foo': 'bar' })

Read & write files from/in FileSystem:

  • can write files in non-existing directories
const { FileSystem } = require('./packages/filesystem')
const myFileSystem = new FileSystem()

myFileSystem.writeFileSync(
    '/Users/user/projects/my-project/buffer',
    Buffer.from('TEST BUFFER')
)
myFileSystem.readFileSync('/Users/user/projects/my-project/buffer') //<Buffer 54 45 53 54 20 42 55 46 46 45 52>
myFileSystem.readFileSync('/Users/user/projects/my-project/buffer', 'utf-8') // TEST BUFFER

Read & write directories from/in FileSystem:

  • mkdirSync: creates directories ONLY in existent directories
  • if you want to create directory recursive use mkdirpSync
const { FileSystem } = require('./packages/filesystem')
const myFileSystem = new FileSystem()

myFileSystem.mkdirSync('/Users/user') // throws FileSystemError
myFileSystem.mkdirpSync('/Users/user')

myFileSystem.toJson() // { '/': 'true', Users: 'true', 'Users/user': 'true' }

Deleting directory

  • statSync(path).isDirectory() returns true/false
  • statSync(path).isFile() returns true/false
  • if rmdirSync(path) path doesn't exist FileSystemError will be thrown
if (myFileSystem.statSync('/dir/subdir').isDirectory()) {
    myFileSystem.rmdirSync('/dir/subdir')
}

Export to JSON:

myFileSystem.mkdirpSync('/dir/subdir')
myFileSystem.writeFileSync('/test.txt', { test: 'string' })

myFileSystem.writeFileSync('/script.sh', 'sudo rm -rf *')
myFileSystem.toJSON()

will return :

{
    "/": "true",
    "dir": "true",
    "dir/subdir": "true",
    "test.txt": { "test": "string" },
    "script.sh": "sudo rm -rf *"
}

######where 'true' means that is 'Directory'

Write file from FileSystem to Disk:

  • writes only files
  • if some folders doesn't exist in system FileSystemError will be thrown
myFileSystem.mkdirpSync('/Users/user/project/folder')
myFileSystem.writeFileSync('/Users/user/project/folder/file.txt', {
    test: 'string',
})

myFileSystem.toDisk('/Users/user/project/folder/file.txt')
myFileSystem.toDisk('/Users/user/project/folder/non-existing-folder/file/') //throw FileSystemError

Using streams to write/read files

myFileSystem.createWriteStream('/file').end('Hello')
myFileSystem.readFileSync('/file', 'utf-8') // 'Hello'

The following example pipes all of the data from the readable into a file named file.txt

myFileSystem.writeFileSync('/file', { test: 'string' })
const readable = myFileSystem.createReadStream('/file')
const writable = myFileSystem.createWriteStream('file.txt')
readable.pipe(writable)
0.0.0-rc.2

3 years ago

0.0.0-alpha.15

3 years ago