Skip to content

Commit e9336c8

Browse files
authored
Closes #31 (#34)
1 parent ee44577 commit e9336c8

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

src/main/kotlin/NpmPublishPlugin.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import dev.petuska.npm.publish.task.NpmPackTask
88
import dev.petuska.npm.publish.task.NpmPackageAssembleTask
99
import dev.petuska.npm.publish.task.NpmPublishTask
1010
import dev.petuska.npm.publish.util.Builder
11+
import dev.petuska.npm.publish.util.toCamelCase
1112
import org.gradle.api.Plugin
1213
import org.gradle.api.Project
1314
import org.gradle.api.Task
1415
import org.gradle.api.tasks.Copy
15-
import org.gradle.util.internal.GUtil
1616
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
1717
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
1818
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
@@ -149,7 +149,7 @@ class NpmPublishPlugin : Plugin<Project> {
149149
}
150150
processResourcesTask
151151
}
152-
val upperName = GUtil.toCamelCase(pub.name)
152+
val upperName = pub.name.toCamelCase()
153153

154154
val assembleTaskName = "assemble${upperName}NpmPublication"
155155
val packTaskName = "pack${upperName}NpmPublication"
@@ -175,7 +175,7 @@ class NpmPublishPlugin : Plugin<Project> {
175175
packTask.dependsOn(npmPackTask)
176176
packTask.enabled = true
177177
repositories.map { repo ->
178-
val upperRepoName = GUtil.toCamelCase(repo.name)
178+
val upperRepoName = repo.name.toCamelCase()
179179
val publishTaskName = "publish${upperName}NpmPublicationTo$upperRepoName"
180180
tasks.findByName(publishTaskName)
181181
?: tasks.create(publishTaskName, NpmPublishTask::class.java, pub, repo).also { task ->
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package dev.petuska.npm.publish.util
2+
3+
import java.util.Locale
4+
import java.util.regex.Pattern
5+
6+
private val WORD_SEPARATOR = Pattern.compile("\\W+")
7+
8+
fun String.toCamelCase(lower: Boolean = false): String {
9+
val builder = StringBuilder()
10+
val matcher = WORD_SEPARATOR.matcher(this)
11+
var pos = 0
12+
var first = true
13+
while (matcher.find()) {
14+
var chunk: String = subSequence(pos, matcher.start()).toString()
15+
pos = matcher.end()
16+
if (chunk.isEmpty()) {
17+
continue
18+
}
19+
if (lower && first) {
20+
chunk = chunk.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
21+
first = false
22+
} else {
23+
chunk = chunk.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
24+
}
25+
builder.append(chunk)
26+
}
27+
var rest: String = subSequence(pos, length).toString()
28+
rest = if (lower && first) {
29+
rest.replaceFirstChar { it.lowercase(Locale.getDefault()) }
30+
} else {
31+
rest.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
32+
}
33+
builder.append(rest)
34+
return builder.toString()
35+
}

0 commit comments

Comments
 (0)