diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 6c74ab1ba50..725f76c095c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -233,6 +233,9 @@ class KotlinKarma( // noinspection JSUnnecessarySemicolon ;(function(config) { const webpack = require('webpack'); + // https://github.com/webpack/webpack/issues/12951 + const PatchSourceMapSource = require('kotlin-test-js-runner/webpack-5-debug'); + config.plugins.push(new PatchSourceMapSource()) config.plugins.push(new webpack.SourceMapDevToolPlugin({ moduleFilenameTemplate: "[absolute-resource-path]" })) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index a2b8a9b6a6b..455f8db3dd3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -442,7 +442,7 @@ data class KotlinWebpackConfig( // noinspection JSUnnecessarySemicolon ;(function(config) { const tcErrorPlugin = require('kotlin-test-js-runner/tc-log-error-webpack'); - config.plugins.push(new tcErrorPlugin(tcErrorPlugin)) + config.plugins.push(new tcErrorPlugin()) config.stats = config.stats || {} Object.assign(config.stats, config.stats, { warnings: false, diff --git a/libraries/tools/kotlin-test-js-runner/build.gradle.kts b/libraries/tools/kotlin-test-js-runner/build.gradle.kts index 4c47ed4dd49..b38373b0566 100644 --- a/libraries/tools/kotlin-test-js-runner/build.gradle.kts +++ b/libraries/tools/kotlin-test-js-runner/build.gradle.kts @@ -54,6 +54,7 @@ tasks { "mocha-kotlin-reporter.js", "tc-log-appender.js", "tc-log-error-webpack.js", + "webpack-5-debug.js", "package.json", "rollup.config.js", "tsconfig.json", diff --git a/libraries/tools/kotlin-test-js-runner/rollup.config.js b/libraries/tools/kotlin-test-js-runner/rollup.config.js index 4c741cedd44..3b6373f93e8 100644 --- a/libraries/tools/kotlin-test-js-runner/rollup.config.js +++ b/libraries/tools/kotlin-test-js-runner/rollup.config.js @@ -66,6 +66,13 @@ export default [ format: 'cjs' } }, + { + input: './webpack-5-debug.js', + output: { + file: 'lib/webpack-5-debug.js', + format: 'cjs' + } + }, { input: './mocha-kotlin-reporter.js', external: ['path', 'util'], diff --git a/libraries/tools/kotlin-test-js-runner/webpack-5-debug.js b/libraries/tools/kotlin-test-js-runner/webpack-5-debug.js new file mode 100644 index 00000000000..e2b1d3a30cb --- /dev/null +++ b/libraries/tools/kotlin-test-js-runner/webpack-5-debug.js @@ -0,0 +1,26 @@ +"use strict"; + +const {SourceMapSource} = require("webpack-sources"); +const {absolutify} = require("webpack/lib/util/identifier"); + +// https://github.com/webpack/webpack/issues/12951 +class PatchSourceMapSourcePlugin { + apply(compiler) { + compiler.hooks.beforeRun.tap("PathcSourceMapSourcePlugin", compiler => { + const original = SourceMapSource.prototype._ensureSourceMapObject; + + SourceMapSource.prototype._ensureSourceMapObject = function () { + original.call(this) + this._sourceMapAsObject.sources = this._sourceMapAsObject + .sources + .map(source => { + if (!source.startsWith("webpack://")) return source + + return absolutify(compiler.options.context, source.slice(10)) + }) + } + }); + } +} + +module.exports = PatchSourceMapSourcePlugin; \ No newline at end of file