]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/write-file-atomic/index.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / write-file-atomic / index.js
1 'use strict'
2 var fs = require('graceful-fs')
3 var chain = require('slide').chain
4 var MurmurHash3 = require('imurmurhash')
5
6 function murmurhex () {
7   var hash = new MurmurHash3()
8   for (var ii = 0; ii < arguments.length; ++ii) hash.hash('' + arguments[ii])
9   return hash.result()
10 }
11 var invocations = 0
12 var getTmpname = function (filename) {
13   return filename + '.' + murmurhex(__filename, process.pid, ++invocations)
14 }
15
16 module.exports = function writeFile (filename, data, options, callback) {
17   if (options instanceof Function) {
18     callback = options
19     options = null
20   }
21   if (!options) options = {}
22   var tmpfile = getTmpname(filename)
23   chain([
24     [fs, fs.writeFile, tmpfile, data, options],
25     options.chown && [fs, fs.chown, tmpfile, options.chown.uid, options.chown.gid],
26     [fs, fs.rename, tmpfile, filename]
27   ], function (err) {
28     err ? fs.unlink(tmpfile, function () { callback(err) })
29       : callback()
30   })
31 }
32
33 module.exports.sync = function writeFileSync (filename, data, options) {
34   if (!options) options = {}
35   var tmpfile = getTmpname(filename)
36   try {
37     fs.writeFileSync(tmpfile, data, options)
38     if (options.chown) fs.chownSync(tmpfile, options.chown.uid, options.chown.gid)
39     fs.renameSync(tmpfile, filename)
40   } catch (err) {
41     try { fs.unlinkSync(tmpfile) } catch (e) {}
42     throw err
43   }
44 }