turbo-gulp
Version:
Gulp tasks to boost high-quality projects.
69 lines (68 loc) • 2.93 kB
JavaScript
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,
}));
});
}