Gradle, JS: extract npm package constants
#KT-30530
This commit is contained in:
+14
-8
@@ -8,17 +8,23 @@ package org.jetbrains.kotlin.gradle.targets.js
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||
|
||||
class KotlinJsBrowser(
|
||||
class KotlinBrowserJs(
|
||||
target: KotlinOnlyTarget<KotlinJsCompilation>
|
||||
) : KotlinJsInnerTargetConfigurator(target) {
|
||||
private val versions = project.nodeJs.versions
|
||||
|
||||
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
||||
it.useNodeJs { }
|
||||
it.useKarma {
|
||||
useWebpack()
|
||||
useChromeHeadless()
|
||||
}
|
||||
}
|
||||
|
||||
override fun configureRun(compilation: KotlinJsCompilation) {
|
||||
@@ -27,13 +33,13 @@ class KotlinJsBrowser(
|
||||
val compileKotlinTask = compilation.compileKotlinTask
|
||||
|
||||
compilation.dependencies {
|
||||
runtimeOnly(npm("webpack", "4.29.6"))
|
||||
runtimeOnly(npm("webpack-cli", "3.3.0"))
|
||||
runtimeOnly(npm("webpack-bundle-analyzer", "3.3.2"))
|
||||
runtimeOnly(versions.webpack)
|
||||
runtimeOnly(versions.webpackCli)
|
||||
runtimeOnly(versions.webpackBundleAnalyzer)
|
||||
|
||||
// for source map support only
|
||||
runtimeOnly(npm("source-map-loader", "0.2.4"))
|
||||
runtimeOnly(npm("source-map-support", "0.5.12"))
|
||||
// for source map support
|
||||
runtimeOnly(versions.sourceMapLoader.npm(project))
|
||||
runtimeOnly(versions.sourceMapSupport.npm(project))
|
||||
}
|
||||
|
||||
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
||||
+15
-30
@@ -5,47 +5,32 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilationTestsConfigurator
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||
|
||||
class KotlinNodeJs(kotlinPluginVersion: String) :
|
||||
KotlinJsTargetConfigurator(kotlinPluginVersion) {
|
||||
class KotlinNodeJs(target: KotlinOnlyTarget<KotlinJsCompilation>) :
|
||||
KotlinJsInnerTargetConfigurator(target) {
|
||||
|
||||
override fun configureTarget(target: KotlinOnlyTarget<KotlinJsCompilation>) {
|
||||
super.configureTarget(target)
|
||||
configureApplication(target)
|
||||
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
||||
it.useNodeJs { }
|
||||
}
|
||||
|
||||
private fun configureApplication(target: KotlinOnlyTarget<KotlinJsCompilation>) {
|
||||
target.compilations.all { compilation ->
|
||||
if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) {
|
||||
// source maps support
|
||||
compilation.dependencies {
|
||||
runtimeOnly(kotlin("test-nodejs-runner"))
|
||||
}
|
||||
override fun configureRun(compilation: KotlinJsCompilation) {
|
||||
// source maps support
|
||||
compilation.dependencies {
|
||||
runtimeOnly(kotlin("test-nodejs-runner"))
|
||||
}
|
||||
|
||||
val project = target.project
|
||||
project.createOrRegisterTask<NodeJsExec>("run") {
|
||||
it.args(
|
||||
project.npmProject.compileOutput(compilation.compileKotlinTask),
|
||||
"--require", "kotlin-test-nodejs-runner/kotlin-nodejs-source-map-support.js"
|
||||
)
|
||||
}
|
||||
}
|
||||
val project = target.project
|
||||
project.createOrRegisterTask<NodeJsExec>("run") {
|
||||
it.args(project.npmProject.compileOutput(compilation.compileKotlinTask))
|
||||
|
||||
// source maps support
|
||||
it.args("--require", "kotlin-test-nodejs-runner/kotlin-nodejs-source-map-support.js")
|
||||
}
|
||||
}
|
||||
|
||||
override fun newTestsConfigurator(compilation: KotlinJsCompilation) =
|
||||
object : KotlinJsCompilationTestsConfigurator(compilation) {
|
||||
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
||||
it.useNodeJs { }
|
||||
}
|
||||
}
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
|
||||
val karmaChromeLauncher = NpmPackageVersion("karma-chrome-launcher", "2.2.0")
|
||||
val karmaPhantomjsLauncher = NpmPackageVersion("karma-phantomjs-launcher", "*")
|
||||
// karma-firefox-launcher
|
||||
// karma-opera-launcher
|
||||
// karma-ie-launcher
|
||||
// karma-safari-launcher
|
||||
|
||||
data class NpmPackageVersion(val name: String, val version: String) {
|
||||
fun npm(project: Project) = NpmDependency(project, null, name, version)
|
||||
}
|
||||
+4
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmPackages
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||
|
||||
open class NodeJsExtension(val project: Project) {
|
||||
@@ -14,6 +15,9 @@ open class NodeJsExtension(val project: Project) {
|
||||
|
||||
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
||||
|
||||
val versions = NpmPackages()
|
||||
|
||||
@Suppress("unused")
|
||||
fun packageJson(handler: PackageJson.() -> Unit) {
|
||||
packageJsonHandlers.add(handler)
|
||||
}
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
import org.gradle.api.Project
|
||||
|
||||
class NpmPackages {
|
||||
val webpack = NpmPackageVersion("webpack", "4.29.6")
|
||||
val webpackCli = NpmPackageVersion("webpack-cli", "3.3.0")
|
||||
val webpackBundleAnalyzer = NpmPackageVersion("webpack-bundle-analyzer", "3.3.2")
|
||||
val webpackDevServer = NpmPackageVersion("webpack-dev-server", "3.3.1")
|
||||
|
||||
val sourceMapLoader = NpmPackageVersion("source-map-loader", "0.2.4")
|
||||
val sourceMapSupport = NpmPackageVersion("source-map-support", "0.5.12")
|
||||
|
||||
val mocha = NpmPackageVersion("mocha", "6.1.2")
|
||||
|
||||
val karma = NpmPackageVersion("karma", "4.0.1")
|
||||
val karmaTeamcityReporter = NpmPackageVersion("karma-teamcity-reporter", "1.1.0")
|
||||
|
||||
val karmaChromeLauncher = NpmPackageVersion("karma-chrome-launcher", "2.2.0")
|
||||
val karmaPhantomJsLauncher = NpmPackageVersion("karma-phantomjs-launcher", "*")
|
||||
val karmaFirefoxLauncher = NpmPackageVersion("karma-firefox-launcher", "*")
|
||||
val karmaOperaLauncher = NpmPackageVersion("karma-opera-launcher", "*")
|
||||
val karmaIeLauncher = NpmPackageVersion("karma-ie-launcher", "*")
|
||||
val karmaSafariLauncher = NpmPackageVersion("karma-safari-launcher", "*")
|
||||
|
||||
val karmaMocha = NpmPackageVersion("karma-mocha", "1.3.0")
|
||||
val karmaWebpack = NpmPackageVersion("karma-webpack", "*")
|
||||
|
||||
val karmaSourceMapSupport = NpmPackageVersion("karma-source-map-support", "1.4.0")
|
||||
}
|
||||
|
||||
data class NpmPackageVersion(val name: String, var version: String) {
|
||||
fun npm(project: Project) = NpmDependency(project, null, name, version)
|
||||
}
|
||||
+44
-53
@@ -7,16 +7,14 @@ package org.jetbrains.kotlin.gradle.targets.js.testing.karma
|
||||
|
||||
import com.google.gson.GsonBuilder
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.process.ProcessForkOptions
|
||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
|
||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion
|
||||
import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm
|
||||
import org.jetbrains.kotlin.gradle.targets.js.karmaChromeLauncher
|
||||
import org.jetbrains.kotlin.gradle.targets.js.karmaPhantomjsLauncher
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmPackageVersion
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
||||
|
||||
@@ -24,15 +22,32 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework {
|
||||
private val config: KarmaConfig = KarmaConfig()
|
||||
private val requiredDependencies = mutableSetOf<NpmPackageVersion>()
|
||||
|
||||
fun useChrome() = useBrowser("Chrome", karmaChromeLauncher)
|
||||
private val versions = project.nodeJs.versions
|
||||
|
||||
fun useChromeCanary() = useBrowser("ChromeCanary", karmaChromeLauncher)
|
||||
init {
|
||||
requiredDependencies.add(versions.karma)
|
||||
|
||||
fun useChromeHeadless() = useBrowser("ChromeHeadless", karmaChromeLauncher)
|
||||
requiredDependencies.add(versions.karmaTeamcityReporter)
|
||||
config.reporters.add("teamcity")
|
||||
|
||||
fun usePhantomJS() = useBrowser("PhantomJS", karmaPhantomjsLauncher)
|
||||
config.singleRun = true
|
||||
}
|
||||
|
||||
fun useFirefox() = useBrowser("Firefox", TODO())
|
||||
fun useChrome() = useBrowser("Chrome", versions.karmaChromeLauncher)
|
||||
|
||||
fun useChromeCanary() = useBrowser("ChromeCanary", versions.karmaChromeLauncher)
|
||||
|
||||
fun useChromeHeadless() = useBrowser("ChromeHeadless", versions.karmaChromeLauncher)
|
||||
|
||||
fun usePhantomJS() = useBrowser("PhantomJS", versions.karmaPhantomJsLauncher)
|
||||
|
||||
fun useFirefox() = useBrowser("Firefox", versions.karmaFirefoxLauncher)
|
||||
|
||||
fun useOpera() = useBrowser("Opera", versions.karmaOperaLauncher)
|
||||
|
||||
fun useSafari() = useBrowser("Safari", versions.karmaSafariLauncher)
|
||||
|
||||
fun useIe() = useBrowser("Ie", versions.karmaIeLauncher)
|
||||
|
||||
fun useBrowser(id: String, dependency: NpmPackageVersion) {
|
||||
config.browsers.add(id)
|
||||
@@ -40,24 +55,24 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework {
|
||||
}
|
||||
|
||||
fun useMocha() {
|
||||
|
||||
requiredDependencies.add(versions.karmaMocha)
|
||||
requiredDependencies.add(versions.mocha)
|
||||
}
|
||||
|
||||
fun useWebpack() {
|
||||
requiredDependencies.add(versions.karmaWebpack)
|
||||
}
|
||||
|
||||
fun useSourceMapSupport() {
|
||||
config.frameworks.add("source-map-support")
|
||||
requiredDependencies.add(versions.karmaSourceMapSupport)
|
||||
}
|
||||
|
||||
override fun configure(dependenciesHolder: HasKotlinDependencies) {
|
||||
dependenciesHolder.dependencies {
|
||||
runtimeOnly(npm("karma", "4.0.1"))
|
||||
runtimeOnly(npm("karma-chrome-launcher", "2.2.0"))
|
||||
runtimeOnly(npm("puppeteer", "1.14.0"))
|
||||
runtimeOnly(npm("karma-source-map-support", "1.4.0"))
|
||||
runtimeOnly(npm("karma-browserify", "6.0.0"))
|
||||
runtimeOnly(npm("browserify", "16.2.3"))
|
||||
runtimeOnly(npm("karma-mocha", "1.3.0"))
|
||||
runtimeOnly(npm("mocha", "6.1.2"))
|
||||
runtimeOnly(npm("karma-teamcity-reporter", "1.1.0"))
|
||||
requiredDependencies.forEach {
|
||||
npm(it.name, it.version)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,48 +89,24 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework {
|
||||
ignoreOutOfRootNodes = true
|
||||
)
|
||||
|
||||
val npmProjectLayout = NpmProject[task.project]
|
||||
val npmProject = task.project.npmProject
|
||||
|
||||
val files = task.nodeModulesToLoad.map {
|
||||
npmProjectLayout.nodeModulesDir.resolve(it).also { file ->
|
||||
check(file.isFile) { "Cannot find ${file.canonicalPath}" }
|
||||
}.canonicalPath
|
||||
}.let {
|
||||
GsonBuilder().create().toJson(it)
|
||||
}
|
||||
config.files.addAll(task.nodeModulesToLoad.map {
|
||||
npmProject.getModuleEntryPath(it)
|
||||
})
|
||||
|
||||
val karmaConfJs = npmProjectLayout.nodeWorkDir.resolve("karma.conf.js")
|
||||
config.basePath = npmProject.nodeModulesDir.absolutePath
|
||||
|
||||
val karmaConfJs = npmProject.nodeWorkDir.resolve("karma.conf.js")
|
||||
karmaConfJs.printWriter().use {
|
||||
//language=JavaScript
|
||||
it.println(
|
||||
"""
|
||||
process.env.CHROME_BIN = require('puppeteer').executablePath();
|
||||
|
||||
module.exports = (config) => {
|
||||
config.set({
|
||||
basePath: 'node_modules',
|
||||
files: $files,
|
||||
frameworks: ['browserify', 'source-map-support', 'mocha'],
|
||||
browsers: ['ChromeHeadless'],
|
||||
reporters: ['teamcity'],
|
||||
singleRun: true,
|
||||
preprocessors: {
|
||||
'*.js': [ 'browserify' ]
|
||||
},
|
||||
browserify: {
|
||||
debug: true
|
||||
}
|
||||
});
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
GsonBuilder().setPrettyPrinting().create().toJson(config, it)
|
||||
}
|
||||
|
||||
val nodeModules = listOf("karma/bin/karma")
|
||||
|
||||
val args = nodeJsArgs +
|
||||
nodeModules.map {
|
||||
npmProjectLayout.nodeModulesDir.resolve(it).also { file ->
|
||||
npmProject.nodeModulesDir.resolve(it).also { file ->
|
||||
check(file.isFile) { "Cannot find ${file.canonicalPath}" }
|
||||
}.canonicalPath
|
||||
} +
|
||||
|
||||
Reference in New Issue
Block a user