Skip to content

Instantly share code, notes, and snippets.

@jdp
Created February 16, 2016 20:31
Show Gist options
  • Save jdp/2af11154352d3f83a62d to your computer and use it in GitHub Desktop.
Save jdp/2af11154352d3f83a62d to your computer and use it in GitHub Desktop.
Atomic file storage engine for redux-storage
import fs from 'fs';
import tmp from 'tmp';
export default (filename) => ({
load() {
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, contents) => {
if (err) {
if (err.code === 'ENOENT') {
resolve({})
} else {
reject(err)
}
} else {
resolve(JSON.parse(contents))
}
})
})
},
save(state) {
return new Promise((resolve, reject) => {
tmp.file((err, tmpfilename) => {
if (err) {
return reject(err)
}
fs.writeFile(tmpfilename, JSON.stringify(state), (err) => {
if (err) {
return reject(err)
}
fs.rename(tmpfilename, filename, (err) => {
if (err) {
return reject(err)
}
resolve()
})
})
})
})
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment