UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

69 lines (68 loc) 2.93 kB
import { existsSync as fileExistsSync, readFileSync } from "fs"; import { default as gulpTslint } from "gulp-tslint"; import { Minimatch } from "minimatch"; import { posix as path } from "path"; import * as tslint from "tslint"; import { Configuration as TslintConfiguration } from "tslint"; import { createCompilerHost, createProgram, parseJsonConfigFileContent, sys as tsSys, } from "typescript"; import { DEFAULT_TYPED_TSLINT_CONFIG } from "../options/tslint"; import * as matcher from "../utils/matcher"; export const taskName = ":lint"; export function getSources(project) { const baseDir = project.root; const sources = []; let patterns; if (project.tslint !== undefined && project.tslint.files !== undefined) { patterns = project.tslint.files; } else { patterns = [path.join(project.srcDir, "**/*.ts")]; } for (const pattern of patterns) { const minimatchPattern = new Minimatch(pattern); const glob = matcher.asString(matcher.join(baseDir, minimatchPattern)); sources.push(glob); } return { baseDir, sources }; } function createTsProgram(tsconfigJson, basePath) { const parseConfigHost = { useCaseSensitiveFileNames: true, readDirectory: tsSys.readDirectory, fileExists: fileExistsSync, readFile: (path) => readFileSync(path, "utf8"), }; const parsed = parseJsonConfigFileContent(tsconfigJson, parseConfigHost, basePath, { noEmit: true }); const host = createCompilerHost(parsed.options, true); return createProgram(parsed.fileNames, parsed.options, host); } export function registerTask(gulp, project) { let configuration; const baseConfig = TslintConfiguration.parseConfigFile(DEFAULT_TYPED_TSLINT_CONFIG, project.root); if (project.tslint !== undefined && project.tslint.configuration !== undefined) { const userRawConfig = project.tslint.configuration; let userConfig; if (typeof userRawConfig === "string") { const configPath = path.join(project.root, userRawConfig); userConfig = TslintConfiguration.loadConfigurationFromPath(configPath); } else { userConfig = TslintConfiguration.parseConfigFile(userRawConfig, project.root); } configuration = TslintConfiguration.extendConfigurationFile(baseConfig, userConfig); } else { configuration = baseConfig; } const program = createTsProgram({ compilerOptions: {} }, project.root); const options = Object.assign({ emitError: true, formatter: "msbuild", tslint }, project.tslint, { configuration, program }); const sources = getSources(project); gulp.task(taskName, function () { return gulp.src(sources.sources, { base: sources.baseDir }) .pipe(gulpTslint(options)) .pipe(gulpTslint.report({ summarizeFailureOutput: true, })); }); }