serverless/lib/utils/createFromTemplate.js
Piotr Grzesik f62fc2ee9c refactor: Revert removal of bluebird from lib/utils
This reverts commit 820cc1f581bfd502e5452f5c9935301ec86f9d14.
2021-03-04 11:06:44 +01:00

50 lines
1.5 KiB
JavaScript

'use strict';
const { basename, join } = require('path');
const BbPromise = require('bluebird');
const { copy, readFile } = 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.try(() => renameService(options.name || resolveServiceName(destPath), destPath))
);
});
});
});