UNPKG

1.74 kBJavaScriptView Raw
1var fs = require('fs-promise')
2var PassThrough = require('stream').PassThrough
3var urlUtils = require('url')
4
5function writeStreamToFile (filename, stream) {
6 return new Promise(function (resolve, reject) {
7 var file = fs.createWriteStream(filename)
8 stream.on('error', reject)
9 stream.on('end', resolve)
10 stream.pipe(file)
11 })
12}
13
14module.exports = function (options) {
15 var url = typeof options === 'object' && options.hasOwnProperty('url') ? options.url : undefined
16 var parsedUrl = urlUtils.parse(url)
17 var path = parsedUrl.path
18
19 return {
20 filename: function (url) {
21 return path + '/' + encodeURIComponent(url)
22 },
23
24 responseExists: function (url) {
25 return fs.exists(this.filename(url))
26 },
27
28 writeResponse: function (url, response) {
29 var filename = this.filename(url)
30 var body = response.body
31 delete response.body
32
33 var fileStream = body.pipe(new PassThrough())
34 var responseStream = body.pipe(new PassThrough())
35
36 var responseJson = JSON.stringify(response, null, 2)
37
38 return fs
39 .mkdirs(path)
40 .then(function () {
41 return fs.writeFile(filename + '.json', responseJson)
42 })
43 .then(function () {
44 writeStreamToFile(filename, fileStream).catch(function (e) {
45 console.error((e && e.stack) || e)
46 })
47
48 response.body = responseStream
49 return response
50 })
51 },
52
53 readResponse: function (url) {
54 var filename = this.filename(url)
55
56 return fs.readFile(filename + '.json', 'utf-8').then(function (contents) {
57 var response = JSON.parse(contents)
58 response.body = fs.createReadStream(filename)
59 return response
60 })
61 }
62 }
63}