Gradle, npm: extract semver utils to separate file
This commit is contained in:
-87
@@ -75,93 +75,6 @@ private fun isKotlinJsRuntimeFile(file: File): Boolean {
|
|||||||
|| name.endsWith(".js.map")
|
|| name.endsWith(".js.map")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun fixSemver(version: String): String {
|
|
||||||
var i = 0
|
|
||||||
var number = 0
|
|
||||||
var major = "1"
|
|
||||||
var minor = "0"
|
|
||||||
var patch = "0"
|
|
||||||
val rest = StringBuilder()
|
|
||||||
val digits = StringBuilder()
|
|
||||||
|
|
||||||
fun setComponent() {
|
|
||||||
val digitsFiltered = digits.toString().trimStart { it == '0' }.takeIf { it.isNotEmpty() } ?: "0"
|
|
||||||
when (number) {
|
|
||||||
0 -> major = digitsFiltered
|
|
||||||
1 -> minor = digitsFiltered
|
|
||||||
2 -> patch = digitsFiltered
|
|
||||||
else -> error(number)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i < version.length) {
|
|
||||||
val c = version[i++]
|
|
||||||
if (c.isDigit()) digits.append(c)
|
|
||||||
else if (c == '-' || c == '+') {
|
|
||||||
// examples:
|
|
||||||
// 1.2.3-RC1-1234,
|
|
||||||
// 1.2-RC1-1234
|
|
||||||
// 1.2-beta.11+sha.0x
|
|
||||||
setComponent()
|
|
||||||
number = 3
|
|
||||||
rest.append(c)
|
|
||||||
break
|
|
||||||
} else if (c == '.') {
|
|
||||||
rest.append(c)
|
|
||||||
setComponent()
|
|
||||||
digits.setLength(0)
|
|
||||||
number++
|
|
||||||
if (number > 2) break
|
|
||||||
} else rest.append(c)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (number <= 2) setComponent()
|
|
||||||
|
|
||||||
rest.append(version.substring(i))
|
|
||||||
|
|
||||||
val restFiltered = rest.filter {
|
|
||||||
it in '0'..'9' ||
|
|
||||||
it in 'A'..'Z' ||
|
|
||||||
it in 'a'..'z' ||
|
|
||||||
it == '.' ||
|
|
||||||
it == '-' ||
|
|
||||||
it == '+'
|
|
||||||
}
|
|
||||||
val restComponents = restFiltered.split('+', limit = 2)
|
|
||||||
|
|
||||||
val preRelease = restComponents.getOrNull(0)
|
|
||||||
?.foldDelimiters()
|
|
||||||
?.trim { it == '-' || it == '.' }
|
|
||||||
?.takeIf { it.isNotEmpty() }
|
|
||||||
|
|
||||||
val build = restComponents.getOrNull(1)
|
|
||||||
?.filter { it != '+' }
|
|
||||||
?.trim { it == '-' || it == '.' }
|
|
||||||
?.takeIf { it.isNotEmpty() }
|
|
||||||
|
|
||||||
return "$major.$minor.$patch" +
|
|
||||||
(if (preRelease != null) "-$preRelease" else "") +
|
|
||||||
(if (build != null) "+$build" else "")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun String.foldDelimiters(): String {
|
|
||||||
val result = StringBuilder(length)
|
|
||||||
var endsWithDelimiter = false
|
|
||||||
for (i in 0 until length) {
|
|
||||||
val c = this[i]
|
|
||||||
if (c == '+' || c == '-' || c == '.') {
|
|
||||||
if (!endsWithDelimiter) {
|
|
||||||
result.append(c)
|
|
||||||
endsWithDelimiter = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
endsWithDelimiter = false
|
|
||||||
result.append(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result.toString()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun makeNodeModule(
|
fun makeNodeModule(
|
||||||
container: File,
|
container: File,
|
||||||
packageJson: PackageJson,
|
packageJson: PackageJson,
|
||||||
|
|||||||
+93
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||||
|
|
||||||
|
internal fun fixSemver(version: String): String {
|
||||||
|
var i = 0
|
||||||
|
var number = 0
|
||||||
|
var major = "0"
|
||||||
|
var minor = "0"
|
||||||
|
var patch = "0"
|
||||||
|
val rest = StringBuilder()
|
||||||
|
val digits = StringBuilder()
|
||||||
|
|
||||||
|
fun setComponent() {
|
||||||
|
val digitsFiltered = digits.toString().trimStart { it == '0' }.takeIf { it.isNotEmpty() } ?: "0"
|
||||||
|
when (number) {
|
||||||
|
0 -> major = digitsFiltered
|
||||||
|
1 -> minor = digitsFiltered
|
||||||
|
2 -> patch = digitsFiltered
|
||||||
|
else -> error(number)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (i < version.length) {
|
||||||
|
val c = version[i++]
|
||||||
|
if (c.isDigit()) digits.append(c)
|
||||||
|
else if (c == '-' || c == '+') {
|
||||||
|
// examples:
|
||||||
|
// 1.2.3-RC1-1234,
|
||||||
|
// 1.2-RC1-1234
|
||||||
|
// 1.2-beta.11+sha.0x
|
||||||
|
setComponent()
|
||||||
|
number = 3
|
||||||
|
rest.append(c)
|
||||||
|
break
|
||||||
|
} else if (c == '.') {
|
||||||
|
rest.append(c)
|
||||||
|
setComponent()
|
||||||
|
digits.setLength(0)
|
||||||
|
number++
|
||||||
|
if (number > 2) break
|
||||||
|
} else rest.append(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number <= 2) setComponent()
|
||||||
|
|
||||||
|
rest.append(version.substring(i))
|
||||||
|
|
||||||
|
val restFiltered = rest.filter {
|
||||||
|
it in '0'..'9' ||
|
||||||
|
it in 'A'..'Z' ||
|
||||||
|
it in 'a'..'z' ||
|
||||||
|
it == '.' ||
|
||||||
|
it == '-' ||
|
||||||
|
it == '+'
|
||||||
|
}
|
||||||
|
val restComponents = restFiltered.split('+', limit = 2)
|
||||||
|
|
||||||
|
val preRelease = restComponents.getOrNull(0)
|
||||||
|
?.foldDelimiters()
|
||||||
|
?.trim { it == '-' || it == '.' }
|
||||||
|
?.takeIf { it.isNotEmpty() }
|
||||||
|
|
||||||
|
val build = restComponents.getOrNull(1)
|
||||||
|
?.filter { it != '+' }
|
||||||
|
?.trim { it == '-' || it == '.' }
|
||||||
|
?.takeIf { it.isNotEmpty() }
|
||||||
|
|
||||||
|
return "$major.$minor.$patch" +
|
||||||
|
(if (preRelease != null) "-$preRelease" else "") +
|
||||||
|
(if (build != null) "+$build" else "")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun String.foldDelimiters(): String {
|
||||||
|
val result = StringBuilder(length)
|
||||||
|
var endsWithDelimiter = false
|
||||||
|
for (i in 0 until length) {
|
||||||
|
val c = this[i]
|
||||||
|
if (c == '+' || c == '-' || c == '.') {
|
||||||
|
if (!endsWithDelimiter) {
|
||||||
|
result.append(c)
|
||||||
|
endsWithDelimiter = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
endsWithDelimiter = false
|
||||||
|
result.append(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toString()
|
||||||
|
}
|
||||||
+1
-1
@@ -12,7 +12,7 @@ import org.junit.runner.RunWith
|
|||||||
import org.junit.runners.Parameterized
|
import org.junit.runners.Parameterized
|
||||||
|
|
||||||
@RunWith(Parameterized::class)
|
@RunWith(Parameterized::class)
|
||||||
class GradleNodeModuleBuilderKtTest(val expected: String, val actual: String) {
|
class SemVerFixTest(val expected: String, val actual: String) {
|
||||||
companion object {
|
companion object {
|
||||||
@Parameterized.Parameters(name = "fix({1}) == {0}")
|
@Parameterized.Parameters(name = "fix({1}) == {0}")
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
Reference in New Issue
Block a user