UNPKG

typescript-assistant

Version:

Combines and integrates professional Typescript tools into your project

135 lines 5.62 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createNyc = createNyc; function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } function createNyc(dependencies) { const { taskRunner, logger, bus, git } = dependencies; let runningTask; let coolingDown; function startNyc() { return __awaiter(this, arguments, void 0, function* (withCoverage = true, config, testsGlob = "test/**/*-tests.ts*") { let hasFailingTest = false; let myCoolingDown = delay(100); coolingDown = myCoolingDown; yield myCoolingDown; if (coolingDown !== myCoolingDown) { return false; } if (runningTask) { logger.log("nyc", "Aborting previous nyc run"); runningTask.kill(); runningTask = undefined; } else { bus.report({ tool: "test", status: "busy" }); bus.report({ tool: "coverage", status: "busy" }); } let lastLineWasNotOk = false; function handleOutput(line) { if (task === runningTask) { let notOk = /^not ok \d+ (.*)/.exec(line); let ok = /^ok \d+ (.*)/.exec(line); if (notOk) { lastLineWasNotOk = true; logger.log("nyc", `FAILED: ${notOk[1]}`); hasFailingTest = true; } else if (ok) { lastLineWasNotOk = false; } else if (lastLineWasNotOk) { logger.log("nyc", line); } } return true; } function handleError(line) { if (task === runningTask && !line.startsWith("ERROR: Coverage for")) { logger.error("nyc", line); } return true; } if (withCoverage) { runningTask = taskRunner.runTask("./node_modules/.bin/nyc", [ config ? `--nycrc-path ${config}` : "", "--check-coverage", "-- mocha --require ts-node/register/transpile-only --exit --reporter tap", `"${testsGlob}"`, ] .join(" ") .trim() .split(" "), { name: "nyc", logger, handleOutput, handleError, }); } else { logger.log("nyc", "running tests without coverage"); runningTask = taskRunner.runTask("./node_modules/.bin/mocha", [ "--require ts-node/register/transpile-only --exit --reporter tap", `"${testsGlob}"`, ] .join(" ") .split(" "), { name: "nyc", logger, handleOutput, handleError, }); } let task = runningTask; return runningTask.result .then(() => { if (task === runningTask) { runningTask = undefined; logger.log("nyc", withCoverage ? "code coverage OK" : "tests ok"); bus.report({ tool: "test", status: "ready", errors: 0 }); bus.report({ tool: "coverage", status: "ready", errors: 0 }); } return true; }) .catch(() => __awaiter(this, void 0, void 0, function* () { if (task === runningTask) { runningTask = undefined; logger.log("nyc", "code coverage FAILED"); bus.report({ tool: "test", status: "ready", errors: hasFailingTest ? 1 : 0, }); bus.report({ tool: "coverage", status: "ready", errors: 1 }); } let isOnMasterOrRelease = yield git.isOnMasterOrReleaseBranch(); return !isOnMasterOrRelease && !hasFailingTest; })); }); } let callback; return { run(withCoverage, config, testsGlob) { return startNyc(withCoverage, config, testsGlob).catch(() => false); }, start(triggers, withCoverage, config, testsGlob) { callback = () => startNyc(withCoverage, config, testsGlob); bus.registerAll(triggers, callback); callback().catch(() => false); }, stop() { bus.unregister(callback); }, }; } //# sourceMappingURL=nyc.js.map