Skip to content

Commit b70fe74

Browse files
committed
Validate and set project name
1 parent 0c4f811 commit b70fe74

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

index.mjs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,24 @@ const templates = [
2929
},
3030
];
3131

32+
function validateProjectName(projectName) {
33+
const packageNameRegExp = /^[a-z0-9-]+$/;
34+
35+
if (packageNameRegExp.test(projectName)) {
36+
return true;
37+
} else {
38+
return "Project name may only contain lower case letters, numbers and hyphens.";
39+
}
40+
}
41+
3242
async function getParams() {
3343
return await enquirer.prompt([
3444
{
3545
type: "input",
3646
name: "projectName",
3747
message: "What is the name of your new project?",
3848
initial: process.argv[2] || "my-rescript-app",
49+
validate: validateProjectName,
3950
},
4051
{
4152
type: "select",
@@ -46,6 +57,17 @@ async function getParams() {
4657
]);
4758
}
4859

60+
function replaceLineInFile(filename, search, replace) {
61+
const contents = fs.readFileSync(filename, "utf8");
62+
const replaced = contents.replace(search, replace);
63+
fs.writeFileSync(filename, replaced, "utf8");
64+
}
65+
66+
function setProjectName(templateName, projectName) {
67+
replaceLineInFile("package.json", `"name": "${templateName}"`, `"name": "${projectName}"`);
68+
replaceLineInFile("bsconfig.json", `"name": "${templateName}"`, `"name": "${projectName}"`);
69+
}
70+
4971
function installPackages() {
5072
console.log("Installing packages. This might take a couple of seconds...");
5173

@@ -94,6 +116,7 @@ async function main() {
94116
fs.cpSync(templatePath, projectPath, { recursive: true });
95117
process.chdir(projectPath);
96118

119+
setProjectName(templateName, projectName);
97120
installPackages();
98121
initGitRepo();
99122
logSuccess(projectName, projectPath);

0 commit comments

Comments
 (0)