From d7970a5ff309760da3bd441e5e171db690350d7c Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 20 Jun 2016 17:54:38 -0700 Subject: [PATCH] Lazypipes and better services stream management --- Gulpfile.ts | 70 +++++++++++++++++++++++++--------------------------- package.json | 2 ++ 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/Gulpfile.ts b/Gulpfile.ts index 81424801d03..987fde98708 100644 --- a/Gulpfile.ts +++ b/Gulpfile.ts @@ -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(".")) ]); }); diff --git a/package.json b/package.json index b3c27a81e4f..7b972f40b2e 100644 --- a/package.json +++ b/package.json @@ -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",