| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 | | '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 |  | } | 
 |