serverless
Version:
Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more
67 lines (61 loc) • 2.15 kB
JavaScript
const { basename, join } = require('path');
const BbPromise = require('bluebird');
const { copy, exists, readFile, rename } = require('fs-extra');
const { renameService } = require('./renameService');
const serverlessPath = join(__dirname, '../../');
const resolveServiceName = path => {
let serviceName = basename(path)
.toLowerCase()
.replace(/[^0-9a-z.]+/g, '-');
if (!serviceName.match(/^[a-z]/)) serviceName = `service-${serviceName}`;
return serviceName;
};
module.exports = (templateName, destPath, options = {}) =>
new BbPromise((resolve, reject) => {
if (!options) options = {};
const templateSrcDir = join(serverlessPath, 'lib/plugins/create/templates', templateName);
readFile(join(destPath, 'package.json'), 'utf8', (readFileError, content) => {
if (readFileError) {
if (readFileError.code !== 'ENOENT') {
reject(readFileError);
return;
}
} else if (!options.name) {
const packageName = (() => {
try {
return JSON.parse(content).name;
} catch (error) {
return null;
}
})();
if (packageName) options.name = packageName;
}
copy(templateSrcDir, destPath, copyError => {
if (copyError) {
reject(copyError);
return;
}
resolve(
BbPromise.all([
new BbPromise((gitignoreRenameResolve, gitIgnoreRenameReject) => {
const gitignorePath = join(destPath, 'gitignore');
exists(gitignorePath, hasGitignore => {
if (!hasGitignore) {
gitignoreRenameResolve();
return;
}
rename(gitignorePath, join(destPath, '.gitignore'), renameError => {
if (renameError) gitIgnoreRenameReject(renameError);
else gitignoreRenameResolve();
});
});
}),
BbPromise.try(() =>
renameService(options.name || resolveServiceName(destPath), destPath)
),
])
);
});
});
});
;