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.gradle.language.base.plugins.LifecycleBasePlugin
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
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.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
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.KotlinWebpack
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||||
|
|
||||||
class KotlinJsBrowser(
|
class KotlinBrowserJs(
|
||||||
target: KotlinOnlyTarget<KotlinJsCompilation>
|
target: KotlinOnlyTarget<KotlinJsCompilation>
|
||||||
) : KotlinJsInnerTargetConfigurator(target) {
|
) : KotlinJsInnerTargetConfigurator(target) {
|
||||||
|
private val versions = project.nodeJs.versions
|
||||||
|
|
||||||
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
||||||
it.useNodeJs { }
|
it.useKarma {
|
||||||
|
useWebpack()
|
||||||
|
useChromeHeadless()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureRun(compilation: KotlinJsCompilation) {
|
override fun configureRun(compilation: KotlinJsCompilation) {
|
||||||
@@ -27,13 +33,13 @@ class KotlinJsBrowser(
|
|||||||
val compileKotlinTask = compilation.compileKotlinTask
|
val compileKotlinTask = compilation.compileKotlinTask
|
||||||
|
|
||||||
compilation.dependencies {
|
compilation.dependencies {
|
||||||
runtimeOnly(npm("webpack", "4.29.6"))
|
runtimeOnly(versions.webpack)
|
||||||
runtimeOnly(npm("webpack-cli", "3.3.0"))
|
runtimeOnly(versions.webpackCli)
|
||||||
runtimeOnly(npm("webpack-bundle-analyzer", "3.3.2"))
|
runtimeOnly(versions.webpackBundleAnalyzer)
|
||||||
|
|
||||||
// for source map support only
|
// for source map support
|
||||||
runtimeOnly(npm("source-map-loader", "0.2.4"))
|
runtimeOnly(versions.sourceMapLoader.npm(project))
|
||||||
runtimeOnly(npm("source-map-support", "0.5.12"))
|
runtimeOnly(versions.sourceMapSupport.npm(project))
|
||||||
}
|
}
|
||||||
|
|
||||||
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
project.createOrRegisterTask<KotlinWebpack>(disambiguateCamelCased("webpack")) {
|
||||||
+15
-30
@@ -5,47 +5,32 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js
|
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.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
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.nodejs.NodeJsExec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
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.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask
|
||||||
|
|
||||||
class KotlinNodeJs(kotlinPluginVersion: String) :
|
class KotlinNodeJs(target: KotlinOnlyTarget<KotlinJsCompilation>) :
|
||||||
KotlinJsTargetConfigurator(kotlinPluginVersion) {
|
KotlinJsInnerTargetConfigurator(target) {
|
||||||
|
|
||||||
override fun configureTarget(target: KotlinOnlyTarget<KotlinJsCompilation>) {
|
override fun configureDefaultTestFramework(it: KotlinJsTest) {
|
||||||
super.configureTarget(target)
|
it.useNodeJs { }
|
||||||
configureApplication(target)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureApplication(target: KotlinOnlyTarget<KotlinJsCompilation>) {
|
override fun configureRun(compilation: KotlinJsCompilation) {
|
||||||
target.compilations.all { compilation ->
|
// source maps support
|
||||||
if (compilation.name == KotlinCompilation.MAIN_COMPILATION_NAME) {
|
compilation.dependencies {
|
||||||
// source maps support
|
runtimeOnly(kotlin("test-nodejs-runner"))
|
||||||
compilation.dependencies {
|
}
|
||||||
runtimeOnly(kotlin("test-nodejs-runner"))
|
|
||||||
}
|
|
||||||
|
|
||||||
val project = target.project
|
val project = target.project
|
||||||
project.createOrRegisterTask<NodeJsExec>("run") {
|
project.createOrRegisterTask<NodeJsExec>("run") {
|
||||||
it.args(
|
it.args(project.npmProject.compileOutput(compilation.compileKotlinTask))
|
||||||
project.npmProject.compileOutput(compilation.compileKotlinTask),
|
|
||||||
"--require", "kotlin-test-nodejs-runner/kotlin-nodejs-source-map-support.js"
|
// 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
|
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmPackages
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||||
|
|
||||||
open class NodeJsExtension(val project: Project) {
|
open class NodeJsExtension(val project: Project) {
|
||||||
@@ -14,6 +15,9 @@ open class NodeJsExtension(val project: Project) {
|
|||||||
|
|
||||||
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
||||||
|
|
||||||
|
val versions = NpmPackages()
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
fun packageJson(handler: PackageJson.() -> Unit) {
|
fun packageJson(handler: PackageJson.() -> Unit) {
|
||||||
packageJsonHandlers.add(handler)
|
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 com.google.gson.GsonBuilder
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.tasks.Input
|
|
||||||
import org.gradle.process.ProcessForkOptions
|
import org.gradle.process.ProcessForkOptions
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSettings
|
||||||
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec
|
||||||
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
|
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.internal.parseNodeJsStackTraceAsJvm
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.karmaChromeLauncher
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.karmaPhantomjsLauncher
|
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.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
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 config: KarmaConfig = KarmaConfig()
|
||||||
private val requiredDependencies = mutableSetOf<NpmPackageVersion>()
|
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) {
|
fun useBrowser(id: String, dependency: NpmPackageVersion) {
|
||||||
config.browsers.add(id)
|
config.browsers.add(id)
|
||||||
@@ -40,24 +55,24 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun useMocha() {
|
fun useMocha() {
|
||||||
|
requiredDependencies.add(versions.karmaMocha)
|
||||||
|
requiredDependencies.add(versions.mocha)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun useWebpack() {
|
fun useWebpack() {
|
||||||
|
requiredDependencies.add(versions.karmaWebpack)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun useSourceMapSupport() {
|
||||||
|
config.frameworks.add("source-map-support")
|
||||||
|
requiredDependencies.add(versions.karmaSourceMapSupport)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configure(dependenciesHolder: HasKotlinDependencies) {
|
override fun configure(dependenciesHolder: HasKotlinDependencies) {
|
||||||
dependenciesHolder.dependencies {
|
dependenciesHolder.dependencies {
|
||||||
runtimeOnly(npm("karma", "4.0.1"))
|
requiredDependencies.forEach {
|
||||||
runtimeOnly(npm("karma-chrome-launcher", "2.2.0"))
|
npm(it.name, it.version)
|
||||||
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"))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,48 +89,24 @@ class KotlinKarma(val project: Project) : KotlinJsTestFramework {
|
|||||||
ignoreOutOfRootNodes = true
|
ignoreOutOfRootNodes = true
|
||||||
)
|
)
|
||||||
|
|
||||||
val npmProjectLayout = NpmProject[task.project]
|
val npmProject = task.project.npmProject
|
||||||
|
|
||||||
val files = task.nodeModulesToLoad.map {
|
config.files.addAll(task.nodeModulesToLoad.map {
|
||||||
npmProjectLayout.nodeModulesDir.resolve(it).also { file ->
|
npmProject.getModuleEntryPath(it)
|
||||||
check(file.isFile) { "Cannot find ${file.canonicalPath}" }
|
})
|
||||||
}.canonicalPath
|
|
||||||
}.let {
|
|
||||||
GsonBuilder().create().toJson(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 {
|
karmaConfJs.printWriter().use {
|
||||||
//language=JavaScript
|
GsonBuilder().setPrettyPrinting().create().toJson(config, it)
|
||||||
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()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val nodeModules = listOf("karma/bin/karma")
|
val nodeModules = listOf("karma/bin/karma")
|
||||||
|
|
||||||
val args = nodeJsArgs +
|
val args = nodeJsArgs +
|
||||||
nodeModules.map {
|
nodeModules.map {
|
||||||
npmProjectLayout.nodeModulesDir.resolve(it).also { file ->
|
npmProject.nodeModulesDir.resolve(it).also { file ->
|
||||||
check(file.isFile) { "Cannot find ${file.canonicalPath}" }
|
check(file.isFile) { "Cannot find ${file.canonicalPath}" }
|
||||||
}.canonicalPath
|
}.canonicalPath
|
||||||
} +
|
} +
|
||||||
|
|||||||
Reference in New Issue
Block a user