| 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').to
 
- const PutOpts = figgyPudding({
 
-   algorithms: {
 
-     default: ['sha512']
 
-   },
 
-   integrity: {},
 
-   memoize: {},
 
-   metadata: {},
 
-   pickAlgorithm: {},
 
-   size: {},
 
-   tmpPrefix: {},
 
-   single: {},
 
-   sep: {},
 
-   error: {},
 
-   strict: {}
 
- })
 
- module.exports = putData
 
- function 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 = putStream
 
- function 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
 
- }
 
 
  |