From 785d43d7ed84883361988285589b8339049a21b2 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 11 Oct 2019 18:40:23 +0300 Subject: [PATCH] [Gradle, JS] Update npm versions (cherry picked from commit cb31b42930d98b76a7cdef2df89d9d3705e91028) [Gradle, JS] Update npm dependencies - Karma - provide possibility to check exit code - Webpack - bug fixes - Mocha - bug fixes (cherry picked from commit fa647680d3425208b41eccc09ad4b9093a204085) [Gradle, JS] Fully copy of karma-teamcity-reporter (remove npm dependency on it) [Gradle, JS] Copy mocha-teamcity-reporter with licensies [Gradle, JS] Depends node test on our own mocha reporter [Gradle, JS] Refactor and extract team city formatting in separate file Check Karma exit code with disabled failOnFailingTestSuite https://github.com/karma-runner/karma/pull/3116 (cherry picked from commit 2cf79b75021141e4c26fa526fd8d1f44948a1edc) --- .../kotlin/gradle/targets/js/NpmVersions.kt | 28 +- .../targets/js/testing/karma/KarmaConfig.kt | 1 + .../targets/js/testing/karma/KotlinKarma.kt | 24 +- .../targets/js/testing/mocha/KotlinMocha.kt | 5 +- .../kotlin-test-js-runner/build.gradle.kts | 1 + .../karma-kotlin-reporter.js | 160 +++++-- .../mocha-kotlin-reporter.js | 142 ++++++ .../tools/kotlin-test-js-runner/package.json | 3 +- .../kotlin-test-js-runner/rollup.config.js | 16 + .../src/TeamCityMessagesFlow.ts | 3 +- .../src/teamcity-format.d.ts | 1 + .../src/teamcity-format.js | 58 +++ .../tools/kotlin-test-js-runner/src/utils.ts | 26 -- .../tools/kotlin-test-js-runner/yarn.lock | 434 +----------------- license/README.md | 9 + .../mocha-teamcity-reporter_LICENSE.txt | 21 + 16 files changed, 383 insertions(+), 549 deletions(-) create mode 100644 libraries/tools/kotlin-test-js-runner/mocha-kotlin-reporter.js create mode 100644 libraries/tools/kotlin-test-js-runner/src/teamcity-format.d.ts create mode 100644 libraries/tools/kotlin-test-js-runner/src/teamcity-format.js create mode 100644 license/third_party/mocha-teamcity-reporter_LICENSE.txt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt index f12da2d1efb1c..0d0aa229126eb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt @@ -15,41 +15,37 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency class NpmVersions { val dukat = NpmPackageVersion("dukat", "0.0.19") - 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 webpack = NpmPackageVersion("webpack", "4.41.2") + val webpackCli = NpmPackageVersion("webpack-cli", "3.3.9") + val webpackBundleAnalyzer = NpmPackageVersion("webpack-bundle-analyzer", "3.5.2") + val webpackDevServer = NpmPackageVersion("webpack-dev-server", "3.8.2") // Temporarily use our own source-map-loader, while original source-map-loader is not updated // https://github.com/webpack-contrib/source-map-loader/pull/91 val kotlinSourceMapLoader = KotlinGradleNpmPackage("source-map-loader") val sourceMapLoader = NpmPackageVersion("source-map-loader", "0.2.4") - val sourceMapSupport = NpmPackageVersion("source-map-support", "0.5.12") + val sourceMapSupport = NpmPackageVersion("source-map-support", "0.5.13") - val mocha = NpmPackageVersion("mocha", "6.1.2") - val mochaTeamCityReporter = NpmPackageVersion("mocha-teamcity-reporter", ">=2.0.0") + val mocha = NpmPackageVersion("mocha", "6.2.2") - val karma = NpmPackageVersion("karma", "4.0.1") - val karmaTeamcityReporter = NpmPackageVersion("karma-teamcity-reporter", "1.1.0") + val karma = NpmPackageVersion("karma", "4.4.1") - val karmaChromeLauncher = NpmPackageVersion("karma-chrome-launcher", "2.2.0") + val karmaChromeLauncher = NpmPackageVersion("karma-chrome-launcher", "3.1.0") val karmaPhantomJsLauncher = NpmPackageVersion("karma-phantomjs-launcher", "1.0.4") - val karmaFirefoxLauncher = NpmPackageVersion("karma-firefox-launcher", "1.1.0") + val karmaFirefoxLauncher = NpmPackageVersion("karma-firefox-launcher", "1.2.0") val karmaOperaLauncher = NpmPackageVersion("karma-opera-launcher", "1.0.0") val karmaIeLauncher = NpmPackageVersion("karma-ie-launcher", "1.0.0") val karmaSafariLauncher = NpmPackageVersion("karma-safari-launcher", "1.0.0") val karmaMocha = NpmPackageVersion("karma-mocha", "1.3.0") - val karmaWebpack = NpmPackageVersion("karma-webpack", "^4.0.0-rc.6") - val karmaCoverage = NpmPackageVersion("karma-coverage", "1.1.2") + val karmaWebpack = NpmPackageVersion("karma-webpack", "4.0.2") + val karmaCoverage = NpmPackageVersion("karma-coverage", "2.0.1") val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "0.3.7") - val puppeteer = NpmPackageVersion("puppeteer", "1.19.0") + val puppeteer = NpmPackageVersion("puppeteer", "1.20.0") val kotlinJsTestRunner = KotlinGradleNpmPackage("test-js-runner") - - val istanbulInstrumenterLoader = NpmPackageVersion("istanbul-instrumenter-loader", "3.0.1") } interface RequiredKotlinJsDependency { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt index ea7762658c15f..919d31f0a7d50 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KarmaConfig.kt @@ -15,6 +15,7 @@ data class KarmaConfig( val client: KarmaClient = KarmaClient(), val browsers: MutableList = mutableListOf(), val customLaunchers: MutableMap = mutableMapOf(), + val failOnFailingTestSuite: Boolean = false, val reporters: MutableList = mutableListOf(), val preprocessors: MutableMap> = mutableMapOf(), var coverageReporter: CoverageReporter? = null 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 63a277b6015e7..33cc52ee61465 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 @@ -62,7 +62,6 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF } private fun useKotlinReporter() { - requiredDependencies.add(versions.karmaTeamcityReporter) config.reporters.add("karma-kotlin-reporter") confJsWriters.add { @@ -325,22 +324,15 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF return object : JSServiceMessagesTestExecutionSpec( forkOptions, args, - false, + true, clientSettings ) { lateinit var progressLogger: ProgressLogger - var isLaunchFailed: Boolean = false - override fun wrapExecute(body: () -> Unit) { project.operation("Running and building tests with karma and webpack") { progressLogger = this body() - - if (isLaunchFailed) { - showSuppressedOutput() - throw IllegalStateException("Launch of some browsers was failed") - } } } @@ -358,7 +350,7 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF val value = text.trimEnd() progressLogger.progress(value) - parseConsole(value) + super.printNonTestOutput(text) } override fun processStackTrace(stackTrace: String): String = @@ -389,16 +381,6 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF return rawSuiteNameOnly.replace(" ", ".") // sample.a.DeepPackageTest.Inner } - - private fun parseConsole(text: String) { - if (KARMA_PROBLEM.matches(text)) { - log.error(text) - isLaunchFailed = true - return - } - - super.printNonTestOutput(text) - } } } } @@ -418,7 +400,5 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF companion object { const val CHROME_BIN = "CHROME_BIN" const val CHROME_CANARY_BIN = "CHROME_CANARY_BIN" - - val KARMA_PROBLEM = "(?m)^.*\\d{2} \\d{2} \\d{4,} \\d{2}:\\d{2}:\\d{2}.\\d{3}:(ERROR|WARN) \\[.*]: (.*)\$".toRegex() } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt index 527f70680d91a..880eee05f793e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt @@ -31,8 +31,7 @@ class KotlinMocha(override val compilation: KotlinJsCompilation) : KotlinJsTestF override val requiredNpmDependencies: Collection get() = listOf( KotlinGradleNpmPackage("test-js-runner"), - versions.mocha, - versions.mochaTeamCityReporter + versions.mocha ) override fun createTestExecutionSpec( @@ -66,7 +65,7 @@ class KotlinMocha(override val compilation: KotlinJsCompilation) : KotlinJsTestF nodeModules.map { npmProject.require(it) } + cliArgs.toList() + - listOf("--reporter", "mocha-teamcity-reporter") + + listOf("--reporter", "kotlin-test-js-runner/mocha-kotlin-reporter.js") + listOf( "-r", "kotlin-test-js-runner/kotlin-nodejs-source-map-support.js" ) diff --git a/libraries/tools/kotlin-test-js-runner/build.gradle.kts b/libraries/tools/kotlin-test-js-runner/build.gradle.kts index 61e9e485d486f..c63fc1667d860 100644 --- a/libraries/tools/kotlin-test-js-runner/build.gradle.kts +++ b/libraries/tools/kotlin-test-js-runner/build.gradle.kts @@ -51,6 +51,7 @@ tasks { "nodejs.ts", "karma.ts", "karma-kotlin-reporter.js", + "mocha-kotlin-reporter.js", "nodejs-source-map-support.js", "package.json", "rollup.config.js", diff --git a/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js b/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js index adf94a8740431..40230fa0b92c4 100644 --- a/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js +++ b/libraries/tools/kotlin-test-js-runner/karma-kotlin-reporter.js @@ -1,4 +1,15 @@ -const util = require('util'); +import { + BLOCK_CLOSED, + BLOCK_OPENED, + formatMessage, + SUITE_END, + SUITE_START, + TEST_END, + TEST_FAILED, + TEST_IGNORED, + TEST_START +} from "./src/teamcity-format"; + const resolve = require('path').resolve; /** @@ -72,50 +83,55 @@ function createFormatError(config, emitter) { * The MIT License * Copyright (C) 2011-2013 Vojta Jína and contributors */ -const escapeMessage = function (message) { - if (message === null || message === undefined) { - return '' - } - - return message.toString() - .replace(/\|/g, '||') - .replace(/'/g, "|'") - .replace(/\n/g, '|n') - .replace(/\r/g, '|r') - .replace(/\u0085/g, '|x') - .replace(/\u2028/g, '|l') - .replace(/\u2029/g, '|p') - .replace(/\[/g, '|[') - .replace(/]/g, '|]') -}; - -const formatMessage = function () { - const args = Array.prototype.slice.call(arguments); - - for (let i = args.length - 1; i > 0; i--) { - args[i] = escapeMessage(args[i]) +const hashString = function (s) { + let hash = 0 + let i + let chr + let len + + if (s === 0) return hash + for (i = 0, len = s.length; i < len; i++) { + chr = s.charCodeAt(i) + hash = ((hash << 5) - hash) + chr + hash |= 0 } - - return util.format.apply(null, args) + '\n' -}; + return hash +} // This reporter extends karma-teamcity-reporter // It is necessary, because karma-teamcity-reporter can't write browser's log // And additionally it overrides flushLogs, because flushLogs adds redundant spaces after some messages const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { - const teamcityReporter = require("karma-teamcity-reporter")["reporter:teamcity"][1]; - teamcityReporter.call(this, baseReporterDecorator); + baseReporterDecorator(this) + const self = this + + const formatError = createFormatError(config, emitter) + + const END_KOTLIN_TEST = "'--END_KOTLIN_TEST--" + + const reporter = this + const initializeBrowser = function (browser) { + reporter.browserResults[browser.id] = { + name: browser.name, + log: [], + consoleCollector: [], + consoleResultCollector: [], + lastSuite: null, + flowId: 'karmaTC' + hashString(browser.name + ((new Date()).getTime())) + browser.id + } + } - const formatError = createFormatError(config, emitter); + this.onRunStart = function (browsers) { + this.write(formatMessage(BLOCK_OPENED, 'JavaScript Unit Tests')) - const END_KOTLIN_TEST = "'--END_KOTLIN_TEST--"; + this.browserResults = {} + // Support Karma 0.10 (TODO: remove) + browsers.forEach(initializeBrowser) + } - const tcOnBrowserStart = this.onBrowserStart; this.onBrowserStart = function (browser) { - tcOnBrowserStart.call(this, browser); - this.browserResults[browser.id].consoleCollector = []; - this.browserResults[browser.id].consoleResultCollector = {}; - }; + initializeBrowser(browser) + } const concatenateFqn = function (result) { return `${result.suite.join(".")}.${result.description}` @@ -125,7 +141,7 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { const browserResult = this.browserResults[browser.id]; if (log.startsWith(END_KOTLIN_TEST)) { - var result = JSON.parse(log.substring(END_KOTLIN_TEST.length, log.length - 1)); + const result = JSON.parse(log.substring(END_KOTLIN_TEST.length, log.length - 1)); browserResult.consoleResultCollector[concatenateFqn(result)] = browserResult.consoleCollector; browserResult.consoleCollector = []; return @@ -136,45 +152,87 @@ const KarmaKotlinReporter = function (baseReporterDecorator, config, emitter) { } }; - const tcSpecSuccess = this.specSuccess; this.specSuccess = function (browser, result) { - tcSpecSuccess.call(this, browser, result); - - const log = this.getLog(browser, result); + const log = this.getLog(browser, result) + const testName = result.description - const endMessage = log.pop(); + log.push(formatMessage(TEST_START, testName)) this.browserResults[browser.id].consoleResultCollector[concatenateFqn(result)].forEach(item => { log.push(item) }); - log.push(endMessage); - }; + + log.push(formatMessage(TEST_END, testName, result.time)) + } this.specFailure = function (browser, result) { - const log = this.getLog(browser, result); - const testName = result.description; + const log = this.getLog(browser, result) + const testName = result.description + + log.push(formatMessage(TEST_START, testName)) - log.push(formatMessage(this.TEST_START, testName)); this.browserResults[browser.id].consoleResultCollector[concatenateFqn(result)].forEach(item => { log.push(item) }); - log.push(formatMessage(this.TEST_FAILED, testName, + log.push(formatMessage(TEST_FAILED, testName, "FAILED", result.log .map(log => formatError(log)) .join('\n\n') )); - log.push(formatMessage(this.TEST_END, testName, result.time)); - }; + + log.push(formatMessage(TEST_END, testName, result.time)) + } + + this.specSkipped = function (browser, result) { + const log = this.getLog(browser, result) + const testName = result.description + + log.push(formatMessage(TEST_IGNORED, testName)) + } + + this.onRunComplete = function () { + Object.keys(this.browserResults).forEach(function (browserId) { + const browserResult = self.browserResults[browserId] + const log = browserResult.log + if (browserResult.lastSuite) { + log.push(formatMessage(SUITE_END, browserResult.lastSuite)) + } + + self.flushLogs(browserResult) + }) + self.write(formatMessage(BLOCK_CLOSED, 'JavaScript Unit Tests')) + } + + this.getLog = function (browser, result) { + const browserResult = this.browserResults[browser.id] + let suiteName = browser.name + const moduleName = result.suite.join(' ') + + if (moduleName) { + suiteName = moduleName.concat('.', suiteName) + } + + const log = browserResult.log + if (browserResult.lastSuite !== suiteName) { + if (browserResult.lastSuite) { + log.push(formatMessage(SUITE_END, browserResult.lastSuite)) + } + this.flushLogs(browserResult) + browserResult.lastSuite = suiteName + log.push(formatMessage(SUITE_START, suiteName)) + } + return log + } this.flushLogs = function (browserResult) { while (browserResult.log.length > 0) { let line = browserResult.log.shift(); - line = line.replace("flowId=''", "flowId='" + browserResult.flowId + "'"); + line = line.replace("flowId='%s'", "flowId='" + browserResult.flowId + "'"); this.write(line); } } -}; +} KarmaKotlinReporter.$inject = ['baseReporterDecorator', 'config', 'emitter']; diff --git a/libraries/tools/kotlin-test-js-runner/mocha-kotlin-reporter.js b/libraries/tools/kotlin-test-js-runner/mocha-kotlin-reporter.js new file mode 100644 index 0000000000000..6322f79dc896e --- /dev/null +++ b/libraries/tools/kotlin-test-js-runner/mocha-kotlin-reporter.js @@ -0,0 +1,142 @@ +/** + * From mocha-teamcity-reporter + * The MIT License + * Copyright (c) 2016 Jamie Sherriff + */ + +/** + * Teamcity doc reference https://confluence.jetbrains.com/display/TCD10/Build+Script+Interaction+with+TeamCity + * + * Module dependencies. + */ +'use strict'; + +import { + formatMessage, + SUITE_END, + SUITE_END_NO_DURATION, + SUITE_START, + TEST_END, + TEST_END_NO_DURATION, + TEST_FAILED, + TEST_FAILED_COMPARISON, + TEST_IGNORED, + TEST_START +} from "./src/teamcity-format"; + +const processPID = process.pid.toString(); + +let Base, log, logError; + +Base = require('mocha').reporters.Base; +log = console.log; +logError = console.error; + +function isNil(value) { + return value == null; // eslint-disable-line +} + +/** + * Initialize a new `Teamcity` reporter. + * + * @param {Runner} runner + * @param {options} options + * @api public + */ + +function Teamcity(runner, options) { + options = options || {}; + const reporterOptions = options.reporterOptions || {}; + let flowId, useStdError, recordHookFailures, actualVsExpected; + (reporterOptions.flowId) ? flowId = reporterOptions.flowId : flowId = process.env['MOCHA_TEAMCITY_FLOWID'] || processPID; + (reporterOptions.useStdError) ? useStdError = reporterOptions.useStdError : useStdError = process.env['USE_STD_ERROR']; + (reporterOptions.recordHookFailures) ? recordHookFailures = reporterOptions.recordHookFailures : recordHookFailures = + process.env['RECORD_HOOK_FAILURES']; + (reporterOptions.actualVsExpected) ? actualVsExpected = reporterOptions.actualVsExpected : actualVsExpected = + process.env['ACTUAL_VS_EXPECTED']; + (useStdError) ? useStdError = (useStdError.toLowerCase() === 'true') : useStdError = false; + (recordHookFailures) ? recordHookFailures = (recordHookFailures.toLowerCase() === 'true') : recordHookFailures = false; + actualVsExpected ? actualVsExpected = (actualVsExpected.toLowerCase() === 'true') : actualVsExpected = false; + Base.call(this, runner); + let stats = this.stats; + const topLevelSuite = reporterOptions.topLevelSuite || process.env['MOCHA_TEAMCITY_TOP_LEVEL_SUITE']; + + runner.on('suite', function (suite) { + if (suite.root) { + if (topLevelSuite) { + log(formatMessage(SUITE_START, topLevelSuite, flowId)); + } + return; + } + suite.startDate = new Date(); + log(formatMessage(SUITE_START, suite.title, flowId)); + }); + + runner.on('test', function (test) { + log(formatMessage(TEST_START, test.title, flowId)); + }); + + runner.on('fail', function (test, err) { + if (actualVsExpected && (err.actual && err.expected)) { + if (useStdError) { + logError(formatMessage(TEST_FAILED_COMPARISON, test.title, err.message, err.stack, err.actual, + err.expected, flowId)); + } + else { + log(formatMessage(TEST_FAILED_COMPARISON, test.title, err.message, err.stack, err.actual, + err.expected, flowId)); + } + } + else { + if (useStdError) { + logError(formatMessage(TEST_FAILED, test.title, err.message, err.stack, flowId)); + } + else { + log(formatMessage(TEST_FAILED, test.title, err.message, err.stack, flowId)); + } + } + }); + + runner.on('pending', function (test) { + log(formatMessage(TEST_IGNORED, test.title, test.title, flowId)); + }); + + runner.on('test end', function (test) { + // This is necessary not to emit `test end` event on skipped tests + if (test.isPending()) return + + if (isNil(test.duration)) { + log(formatMessage(TEST_END_NO_DURATION, test.title, flowId)); + } + else { + log(formatMessage(TEST_END, test.title, test.duration.toString(), flowId)); + } + }); + + runner.on('hook', function (test) { + if (recordHookFailures) { + log(formatMessage(TEST_START, test.title, flowId)); + } + }); + + runner.on('suite end', function (suite) { + if (suite.root) return; + log(formatMessage(SUITE_END, suite.title, new Date() - suite.startDate, flowId)); + }); + + runner.on('end', function () { + let duration; + (typeof stats === 'undefined') ? duration = null : duration = stats.duration; + if (topLevelSuite) { + isNil(duration) ? log(formatMessage(SUITE_END_NO_DURATION, topLevelSuite, flowId)) : log( + formatMessage(SUITE_END, topLevelSuite, duration, flowId)); + } + }); +} + + +/** + * Expose `Teamcity`. + */ + +exports = module.exports = Teamcity; \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/package.json b/libraries/tools/kotlin-test-js-runner/package.json index 34f0f817861af..50cafa41cde16 100644 --- a/libraries/tools/kotlin-test-js-runner/package.json +++ b/libraries/tools/kotlin-test-js-runner/package.json @@ -11,7 +11,7 @@ "lib/**/*" ], "scripts": { - "build": "rimraf lib/* && rollup -c rollup.config.js && copyfiles \"karma-kotlin-reporter.js\" lib" + "build": "rimraf lib/* && rollup -c rollup.config.js" }, "dependencies": { "@types/node": "^10.12.21", @@ -19,7 +19,6 @@ "browser-process-hrtime": "^1.0.0" }, "devDependencies": { - "copyfiles": "^2.1.0", "rimraf": "^2.6.3", "rollup": "^1.1.2", "rollup-plugin-commonjs": "^9.2.0", diff --git a/libraries/tools/kotlin-test-js-runner/rollup.config.js b/libraries/tools/kotlin-test-js-runner/rollup.config.js index 5235919fda4c8..7564757794c0a 100644 --- a/libraries/tools/kotlin-test-js-runner/rollup.config.js +++ b/libraries/tools/kotlin-test-js-runner/rollup.config.js @@ -44,6 +44,22 @@ export default [ sourcemap: true }, plugins: plugins() + }, + { + input: './karma-kotlin-reporter.js', + external: ['path', 'util'], + output: { + file: 'lib/karma-kotlin-reporter.js', + format: 'cjs' + } + }, + { + input: './mocha-kotlin-reporter.js', + external: ['path', 'util'], + output: { + file: 'lib/mocha-kotlin-reporter.js', + format: 'cjs' + } } ] diff --git a/libraries/tools/kotlin-test-js-runner/src/TeamCityMessagesFlow.ts b/libraries/tools/kotlin-test-js-runner/src/TeamCityMessagesFlow.ts index fdeb9d7248d85..ede859c53f43b 100644 --- a/libraries/tools/kotlin-test-js-runner/src/TeamCityMessagesFlow.ts +++ b/libraries/tools/kotlin-test-js-runner/src/TeamCityMessagesFlow.ts @@ -1,4 +1,5 @@ -import {dateTimeWithoutTimeZone, newFlowId, tcEscape} from "./utils" +import {dateTimeWithoutTimeZone, newFlowId} from "./utils" +import {tcEscape} from "./teamcity-format"; export type TeamCityMessageData = { [key: string]: any } diff --git a/libraries/tools/kotlin-test-js-runner/src/teamcity-format.d.ts b/libraries/tools/kotlin-test-js-runner/src/teamcity-format.d.ts new file mode 100644 index 0000000000000..a21fc0cb006d0 --- /dev/null +++ b/libraries/tools/kotlin-test-js-runner/src/teamcity-format.d.ts @@ -0,0 +1 @@ +export function tcEscape(str: string): string \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/src/teamcity-format.js b/libraries/tools/kotlin-test-js-runner/src/teamcity-format.js new file mode 100644 index 0000000000000..9eecf18943872 --- /dev/null +++ b/libraries/tools/kotlin-test-js-runner/src/teamcity-format.js @@ -0,0 +1,58 @@ +/** + * From mocha-teamcity-reporter + * The MIT License + * Copyright (c) 2016 Jamie Sherriff + */ +export const TEST_IGNORED = `##teamcity[testIgnored name='%s' message='%s' flowId='%s']`; +export const SUITE_START = `##teamcity[testSuiteStarted name='%s' flowId='%s']`; +export const SUITE_END = `##teamcity[testSuiteFinished name='%s' duration='%s' flowId='%s']`; +export const SUITE_END_NO_DURATION = `##teamcity[testSuiteFinished name='%s' flowId='%s']`; +export const TEST_START = `##teamcity[testStarted name='%s' captureStandardOutput='true' flowId='%s']`; +export const TEST_FAILED = `##teamcity[testFailed name='%s' message='%s' details='%s' captureStandardOutput='true' flowId='%s']`; +export const TEST_FAILED_COMPARISON = `##teamcity[testFailed type='comparisonFailure' name='%s' message='%s' \ +details='%s' captureStandardOutput='true' actual='%s' expected='%s' flowId='%s']`; +export const TEST_END = `##teamcity[testFinished name='%s' duration='%s' flowId='%s']`; +export const TEST_END_NO_DURATION = `##teamcity[testFinished name='%s' flowId='%s']`; +export const BLOCK_OPENED = `##teamcity[blockOpened name='%s' flowId='%s']` +export const BLOCK_CLOSED = `##teamcity[blockClosed name='%s' flowId='%s']` + +/** + * from teamcity-service-messages + * Copyright (c) 2013 Aaron Forsander + * + * Escape string for TeamCity output. + * @see https://confluence.jetbrains.com/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-servMsgsServiceMessages + */ + +const util = require('util'); + +export function tcEscape(str) { + if (!str) { + return ''; + } + + return str + .toString() + .replace(/\x1B.*?m/g, '') // eslint-disable-line no-control-regex + .replace(/\|/g, '||') + .replace(/\n/g, '|n') + .replace(/\r/g, '|r') + .replace(/\[/g, '|[') + .replace(/\]/g, '|]') + .replace(/\u0085/g, '|x') // next line + .replace(/\u2028/g, '|l') // line separator + .replace(/\u2029/g, '|p') // paragraph separator + .replace(/'/g, '|\''); +} + +export function formatMessage() { + let formattedArguments = []; + const args = Array.prototype.slice.call(arguments, 0); + // Format all arguments for TC display (it escapes using the pipe char). + let tcMessage = args.shift(); + args.forEach((param) => { + formattedArguments.push(tcEscape(param)); + }); + formattedArguments.unshift(tcMessage); + return util.format.apply(util, formattedArguments); +} \ No newline at end of file diff --git a/libraries/tools/kotlin-test-js-runner/src/utils.ts b/libraries/tools/kotlin-test-js-runner/src/utils.ts index 1714c914b2159..5374588e80cf0 100644 --- a/libraries/tools/kotlin-test-js-runner/src/utils.ts +++ b/libraries/tools/kotlin-test-js-runner/src/utils.ts @@ -1,29 +1,3 @@ - -/** - * from teamcity-service-messages - * Copyright (c) 2013 Aaron Forsander - * - * Escape string for TeamCity output. - * @see https://confluence.jetbrains.com/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-servMsgsServiceMessages - */ -export function tcEscape(str: string): string { - if (!str) { - return ''; - } - - return str - .toString() - .replace(/\|/g, '||') - .replace(/\n/g, '|n') - .replace(/\r/g, '|r') - .replace(/\[/g, '|[') - .replace(/\]/g, '|]') - .replace(/\u0085/g, '|x') // next line - .replace(/\u2028/g, '|l') // line separator - .replace(/\u2029/g, '|p') // paragraph separator - .replace(/'/g, '|\''); -} - /** * From teamcity-service-messages. * Copyright 2013 Aaron Forsander diff --git a/libraries/tools/kotlin-test-js-runner/yarn.lock b/libraries/tools/kotlin-test-js-runner/yarn.lock index 7d86b2cf8b0b4..95911124ad597 100644 --- a/libraries/tools/kotlin-test-js-runner/yarn.lock +++ b/libraries/tools/kotlin-test-js-runner/yarn.lock @@ -45,12 +45,7 @@ acorn@^6.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -116,11 +111,6 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -130,15 +120,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -161,56 +142,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -copyfiles@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.1.1.tgz#d430e122d7880f92c45d372208b0af03b0c39db6" - integrity sha512-y6DZHve80whydXzBal7r70TBgKMPKesVRR1Sn/raUu7Jh/i7iSLSyGvYaq0eMJ/3Y/CKghwzjY32q1WzEnpp3Q== - dependencies: - glob "^7.0.5" - minimatch "^3.0.3" - mkdirp "^0.5.1" - noms "0.0.0" - through2 "^2.0.1" - yargs "^13.2.4" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -231,19 +167,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -281,13 +204,6 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -314,18 +230,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -341,7 +245,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.5, glob@^7.1.3: +glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -371,16 +275,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -408,11 +307,6 @@ is-extglob@^1.0.0: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -447,26 +341,11 @@ is-primitive@^2.0.0: resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -506,21 +385,6 @@ kind-of@^6.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - magic-string@^0.25.2: version "0.25.3" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.3.tgz#34b8d2a2c7fec9d9bdf9929a3fd81d271ef35be9" @@ -528,27 +392,11 @@ magic-string@^0.25.2: dependencies: sourcemap-codec "^1.4.4" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -573,43 +421,13 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -noms@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk= - dependencies: - inherits "^2.0.1" - readable-stream "~1.0.31" - normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -617,13 +435,6 @@ normalize-path@^2.0.1: dependencies: remove-trailing-separator "^1.0.1" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -632,56 +443,13 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -692,21 +460,11 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -717,19 +475,6 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -739,29 +484,6 @@ randomatic@^3.0.0: kind-of "^6.0.0" math-random "^1.0.1" -readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -784,16 +506,6 @@ repeat-string@^1.5.2: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -900,43 +612,11 @@ rollup@^1.1.2: "@types/node" "^12.0.10" acorn "^6.1.1" -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - serialize-javascript@^1.7.0: version "1.9.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -979,39 +659,6 @@ sourcemap-codec@^1.4.4: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1035,14 +682,6 @@ terser@^4.1.0: source-map "~0.6.1" source-map-support "~0.5.12" -through2@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - tslib@1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" @@ -1063,68 +702,7 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yargs-parser@^13.1.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" diff --git a/license/README.md b/license/README.md index cef8660c727c6..4805b8b5518cb 100644 --- a/license/README.md +++ b/license/README.md @@ -187,11 +187,20 @@ any distributions of the tools or libraries: and [license/third_party/karma-teamcity-reporter_LICENSE.txt](third_party/karma-teamcity-reporter_LICENSE.txt)) - Origin: Copyright (C) 2011-2019 Google, Inc. and Copyright (C) 2011-2013 Vojta Jína and contributors. + - Path: libraries/tools/kotlin-test-js-runner/mocha-kotlin-reporter.js + - License: MIT ([license/third_party/mocha-teamcity-reporter_LICENSE.txt](third_party/mocha-teamcity-reporter_LICENSE.txt)) + - Origin: Copyright (c) 2016 Jamie Sherriff + - Path: libraries/tools/kotlin-test-js-runner/src/utils.ts - License: MIT ([license/third_party/teamcity-service-messages_LICENSE.txt](third_party/teamcity-service-messages_LICENSE.txt) and [license/third_party/lodash_LICENSE.txt](third_party/lodash_LICENSE.txt)) - Origin: Copyright (c) 2013 Aaron Forsander and Copyright JS Foundation and other contributors + - Path: libraries/tools/kotlin-test-js-runner/src/teamcity-format.js + - License: MIT ([license/third_party/mocha-teamcity-reporter_LICENSE.txt](third_party/mocha-teamcity-reporter_LICENSE.txt) + and [license/third_party/teamcity-service-messages_LICENSE.txt](third_party/teamcity-service-messages_LICENSE.txt)) + - Origin: Copyright (c) 2016 Jamie Sherriff and Copyright (c) 2013 Aaron Forsander + - Path: libraries/tools/kotlin-source-map-loader/kotlin-source-map-loader.js - License: MIT ([license/third_party/source-map-loader_LICENSE.txt](third_party/source-map-loader_LICENSE.txt)) - Origin: Copyright JS Foundation and other contributors diff --git a/license/third_party/mocha-teamcity-reporter_LICENSE.txt b/license/third_party/mocha-teamcity-reporter_LICENSE.txt new file mode 100644 index 0000000000000..23ca9cd4d7f85 --- /dev/null +++ b/license/third_party/mocha-teamcity-reporter_LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Jamie Sherriff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file