| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | 'use strict'const figgyPudding = require('figgy-pudding')const index = require('./lib/entry-index')const memo = require('./lib/memoization')const write = require('./lib/content/write')const to = require('mississippi').toconst PutOpts = figgyPudding({  algorithms: {    default: ['sha512']  },  integrity: {},  memoize: {},  metadata: {},  pickAlgorithm: {},  size: {},  tmpPrefix: {},  single: {},  sep: {},  error: {},  strict: {}})module.exports = putDatafunction putData (cache, key, data, opts) {  opts = PutOpts(opts)  return write(cache, data, opts).then(res => {    return index.insert(      cache, key, res.integrity, opts.concat({ size: res.size })    ).then(entry => {      if (opts.memoize) {        memo.put(cache, entry, data, opts)      }      return res.integrity    })  })}module.exports.stream = putStreamfunction putStream (cache, key, opts) {  opts = PutOpts(opts)  let integrity  let size  const contentStream = write.stream(    cache, opts  ).on('integrity', int => {    integrity = int  }).on('size', s => {    size = s  })  let memoData  let memoTotal = 0  const stream = to((chunk, enc, cb) => {    contentStream.write(chunk, enc, () => {      if (opts.memoize) {        if (!memoData) { memoData = [] }        memoData.push(chunk)        memoTotal += chunk.length      }      cb()    })  }, cb => {    contentStream.end(() => {      index.insert(cache, key, integrity, opts.concat({ size })).then(entry => {        if (opts.memoize) {          memo.put(cache, entry, Buffer.concat(memoData, memoTotal), opts)        }        stream.emit('integrity', integrity)        cb()      })    })  })  let erred = false  stream.once('error', err => {    if (erred) { return }    erred = true    contentStream.emit('error', err)  })  contentStream.once('error', err => {    if (erred) { return }    erred = true    stream.emit('error', err)  })  return stream}
 |