mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
50 lines
1.5 KiB
JavaScript
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))
|
|
);
|
|
});
|
|
});
|
|
});
|