UNPKG

serverless

Version:

Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more

66 lines (54 loc) 1.82 kB
'use strict'; const path = require('path'); const Serverless = require('../Serverless'); const crypto = require('crypto'); const getCacheFile = require('./getCacheFile'); const getServerlessConfigFile = require('./getServerlessConfigFile').getServerlessConfigFile; const name = path.basename(process.argv[0]); const tab = require('tabtab')({ name }); const getSuggestions = commands => { tab.on(name, (data, done) => { if (data.words === 1) { done(null, Object.keys(commands)); } else { done(null, []); } }); Object.keys(commands).forEach(command => { tab.on(command, (data, done) => { done(null, commands[command]); }); }); tab.start(); }; const cacheFileValid = (serverlessConfigFile, validationHash) => { const serverlessConfigFileHash = crypto .createHash('sha256') .update(JSON.stringify(serverlessConfigFile)) .digest('hex'); if (validationHash === serverlessConfigFileHash) { return true; } return false; }; const autocomplete = () => { const servicePath = process.cwd(); return getServerlessConfigFile({ processedInput: { options: {} }, config: { servicePath } }).then( serverlessConfigFile => getCacheFile(servicePath) .then(cacheFile => { if (!cacheFile || !cacheFileValid(serverlessConfigFile, cacheFile.validationHash)) { const serverless = new Serverless(); return serverless.init().then(() => getCacheFile(servicePath)); } return cacheFile; }) .then(cacheFile => { if (!cacheFile || !cacheFileValid(serverlessConfigFile, cacheFile.validationHash)) { return; } return getSuggestions(cacheFile.commands); // eslint-disable-line consistent-return }) ); }; module.exports = autocomplete;