Skip to content

Commit c2878d5

Browse files
Setup pkg.pr.new (#122)
1 parent 0465eee commit c2878d5

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ jobs:
3535
- name: Run tests
3636
run: npm test
3737

38+
- name: Publish preview package
39+
if: github.event_name == 'pull_request'
40+
run: npx pkg-pr-new publish --bin
41+
3842
- name: Pack (includes rescript build)
3943
run: npm pack
4044

src/NewProject.res

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ let packageNameRegExp = /^[a-z0-9-]+$/
66

77
let validateProjectName = projectName =>
88
if projectName->String.trim->String.length === 0 {
9-
Some("Project name must not be empty.")
9+
Error("Project name must not be empty.")
1010
} else if !(packageNameRegExp->RegExp.test(projectName)) {
11-
Some("Project name may only contain lower case letters, numbers and hyphens.")
11+
Error("Project name may only contain lower case letters, numbers and hyphens.")
1212
} else if Fs.existsSync(Path.join2(Process.cwd(), projectName)) {
13-
Some(`The folder ${projectName} already exist in the current directory.`)
13+
Error(`The folder ${projectName} already exist in the current directory.`)
1414
} else {
15-
None
15+
Ok()
1616
}
1717

1818
let updatePackageJson = async (~projectName, ~versions) =>
@@ -117,14 +117,23 @@ let createNewProject = async () => {
117117
let useDefaultVersions = Option.isSome(commandLineArguments.templateName)
118118

119119
let projectName = switch commandLineArguments.projectName {
120-
| Some(projectName) if useDefaultVersions => projectName->validateProjectName->Option.getOrThrow
120+
| Some(projectName) if useDefaultVersions =>
121+
// Note this throws in the some case, which is why we cannot use Option.getOrThrow here.
122+
switch validateProjectName(projectName) {
123+
| Error(message) => JsError.throwWithMessage(message)
124+
| Ok() => projectName
125+
}
121126

122127
| initialValue =>
123128
await P.text({
124129
message: "What is the name of your new ReScript project?",
125130
placeholder: "my-rescript-app",
126131
?initialValue,
127-
validate: validateProjectName,
132+
validate: projectName =>
133+
switch validateProjectName(projectName) {
134+
| Ok() => None
135+
| Error(error) => Some(error)
136+
},
128137
})->P.resultOrRaise
129138
}
130139

0 commit comments

Comments
 (0)