{"version":3,"sources":["jsdelivr-header.js","/npm/fs-write-stream-atomic@1.0.10/index.js"],"names":[],"mappings":"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","file":"/npm/fs-write-stream-atomic@1.0.10/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/fs-write-stream-atomic@1.0.10/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var fs = require('graceful-fs')\nvar Writable = require('readable-stream').Writable\nvar util = require('util')\nvar MurmurHash3 = require('imurmurhash')\nvar iferr = require('iferr')\nvar crypto = require('crypto')\n\nfunction murmurhex () {\n  var hash = MurmurHash3('')\n  for (var ii = 0; ii < arguments.length; ++ii) {\n    hash.hash('' + arguments[ii])\n  }\n  return hash.result()\n}\n\nvar invocations = 0\nfunction getTmpname (filename) {\n  return filename + '.' + murmurhex(__filename, process.pid, ++invocations)\n}\n\nvar setImmediate = global.setImmediate || setTimeout\n\nmodule.exports = WriteStreamAtomic\n\n// Requirements:\n//   1. Write everything written to the stream to a temp file.\n//   2. If there are no errors:\n//      a. moves the temp file into its final destination\n//      b. emits `finish` & `closed` ONLY after the file is\n//         fully flushed and renamed.\n//   3. If there's an error, removes the temp file.\n\nutil.inherits(WriteStreamAtomic, Writable)\nfunction WriteStreamAtomic (path, options) {\n  if (!(this instanceof WriteStreamAtomic)) {\n    return new WriteStreamAtomic(path, options)\n  }\n  Writable.call(this, options)\n\n  this.__isWin = options && options.hasOwnProperty('isWin') ? options.isWin : process.platform === 'win32'\n\n  this.__atomicTarget = path\n  this.__atomicTmp = getTmpname(path)\n\n  this.__atomicChown = options && options.chown\n\n  this.__atomicClosed = false\n\n  this.__atomicStream = fs.WriteStream(this.__atomicTmp, options)\n\n  this.__atomicStream.once('open', handleOpen(this))\n  this.__atomicStream.once('close', handleClose(this))\n  this.__atomicStream.once('error', handleError(this))\n}\n\n// We have to suppress default finish emitting, because ordinarily it\n// would happen as soon as `end` is called on us and all of the\n// data has been written to our target stream. So we suppress\n// finish from being emitted here, and only emit it after our\n// target stream is closed and we've moved everything around.\nWriteStreamAtomic.prototype.emit = function (event) {\n  if (event === 'finish') return this.__atomicStream.end()\n  return Writable.prototype.emit.apply(this, arguments)\n}\n\nWriteStreamAtomic.prototype._write = function (buffer, encoding, cb) {\n  var flushed = this.__atomicStream.write(buffer, encoding)\n  if (flushed) return cb()\n  this.__atomicStream.once('drain', cb)\n}\n\nfunction handleOpen (writeStream) {\n  return function (fd) {\n    writeStream.emit('open', fd)\n  }\n}\n\nfunction handleClose (writeStream) {\n  return function () {\n    if (writeStream.__atomicClosed) return\n    writeStream.__atomicClosed = true\n    if (writeStream.__atomicChown) {\n      var uid = writeStream.__atomicChown.uid\n      var gid = writeStream.__atomicChown.gid\n      return fs.chown(writeStream.__atomicTmp, uid, gid, iferr(cleanup, moveIntoPlace))\n    } else {\n      moveIntoPlace()\n    }\n  }\n\n  function moveIntoPlace () {\n    fs.rename(writeStream.__atomicTmp, writeStream.__atomicTarget, iferr(trapWindowsEPERM, end))\n  }\n\n  function trapWindowsEPERM (err) {\n    if (writeStream.__isWin &&\n        err.syscall && err.syscall === 'rename' &&\n        err.code && err.code === 'EPERM'\n    ) {\n      checkFileHashes(err)\n    } else {\n      cleanup(err)\n    }\n  }\n\n  function checkFileHashes (eperm) {\n    var inprocess = 2\n    var tmpFileHash = crypto.createHash('sha512')\n    var targetFileHash = crypto.createHash('sha512')\n\n    fs.createReadStream(writeStream.__atomicTmp)\n      .on('data', function (data, enc) { tmpFileHash.update(data, enc) })\n      .on('error', fileHashError)\n      .on('end', fileHashComplete)\n    fs.createReadStream(writeStream.__atomicTarget)\n      .on('data', function (data, enc) { targetFileHash.update(data, enc) })\n      .on('error', fileHashError)\n      .on('end', fileHashComplete)\n\n    function fileHashError () {\n      if (inprocess === 0) return\n      inprocess = 0\n      cleanup(eperm)\n    }\n\n    function fileHashComplete () {\n      if (inprocess === 0) return\n      if (--inprocess) return\n      if (tmpFileHash.digest('hex') === targetFileHash.digest('hex')) {\n        return cleanup()\n      } else {\n        return cleanup(eperm)\n      }\n    }\n  }\n\n  function cleanup (err) {\n    fs.unlink(writeStream.__atomicTmp, function () {\n      if (err) {\n        writeStream.emit('error', err)\n        writeStream.emit('close')\n      } else {\n        end()\n      }\n    })\n  }\n\n  function end () {\n    // We have to use our parent class directly because we suppress `finish`\n    // events fired via our own emit method.\n    Writable.prototype.emit.call(writeStream, 'finish')\n\n    // Delay the close to provide the same temporal separation a physical\n    // file operation would have– that is, the close event is emitted only\n    // after the async close operation completes.\n    setImmediate(function () {\n      writeStream.emit('close')\n    })\n  }\n}\n\nfunction handleError (writeStream) {\n  return function (er) {\n    cleanupSync()\n    writeStream.emit('error', er)\n    writeStream.__atomicClosed = true\n    writeStream.emit('close')\n  }\n  function cleanupSync () {\n    try {\n      fs.unlinkSync(writeStream.__atomicTmp)\n    } finally {\n      return\n    }\n  }\n}\n"]}