Lazypipes and better services stream management

This commit is contained in:
Wesley Wigham 2016-06-20 17:54:38 -07:00
parent b103857b23
commit d7970a5ff3
No known key found for this signature in database
GPG Key ID: D59F87F60C5400C9
2 changed files with 35 additions and 37 deletions

View File

@ -32,6 +32,7 @@ import browserify = require("browserify");
import through2 = require("through2");
import merge2 = require("merge2");
import intoStream = require("into-stream");
import lazypipe = require("lazypipe");
import * as os from "os";
import Linter = require("tslint");
const gulp = helpMaker(originalGulp);
@ -434,55 +435,50 @@ const nodePackageFile = path.join(builtLocalDirectory, "typescript.js");
const nodeDefinitionsFile = path.join(builtLocalDirectory, "typescript.d.ts");
const nodeStandaloneDefinitionsFile = path.join(builtLocalDirectory, "typescript_standalone.d.ts");
const prependCopyright = lazypipe()
.pipe(() => insert.prepend(fs.readFileSync(copyright)));
gulp.task(builtLocalCompiler, false, [servicesFile], () => {
const localCompilerProject = tsc.createProject("src/compiler/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/true));
return localCompilerProject.src()
.pipe(newer(builtLocalCompiler))
.pipe(sourcemaps.init())
.pipe(tsc(localCompilerProject))
.pipe(gIf(useDebugMode, insert.prepend(fs.readFileSync(copyright))))
.pipe(gIf(useDebugMode, prependCopyright()))
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(builtLocalDirectory));
});
gulp.task(servicesFile, false, ["lib", "generate-diagnostics"], (done) => {
gulp.task(servicesFile, false, ["lib", "generate-diagnostics"], () => {
const servicesProject = tsc.createProject("src/services/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/false));
const {js, dts} = servicesProject.src()
.pipe(newer(servicesFile))
.pipe(sourcemaps.init())
.pipe(tsc(servicesProject));
js.pipe(gIf(useDebugMode, insert.prepend(fs.readFileSync(copyright))))
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(builtLocalDirectory))
.on("end", () => {
gulp.src(servicesFile).pipe(insert.transform((content, file) => (file.path = nodePackageFile, content))).pipe(gulp.dest(builtLocalDirectory)).on("end", () => {
// Stanalone/web definition file using global 'ts' namespace
const defs = dts.pipe(insert.prepend(fs.readFileSync(copyright))).pipe(insert.transform((contents, file) => {
file.path = standaloneDefinitionsFile;
return contents.replace(/^(\s*)(export )?const enum (\S+) {(\s*)$/gm, "$1$2enum $3 {$4");
}));
// Official node package definition file, pointed to by 'typings' in package.json
// Created by appending 'export = ts;' at the end of the standalone file to turn it into an external module
const nodeDefs = defs.pipe(clone()).pipe(insert.transform((content, file) => {
file.path = nodeDefinitionsFile;
return content + "\r\nexport = ts;";
}));
// Node package definition file to be distributed without the package. Created by replacing
// 'ts' namespace with '"typescript"' as a module.
const nodeStandaloneDefs = defs.pipe(clone()).pipe(insert.transform((content, file) => {
file.path = nodeStandaloneDefinitionsFile;
return content.replace(/declare (namespace|module) ts/g, 'declare module "typescript"');
}));
merge2([defs, nodeDefs, nodeStandaloneDefs]).pipe(gulp.dest(builtLocalDirectory))
.on("end", () => done())
.on("error", (err) => console.error(err));
})
.on("error", (err) => console.error(err));
})
.on("error", (err) => console.error(err));
const completedJs = js.pipe(gIf(useDebugMode, prependCopyright()))
.pipe(sourcemaps.write("."));
const completedDts = dts.pipe(prependCopyright())
.pipe(insert.transform((contents, file) => {
file.path = standaloneDefinitionsFile;
return contents.replace(/^(\s*)(export )?const enum (\S+) {(\s*)$/gm, "$1$2enum $3 {$4");
}));
return merge2([
completedJs,
completedJs.pipe(clone())
.pipe(insert.transform((content, file) => (file.path = nodePackageFile, content))),
completedDts,
completedDts.pipe(clone())
.pipe(insert.transform((content, file) => {
file.path = nodeDefinitionsFile;
return content + "\r\nexport = ts;";
}))
.pipe(gulp.dest(builtLocalDirectory)),
completedDts.pipe(clone())
.pipe(insert.transform((content, file) => {
file.path = nodeStandaloneDefinitionsFile;
return content.replace(/declare (namespace|module) ts/g, 'declare module "typescript"');
}))
]).pipe(gulp.dest(builtLocalDirectory));
});
const serverFile = path.join(builtLocalDirectory, "tsserver.js");
@ -493,7 +489,7 @@ gulp.task(serverFile, false, [servicesFile], () => {
.pipe(newer(serverFile))
.pipe(sourcemaps.init())
.pipe(tsc(serverProject))
.pipe(gIf(useDebugMode, insert.prepend(fs.readFileSync(copyright))))
.pipe(gIf(useDebugMode, prependCopyright()))
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(builtLocalDirectory));
});
@ -512,10 +508,10 @@ gulp.task(tsserverLibraryFile, false, [servicesFile], (done) => {
.pipe(tsc(settings));
return merge2([
js.pipe(gIf(useDebugMode, insert.prepend(fs.readFileSync(copyright))))
js.pipe(gIf(useDebugMode, prependCopyright()))
.pipe(sourcemaps.write("."))
.pipe(gulp.dest(".")),
dts.pipe(gIf(useDebugMode, insert.prepend(fs.readFileSync(copyright))))
dts.pipe(gIf(useDebugMode, prependCopyright()))
.pipe(gulp.dest("."))
]);
});

View File

@ -39,6 +39,7 @@
"@types/gulp-newer": "latest",
"@types/gulp-sourcemaps": "latest",
"@types/gulp-typescript": "latest",
"@types/lazypipe": "latest",
"@types/merge2": "latest",
"@types/minimatch": "latest",
"@types/minimist": "latest",
@ -62,6 +63,7 @@
"into-stream": "latest",
"istanbul": "latest",
"jake": "latest",
"lazypipe": "latest",
"merge2": "latest",
"minimist": "latest",
"mkdirp": "latest",