s3-zip 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +2 -2
- package/README.md +8 -6
- package/aws_lambda.md +10 -9
- package/package.json +8 -8
- package/test/test-s3-error-on-stream.js +15 -15
- package/test/test-s3-password-protected.js +22 -22
- package/test/test-s3-same-file-alt-names.js +33 -24
- package/test/test-s3-zip-alt-names.js +24 -24
- package/test/test-s3-zip-unique-prefix.js +26 -26
- package/test/test-s3-zip.js +22 -22
package/.travis.yml
CHANGED
package/README.md
CHANGED
|
@@ -51,16 +51,16 @@ s3Zip
|
|
|
51
51
|
You can also pass a custom S3 client. For example if you want to zip files from a S3 compatible storage:
|
|
52
52
|
|
|
53
53
|
```javascript
|
|
54
|
-
const
|
|
54
|
+
const { S3Client } = require('@aws-sdk/client-s3')
|
|
55
55
|
|
|
56
|
-
const
|
|
56
|
+
const S3Client = new aws.S3({
|
|
57
57
|
signatureVersion: 'v4',
|
|
58
58
|
s3ForcePathStyle: 'true',
|
|
59
59
|
endpoint: 'http://localhost:9000',
|
|
60
60
|
})
|
|
61
61
|
|
|
62
62
|
s3Zip
|
|
63
|
-
.archive({ s3:
|
|
63
|
+
.archive({ s3: S3Client, bucket: bucket }, folder, [file1, file2])
|
|
64
64
|
.pipe(output)
|
|
65
65
|
```
|
|
66
66
|
|
|
@@ -74,14 +74,16 @@ Example of s3-zip in combination with [AWS Lambda](aws_lambda.md).
|
|
|
74
74
|
```javascript
|
|
75
75
|
const fs = require('fs')
|
|
76
76
|
const join = require('path').join
|
|
77
|
-
const
|
|
77
|
+
const {
|
|
78
|
+
S3Client
|
|
79
|
+
} = require("@aws-sdk/client-s3")
|
|
78
80
|
const s3Zip = require('s3-zip')
|
|
79
81
|
const XmlStream = require('xml-stream')
|
|
80
82
|
|
|
81
83
|
const region = 'bucket-region'
|
|
82
84
|
const bucket = 'name-of-s3-bucket'
|
|
83
85
|
const folder = 'name-of-bucket-folder/'
|
|
84
|
-
const s3 = new
|
|
86
|
+
const s3 = new S3Client({ region: region })
|
|
85
87
|
const params = {
|
|
86
88
|
Bucket: bucket,
|
|
87
89
|
Prefix: folder
|
|
@@ -195,7 +197,7 @@ npm run coverage
|
|
|
195
197
|
|
|
196
198
|
|
|
197
199
|
|
|
198
|
-
[aws-sdk-url]:
|
|
200
|
+
[aws-sdk-url]: https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html
|
|
199
201
|
[npm-badge]: https://badge.fury.io/js/s3-zip.svg
|
|
200
202
|
[npm-url]: https://badge.fury.io/js/s3-zip
|
|
201
203
|
[travis-badge]: https://travis-ci.org/orangewise/s3-zip.svg?branch=master
|
package/aws_lambda.md
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
```javascript
|
|
7
|
-
const
|
|
7
|
+
const { Upload } = require("@aws-sdk/lib-storage");
|
|
8
|
+
const { S3 } = require("@aws-sdk/client-s3");
|
|
8
9
|
const s3Zip = require('s3-zip')
|
|
9
10
|
|
|
10
11
|
exports.handler = function (event, context) {
|
|
@@ -22,8 +23,11 @@ exports.handler = function (event, context) {
|
|
|
22
23
|
|
|
23
24
|
const body = s3Zip.archive({ region: region, bucket: bucket}, folder, files)
|
|
24
25
|
const zipParams = { params: { Bucket: bucket, Key: folder + zipFileName } }
|
|
25
|
-
const zipFile = new
|
|
26
|
-
|
|
26
|
+
const zipFile = new S3(zipParams)
|
|
27
|
+
new Upload({
|
|
28
|
+
client: zipFile,
|
|
29
|
+
params: { Body: body }
|
|
30
|
+
})
|
|
27
31
|
.on('httpUploadProgress', function (evt) { console.log(evt) })
|
|
28
32
|
.send(function (e, r) {
|
|
29
33
|
if (e) {
|
|
@@ -40,7 +44,6 @@ exports.handler = function (event, context) {
|
|
|
40
44
|
console.log(err)
|
|
41
45
|
context.fail(err)
|
|
42
46
|
}
|
|
43
|
-
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
```
|
|
@@ -48,7 +51,7 @@ exports.handler = function (event, context) {
|
|
|
48
51
|
## Invoke the function
|
|
49
52
|
|
|
50
53
|
```javascript
|
|
51
|
-
const
|
|
54
|
+
const { LambdaClient } = require("@aws-sdk/client-lambda");
|
|
52
55
|
|
|
53
56
|
const region = 'bucket-region'
|
|
54
57
|
const bucket = 'name-of-s3-bucket'
|
|
@@ -59,12 +62,10 @@ const file3 = 'Image C.png'
|
|
|
59
62
|
const file4 = 'Image D.png'
|
|
60
63
|
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
region
|
|
65
|
+
const lambda = new LambdaClient({
|
|
66
|
+
region
|
|
64
67
|
})
|
|
65
68
|
|
|
66
|
-
const lambda = new AWS.Lambda()
|
|
67
|
-
|
|
68
69
|
const files = [file1, file2, file3, file4]
|
|
69
70
|
const payload = JSON.stringify({
|
|
70
71
|
'region' : region,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "s3-zip",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Download selected files from an Amazon S3 bucket as a zip file.",
|
|
5
5
|
"main": "s3-zip.js",
|
|
6
6
|
"scripts": {
|
|
@@ -25,19 +25,19 @@
|
|
|
25
25
|
},
|
|
26
26
|
"homepage": "https://github.com/orangewise/s3-zip#readme",
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"archiver": "^
|
|
29
|
-
"s3-files": "^
|
|
28
|
+
"archiver": "^6.0.1",
|
|
29
|
+
"s3-files": "^3.0.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"archiver-zip-encryptable": "^1.0.5",
|
|
33
33
|
"child_process": "^1.0.2",
|
|
34
34
|
"concat-stream": "^2.0.0",
|
|
35
35
|
"proxyquire": "^2.1.3",
|
|
36
|
-
"sinon": "^
|
|
37
|
-
"standard": "^
|
|
36
|
+
"sinon": "^16.0.0",
|
|
37
|
+
"standard": "^17.1.0",
|
|
38
38
|
"stream-array": "^1.1.2",
|
|
39
|
-
"tap": "^
|
|
40
|
-
"tar": "^
|
|
41
|
-
"yauzl": "^2.
|
|
39
|
+
"tap": "^16.3.8",
|
|
40
|
+
"tar": "^6.2.0",
|
|
41
|
+
"yauzl": "^2.10.0"
|
|
42
42
|
}
|
|
43
43
|
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
let s3Zip = require('../s3-zip.js')
|
|
2
|
+
const t = require('tap')
|
|
3
|
+
const fs = require('fs')
|
|
4
|
+
const Stream = require('stream')
|
|
5
|
+
const concat = require('concat-stream')
|
|
6
|
+
const join = require('path').join
|
|
7
|
+
const proxyquire = require('proxyquire')
|
|
8
|
+
const sinon = require('sinon')
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const fileStream = function (file) {
|
|
11
|
+
const rs = new Stream()
|
|
12
12
|
rs.readable = true
|
|
13
|
-
|
|
13
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
14
14
|
fileStream
|
|
15
15
|
.pipe(concat(
|
|
16
16
|
function buffersEmit (buffer) {
|
|
@@ -26,18 +26,18 @@ var fileStream = function (file) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
t.test('test if error on filestream with archiveStream', function (child) {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const stream = fileStream('./fixtures/file.txt')
|
|
30
|
+
const files = ['foo.png']
|
|
31
31
|
s3Zip.archiveStream(stream, files)
|
|
32
32
|
child.end()
|
|
33
33
|
})
|
|
34
34
|
|
|
35
35
|
t.test('test if error on filestream with archive', function (child) {
|
|
36
|
-
|
|
36
|
+
const stream = fileStream('./fixtures/file.txt')
|
|
37
37
|
s3Zip = proxyquire('../s3-zip.js', {
|
|
38
38
|
's3-files': { createFileStream: sinon.stub().returns(stream) }
|
|
39
39
|
})
|
|
40
|
-
|
|
40
|
+
const files = ['foo.png']
|
|
41
41
|
s3Zip.archive({ region: 'region', bucket: 'bucket' }, 'folder', files)
|
|
42
42
|
child.end()
|
|
43
43
|
})
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
let s3Zip = require('../s3-zip.js')
|
|
2
|
+
const t = require('tap')
|
|
3
|
+
const fs = require('fs')
|
|
4
|
+
const Stream = require('stream')
|
|
5
|
+
const concat = require('concat-stream')
|
|
6
|
+
const join = require('path').join
|
|
7
|
+
const streamify = require('stream-array')
|
|
8
|
+
const archiverZipEncryptable = require('archiver-zip-encryptable')
|
|
9
|
+
const { exec } = require('child_process')
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
const fileStreamForFiles = function (files, preserveFolderPath) {
|
|
12
|
+
const rs = new Stream()
|
|
13
13
|
rs.readable = true
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
let fileCounter = 0
|
|
16
16
|
streamify(files).on('data', function (file) {
|
|
17
17
|
fileCounter += 1
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
20
20
|
fileStream.pipe(
|
|
21
21
|
concat(function buffersEmit (buffer) {
|
|
22
22
|
// console.log('buffers concatenated, emit data for ', file);
|
|
23
|
-
|
|
24
|
-
rs.emit('data', { data: buffer, path
|
|
23
|
+
const path = preserveFolderPath ? file : file.replace(/^.*[\\/]/, '')
|
|
24
|
+
rs.emit('data', { data: buffer, path })
|
|
25
25
|
})
|
|
26
26
|
)
|
|
27
27
|
fileStream.on('end', function () {
|
|
@@ -35,11 +35,11 @@ var fileStreamForFiles = function (files, preserveFolderPath) {
|
|
|
35
35
|
return rs
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
const file1 = 'a/file.txt'
|
|
39
|
+
const file2 = 'b/file.txt'
|
|
40
|
+
const sinon = require('sinon')
|
|
41
|
+
const proxyquire = require('proxyquire')
|
|
42
|
+
const s3Stub = fileStreamForFiles(
|
|
43
43
|
['/fixtures/folder/a/file.txt', '/fixtures/folder/b/file.txt'],
|
|
44
44
|
true
|
|
45
45
|
)
|
|
@@ -48,8 +48,8 @@ s3Zip = proxyquire('../s3-zip.js', {
|
|
|
48
48
|
})
|
|
49
49
|
|
|
50
50
|
t.test('test archive password protected', async child => {
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const outputPath = join(__dirname, '/test-password-protected.zip')
|
|
52
|
+
const output = fs.createWriteStream(outputPath)
|
|
53
53
|
|
|
54
54
|
await s3Zip
|
|
55
55
|
.setRegisterFormatOptions('zip-encryptable', archiverZipEncryptable)
|
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
// Test s3-zip BUT using alternate file names for the same file which is listed multiple times
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
const s3Zip = require('../s3-zip.js')
|
|
4
|
+
const t = require('tap')
|
|
5
|
+
const fs = require('fs')
|
|
6
|
+
const Stream = require('stream')
|
|
7
|
+
const concat = require('concat-stream')
|
|
8
|
+
const join = require('path').join
|
|
9
|
+
const streamify = require('stream-array')
|
|
10
|
+
const tar = require('tar')
|
|
11
|
+
const sinon = require('sinon')
|
|
12
|
+
const proxyquire = require('proxyquire')
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
const fileStreamForFiles = function (files, preserveFolderPath) {
|
|
15
|
+
const rs = new Stream()
|
|
14
16
|
rs.readable = true
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
let fileCounter = 0
|
|
17
19
|
streamify(files).on('data', function (file) {
|
|
18
20
|
fileCounter += 1
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
21
23
|
fileStream.pipe(
|
|
22
24
|
concat(function buffersEmit (buffer) {
|
|
23
25
|
// console.log('buffers concatenated, emit data for ', file);
|
|
24
|
-
|
|
25
|
-
rs.emit('data', { data: buffer, path
|
|
26
|
+
const path = preserveFolderPath ? file : file.replace(/^.*[\\/]/, '')
|
|
27
|
+
rs.emit('data', { data: buffer, path })
|
|
26
28
|
})
|
|
27
29
|
)
|
|
28
30
|
fileStream.on('end', function () {
|
|
@@ -36,20 +38,20 @@ var fileStreamForFiles = function (files, preserveFolderPath) {
|
|
|
36
38
|
return rs
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
|
|
40
|
-
'/fixtures/folder/a/file.txt',
|
|
41
|
-
'/fixtures/folder/a/file.txt'
|
|
42
|
-
]
|
|
43
|
-
var outputFiles = [
|
|
41
|
+
const outputFiles = [
|
|
44
42
|
'FILE_1_ALT_1.TXT',
|
|
45
43
|
'FILE_1_ALT_2.TXT'
|
|
46
44
|
]
|
|
47
|
-
|
|
45
|
+
const filesRead = []
|
|
48
46
|
|
|
49
47
|
t.test('test a tar archive with alternate names for one file listed many times', function (child) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
const inputFiles = [
|
|
49
|
+
'/fixtures/folder/a/file.txt',
|
|
50
|
+
'/fixtures/folder/a/file.txt'
|
|
51
|
+
]
|
|
52
|
+
const outputPath = join(__dirname, '/test-same_file_alt_name.tar')
|
|
53
|
+
const output = fs.createWriteStream(outputPath)
|
|
54
|
+
const archive = s3Zip
|
|
53
55
|
.setFormat('tar')
|
|
54
56
|
.archiveStream(fileStreamForFiles(inputFiles, true), inputFiles, outputFiles)
|
|
55
57
|
.pipe(output)
|
|
@@ -68,7 +70,14 @@ t.test('test a tar archive with alternate names for one file listed many times',
|
|
|
68
70
|
})
|
|
69
71
|
|
|
70
72
|
t.test('test archive with alternate names for one file listed many times', function (child) {
|
|
71
|
-
|
|
73
|
+
const inputFiles = [
|
|
74
|
+
'/fixtures/folder/a/file.txt',
|
|
75
|
+
'/fixtures/folder/a/file.txt'
|
|
76
|
+
]
|
|
77
|
+
const s3Zip = proxyquire('../s3-zip.js', {
|
|
78
|
+
's3-files': { createFileStream: sinon.stub().returns(fileStreamForFiles(inputFiles, true)) }
|
|
79
|
+
})
|
|
80
|
+
const archive = s3Zip
|
|
72
81
|
.archive({ region: 'region', bucket: 'bucket' },
|
|
73
82
|
'',
|
|
74
83
|
inputFiles,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// Test s3-zip BUT using alternate file names in the resulting zip archive
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
let s3Zip = require('../s3-zip.js')
|
|
4
|
+
const t = require('tap')
|
|
5
|
+
const fs = require('fs')
|
|
6
|
+
const Stream = require('stream')
|
|
7
|
+
const concat = require('concat-stream')
|
|
8
|
+
const yauzl = require('yauzl')
|
|
9
|
+
const join = require('path').join
|
|
10
|
+
const tar = require('tar')
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const fileStream = function (file, forceError) {
|
|
13
|
+
const rs = new Stream()
|
|
14
14
|
rs.readable = true
|
|
15
|
-
|
|
15
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
16
16
|
fileStream
|
|
17
17
|
.pipe(concat(
|
|
18
18
|
function buffersEmit (buffer) {
|
|
@@ -32,21 +32,21 @@ var fileStream = function (file, forceError) {
|
|
|
32
32
|
return rs
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const file1 = '/fixtures/file.txt'
|
|
36
|
+
const file1Alt = 'FILE_ALT.TXT'
|
|
37
|
+
const file1DataEntry = { name: file1Alt, mode: parseInt('0600', 8) }
|
|
38
38
|
// Stub: var fileStream = s3Files.createFileStream(keyStream);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
const sinon = require('sinon')
|
|
40
|
+
const proxyquire = require('proxyquire')
|
|
41
|
+
const s3Stub = fileStream(file1)
|
|
42
42
|
s3Zip = proxyquire('../s3-zip.js', {
|
|
43
43
|
's3-files': { createFileStream: sinon.stub().returns(s3Stub) }
|
|
44
44
|
})
|
|
45
45
|
|
|
46
46
|
t.test('test archiveStream and zip file with alternate file name in zip archive', function (child) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const output = fs.createWriteStream(join(__dirname, '/test-alt.zip'))
|
|
48
|
+
const s = fileStream(file1)
|
|
49
|
+
const archive = s3Zip
|
|
50
50
|
.archiveStream(s, [file1], [file1Alt])
|
|
51
51
|
.pipe(output)
|
|
52
52
|
archive.on('close', function () {
|
|
@@ -69,7 +69,7 @@ t.test('test archiveStream and zip file with alternate file name in zip archive'
|
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
t.test('test archive with alternate zip archive names', function (child) {
|
|
72
|
-
|
|
72
|
+
const archive = s3Zip
|
|
73
73
|
.archive({ region: 'region', bucket: 'bucket' },
|
|
74
74
|
'folder',
|
|
75
75
|
[file1],
|
|
@@ -80,9 +80,9 @@ t.test('test archive with alternate zip archive names', function (child) {
|
|
|
80
80
|
})
|
|
81
81
|
|
|
82
82
|
t.test('test a tar archive with EntryData object', function (child) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
const outputPath = join(__dirname, '/test-entrydata.tar')
|
|
84
|
+
const output = fs.createWriteStream(outputPath)
|
|
85
|
+
const archive = s3Zip
|
|
86
86
|
.setFormat('tar')
|
|
87
87
|
.archiveStream(fileStream(file1), [file1], [file1DataEntry])
|
|
88
88
|
.pipe(output)
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
let s3Zip = require('../s3-zip.js')
|
|
2
|
+
const t = require('tap')
|
|
3
|
+
const fs = require('fs')
|
|
4
|
+
const Stream = require('stream')
|
|
5
|
+
const concat = require('concat-stream')
|
|
6
|
+
const yauzl = require('yauzl')
|
|
7
|
+
const join = require('path').join
|
|
8
|
+
const streamify = require('stream-array')
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const fileStreamForFiles = function (files, preserveFolderPath) {
|
|
11
|
+
const rs = new Stream()
|
|
12
12
|
rs.readable = true
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
let fileCounter = 0
|
|
15
15
|
streamify(files).on('data', function (file) {
|
|
16
16
|
fileCounter += 1
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
19
19
|
fileStream.pipe(
|
|
20
20
|
concat(function buffersEmit (buffer) {
|
|
21
21
|
// console.log('buffers concatenated, emit data for ', file);
|
|
22
|
-
|
|
23
|
-
rs.emit('data', { data: buffer, path
|
|
22
|
+
const path = preserveFolderPath ? file : file.replace(/^.*[\\/]/, '')
|
|
23
|
+
rs.emit('data', { data: buffer, path })
|
|
24
24
|
})
|
|
25
25
|
)
|
|
26
26
|
fileStream.on('end', function () {
|
|
@@ -34,13 +34,13 @@ var fileStreamForFiles = function (files, preserveFolderPath) {
|
|
|
34
34
|
return rs
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
const file1 = 'a/file.txt'
|
|
38
|
+
const file1Alt = 'file.txt'
|
|
39
|
+
const file2 = 'b/file.txt'
|
|
40
|
+
const file2Alt = 'file-1.txt'
|
|
41
|
+
const sinon = require('sinon')
|
|
42
|
+
const proxyquire = require('proxyquire')
|
|
43
|
+
const s3Stub = fileStreamForFiles(
|
|
44
44
|
['/fixtures/folder/a/file.txt', '/fixtures/folder/b/file.txt'],
|
|
45
45
|
true
|
|
46
46
|
)
|
|
@@ -51,10 +51,10 @@ s3Zip = proxyquire('../s3-zip.js', {
|
|
|
51
51
|
t.test(
|
|
52
52
|
'test archive with matching alternate zip archive names but unique keys',
|
|
53
53
|
function (child) {
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
const outputPath = join(__dirname, '/test-unique.zip')
|
|
55
|
+
const output = fs.createWriteStream(outputPath)
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
const archive = s3Zip
|
|
58
58
|
.archive(
|
|
59
59
|
{ region: 'region', bucket: 'bucket' },
|
|
60
60
|
'/fixtures/folder/',
|
|
@@ -63,13 +63,13 @@ t.test(
|
|
|
63
63
|
)
|
|
64
64
|
.pipe(output)
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
const altFiles = [file1Alt, file2Alt]
|
|
67
67
|
|
|
68
68
|
archive.on('close', function () {
|
|
69
69
|
yauzl.open(outputPath, function (err, zip) {
|
|
70
70
|
if (err) console.log('err', err)
|
|
71
71
|
zip.on('entry', function (entry) {
|
|
72
|
-
|
|
72
|
+
const i = altFiles.indexOf(entry.fileName)
|
|
73
73
|
if (i > -1) {
|
|
74
74
|
child.same(entry.fileName, altFiles[i])
|
|
75
75
|
altFiles.splice(i, 1)
|
package/test/test-s3-zip.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
let s3Zip = require('../s3-zip.js')
|
|
2
|
+
const t = require('tap')
|
|
3
|
+
const fs = require('fs')
|
|
4
|
+
const Stream = require('stream')
|
|
5
|
+
const concat = require('concat-stream')
|
|
6
|
+
const yauzl = require('yauzl')
|
|
7
|
+
const { join } = require('path')
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const fileStream = function (file, forceError) {
|
|
10
|
+
const rs = new Stream()
|
|
11
11
|
rs.readable = true
|
|
12
|
-
|
|
12
|
+
const fileStream = fs.createReadStream(join(__dirname, file))
|
|
13
13
|
fileStream.pipe(
|
|
14
14
|
concat(function buffersEmit (buffer) {
|
|
15
15
|
if (forceError) {
|
|
@@ -27,20 +27,20 @@ var fileStream = function (file, forceError) {
|
|
|
27
27
|
return rs
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
const file1 = '/fixtures/file.txt'
|
|
31
|
+
const emptyFile = '/fixtures/empty.txt'
|
|
32
32
|
// Stub: var fileStream = s3Files.createFileStream(keyStream);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
const sinon = require('sinon')
|
|
34
|
+
const proxyquire = require('proxyquire')
|
|
35
|
+
const s3Stub = fileStream(file1)
|
|
36
36
|
s3Zip = proxyquire('../s3-zip.js', {
|
|
37
37
|
's3-files': { createFileStream: sinon.stub().returns(s3Stub) }
|
|
38
38
|
})
|
|
39
39
|
|
|
40
40
|
t.test('test archiveStream and zip file', function (child) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
const output = fs.createWriteStream(join(__dirname, '/test.zip'))
|
|
42
|
+
const s = fileStream(file1)
|
|
43
|
+
const archive = s3Zip.archiveStream(s).pipe(output)
|
|
44
44
|
archive.on('close', function () {
|
|
45
45
|
console.log('+++++++++++')
|
|
46
46
|
yauzl.open(join(__dirname, '/test.zip'), function (err, zip) {
|
|
@@ -61,7 +61,7 @@ t.test('test archiveStream and zip file', function (child) {
|
|
|
61
61
|
})
|
|
62
62
|
|
|
63
63
|
t.test('test archive', function (child) {
|
|
64
|
-
|
|
64
|
+
const archive = s3Zip.archive(
|
|
65
65
|
{ region: 'region', bucket: 'bucket' },
|
|
66
66
|
'folder',
|
|
67
67
|
[file1]
|
|
@@ -71,9 +71,9 @@ t.test('test archive', function (child) {
|
|
|
71
71
|
})
|
|
72
72
|
|
|
73
73
|
t.test('test archive on empty file', function (child) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
const output = fs.createWriteStream(join(__dirname, '/test.zip'))
|
|
75
|
+
const s = fileStream(emptyFile)
|
|
76
|
+
const archive = s3Zip.archiveStream(s).pipe(output)
|
|
77
77
|
archive.on('close', function () {
|
|
78
78
|
console.log('+++++++++++')
|
|
79
79
|
yauzl.open(join(__dirname, '/test.zip'), function (err, zip) {
|