serverless-ephemeral
Version:
Serverless Framework plugin to bundles stateless zipped dependencies into the deployable Lambda artifact
46 lines (34 loc) • 1.18 kB
JavaScript
const fs = require('fs');
const parse = require('url-parse');
const request = require('request');
const Fetch = require('../Fetch');
const FilePath = require('../../util/FilePath');
class Download extends Fetch {
constructor (serverless, ephemeral, url) {
super(serverless, ephemeral);
this.url = url;
this.file = new FilePath(
`${this.ephemeral.paths.lib}`,
`${parse(url).pathname.match(/([^/]+)(?=\.\w+$)/)[0]}.zip`
);
}
fetch () {
this.serverless.cli.log(`Downloading ${this.url}`);
const req = request(this.url);
return new Promise((resolve, reject) => {
req.on('error', (error) => {
this.serverless.cli.debug('Error downloading');
reject(error);
});
const output = req.pipe(fs.createWriteStream(this.file.path));
output.on('finish', () => {
resolve();
});
output.on('error', (error) => {
this.serverless.cli.debug('Error creating the zip file');
reject(error);
});
});
}
}
module.exports = Download;