-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathindex.js
71 lines (64 loc) · 2.67 KB
/
index.js
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
'use strict';
const AWS = require('aws-sdk');
const FS = require('fs');
const ConfigIntepreter = require('./src/ConfigInterpreter');
const S3Uploader = require('./src/S3Uploader');
const S3File = require('./src/S3File');
class S3Assets {
constructor(serverless, options) {
// exclude this directory as we don't do anything on live
const exclude = serverless.service.package.exclude;
const excludedFiles = ["node_modules/serverless-s3-assets/**"];
serverless.service.package.exclude = exclude instanceof Array ? exclude.concat(excludedFiles) : excludedFiles;
// init hooks
const interpreter = new ConfigIntepreter(FS, S3File, serverless.cli);
const s3Uploader = new S3Uploader(new AWS.S3({ signatureVersion: 'v4' }), FS, serverless.cli);
const config = serverless.service.custom && serverless.service.custom.s3Assets ? serverless.service.custom.s3Assets : [];
this.options = options;
this.commands = {
s3deploy: {
usage: 'Deploy assets to S3 bucket',
lifecycleEvents: [
'deploy'
],
options: {
asset: {
usage: 'Limit the deployment to a specific asset',
shortcut: 'a'
}
}
},
s3remove: {
usage: 'Remove deployed assets from S3 bucket',
lifecycleEvents: [
'remove'
],
options: {
asset: {
usage: 'Limit the removement to a specific asset',
shortcut: 'a'
}
}
}
};
this.hooks = {
's3deploy:deploy': this.deploy.bind(this, interpreter, s3Uploader, config),
's3remove:remove': this.remove.bind(this, interpreter, s3Uploader, config),
'after:deploy:deploy': this.deploy.bind(this, interpreter, s3Uploader, config),
'before:remove:remove': this.remove.bind(this, interpreter, s3Uploader, config)
};
}
deploy(interpreter, s3Uploader, config) {
const files = interpreter.get(config, this.options);
return s3Uploader.uploadAllToBucket(files);
}
remove(interpreter, s3Uploader, config) {
const buckets = [];
const files = interpreter.get(config, this.options);
for (let file of files) {
buckets[buckets.length] = file.getBucket();
}
return s3Uploader.removeAllFiles(buckets);
}
}
module.exports = S3Assets;