bam-lambda
Version:
Serverless framework for AWS Lambda and API Gateway
64 lines (54 loc) • 1.69 kB
JavaScript
const https = require('https');
const { asyncGetFunction } = require('../aws/awsFunctions');
const bamSpinner = require('../util/spinner');
const { unzipper } = require('../util/zipper');
const { validateLambdaRetrieval } = require('../util/validations');
const {
msgAfterAction,
bamLog,
bamWarn,
bamError,
} = require('../util/logger');
const {
createWriteStream,
createDirectory,
unlink,
rename,
} = require('../util/fileUtils');
const cwd = process.cwd();
const addLambdaFolderToCwd = async (lambdaName, location) => {
const zipFileName = `${lambdaName}.zip`;
await createDirectory(lambdaName, cwd);
const file = createWriteStream(`${cwd}/${lambdaName}/${zipFileName}`);
return new Promise((res) => {
https.get(location, async (response) => {
response.pipe(file);
file.on('finish', async () => {
await unzipper(lambdaName);
await rename(`${cwd}/${lambdaName}/index.js`, `${cwd}/${lambdaName}/${lambdaName}.js`);
await unlink(`${cwd}/${lambdaName}/${zipFileName}`);
res();
});
});
});
};
module.exports = async function get(lambdaName) {
bamSpinner.start();
const invalidLambdaMsg = await validateLambdaRetrieval(lambdaName);
if (invalidLambdaMsg) {
bamSpinner.stop();
bamWarn(invalidLambdaMsg);
return;
}
const getFunctionParams = { FunctionName: lambdaName };
try {
const func = await asyncGetFunction(getFunctionParams);
const { Location } = func.Code;
await addLambdaFolderToCwd(lambdaName, Location);
bamSpinner.stop();
bamLog(msgAfterAction('folder', lambdaName, 'created'));
} catch (err) {
bamSpinner.stop();
bamError(err);
}
};