Skip to content

Handles files on indexeddb like you would do in node.js (promise)

License

Notifications You must be signed in to change notification settings

fagbokforlaget/simple-fs

Repository files navigation

SimpleFS

view on npm npm module downloads Dependency Status Known Vulnerabilities Build Status License: MIT

A minimal, extensible and promise based filesystem layer for modern browsers.

Live Demo

Supported storage backend

Simple-fs provides two storage backend. It's possible to write your own stoage backend using Storage API

  • IndexedDB (default)
import { IndexedDbStorage } from '@forlagshuset/simple-fs'
  • Memory (experimental and used for testing)
import { MemoryStorage } from '@forlagshuset/simple-fs'

Installation

npm:

npm install --save @forlagshuset/simple-fs

Usage

browser (umd):

<script src='https://unpkg.com/@forlagshuset/simple-fs@latest/dist/SimpleFS.js' async></script>
<script>
  // by default SimpleFS uses IndexedDB
  const fs = new SimpleFS.FileSystem()
  // do stuff

  await fs.mkdir('/myproject')

  // create a file under root folder
  const content = new Blob(['This is my cool project'], {type: 'plain/text'})
  await fs.writeFile('/myproject/test.txt', content)

  // get content as blob
  let blob = await fs.readFile('/myproject/test.txt')

</script>

browser (modules)

import SimpleFS from '@forlagshuset/simple-fs'
// OR es6 modules from unpkg
import SimpleFS from "//unpkg.com/@forlagshuset/simple-fs?module"

const fs = new SimpleFS.FileSystem()

// first create root folder
await fs.mkdir('/myproject')

// create a file under root folder
const content = new Blob(['This is my cool project'], {type: 'plain/text'})
await fs.writeFile('/myproject/test.txt', content)

// get content as blob
let blob = await fs.readFile('/myproject/test.txt')

API

FileSystem

constructor({storage: storageObj = new IndexedDbStorage('my-storage-name')})
mkdir(path: string)
mkdirParents(path: string) // wraps mkdir -p
rmdir(path: string)
rmdirRecursive(path: string) // removes dirs recursively
readFile(path: string, options={}) // returns Blob
writeFile(path: string, data: Blob, options={}) // data should be Blob type
outputFile(path: string, data: Blob, options={}) // Wraps writeFile and recursively creates path if not exists
bulkOutputFiles([{path: string, blob: Blob, options:{}]) // Output files in one transaction, speeds up in chrome
unlink(path: string)
exists(path: string)
stats(path: string)

Browser support

  • Chrome
  • IE Edge
  • Firefox
  • Safari