simplr-gulp
Version:
Fully functional gulpfile.js implementation. Tailored for Single Page Application. Written in TypeScript.
95 lines (94 loc) • 3.51 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const ts = require("gulp-typescript");
const paths_1 = require("../../paths/paths");
const path = require("path");
const logger_1 = require("../../utils/logger");
const helpers_1 = require("../../utils/helpers");
class TypescriptBuilderCompiler {
constructor(configFile) {
this.Project = this.createTsProject(configFile);
let tsConfig = this.Project.config;
this.setConfig(tsConfig);
}
setConfig(tsConfig) {
this.Config = {};
this.Config.RootDir = this.generateRootDir(tsConfig.compilerOptions['rootDir']);
this.Config.OutDir = this.generateOutDir(tsConfig.compilerOptions['outDir']);
this.Config.Include = this.generateInclude(tsConfig.include, this.Config.RootDir);
this.Config.Exclude = this.generateExclude(tsConfig.exclude);
this.Config.Src = this.generateSrc(this.Config.Include, this.Config.Exclude);
}
createTsProject(configFile) {
let requiredTypescript = require("typescript");
logger_1.LoggerInstance.withType("TS").info(`Using TypeScript@${requiredTypescript.version}`);
return ts.createProject(configFile, {
typescript: requiredTypescript
});
}
generateSrc(include, exclude) {
let results = include;
if (exclude != null) {
results = results.concat(exclude);
}
return results.map(src => {
return helpers_1.FixSeparator(src);
});
}
generateInclude(include, rootDir) {
let results;
if (include != null) {
let resultInclude = include.map(inc => {
if (inc !== undefined) {
if (path.extname(inc).length === 0) {
return this.addAvailableTsExtensions(inc);
}
else {
return inc;
}
}
}).filter(x => x != null);
resultInclude = resultInclude.map(src => {
return helpers_1.FixSeparator(src);
});
if (resultInclude.indexOf(rootDir) === -1) {
resultInclude.push(rootDir);
}
results = resultInclude;
}
else {
results = [helpers_1.FixSeparator(rootDir)];
}
return results;
}
generateExclude(exclude) {
if (exclude != null) {
let tempExclude = exclude.map(exc => {
if (exc !== undefined) {
return `!${exc}`;
}
});
if (tempExclude.length > 0) {
let resultInclude = tempExclude.filter(x => x != null);
if (tempExclude.length > 0) {
return resultInclude;
}
}
}
return undefined;
}
generateRootDir(rootDir) {
if (rootDir != null) {
return [rootDir, "**", `*${this.addAvailableTsExtensions()}`].join("/");
}
else {
return paths_1.Paths.Builders.AllFiles.InSource(this.addAvailableTsExtensions());
}
}
generateOutDir(outDir) {
return outDir || paths_1.Paths.Directories.Build;
}
addAvailableTsExtensions(name = "") {
return name + ".{ts,tsx}";
}
}
exports.TypescriptBuilderCompiler = TypescriptBuilderCompiler;