mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
const { basename, join } = require('path');
|
|
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 = async (templateName, destPath, options = {}) => {
|
|
if (!options) options = {};
|
|
const templateSrcDir = join(serverlessPath, 'lib/plugins/create/templates', templateName);
|
|
|
|
if (!options.name) {
|
|
let content;
|
|
try {
|
|
content = await readFile(join(destPath, 'package.json'), 'utf8');
|
|
} catch (readFileError) {
|
|
if (readFileError.code !== 'ENOENT') {
|
|
throw readFileError;
|
|
}
|
|
}
|
|
|
|
try {
|
|
options.name = JSON.parse(content).name;
|
|
} catch {
|
|
// Leave name empty if parsing failed
|
|
}
|
|
}
|
|
|
|
await copy(templateSrcDir, destPath);
|
|
return renameService(options.name || resolveServiceName(destPath), destPath);
|
|
};
|