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
| }
|
|