├── .gitignore ├── .npmignore ├── .travis.yml ├── LICENSE ├── README.md ├── index.js ├── package-lock.json ├── package.json ├── src ├── compiler.ts ├── shellescape.ts └── tsc.ts ├── test-e2e ├── .gitignore ├── gulpfile.js ├── src-broken │ ├── error.ts │ └── warning.ts ├── src-crossproj │ ├── proj-a │ │ └── main.ts │ └── proj-b │ │ ├── sub │ │ └── sub.ts │ │ └── util.ts ├── src-d-outer │ ├── hello.d.ts │ └── src │ │ └── main.ts ├── src-d │ ├── hello.d.ts │ ├── main.ts │ └── sub.ts ├── src-inplace │ ├── sub │ │ ├── sub1.ts │ │ └── sub2.ts │ ├── top1.ts │ └── top2.ts └── src │ ├── calc.ts │ ├── foo.ts │ ├── s1 │ └── a.ts │ ├── s2 │ └── b.ts │ └── sum.ts ├── test ├── compiler-spec.js ├── gulp-tsc-spec.js ├── helper.js └── tsc-spec.js └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | .vscode 4 | lib/ 5 | /.vs 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .git* 2 | .travis.yml 3 | *.md 4 | test/ 5 | test-e2e/ 6 | .DS_Store 7 | src/ 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4.8" 4 | - "6.10.0" 5 | - "7.6" 6 | install: 7 | - npm install 8 | - npm install typescript@latest 9 | - tsc 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012-2015 Aseem Kishore 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gulp-tsc [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] 2 | > TypeScript compiler for gulp 3 3 | 4 | ## Usage 5 | 6 | First, install `gulp-tsc` as a development dependency: 7 | 8 | ```shell 9 | npm install --save-dev gulp-tsc 10 | ``` 11 | 12 | Then, add it to your `gulpfile.js`: 13 | 14 | ```js 15 | var typescript = require('gulp-tsc'); 16 | 17 | gulp.task('compile', function(){ 18 | gulp.src(['src/**/*.ts']) 19 | .pipe(typescript()) 20 | .pipe(gulp.dest('dest/')) 21 | }); 22 | ``` 23 | 24 | ## Supported TSC versions 25 | All versions starting from 0.9.1, up to 2.3.2. 26 | 27 | ## API 28 | 29 | ### typescript(options) 30 | 31 | #### options.tscPath 32 | Type: `String` 33 | Default: `null` 34 | 35 | The path to `tsc` command for compile. 36 | 37 | If not set, this plugin searches for `tsc` command in the order as described below: 38 | 39 | 1. from `typescript` module installed as your project's dependency (i.e. `require("typescript")` on current directory) 40 | 2. from PATH of the running shell (using [node-which](https://github.com/isaacs/node-which)) 41 | 3. from Bundled `typescript` module 42 | 43 | (This search list can be modified by [options.tscSearch](#optionstscsearch)) 44 | 45 | So, if you want to use other version of `tsc` command, you can add any version of `typescript` module to your project's dependecy. 46 | 47 | However, this plugin could fail to run the future `tsc` because of incompatible changes of arguments. 48 | 49 | #### options.tscSearch 50 | Type: `Array` of `String` 51 | Default: `['cwd', 'shell', 'bundle']` 52 | 53 | This option changes how this plugin searches for `tsc` command on your system. 54 | 55 | See [options.tscPath](#optionstscpath) for details. 56 | 57 | #### options.emitError 58 | Type: `Boolean` 59 | Default: `true` 60 | 61 | If set to true, this plugin emits `error` event on compilation failure, which causes gulp to abort running task. 62 | 63 | See [Error handling](#error-handling) for details. 64 | 65 | #### options.module 66 | Type: `String` (`"commonjs"`, `"amd"`, `"system"` or `"umd"`) 67 | Default: `null` (if `options.target` is `"ES6"` or `"ES2015"`), or `"commonjs"` (otherwise) 68 | 69 | The `"system"` and `"umd"` module options available only when using TypeScript 1.5 70 | 71 | `--module` option for `tsc` command. 72 | 73 | #### options.target 74 | Type: `String` (`"ES3"`, `"ES5"`, `"ES6"` or `"ES2015"`) 75 | Default: `"ES3"` 76 | 77 | `--target` option for `tsc` command. 78 | 79 | #### options.out 80 | Type: `String` 81 | Default: `null` 82 | 83 | `--out` option for `tsc` command, which will be the name of the output file. 84 | example: out: 'app.js' 85 | 86 | #### options.outDir 87 | Type: `String` 88 | Default: `null` 89 | 90 | A path to the directory where output files are finally going to. 91 | 92 | This option does not affect the actual output directory for `tsc` command. 93 | 94 | See [Path modification](#path-modification) for usage of this option. 95 | 96 | #### options.mapRoot 97 | Type: `String` 98 | Default: `null` 99 | 100 | `--mapRoot` option for `tsc` command. 101 | 102 | #### options.sourceRoot 103 | Type: `String` 104 | Default: `null` 105 | 106 | `--sourceRoot` option for `tsc` command. 107 | 108 | #### options.allowbool 109 | Type: `Boolean` 110 | Default: `false` 111 | 112 | `--allowbool` option for `tsc` command. (version 0.9.1.1) 113 | 114 | #### options.allowimportmodule 115 | Type: `Boolean` 116 | Default: `false` 117 | 118 | `--allowimportmodule` option for `tsc` command. (version 0.9.1.1) 119 | 120 | #### options.declaration 121 | Type: `Boolean` 122 | Default: `false` 123 | 124 | `--declaration` option for `tsc` command. 125 | 126 | Generated `.d.ts` file is also piped into the stream. 127 | 128 | **Notice**: If your output files are NOT going to `{working directory}/something/` (to a directory beneath the working directory), you have to tell your output path to gulp-tsc by `outDir` option for correct reference paths. See [Path modification](#path-modification) for details. 129 | 130 | #### options.noEmitOnError 131 | Type: `Boolean` 132 | Default: `false` 133 | 134 | `--noImplicitAny` option for `tsc` command. 135 | 136 | Do not emit outputs if any type checking errors were reported. 137 | 138 | #### options.noImplicitAny 139 | Type: `Boolean` 140 | Default: `false` 141 | 142 | `--noImplicitAny` option for `tsc` command. 143 | 144 | Warn on expressions and declarations with an implied 'any' type. 145 | 146 | #### options.noResolve 147 | Type: `Boolean` 148 | Default: `false` 149 | 150 | `--noResolve` option for `tsc` command. 151 | 152 | #### options.preserveConstEnums 153 | Type: `Boolean` 154 | Default: `false` 155 | 156 | `--preserveConstEnums` option for `tsc` command. 157 | 158 | Do not erase const enum declarations in generated code. 159 | 160 | #### options.removeComments 161 | Type: `Boolean` 162 | Default: `false` 163 | 164 | `--removeComments` option for `tsc` command. 165 | 166 | Do not emit comments to output. 167 | 168 | #### options.project 169 | Type: `String` 170 | Default: `null` 171 | 172 | `--project` option for `tsc` command. 173 | 174 | Compile the project in the given directory. 175 | 176 | #### options.moduleResolution 177 | Type: `String` 178 | Default: `null` 179 | 180 | `--moduleResolution` option for `tsc` command. 181 | 182 | Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). 183 | 184 | #### options.allowJs 185 | Type: `Boolean` 186 | Default: `false` 187 | 188 | `--allowJs` option for `tsc` command. (at least version 1.8) 189 | 190 | #### options.checkJs 191 | Type: `Boolean` 192 | Default: `false` 193 | 194 | `--checkJs` option for `tsc` command. (at least version 2.3) 195 | 196 | #### options.strict 197 | Type: `Boolean` 198 | Default: `false` 199 | 200 | `--strict` option for `tsc` command. (at least version 2.3) 201 | 202 | #### options.downlevelIteration 203 | Type: `Boolean` 204 | Default: `false` 205 | 206 | `--downlevelIteration` option for `tsc` command. (at least version 2.3) 207 | 208 | #### options.allowUnreachableCode 209 | Type: `Boolean` 210 | Default: `false` 211 | 212 | `--allowUnusedLabels` option for `tsc` command. (at least version 1.8) 213 | 214 | Allows unreachable code. 215 | 216 | #### options.allowUnusedLabels 217 | Type: `Boolean` 218 | Default: `false` 219 | 220 | `--allowUnusedLabels` option for `tsc` command. (at least version 1.8) 221 | 222 | Allows specify unused labels in the source code. 223 | 224 | #### options.baseUrl 225 | Type: `String` 226 | 227 | `--baseUrl` option for `tsc` command. (at least version 1.8) 228 | 229 | Base directory to resolve non-absolute module names. 230 | 231 | #### options.noImplicitReturns 232 | Type: `Boolean` 233 | Default: `false` 234 | 235 | `--noImplicitReturns` option for `tsc` command. (at least version 1.8) 236 | 237 | Disallow implicit returns from the functions. 238 | 239 | #### options.noFallthroughCasesInSwitch 240 | Type: `Boolean` 241 | Default: `false` 242 | 243 | `--noFallthroughCasesInSwitch` option for `tsc` command. (at least version 1.8) 244 | 245 | Disallow fallthrough cases in switch statement. 246 | 247 | #### options.allowSyntheticDefaultImports 248 | Type: `Boolean` 249 | Default: `false` 250 | 251 | `--allowSyntheticDefaultImports` option for `tsc` command. (at least version 1.8) 252 | 253 | Indicates that the module loader performs some kind of synthetic default import member creation not indicated in the imported .ts or .d.ts. 254 | 255 | #### options.jsx 256 | Type: `String` 257 | Default: `null` 258 | 259 | `--jsx` option for `tsc` command. 260 | 261 | Enable React support. (Starting from TSC version 1.6) 262 | 263 | #### options.reactNamespace 264 | Type: `Boolean` 265 | Default: `false` 266 | 267 | `--reactNamespace` option for `tsc` command. (at least version 1.6) 268 | 269 | Allow specify namespace name for JSX factory. 270 | 271 | #### options.sourceMap 272 | Type: `Boolean` 273 | Default: `false` 274 | 275 | `--sourcemap` option for `tsc` command. Alternatively you could use `sourcemap` parameter for backward compatibilty, that parameter would be removed in some future releases. 276 | 277 | Generated `.js.map` file is also piped into the stream. 278 | 279 | **Notice**: If your output files are NOT going to `{working directory}/something/` (to a directory beneath the working directory), you have to tell your output path to gulp-tsc by `outDir` option or `sourceRoot` option. See [Path modification](#path-modification) for details. 280 | 281 | #### options.suppressImplicitAnyIndexErrors 282 | Type: `Boolean` 283 | Default: `false` 284 | 285 | `--suppressImplicitAnyIndexErrors` option for `tsc` command. (Starting from TSC version 1.5) 286 | 287 | Suppress noImplicitAny errors for indexing objects lacking index signatures. 288 | 289 | #### options.reactNamespace 290 | Type: `Boolean` 291 | Default: `false` 292 | 293 | `--reactNamespace` option for `tsc` command. (at least version 1.8) 294 | 295 | Disallow fallthrough cases in switch statement. 296 | 297 | #### options.tmpDir 298 | Type: `String` 299 | Default: `''` (current working directory) 300 | 301 | A path relative to current working directory, where a temporary build folder will be put in. 302 | 303 | **Notice**: If you use this option with sourcemaps, consider to specify `outDir` or `sourceRoot`. See [options.sourceMap](#optionssourcemap) for details. 304 | 305 | If you are watching some files in current working directory with gulp.watch(), the creation of temporary build folder will trigger a folder change event. 306 | 307 | If this is unexpected, you can put temp folders in a non-watched directory with this option. 308 | 309 | Example: 310 | ``` 311 | gulp.task('tsc', function() { 312 | return gulp.src(src.ts) 313 | .pipe(tsc({tmpDir:'.tmp'})) 314 | .pipe(gulp.dest('.tmp/js')); 315 | }); 316 | ``` 317 | 318 | This will put a temporary folder in '.tmp'. 319 | 320 | See [Temporary directory and file by gulp-tsc](#temporary-directory-and-file-by-gulp-tsc) for details. 321 | 322 | #### options.noLib 323 | Type: `Boolean` 324 | Default: `false` 325 | 326 | `--noLib` option for `tsc` command. 327 | 328 | Set `noLib` to `true` will dramatically reduce compile time, because 'tsc' will ignore builtin declarations like 'lib.d.ts'. 329 | 330 | So if you are not using 'lib.d.ts' or prefer speed, set this to `true`. (In my case `noLib:true` only takes 25% time compared to `noLib:false`) 331 | 332 | #### options.keepTree 333 | Type: `Boolean` 334 | Default: `true` 335 | 336 | If set to false, gulp-tsc skips creating a temporary file in your source directory which is used for keeping source directory structure in output. 337 | 338 | See [Temporary directory and file by gulp-tsc](#temporary-directory-and-file-by-gulp-tsc) for details. 339 | 340 | #### options.pathFilter 341 | Type: `Object`, `Function` 342 | Default: `null` 343 | 344 | This option is used for modifying paths of compiled files. 345 | 346 | You can pass a Hash-like object which is a mapping of output paths in relative form. 347 | 348 | Example: 349 | ``` 350 | gulp.task('compile', function(){ 351 | gulp.src(['src/**/*.ts']) 352 | .pipe(typescript({ 353 | pathFilter: { 'aaa/bbb': 'xxx/yyy' } 354 | })) 355 | .pipe(gulp.dest('build/')) 356 | }); 357 | ``` 358 | 359 | The example above will compile `src/aaa/bbb/ccc.ts` into `build/xxx/yyy/ccc.js`. 360 | 361 | You can also pass a function which takes a relative path of compiled files as an argument and returns a modified path. 362 | 363 | Example: 364 | ``` 365 | gulp.task('compile', function(){ 366 | gulp.src(['src/**/*.ts']) 367 | .pipe(typescript({ 368 | pathFilter: function (path) { return path.replace(/^aaa\/bbb/, 'xxx/yyy') } 369 | })) 370 | .pipe(gulp.dest('build/')) 371 | }); 372 | ``` 373 | 374 | A path filter function will receive following two arguments: 375 | 376 | - `String`: A relative path to a compiled file. 377 | - `vinyl.File`: A [vinyl.File](https://github.com/wearefractal/vinyl) object of a compiled file. 378 | 379 | A path filter function can return `Boolean`, `String`, `vinyl.File` or `undefined`. 380 | 381 | | Returned value | Effect | 382 | | ------------------- | ------ | 383 | | `true`, `undefined` | Use the file as-is. | 384 | | `false` | Skip the file. (not piped into output gulp stream) | 385 | | `String` | Replace the file's path with the returned string. | 386 | | `vinyl.File` | Use the returned vinyl.File instead. | 387 | 388 | #### options.safe 389 | Type: `Boolean` 390 | Default: `false` 391 | 392 | By default, gulp-tsc ignores warnings from tsc command and emits compiled js files to the gulp stream anyway. 393 | 394 | If set this option to true, gulp-tsc never emits compiled files when tsc command returned warnings or errors. 395 | 396 | #### options.emitDecoratorMetadata 397 | Type: `Boolean` 398 | Default: `false` 399 | 400 | `--emitDecoratorMetadata` option for `tsc` command. 401 | 402 | Emit decorator metadata. 403 | 404 | 405 | #### options.experimentalDecorators 406 | Type: `Boolean` 407 | Default: `false` 408 | 409 | `--experimentalDecorators` option for `tsc` command. 410 | 411 | Enable experimental Decorator support. (Starting from TSC version 1.5) 412 | 413 | #### options.additionalTscParameters 414 | Type: Array of string 415 | Default: [] 416 | 417 | This option is used to pass any parameter to tsc command. Especially it can be used to pass parameters not yet suported by gulp-tsc. You have to pass each parameter separately. 418 | 419 | Example: 420 | ``` 421 | gulp.task('compile', function(){ 422 | gulp.src(['src/**/*.tsx']) 423 | .pipe(typescript({ 424 | additionalTscParameters: ['--jsx', 'react'] 425 | })) 426 | .pipe(gulp.dest('build/')) 427 | }); 428 | ``` 429 | 430 | ## Error handling 431 | 432 | If gulp-tsc fails to compile files, it emits `error` event with `gutil.PluginError` as the manner of gulp plugins. 433 | 434 | This causes gulp to stop running on TypeScript compile errors, which is sometimes a problem like using with `gulp.watch()`. 435 | 436 | If you want to suppress the error, just pass `{ emitError: false }` to gulp-tsc like below. 437 | 438 | ``` 439 | var typescript = require('gulp-tsc'); 440 | 441 | gulp.task('default', function () { 442 | gulp.watch('src/**/*.ts', ['compile']) 443 | }); 444 | 445 | gulp.task('compile', function () { 446 | return gulp.src('src/**/*.ts') 447 | .pipe(typescript({ emitError: false })) 448 | .pipe(gulp.dest('dest/')); 449 | }); 450 | ``` 451 | 452 | ## Path modification 453 | 454 | gulp-tsc does some modification to output files to correct relative paths in sourcemap files (.js.map) and declaration files (.d.ts). 455 | 456 | However, gulp-tsc doesn't know where your output files are going to be stored finally since it is specified by `gulp.dest` and gulp-tsc cannot access to it. So gulp-tsc assumes that your output files go into `{working directory}/something/` by default. 457 | 458 | If your output files are not going there, you have to tell your output path to gulp-tsc by `outDir` option. 459 | 460 | If you have a gulp task like this: 461 | 462 | ``` 463 | gulp.task('compile', function(){ 464 | gulp.src(['src/**/*.ts']) 465 | .pipe(typescript({ sourceMap: true, declaration: true })) 466 | .pipe(gulp.dest('foo/bar/')) 467 | }); 468 | ``` 469 | 470 | Output files are going under `{working directory}/foo/bar/`, but sourcemap files and declaration files will contain a relative path to source files from `{working directory}/foo/` which is not correct. 471 | 472 | To fix the relative path, just specify `outDir` same as your `gulp.dest` path. 473 | 474 | ``` 475 | gulp.task('compile', function(){ 476 | gulp.src(['src/**/*.ts']) 477 | .pipe(typescript({ sourceMap: true, declaration: true, outDir: 'foo/bar/' })) 478 | .pipe(gulp.dest('foo/bar/')) 479 | }); 480 | ``` 481 | 482 | ## Temporary directory and file by gulp-tsc 483 | 484 | Since gulp-tsc uses `tsc` command internally for compiling TypeScript files, compiled JavaScript files require to be written on the file system temporarily. 485 | 486 | For those compiled files, gulp-tsc creates a temporary directory named `gulp-tsc-tmp-*` in the current working directory. You can change the location of the temporary directory by [options.tmpDir](#optionstmpdir). 487 | 488 | In addition, gulp-tsc also creates a temporary file named `.gulp-tsc-tmp-*.ts` in your source root directory while compiling. The source root is determined by your `gulp.src()`. (e.g. For `gulp.src("src/**/*.ts")`, the source root is `src/`) 489 | 490 | This is required for keeping your source directory structure in output since tsc command omits the common part of your output paths. 491 | 492 | If you do not need to keep the structure, you can skip creating the temporary file by setting [options.keepTree](#optionskeeptree) to false. 493 | 494 | 495 | [npm-url]: https://npmjs.org/package/gulp-tsc 496 | [npm-image]: https://badge.fury.io/js/gulp-tsc.png 497 | [travis-url]: https://travis-ci.org/kant2002/gulp-tsc 498 | [travis-image]: https://travis-ci.org/kant2002/gulp-tsc.png?branch=master 499 | [daviddm-url]: https://david-dm.org/kant2002/gulp-tsc 500 | [daviddm-image]: https://david-dm.org/kant2002/gulp-tsc.png?theme=shields.io 501 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Compiler = require('./lib/compiler'); 4 | var gutil = require('gulp-util'); 5 | var through = require('through2'); 6 | var async = require('async'); 7 | 8 | module.exports = function (options) { 9 | var sourceFiles = []; 10 | var emitError = (!options || options.emitError !== false); 11 | 12 | function eachFile(file, encoding, done) { 13 | sourceFiles.push(file); 14 | done(); 15 | } 16 | 17 | function endStream(done) { 18 | if (sourceFiles.length === 0) { 19 | return done(); 20 | } 21 | 22 | var _this = this; 23 | var compiler = new Compiler(sourceFiles, options); 24 | compiler.on('stdout', function (line) { 25 | gutil.log(gutil.colors.green('[tsc] >'), line); 26 | }); 27 | compiler.on('stderr', function (line) { 28 | gutil.log(gutil.colors.red('[tsc] >'), line); 29 | }); 30 | compiler.on('error', function (err) { 31 | gutil.log(gutil.colors.red('[tsc] Error: ' + err.toString())); 32 | err.stack && console.log(gutil.colors.gray(err.stack)); 33 | }); 34 | compiler.on('data', function (file) { 35 | _this.push(file); 36 | }); 37 | 38 | async.waterfall([ 39 | function (next) { 40 | compiler.getVersion(next); 41 | }, 42 | function (version, next) { 43 | gutil.log('Compiling TypeScript files using tsc version ' + version); 44 | compiler.compile(next); 45 | } 46 | ], function (err) { 47 | if (err) { 48 | gutil.log(gutil.colors.red('Failed to compile TypeScript:', err)); 49 | if (emitError) { 50 | Compiler.abortAll(function () { 51 | _this.emit('error', new gutil.PluginError('gulp-tsc', 'Failed to compile: ' + (err.message || err))); 52 | sourceFiles = []; 53 | done(); 54 | }); 55 | return; 56 | } 57 | } 58 | sourceFiles = []; 59 | done(); 60 | }); 61 | } 62 | 63 | return through.obj(eachFile, endStream); 64 | }; 65 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-tsc", 3 | "version": "1.3.3", 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "@types/mocha": { 7 | "version": "2.2.41", 8 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.41.tgz", 9 | "integrity": "sha1-4nzwgXFT658nE7LT9saPHhw8pgg=", 10 | "dev": true 11 | }, 12 | "@types/node": { 13 | "version": "7.0.23", 14 | "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.23.tgz", 15 | "integrity": "sha512-F+qaJi0iw9Yk7Ugml+HtTi2r399gPEFfKh2lwr86/a/5LVHODiAllBlNCNrgo5sT9WRHl74ryEbXVeNUN3ToCQ==", 16 | "dev": true 17 | }, 18 | "ansi-regex": { 19 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", 20 | "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=" 21 | }, 22 | "ansi-styles": { 23 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 24 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 25 | }, 26 | "archy": { 27 | "version": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 28 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", 29 | "dev": true 30 | }, 31 | "arr-diff": { 32 | "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 33 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=" 34 | }, 35 | "arr-flatten": { 36 | "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", 37 | "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=" 38 | }, 39 | "array-differ": { 40 | "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 41 | "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" 42 | }, 43 | "array-find-index": { 44 | "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 45 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" 46 | }, 47 | "array-union": { 48 | "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 49 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 50 | "dev": true 51 | }, 52 | "array-uniq": { 53 | "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 54 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" 55 | }, 56 | "array-unique": { 57 | "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 58 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" 59 | }, 60 | "arrify": { 61 | "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 62 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 63 | "dev": true 64 | }, 65 | "async": { 66 | "version": "https://registry.npmjs.org/async/-/async-2.2.0.tgz", 67 | "integrity": "sha1-wyTroBCiN+T71VoS3uhjZ9XA7zI=" 68 | }, 69 | "balanced-match": { 70 | "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", 71 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" 72 | }, 73 | "beeper": { 74 | "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", 75 | "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" 76 | }, 77 | "brace-expansion": { 78 | "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", 79 | "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=" 80 | }, 81 | "braces": { 82 | "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 83 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=" 84 | }, 85 | "browser-stdout": { 86 | "version": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 87 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 88 | "dev": true 89 | }, 90 | "buffer-shims": { 91 | "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", 92 | "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" 93 | }, 94 | "builtin-modules": { 95 | "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 96 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" 97 | }, 98 | "byline": { 99 | "version": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", 100 | "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" 101 | }, 102 | "camelcase": { 103 | "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 104 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" 105 | }, 106 | "camelcase-keys": { 107 | "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 108 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=" 109 | }, 110 | "chalk": { 111 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 112 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" 113 | }, 114 | "clone": { 115 | "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", 116 | "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" 117 | }, 118 | "clone-stats": { 119 | "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", 120 | "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" 121 | }, 122 | "concat-map": { 123 | "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 124 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 125 | }, 126 | "convert-source-map": { 127 | "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", 128 | "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" 129 | }, 130 | "core-util-is": { 131 | "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 132 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 133 | }, 134 | "currently-unhandled": { 135 | "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 136 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=" 137 | }, 138 | "dateformat": { 139 | "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", 140 | "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=" 141 | }, 142 | "debug": { 143 | "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 144 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 145 | "dev": true 146 | }, 147 | "decamelize": { 148 | "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 149 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 150 | }, 151 | "defaults": { 152 | "version": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 153 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 154 | "dev": true 155 | }, 156 | "del": { 157 | "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 158 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 159 | "dev": true, 160 | "dependencies": { 161 | "object-assign": { 162 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 163 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", 164 | "dev": true 165 | } 166 | } 167 | }, 168 | "deprecated": { 169 | "version": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", 170 | "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", 171 | "dev": true 172 | }, 173 | "detect-file": { 174 | "version": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", 175 | "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", 176 | "dev": true 177 | }, 178 | "diff": { 179 | "version": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", 180 | "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", 181 | "dev": true 182 | }, 183 | "duplexer": { 184 | "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 185 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 186 | "dev": true 187 | }, 188 | "duplexer2": { 189 | "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", 190 | "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=" 191 | }, 192 | "duplexify": { 193 | "version": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", 194 | "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", 195 | "dependencies": { 196 | "isarray": { 197 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 198 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 199 | }, 200 | "readable-stream": { 201 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", 202 | "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=" 203 | } 204 | } 205 | }, 206 | "end-of-stream": { 207 | "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", 208 | "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", 209 | "dependencies": { 210 | "once": { 211 | "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 212 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=" 213 | } 214 | } 215 | }, 216 | "error-ex": { 217 | "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", 218 | "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=" 219 | }, 220 | "escape-string-regexp": { 221 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 222 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 223 | }, 224 | "event-stream": { 225 | "version": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 226 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 227 | "dev": true 228 | }, 229 | "expand-brackets": { 230 | "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 231 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" 232 | }, 233 | "expand-range": { 234 | "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 235 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=" 236 | }, 237 | "expand-tilde": { 238 | "version": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", 239 | "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", 240 | "dev": true 241 | }, 242 | "extend": { 243 | "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", 244 | "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" 245 | }, 246 | "extend-shallow": { 247 | "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 248 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" 249 | }, 250 | "extglob": { 251 | "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 252 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=" 253 | }, 254 | "fancy-log": { 255 | "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", 256 | "integrity": "sha1-1aUbU+mrIsoH1VjytnrlX9tfy9g=" 257 | }, 258 | "filename-regex": { 259 | "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", 260 | "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=" 261 | }, 262 | "fill-range": { 263 | "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 264 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=" 265 | }, 266 | "find-index": { 267 | "version": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", 268 | "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", 269 | "dev": true 270 | }, 271 | "find-up": { 272 | "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 273 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=" 274 | }, 275 | "findup-sync": { 276 | "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", 277 | "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", 278 | "dev": true 279 | }, 280 | "fined": { 281 | "version": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", 282 | "integrity": "sha1-WyhCS3YNdZiWC374SA3/itNmDpc=", 283 | "dev": true 284 | }, 285 | "first-chunk-stream": { 286 | "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", 287 | "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" 288 | }, 289 | "flagged-respawn": { 290 | "version": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", 291 | "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", 292 | "dev": true 293 | }, 294 | "for-in": { 295 | "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", 296 | "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=" 297 | }, 298 | "for-own": { 299 | "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", 300 | "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=" 301 | }, 302 | "from": { 303 | "version": "https://registry.npmjs.org/from/-/from-0.1.3.tgz", 304 | "integrity": "sha1-72OsIGKsMqz3hi4NQLRLiW8i87w=", 305 | "dev": true 306 | }, 307 | "fs-exists-sync": { 308 | "version": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", 309 | "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", 310 | "dev": true 311 | }, 312 | "fs.realpath": { 313 | "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 314 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 315 | }, 316 | "gaze": { 317 | "version": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", 318 | "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", 319 | "dev": true 320 | }, 321 | "get-stdin": { 322 | "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 323 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" 324 | }, 325 | "glob": { 326 | "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 327 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", 328 | "dev": true 329 | }, 330 | "glob-base": { 331 | "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 332 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=" 333 | }, 334 | "glob-parent": { 335 | "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 336 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=" 337 | }, 338 | "glob-stream": { 339 | "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", 340 | "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", 341 | "dependencies": { 342 | "glob": { 343 | "version": "5.0.15", 344 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 345 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=" 346 | }, 347 | "glob-parent": { 348 | "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 349 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" 350 | }, 351 | "is-extglob": { 352 | "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 353 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 354 | }, 355 | "is-glob": { 356 | "version": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 357 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" 358 | }, 359 | "isarray": { 360 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 361 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 362 | }, 363 | "ordered-read-streams": { 364 | "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", 365 | "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=" 366 | }, 367 | "readable-stream": { 368 | "version": "2.2.9", 369 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", 370 | "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=" 371 | }, 372 | "string_decoder": { 373 | "version": "1.0.1", 374 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", 375 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=" 376 | }, 377 | "through2": { 378 | "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 379 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 380 | "dependencies": { 381 | "isarray": { 382 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 383 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 384 | }, 385 | "readable-stream": { 386 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 387 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=" 388 | }, 389 | "string_decoder": { 390 | "version": "0.10.31", 391 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 392 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 393 | } 394 | } 395 | } 396 | } 397 | }, 398 | "glob2base": { 399 | "version": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", 400 | "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", 401 | "dev": true 402 | }, 403 | "global-modules": { 404 | "version": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", 405 | "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", 406 | "dev": true 407 | }, 408 | "global-prefix": { 409 | "version": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", 410 | "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", 411 | "dev": true 412 | }, 413 | "globby": { 414 | "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 415 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 416 | "dev": true, 417 | "dependencies": { 418 | "glob": { 419 | "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 420 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", 421 | "dev": true 422 | }, 423 | "object-assign": { 424 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 425 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", 426 | "dev": true 427 | } 428 | } 429 | }, 430 | "globule": { 431 | "version": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", 432 | "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", 433 | "dev": true, 434 | "dependencies": { 435 | "glob": { 436 | "version": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", 437 | "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", 438 | "dev": true 439 | }, 440 | "graceful-fs": { 441 | "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", 442 | "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", 443 | "dev": true 444 | }, 445 | "inherits": { 446 | "version": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", 447 | "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", 448 | "dev": true 449 | }, 450 | "lodash": { 451 | "version": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", 452 | "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", 453 | "dev": true 454 | }, 455 | "minimatch": { 456 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 457 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 458 | "dev": true 459 | } 460 | } 461 | }, 462 | "glogg": { 463 | "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", 464 | "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=" 465 | }, 466 | "graceful-fs": { 467 | "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 468 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 469 | }, 470 | "graceful-readlink": { 471 | "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 472 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", 473 | "dev": true 474 | }, 475 | "growl": { 476 | "version": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", 477 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", 478 | "dev": true 479 | }, 480 | "gulp": { 481 | "version": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", 482 | "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", 483 | "dev": true, 484 | "dependencies": { 485 | "clone": { 486 | "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 487 | "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", 488 | "dev": true 489 | }, 490 | "glob": { 491 | "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 492 | "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", 493 | "dev": true 494 | }, 495 | "glob-stream": { 496 | "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", 497 | "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", 498 | "dev": true 499 | }, 500 | "glob-watcher": { 501 | "version": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", 502 | "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", 503 | "dev": true 504 | }, 505 | "graceful-fs": { 506 | "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", 507 | "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", 508 | "dev": true 509 | }, 510 | "minimatch": { 511 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 512 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 513 | "dev": true 514 | }, 515 | "readable-stream": { 516 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 517 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 518 | "dev": true 519 | }, 520 | "semver": { 521 | "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 522 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 523 | "dev": true 524 | }, 525 | "strip-bom": { 526 | "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", 527 | "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", 528 | "dev": true 529 | }, 530 | "through2": { 531 | "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 532 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 533 | "dev": true 534 | }, 535 | "unique-stream": { 536 | "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", 537 | "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", 538 | "dev": true 539 | }, 540 | "vinyl": { 541 | "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", 542 | "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", 543 | "dev": true 544 | }, 545 | "vinyl-fs": { 546 | "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", 547 | "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", 548 | "dev": true 549 | } 550 | } 551 | }, 552 | "gulp-expect-file": { 553 | "version": "https://registry.npmjs.org/gulp-expect-file/-/gulp-expect-file-0.0.7.tgz", 554 | "integrity": "sha1-kT5zHbDdb1hmFJukAK2DXrNGI60=", 555 | "dev": true, 556 | "dependencies": { 557 | "ansi-regex": { 558 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", 559 | "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", 560 | "dev": true 561 | }, 562 | "ansi-styles": { 563 | "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", 564 | "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", 565 | "dev": true 566 | }, 567 | "async": { 568 | "version": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 569 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", 570 | "dev": true 571 | }, 572 | "chalk": { 573 | "version": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", 574 | "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", 575 | "dev": true 576 | }, 577 | "gulp-util": { 578 | "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", 579 | "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", 580 | "dev": true, 581 | "dependencies": { 582 | "through2": { 583 | "version": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", 584 | "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", 585 | "dev": true 586 | } 587 | } 588 | }, 589 | "has-ansi": { 590 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", 591 | "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", 592 | "dev": true 593 | }, 594 | "lodash._reinterpolate": { 595 | "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz", 596 | "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=", 597 | "dev": true 598 | }, 599 | "lodash.escape": { 600 | "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", 601 | "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", 602 | "dev": true 603 | }, 604 | "lodash.keys": { 605 | "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", 606 | "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", 607 | "dev": true 608 | }, 609 | "lodash.template": { 610 | "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", 611 | "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", 612 | "dev": true 613 | }, 614 | "lodash.templatesettings": { 615 | "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", 616 | "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", 617 | "dev": true 618 | }, 619 | "minimatch": { 620 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 621 | "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", 622 | "dev": true 623 | }, 624 | "minimist": { 625 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", 626 | "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", 627 | "dev": true 628 | }, 629 | "readable-stream": { 630 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 631 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 632 | "dev": true 633 | }, 634 | "strip-ansi": { 635 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", 636 | "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", 637 | "dev": true 638 | }, 639 | "supports-color": { 640 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", 641 | "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", 642 | "dev": true 643 | }, 644 | "through2": { 645 | "version": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", 646 | "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", 647 | "dev": true, 648 | "dependencies": { 649 | "readable-stream": { 650 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 651 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 652 | "dev": true 653 | }, 654 | "xtend": { 655 | "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 656 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 657 | "dev": true 658 | } 659 | } 660 | }, 661 | "vinyl": { 662 | "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", 663 | "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", 664 | "dev": true 665 | }, 666 | "xtend": { 667 | "version": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", 668 | "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", 669 | "dev": true 670 | } 671 | } 672 | }, 673 | "gulp-sourcemaps": { 674 | "version": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", 675 | "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", 676 | "dependencies": { 677 | "vinyl": { 678 | "version": "1.2.0", 679 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", 680 | "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=" 681 | } 682 | } 683 | }, 684 | "gulp-util": { 685 | "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", 686 | "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=" 687 | }, 688 | "gulplog": { 689 | "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", 690 | "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=" 691 | }, 692 | "has-ansi": { 693 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 694 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" 695 | }, 696 | "has-flag": { 697 | "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 698 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 699 | "dev": true 700 | }, 701 | "has-gulplog": { 702 | "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", 703 | "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=" 704 | }, 705 | "homedir-polyfill": { 706 | "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", 707 | "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", 708 | "dev": true 709 | }, 710 | "hosted-git-info": { 711 | "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", 712 | "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=" 713 | }, 714 | "indent-string": { 715 | "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 716 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=" 717 | }, 718 | "inflight": { 719 | "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 720 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" 721 | }, 722 | "inherits": { 723 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 724 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 725 | }, 726 | "ini": { 727 | "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 728 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", 729 | "dev": true 730 | }, 731 | "interpret": { 732 | "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", 733 | "integrity": "sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=", 734 | "dev": true 735 | }, 736 | "is-absolute": { 737 | "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", 738 | "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", 739 | "dev": true 740 | }, 741 | "is-arrayish": { 742 | "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 743 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 744 | }, 745 | "is-buffer": { 746 | "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", 747 | "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=" 748 | }, 749 | "is-builtin-module": { 750 | "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 751 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=" 752 | }, 753 | "is-dotfile": { 754 | "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", 755 | "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=" 756 | }, 757 | "is-equal-shallow": { 758 | "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 759 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=" 760 | }, 761 | "is-extendable": { 762 | "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 763 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" 764 | }, 765 | "is-extglob": { 766 | "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 767 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" 768 | }, 769 | "is-finite": { 770 | "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 771 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=" 772 | }, 773 | "is-glob": { 774 | "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 775 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" 776 | }, 777 | "is-number": { 778 | "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 779 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=" 780 | }, 781 | "is-path-cwd": { 782 | "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 783 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 784 | "dev": true 785 | }, 786 | "is-path-in-cwd": { 787 | "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 788 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 789 | "dev": true 790 | }, 791 | "is-path-inside": { 792 | "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 793 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 794 | "dev": true 795 | }, 796 | "is-posix-bracket": { 797 | "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 798 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" 799 | }, 800 | "is-primitive": { 801 | "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 802 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" 803 | }, 804 | "is-relative": { 805 | "version": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", 806 | "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", 807 | "dev": true 808 | }, 809 | "is-stream": { 810 | "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 811 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 812 | }, 813 | "is-unc-path": { 814 | "version": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.1.tgz", 815 | "integrity": "sha1-qyUz13rXM1YRJMPcD1zYuQBUyGs=", 816 | "dev": true 817 | }, 818 | "is-utf8": { 819 | "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 820 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 821 | }, 822 | "is-valid-glob": { 823 | "version": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", 824 | "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" 825 | }, 826 | "is-windows": { 827 | "version": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", 828 | "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", 829 | "dev": true 830 | }, 831 | "isarray": { 832 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 833 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 834 | }, 835 | "isexe": { 836 | "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", 837 | "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=" 838 | }, 839 | "isobject": { 840 | "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 841 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 842 | "dependencies": { 843 | "isarray": { 844 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 845 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 846 | } 847 | } 848 | }, 849 | "json-stable-stringify": { 850 | "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 851 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" 852 | }, 853 | "json3": { 854 | "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 855 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 856 | "dev": true 857 | }, 858 | "jsonify": { 859 | "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 860 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 861 | }, 862 | "kind-of": { 863 | "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.4.tgz", 864 | "integrity": "sha1-e47PGKThf4Jp1ztQHJ8jLJaIenQ=" 865 | }, 866 | "lazystream": { 867 | "version": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", 868 | "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", 869 | "dependencies": { 870 | "isarray": { 871 | "version": "1.0.0", 872 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 873 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 874 | }, 875 | "readable-stream": { 876 | "version": "2.2.9", 877 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", 878 | "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=" 879 | }, 880 | "string_decoder": { 881 | "version": "1.0.1", 882 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", 883 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=" 884 | } 885 | } 886 | }, 887 | "liftoff": { 888 | "version": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", 889 | "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", 890 | "dev": true 891 | }, 892 | "load-json-file": { 893 | "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 894 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" 895 | }, 896 | "lodash": { 897 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 898 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 899 | }, 900 | "lodash._baseassign": { 901 | "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 902 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 903 | "dev": true 904 | }, 905 | "lodash._basecopy": { 906 | "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 907 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" 908 | }, 909 | "lodash._basecreate": { 910 | "version": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", 911 | "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", 912 | "dev": true 913 | }, 914 | "lodash._basetostring": { 915 | "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", 916 | "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" 917 | }, 918 | "lodash._basevalues": { 919 | "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", 920 | "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" 921 | }, 922 | "lodash._escapehtmlchar": { 923 | "version": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", 924 | "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", 925 | "dev": true 926 | }, 927 | "lodash._escapestringchar": { 928 | "version": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz", 929 | "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=", 930 | "dev": true 931 | }, 932 | "lodash._getnative": { 933 | "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 934 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" 935 | }, 936 | "lodash._htmlescapes": { 937 | "version": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz", 938 | "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=", 939 | "dev": true 940 | }, 941 | "lodash._isiterateecall": { 942 | "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 943 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" 944 | }, 945 | "lodash._isnative": { 946 | "version": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", 947 | "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", 948 | "dev": true 949 | }, 950 | "lodash._objecttypes": { 951 | "version": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", 952 | "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", 953 | "dev": true 954 | }, 955 | "lodash._reescape": { 956 | "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", 957 | "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" 958 | }, 959 | "lodash._reevaluate": { 960 | "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", 961 | "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" 962 | }, 963 | "lodash._reinterpolate": { 964 | "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 965 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" 966 | }, 967 | "lodash._reunescapedhtml": { 968 | "version": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", 969 | "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", 970 | "dev": true, 971 | "dependencies": { 972 | "lodash.keys": { 973 | "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", 974 | "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", 975 | "dev": true 976 | } 977 | } 978 | }, 979 | "lodash._root": { 980 | "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 981 | "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" 982 | }, 983 | "lodash._shimkeys": { 984 | "version": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", 985 | "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", 986 | "dev": true 987 | }, 988 | "lodash.assignwith": { 989 | "version": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", 990 | "integrity": "sha1-EnqX8CrcQXUalU0ksN4X4QDgOOs=", 991 | "dev": true 992 | }, 993 | "lodash.create": { 994 | "version": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", 995 | "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", 996 | "dev": true 997 | }, 998 | "lodash.defaults": { 999 | "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", 1000 | "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", 1001 | "dev": true, 1002 | "dependencies": { 1003 | "lodash.keys": { 1004 | "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", 1005 | "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", 1006 | "dev": true 1007 | } 1008 | } 1009 | }, 1010 | "lodash.escape": { 1011 | "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", 1012 | "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=" 1013 | }, 1014 | "lodash.isarguments": { 1015 | "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1016 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" 1017 | }, 1018 | "lodash.isarray": { 1019 | "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1020 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" 1021 | }, 1022 | "lodash.isempty": { 1023 | "version": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", 1024 | "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", 1025 | "dev": true 1026 | }, 1027 | "lodash.isequal": { 1028 | "version": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 1029 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" 1030 | }, 1031 | "lodash.isobject": { 1032 | "version": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", 1033 | "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", 1034 | "dev": true 1035 | }, 1036 | "lodash.isplainobject": { 1037 | "version": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1038 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", 1039 | "dev": true 1040 | }, 1041 | "lodash.isstring": { 1042 | "version": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1043 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", 1044 | "dev": true 1045 | }, 1046 | "lodash.keys": { 1047 | "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1048 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=" 1049 | }, 1050 | "lodash.mapvalues": { 1051 | "version": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", 1052 | "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", 1053 | "dev": true 1054 | }, 1055 | "lodash.pick": { 1056 | "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", 1057 | "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", 1058 | "dev": true 1059 | }, 1060 | "lodash.restparam": { 1061 | "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1062 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" 1063 | }, 1064 | "lodash.template": { 1065 | "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", 1066 | "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=" 1067 | }, 1068 | "lodash.templatesettings": { 1069 | "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", 1070 | "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=" 1071 | }, 1072 | "lodash.values": { 1073 | "version": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", 1074 | "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", 1075 | "dev": true, 1076 | "dependencies": { 1077 | "lodash.keys": { 1078 | "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", 1079 | "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", 1080 | "dev": true 1081 | } 1082 | } 1083 | }, 1084 | "loud-rejection": { 1085 | "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 1086 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=" 1087 | }, 1088 | "lru-cache": { 1089 | "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1090 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 1091 | "dev": true 1092 | }, 1093 | "map-cache": { 1094 | "version": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1095 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 1096 | "dev": true 1097 | }, 1098 | "map-obj": { 1099 | "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1100 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" 1101 | }, 1102 | "map-stream": { 1103 | "version": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1104 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 1105 | "dev": true 1106 | }, 1107 | "meow": { 1108 | "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 1109 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 1110 | "dependencies": { 1111 | "object-assign": { 1112 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 1113 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" 1114 | } 1115 | } 1116 | }, 1117 | "merge-stream": { 1118 | "version": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", 1119 | "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", 1120 | "dependencies": { 1121 | "isarray": { 1122 | "version": "1.0.0", 1123 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1124 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1125 | }, 1126 | "readable-stream": { 1127 | "version": "2.2.9", 1128 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", 1129 | "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=" 1130 | }, 1131 | "string_decoder": { 1132 | "version": "1.0.1", 1133 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", 1134 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=" 1135 | } 1136 | } 1137 | }, 1138 | "micromatch": { 1139 | "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 1140 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=" 1141 | }, 1142 | "minimatch": { 1143 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", 1144 | "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=" 1145 | }, 1146 | "minimist": { 1147 | "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1148 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1149 | }, 1150 | "mkdirp": { 1151 | "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1152 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1153 | "dependencies": { 1154 | "minimist": { 1155 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1156 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1157 | } 1158 | } 1159 | }, 1160 | "mocha": { 1161 | "version": "https://registry.npmjs.org/mocha/-/mocha-3.2.0.tgz", 1162 | "integrity": "sha1-fcT0XlCIB1FxpoiWgU5q6et6heM=", 1163 | "dev": true, 1164 | "dependencies": { 1165 | "commander": { 1166 | "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", 1167 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", 1168 | "dev": true 1169 | }, 1170 | "glob": { 1171 | "version": "https://registry.npmjs.org/glob/-/glob-7.0.5.tgz", 1172 | "integrity": "sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=", 1173 | "dev": true 1174 | }, 1175 | "supports-color": { 1176 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", 1177 | "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", 1178 | "dev": true 1179 | } 1180 | } 1181 | }, 1182 | "ms": { 1183 | "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 1184 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", 1185 | "dev": true 1186 | }, 1187 | "multipipe": { 1188 | "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", 1189 | "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=" 1190 | }, 1191 | "native-promise-only": { 1192 | "version": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", 1193 | "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", 1194 | "dev": true 1195 | }, 1196 | "natives": { 1197 | "version": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", 1198 | "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", 1199 | "dev": true 1200 | }, 1201 | "node-version-compare": { 1202 | "version": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.1.tgz", 1203 | "integrity": "sha1-2Fv9IPCsreM1d/VmgscQnDTFUM0=" 1204 | }, 1205 | "normalize-package-data": { 1206 | "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", 1207 | "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=" 1208 | }, 1209 | "normalize-path": { 1210 | "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", 1211 | "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=" 1212 | }, 1213 | "number-is-nan": { 1214 | "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1215 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1216 | }, 1217 | "object-assign": { 1218 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 1219 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" 1220 | }, 1221 | "object.omit": { 1222 | "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 1223 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" 1224 | }, 1225 | "once": { 1226 | "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1227 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" 1228 | }, 1229 | "orchestrator": { 1230 | "version": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", 1231 | "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "end-of-stream": { 1235 | "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", 1236 | "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", 1237 | "dev": true 1238 | }, 1239 | "once": { 1240 | "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 1241 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 1242 | "dev": true 1243 | } 1244 | } 1245 | }, 1246 | "ordered-read-streams": { 1247 | "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", 1248 | "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", 1249 | "dev": true 1250 | }, 1251 | "os-homedir": { 1252 | "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1253 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1254 | "dev": true 1255 | }, 1256 | "os-tmpdir": { 1257 | "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1258 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1259 | }, 1260 | "parse-filepath": { 1261 | "version": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", 1262 | "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", 1263 | "dev": true 1264 | }, 1265 | "parse-glob": { 1266 | "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 1267 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" 1268 | }, 1269 | "parse-json": { 1270 | "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1271 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=" 1272 | }, 1273 | "parse-passwd": { 1274 | "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 1275 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 1276 | "dev": true 1277 | }, 1278 | "path-dirname": { 1279 | "version": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 1280 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" 1281 | }, 1282 | "path-exists": { 1283 | "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 1284 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=" 1285 | }, 1286 | "path-is-absolute": { 1287 | "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1288 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1289 | }, 1290 | "path-is-inside": { 1291 | "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1292 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1293 | "dev": true 1294 | }, 1295 | "path-root": { 1296 | "version": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", 1297 | "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", 1298 | "dev": true 1299 | }, 1300 | "path-root-regex": { 1301 | "version": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", 1302 | "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", 1303 | "dev": true 1304 | }, 1305 | "path-to-regexp": { 1306 | "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", 1307 | "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", 1308 | "dev": true 1309 | }, 1310 | "path-type": { 1311 | "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 1312 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=" 1313 | }, 1314 | "pause-stream": { 1315 | "version": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1316 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1317 | "dev": true 1318 | }, 1319 | "pify": { 1320 | "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1321 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1322 | }, 1323 | "pinkie": { 1324 | "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1325 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 1326 | }, 1327 | "pinkie-promise": { 1328 | "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1329 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" 1330 | }, 1331 | "preserve": { 1332 | "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 1333 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" 1334 | }, 1335 | "pretty-hrtime": { 1336 | "version": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 1337 | "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", 1338 | "dev": true 1339 | }, 1340 | "process-nextick-args": { 1341 | "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1342 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1343 | }, 1344 | "randomatic": { 1345 | "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", 1346 | "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=" 1347 | }, 1348 | "read-pkg": { 1349 | "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 1350 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" 1351 | }, 1352 | "read-pkg-up": { 1353 | "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1354 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=" 1355 | }, 1356 | "readable-stream": { 1357 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1358 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" 1359 | }, 1360 | "rechoir": { 1361 | "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 1362 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 1363 | "dev": true 1364 | }, 1365 | "redent": { 1366 | "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 1367 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=" 1368 | }, 1369 | "regex-cache": { 1370 | "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", 1371 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=" 1372 | }, 1373 | "repeat-element": { 1374 | "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 1375 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" 1376 | }, 1377 | "repeat-string": { 1378 | "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1379 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 1380 | }, 1381 | "repeating": { 1382 | "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1383 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=" 1384 | }, 1385 | "replace-ext": { 1386 | "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 1387 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" 1388 | }, 1389 | "resolve": { 1390 | "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 1391 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" 1392 | }, 1393 | "resolve-dir": { 1394 | "version": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", 1395 | "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", 1396 | "dev": true 1397 | }, 1398 | "rimraf": { 1399 | "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", 1400 | "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", 1401 | "dependencies": { 1402 | "glob": { 1403 | "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 1404 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=" 1405 | } 1406 | } 1407 | }, 1408 | "run-sequence": { 1409 | "version": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", 1410 | "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", 1411 | "dev": true 1412 | }, 1413 | "safe-buffer": { 1414 | "version": "5.0.1", 1415 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", 1416 | "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" 1417 | }, 1418 | "semver": { 1419 | "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 1420 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" 1421 | }, 1422 | "sequencify": { 1423 | "version": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", 1424 | "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", 1425 | "dev": true 1426 | }, 1427 | "should": { 1428 | "version": "https://registry.npmjs.org/should/-/should-11.2.1.tgz", 1429 | "integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=", 1430 | "dev": true, 1431 | "dependencies": { 1432 | "should-equal": { 1433 | "version": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz", 1434 | "integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=", 1435 | "dev": true 1436 | }, 1437 | "should-format": { 1438 | "version": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", 1439 | "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", 1440 | "dev": true 1441 | }, 1442 | "should-type": { 1443 | "version": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 1444 | "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", 1445 | "dev": true 1446 | } 1447 | } 1448 | }, 1449 | "should-type": { 1450 | "version": "1.4.0", 1451 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", 1452 | "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", 1453 | "dev": true 1454 | }, 1455 | "should-type-adaptors": { 1456 | "version": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", 1457 | "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", 1458 | "dev": true 1459 | }, 1460 | "should-util": { 1461 | "version": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", 1462 | "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", 1463 | "dev": true 1464 | }, 1465 | "sigmund": { 1466 | "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1467 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 1468 | "dev": true 1469 | }, 1470 | "signal-exit": { 1471 | "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.1.tgz", 1472 | "integrity": "sha1-WkyISZK2OnrNm623iUw+6c/MrYE=" 1473 | }, 1474 | "sinon": { 1475 | "version": "https://registry.npmjs.org/sinon/-/sinon-2.1.0.tgz", 1476 | "integrity": "sha1-4Fep0r8bMvXW3WJijKnuOWGwyvs=", 1477 | "dev": true, 1478 | "dependencies": { 1479 | "diff": { 1480 | "version": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", 1481 | "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", 1482 | "dev": true 1483 | }, 1484 | "formatio": { 1485 | "version": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", 1486 | "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", 1487 | "dev": true 1488 | }, 1489 | "lolex": { 1490 | "version": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", 1491 | "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", 1492 | "dev": true 1493 | }, 1494 | "samsam": { 1495 | "version": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz", 1496 | "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=", 1497 | "dev": true 1498 | } 1499 | } 1500 | }, 1501 | "sparkles": { 1502 | "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", 1503 | "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=" 1504 | }, 1505 | "spdx-correct": { 1506 | "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 1507 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=" 1508 | }, 1509 | "spdx-expression-parse": { 1510 | "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 1511 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" 1512 | }, 1513 | "spdx-license-ids": { 1514 | "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 1515 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" 1516 | }, 1517 | "split": { 1518 | "version": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1519 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1520 | "dev": true 1521 | }, 1522 | "stream-combiner": { 1523 | "version": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1524 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1525 | "dev": true 1526 | }, 1527 | "stream-consume": { 1528 | "version": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", 1529 | "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", 1530 | "dev": true 1531 | }, 1532 | "stream-shift": { 1533 | "version": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 1534 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" 1535 | }, 1536 | "string_decoder": { 1537 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1538 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1539 | }, 1540 | "strip-ansi": { 1541 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1542 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" 1543 | }, 1544 | "strip-bom": { 1545 | "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1546 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" 1547 | }, 1548 | "strip-bom-stream": { 1549 | "version": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", 1550 | "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=" 1551 | }, 1552 | "strip-indent": { 1553 | "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1554 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=" 1555 | }, 1556 | "supports-color": { 1557 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1558 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 1559 | }, 1560 | "temp": { 1561 | "version": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", 1562 | "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", 1563 | "dependencies": { 1564 | "rimraf": { 1565 | "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", 1566 | "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" 1567 | } 1568 | } 1569 | }, 1570 | "text-encoding": { 1571 | "version": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", 1572 | "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", 1573 | "dev": true 1574 | }, 1575 | "through": { 1576 | "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1577 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1578 | "dev": true 1579 | }, 1580 | "through2": { 1581 | "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 1582 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 1583 | "dependencies": { 1584 | "isarray": { 1585 | "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1586 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1587 | }, 1588 | "readable-stream": { 1589 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", 1590 | "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=" 1591 | } 1592 | } 1593 | }, 1594 | "through2-filter": { 1595 | "version": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", 1596 | "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=" 1597 | }, 1598 | "tildify": { 1599 | "version": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", 1600 | "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", 1601 | "dev": true 1602 | }, 1603 | "time-stamp": { 1604 | "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz", 1605 | "integrity": "sha1-n0vSNVnJNllm8zAtu6KwfGuZsVE=" 1606 | }, 1607 | "to-absolute-glob": { 1608 | "version": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", 1609 | "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=" 1610 | }, 1611 | "trim-newlines": { 1612 | "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 1613 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" 1614 | }, 1615 | "type-detect": { 1616 | "version": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.0.tgz", 1617 | "integrity": "sha1-YgU4g1QqMh8veyV0bcaWR4sY/2s=", 1618 | "dev": true 1619 | }, 1620 | "unc-path-regex": { 1621 | "version": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 1622 | "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", 1623 | "dev": true 1624 | }, 1625 | "unique-stream": { 1626 | "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", 1627 | "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=" 1628 | }, 1629 | "user-home": { 1630 | "version": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", 1631 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", 1632 | "dev": true 1633 | }, 1634 | "util-deprecate": { 1635 | "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1636 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1637 | }, 1638 | "v8flags": { 1639 | "version": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", 1640 | "integrity": "sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=", 1641 | "dev": true 1642 | }, 1643 | "vali-date": { 1644 | "version": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", 1645 | "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" 1646 | }, 1647 | "validate-npm-package-license": { 1648 | "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 1649 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=" 1650 | }, 1651 | "vinyl": { 1652 | "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", 1653 | "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=" 1654 | }, 1655 | "vinyl-fs": { 1656 | "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", 1657 | "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", 1658 | "dependencies": { 1659 | "isarray": { 1660 | "version": "1.0.0", 1661 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1662 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1663 | }, 1664 | "object-assign": { 1665 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1666 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1667 | }, 1668 | "readable-stream": { 1669 | "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.6.tgz", 1670 | "integrity": "sha1-i0Ou125xSDk40SqNRsbPGgCx+BY=" 1671 | }, 1672 | "vinyl": { 1673 | "version": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", 1674 | "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=" 1675 | } 1676 | } 1677 | }, 1678 | "which": { 1679 | "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", 1680 | "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=" 1681 | }, 1682 | "wrappy": { 1683 | "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1684 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1685 | }, 1686 | "xtend": { 1687 | "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1688 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1689 | } 1690 | } 1691 | } 1692 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-tsc", 3 | "version": "1.3.3", 4 | "author": "Kota Saito (https://github.com/kotas)", 5 | "copyright": "2014 Kota Saito", 6 | "contributors": [ 7 | "Cai Lei (https://github.com/ccll)", 8 | "Andrey Kurdyumov " 9 | ], 10 | "description": "TypeScript compiler for gulp.js", 11 | "license": "MIT", 12 | "homepage": "https://github.com/kant2002/gulp-tsc/", 13 | "bugs": "https://github.com/kant2002/gulp-tsc/issues", 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/kant2002/gulp-tsc.git" 17 | }, 18 | "main": "index.js", 19 | "scripts": { 20 | "mocha": "./node_modules/.bin/mocha", 21 | "e2e": "./node_modules/.bin/gulp --gulpfile test-e2e/gulpfile.js", 22 | "test": "npm run mocha && npm run e2e" 23 | }, 24 | "keywords": [ 25 | "gulpplugin", 26 | "typescript", 27 | "gulp", 28 | "tsc", 29 | "compile", 30 | "transpile", 31 | "compiler" 32 | ], 33 | "dependencies": { 34 | "async": "^2.2.0", 35 | "byline": "^5.0.0", 36 | "gulp-util": "^3.0.1", 37 | "lodash": "^4.17.4", 38 | "node-version-compare": "^1.0.1", 39 | "resolve": "^1.0.0", 40 | "rimraf": "^2.2.6", 41 | "temp": "^0.8.1", 42 | "through2": "^2.0.0", 43 | "vinyl-fs": "^2.4.4", 44 | "which": "^1.0.5" 45 | }, 46 | "devDependencies": { 47 | "@types/mocha": "^2.2.41", 48 | "@types/node": "^7.0.23", 49 | "del": "^2.0.0", 50 | "event-stream": "^3.1.0", 51 | "glob": "^7.1.1", 52 | "gulp": "^3.8.11", 53 | "gulp-expect-file": "^0.0.7", 54 | "mocha": "^3.2.0", 55 | "run-sequence": "^1.0.2", 56 | "should": "^11.2.1", 57 | "sinon": "^2.1.0" 58 | }, 59 | "peerDependencies": { 60 | "typescript": ">=1.0.1 || 2.x" 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/compiler.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var fs = require("fs"); 3 | import * as path from "path"; 4 | import * as util from "util"; 5 | import * as _ from "lodash"; 6 | import * as async from "async"; 7 | var byline = require('byline'); 8 | var temp = require('temp'); 9 | var rimraf = require('rimraf'); 10 | var through = require('through2'); 11 | var fsSrc = require('vinyl-fs').src; 12 | var EventEmitter = require('events').EventEmitter; 13 | var versionCompare = require('node-version-compare'); 14 | import * as tsc from "./tsc"; 15 | 16 | interface GulpTsCompilerOptions { 17 | tscPath?: string; 18 | tscSearch?: string; 19 | tmpDir?: string; 20 | keepTree: boolean; 21 | pathFilter?: any; 22 | safe?: boolean; 23 | stripInternal?: boolean; 24 | listFiles?: boolean; 25 | additionalTscParameters: any[]; 26 | 27 | allowJs?: boolean; 28 | allowSyntheticDefaultImports?: boolean; 29 | allowUnreachableCode?: boolean; 30 | allowUnusedLabels?: boolean; 31 | alwaysStrict?: boolean; 32 | baseUrl?: string; 33 | charset?: string; 34 | declaration?: boolean; 35 | declarationDir?: string; 36 | disableSizeLimit?: boolean; 37 | emitBOM?: boolean; 38 | emitDecoratorMetadata?: boolean; 39 | experimentalDecorators?: boolean; 40 | forceConsistentCasingInFileNames?: boolean; 41 | importHelpers?: boolean; 42 | inlineSourceMap?: boolean; 43 | inlineSources?: boolean; 44 | isolatedModules?: boolean; 45 | jsx?: "preserve" | "react" | "react-native"; 46 | lib?: string[]; 47 | locale?: string; 48 | mapRoot?: string; 49 | maxNodeModuleJsDepth?: number; 50 | module?: "commonjs" | "amd" | "system" | "umd" | "es2015"; 51 | moduleResolution?: "classic" | "node"; 52 | newLine?: "CRLF" | "LF"; 53 | noEmit?: boolean; 54 | noEmitHelpers?: boolean; 55 | noEmitOnError?: boolean; 56 | noErrorTruncation?: boolean; 57 | noFallthroughCasesInSwitch?: boolean; 58 | noImplicitAny?: boolean; 59 | noImplicitReturns?: boolean; 60 | noImplicitThis?: boolean; 61 | noUnusedLocals?: boolean; 62 | noUnusedParameters?: boolean; 63 | noImplicitUseStrict?: boolean; 64 | noLib?: boolean; 65 | noResolve?: boolean; 66 | out?: string; 67 | outDir?: string; 68 | outFile?: string; 69 | paths?: any; 70 | preserveConstEnums?: boolean; 71 | project?: string; 72 | reactNamespace?: string; 73 | jsxFactory?: string; 74 | removeComments?: boolean; 75 | rootDir?: string; 76 | rootDirs?: string[]; 77 | skipLibCheck?: boolean; 78 | skipDefaultLibCheck?: boolean; 79 | sourceMap?: boolean; 80 | sourceRoot?: string; 81 | strictNullChecks?: boolean; 82 | suppressExcessPropertyErrors?: boolean; 83 | suppressImplicitAnyIndexErrors?: boolean; 84 | target?: "ES3" | "ES5" | "ES6" | "ES2015" | "ES2016" | "ES2017" | "ESNext"; 85 | traceResolution?: boolean; 86 | types?: string[]; 87 | /** Paths used to compute primary types search locations */ 88 | typeRoots?: string[]; 89 | 90 | /** Obsolete properties */ 91 | allowbool?: boolean; 92 | allowimportmodule?: boolean; 93 | } 94 | 95 | function Compiler(sourceFiles: string | string[], options: GulpTsCompilerOptions) { 96 | EventEmitter.call(this); 97 | 98 | this.sourceFiles = sourceFiles || []; 99 | 100 | var defaultModule = options && (options.target === 'ES6' || options.target === 'ES2015') ? null : 'commonjs'; 101 | 102 | this.options = _.extend({ 103 | tscPath: null, 104 | tscSearch: null, 105 | module: defaultModule, 106 | target: 'ES3', 107 | out: null, 108 | outDir: null, 109 | baseUrl: null, 110 | mapRoot: null, 111 | sourceRoot: null, 112 | allowbool: false, 113 | allowimportmodule: false, 114 | declaration: false, 115 | noImplicitAny: false, 116 | noResolve: false, 117 | removeComments: false, 118 | sourceMap: false, 119 | moduleResolution: null, 120 | suppressImplicitAnyIndexErrors: false, 121 | tmpDir: '', 122 | noLib: false, 123 | keepTree: true, 124 | noEmitOnError: false, 125 | pathFilter: null, 126 | safe: false, 127 | emitDecoratorMetadata: false, 128 | experimentalDecorators: false, 129 | forceConsistentCasingInFileNames: false, 130 | allowSyntheticDefaultImports: false, 131 | noImplicitUseStrict: false, 132 | stripInternal: false, 133 | inlineSourceMap: false, 134 | inlineSources: false, 135 | isolatedModules: false, 136 | listFiles: false, 137 | project: null, 138 | additionalTscParameters: [] 139 | }, options); 140 | this.options.sourceMap = this.options.sourceMap || this.options.sourcemap; 141 | delete this.options.sourcemap; 142 | 143 | this.tscOptions = { 144 | path: this.options.tscPath, 145 | search: this.options.tscSearch 146 | }; 147 | 148 | this.tempDestination = null; 149 | this.tscArgumentsFile = null; 150 | this.treeKeeperFile = null; 151 | } 152 | util.inherits(Compiler, EventEmitter); 153 | 154 | Compiler.prototype.buildTscArguments = function (version) { 155 | let args: string[] = []; 156 | if (version === undefined || version === null) { 157 | version = "1.5"; 158 | } 159 | 160 | version = version.substring(0, 3); 161 | 162 | const option: GulpTsCompilerOptions = this.options; 163 | if (!option.project) { 164 | if (option.module) { 165 | args.push('--module', option.module.toLowerCase()); 166 | } 167 | 168 | if (option.target) { 169 | args.push('--target', option.target.toUpperCase()); 170 | } 171 | } 172 | 173 | if (this.options.mapRoot) args.push('--mapRoot', this.options.mapRoot); 174 | if (this.options.sourceRoot) args.push('--sourceRoot', this.options.sourceRoot); 175 | if (this.options.baseUrl) { 176 | args.push('--baseUrl', this.options.baseUrl); 177 | } 178 | 179 | if (this.options.allowbool) args.push('--allowbool'); 180 | if (this.options.allowimportmodule) args.push('--allowimportmodule'); 181 | if (this.options.suppressImplicitAnyIndexErrors 182 | && (versionCompare(version, "1.5") >= 0)) args.push('--suppressImplicitAnyIndexErrors'); 183 | if (this.options.declaration) args.push('--declaration'); 184 | if (this.options.noImplicitAny) args.push('--noImplicitAny'); 185 | if (this.options.noResolve) args.push('--noResolve'); 186 | if (this.options.removeComments) args.push('--removeComments'); 187 | if (this.options.sourceMap) args.push('--sourcemap'); 188 | if (this.options.noLib) args.push('--noLib'); 189 | if (this.options.jsx && (versionCompare(version, "1.6") >= 0)) { 190 | args.push('--jsx', this.options.jsx); 191 | } 192 | if (this.options.emitDecoratorMetadata) args.push('--emitDecoratorMetadata'); 193 | if (this.options.experimentalDecorators) args.push('--experimentalDecorators'); 194 | if (this.options.allowJs 195 | && (versionCompare(version, "1.8") >= 0)) args.push('--allowJs'); 196 | if (this.options.reactNamespace 197 | && (versionCompare(version, "1.8") >= 0)) args.push('--reactNamespace'); 198 | if (this.options.allowUnusedLabels 199 | && (versionCompare(version, "1.8") >= 0)) args.push('--allowUnusedLabels'); 200 | if (this.options.allowUnreachableCode 201 | && (versionCompare(version, "1.8") >= 0)) args.push('--allowUnreachableCode'); 202 | if (this.options.noImplicitReturns 203 | && (versionCompare(version, "1.8") >= 0)) args.push('--noImplicitReturns'); 204 | if (this.options.noFallthroughCasesInSwitch 205 | && (versionCompare(version, "1.8") >= 0)) args.push('--noFallthroughCasesInSwitch'); 206 | if (this.options.forceConsistentCasingInFileNames 207 | && (versionCompare(version, "1.8") >= 0)) args.push('--forceConsistentCasingInFileNames'); 208 | if (this.options.allowSyntheticDefaultImports 209 | && (versionCompare(version, "1.8") >= 0)) args.push('--allowSyntheticDefaultImports'); 210 | if (this.options.noImplicitUseStrict && (versionCompare(version, "1.8") >= 0)) { 211 | args.push('--noImplicitUseStrict'); 212 | } 213 | 214 | if (this.options.stripInternal && (versionCompare(version, "1.8") >= 0)) { 215 | args.push('--stripInternal'); 216 | } 217 | 218 | if (this.options.inlineSourceMap && (versionCompare(version, "1.8") >= 0)) { 219 | args.push('--inlineSourceMap'); 220 | } 221 | 222 | if (this.options.inlineSources && (versionCompare(version, "1.8") >= 0)) { 223 | args.push('--inlineSources'); 224 | } 225 | 226 | if (this.options.isolatedModules && (versionCompare(version, "1.8") >= 0)) { 227 | args.push('--isolatedModules'); 228 | } 229 | 230 | if (this.options.listFiles && (versionCompare(version, "1.8") >= 0)) { 231 | args.push('--listFiles'); 232 | } 233 | 234 | if (this.options.noEmitOnError && versionCompare(version, "1.4") >= 0) { 235 | args.push('--noEmitOnError'); 236 | } 237 | 238 | if (this.options.moduleResolution && versionCompare(version, "1.6") >= 0) { 239 | args.push('--moduleResolution', this.options.moduleResolution); 240 | } 241 | 242 | if (option.lib && versionCompare(version, "1.8") >= 0) { 243 | let param = option.lib.join(","); 244 | args.push('--lib', param); 245 | } 246 | 247 | if (this.options.strict && versionCompare(version, "2.3") >= 0) { 248 | args.push('--strict'); 249 | } 250 | 251 | if (this.options.downlevelIteration && versionCompare(version, "2.3") >= 0) { 252 | args.push('--downlevelIteration'); 253 | } 254 | 255 | if (this.options.checkJs && versionCompare(version, "2.3") >= 0) { 256 | args.push('--checkJs'); 257 | } 258 | 259 | if (this.options.project && versionCompare(version, "1.6") >= 0) { 260 | args.push('--project', this.options.project); 261 | } 262 | if (this.options.additionalTscParameters) this.options.additionalTscParameters.forEach(function (param) { args.push(param); }); 263 | 264 | if (this.tempDestination) { 265 | if (!(this.options.project && versionCompare(version, "1.6") >= 0)) { 266 | args.push('--outDir', this.tempDestination); 267 | } 268 | 269 | if (this.options.out) { 270 | args.push('--out', path.resolve(this.tempDestination, this.options.out)); 271 | } 272 | } else if (this.options.out) { 273 | args.push('--out', this.options.out); 274 | } 275 | 276 | if (!(this.options.project && versionCompare(version, "1.6") >= 0)) { 277 | this.sourceFiles.forEach(function (f) { args.push(f.path); }); 278 | if (this.treeKeeperFile) { 279 | args.push(this.treeKeeperFile); 280 | } 281 | } 282 | 283 | return args; 284 | }; 285 | 286 | Compiler.prototype.getVersion = function (callback) { 287 | return tsc.version(this.tscOptions, callback); 288 | }; 289 | 290 | Compiler.prototype.compile = function (callback) { 291 | var _this = this; 292 | var checkAborted = this.checkAborted.bind(this); 293 | 294 | this.emit('start'); 295 | (Compiler as any)._start(this); 296 | 297 | async.waterfall([ 298 | checkAborted, 299 | this.makeTempDestinationDir.bind(this), 300 | checkAborted, 301 | this.makeTreeKeeperFile.bind(this), 302 | checkAborted, 303 | this.prepareTscArgumentsFile.bind(this), 304 | checkAborted, 305 | this.runTsc.bind(this), 306 | checkAborted 307 | ], function (err) { 308 | if (err && _this.options.safe) { 309 | finish(err); 310 | } else { 311 | _this.processOutputFiles(function (err2) { 312 | finish(err || err2); 313 | }); 314 | } 315 | }); 316 | 317 | function finish(err) { 318 | _this.cleanup(); 319 | _this.emit('end'); 320 | callback(err); 321 | } 322 | }; 323 | 324 | Compiler.prototype.checkAborted = function (callback) { 325 | if ((Compiler as any).isAborted()) { 326 | callback(new Error('aborted')); 327 | } else { 328 | callback(null); 329 | } 330 | }; 331 | 332 | Compiler.prototype.makeTempDestinationDir = function (callback) { 333 | var _this = this; 334 | temp.track(); 335 | temp.mkdir({ dir: path.resolve(process.cwd(), this.options.tmpDir), prefix: 'gulp-tsc-tmp-' }, function (err, dirPath) { 336 | if (err) return callback(err); 337 | _this.tempDestination = dirPath; 338 | 339 | callback(null); 340 | }); 341 | }; 342 | 343 | Compiler.prototype.makeTreeKeeperFile = function (callback) { 344 | if (!this.options.keepTree || this.options.out || this.sourceFiles.length === 0) { 345 | return callback(null); 346 | } 347 | 348 | var _this = this; 349 | temp.open({ dir: this.sourceFiles[0].base, prefix: '.gulp-tsc-tmp-', suffix: '.ts' }, function (err, file) { 350 | if (err) { 351 | return callback(new Error( 352 | 'Failed to create a temporary file on source directory: ' + (err.message || err) + ', ' + 353 | 'To skip creating it specify { keepTree: false } to your gulp-tsc.' 354 | )); 355 | } 356 | 357 | _this.treeKeeperFile = file.path; 358 | try { 359 | fs.writeSync(file.fd, '// This is a temporary file by gulp-tsc for keeping directory tree.\n'); 360 | fs.closeSync(file.fd); 361 | } catch (e) { 362 | return callback(e); 363 | } 364 | callback(null); 365 | }); 366 | }; 367 | 368 | Compiler.prototype.prepareTscArgumentsFile = function(callback) { 369 | this.getVersion(function (error, version) { 370 | var tscArguments = this.buildTscArguments(version); 371 | var content = '"' + tscArguments.join('"\n"') + '"'; 372 | this.tscArgumentsFile = path.join(this.tempDestination, 'tscArguments'); 373 | fs.writeFile(this.tscArgumentsFile, content, callback); 374 | }.bind(this)); 375 | }; 376 | 377 | Compiler.prototype.runTsc = function (callback) { 378 | var _this = this; 379 | var proc = tsc.exec(['@' + this.tscArgumentsFile], this.tscOptions); 380 | var stdout = byline(proc.stdout); 381 | var stderr = byline(proc.stderr); 382 | 383 | proc.on('exit', function (code) { 384 | if (code !== 0) { 385 | callback(new Error('tsc command has exited with code:' + code)); 386 | } else { 387 | callback(null); 388 | } 389 | }) 390 | proc.on('error', function (err) { 391 | _this.emit('error', err); 392 | }); 393 | stdout.on('data', function (chunk) { 394 | _this.emit('stdout', chunk.toString('utf8')); 395 | }); 396 | stderr.on('data', function (chunk) { 397 | _this.emit('stderr', chunk.toString('utf8')); 398 | }); 399 | 400 | return proc; 401 | }; 402 | 403 | Compiler.prototype.processOutputFiles = function (callback) { 404 | var _this = this; 405 | var options = { cwd: this.tempDestination, cwdbase: true }; 406 | var patterns = ['**/*{.js,.js.map,.d.ts}']; 407 | if (this.treeKeeperFile) { 408 | patterns.push('!**/' + path.basename(this.treeKeeperFile, '.ts') + '.*'); 409 | } 410 | 411 | var stream = fsSrc(patterns, options); 412 | stream = stream.pipe(this.fixOutputFilePath()); 413 | if (this.options.sourceMap && !this.options.sourceRoot) { 414 | stream = stream.pipe(this.fixSourcemapPath()); 415 | } 416 | if (this.options.declaration && this.options.outDir) { 417 | stream = stream.pipe(this.fixReferencePath()); 418 | } 419 | stream.on('data', function (file) { 420 | _this.emit('data', file); 421 | }); 422 | stream.on('error', function (err) { 423 | callback(err); 424 | }); 425 | stream.on('end', function () { 426 | callback(); 427 | }); 428 | }; 429 | 430 | Compiler.prototype.fixOutputFilePath = function () { 431 | var filter = this.options.pathFilter && this.filterOutput.bind(this); 432 | var outDir; 433 | if (this.options.outDir) { 434 | outDir = path.resolve(process.cwd(), this.options.outDir); 435 | } else { 436 | outDir = this.tempDestination; 437 | } 438 | 439 | return through.obj(function (file, encoding, done) { 440 | file.originalPath = file.path; 441 | file.path = path.resolve(outDir, file.relative); 442 | file.cwd = file.base = outDir; 443 | if (filter) { 444 | try { 445 | file = filter(file); 446 | } catch (e) { 447 | return done(e); 448 | } 449 | } 450 | if (file) this.push(file); 451 | done(); 452 | }); 453 | }; 454 | 455 | Compiler.prototype.filterOutput = function (file) { 456 | if (!this.options.pathFilter) return file; 457 | 458 | var filter = this.options.pathFilter; 459 | if (_.isFunction(filter)) { 460 | var ret = filter(file.relative, file); 461 | if (ret === true || _.isUndefined(ret)) { 462 | return file; 463 | } else if (ret === false) { 464 | return null; 465 | } else if (_.isString(ret)) { 466 | file.path = path.resolve(file.base, ret); 467 | return file; 468 | } else if (_.isObject(ret) && ret.path) { 469 | return ret; 470 | } else { 471 | throw new Error('Unknown return value from pathFilter function'); 472 | } 473 | } else if (_.isPlainObject(filter)) { 474 | _.forOwn(filter, function (val, key) { 475 | if (_.isString(key) && _.isString(val)) { 476 | var src = path.normalize(key) + path.sep; 477 | if (file.relative.substr(0, src.length) === src) { 478 | file.path = path.resolve(file.base, val, file.relative.substr(src.length) || '.'); 479 | return false; 480 | } 481 | } 482 | }); 483 | return file; 484 | } else { 485 | throw new Error('Unknown type for pathFilter'); 486 | } 487 | }; 488 | 489 | Compiler.prototype.fixSourcemapPath = function () { 490 | return through.obj(function (file, encoding, done) { 491 | if (!file.isBuffer() || !/\.js\.map/.test(file.path)) { 492 | this.push(file); 493 | return done(); 494 | } 495 | 496 | var map = JSON.parse(file.contents); 497 | if (map['sources'] && map['sources'].length > 0) { 498 | map['sources'] = map['sources'].map(function (sourcePath) { 499 | sourcePath = path.resolve(path.dirname(file.originalPath), sourcePath); 500 | sourcePath = path.relative(path.dirname(file.path), sourcePath); 501 | if (path.sep == '\\') sourcePath = sourcePath.replace(/\\/g, '/'); 502 | return sourcePath; 503 | }); 504 | file.contents = new Buffer(JSON.stringify(map)); 505 | } 506 | this.push(file); 507 | done(); 508 | }); 509 | }; 510 | 511 | Compiler.prototype.fixReferencePath = function () { 512 | return through.obj(function (file, encoding, done) { 513 | if (!file.isBuffer() || !/\.d\.ts/.test(file.path)) { 514 | this.push(file); 515 | return done(); 516 | } 517 | 518 | var newContent = file.contents.toString().replace( 519 | /(\/\/\/\s* 0) { 36 | command += ' ' + (Array.isArray(args) ? shellescape(args) : args); 37 | } 38 | 39 | return child_process.exec(command, options, callback); 40 | } 41 | 42 | export function versionParser(callback: (err: Error | null, version: string | null) => void) { 43 | return function (stdout, stderr) { 44 | if (!stdout) { 45 | callback(null, null); 46 | return; 47 | } 48 | 49 | var versionMatch = stdout.match(/Version (\d+\.\d+\.\d+((\.\d+)|(-alpha))?)/); 50 | if (versionMatch.length > 1) { 51 | callback(null, versionMatch[1]); 52 | return; 53 | } 54 | 55 | callback(null, null); 56 | }; 57 | } 58 | 59 | export function version(options, callback) { 60 | if (!callback && typeof options === 'function') { 61 | callback = options; 62 | options = {}; 63 | } 64 | 65 | return exec('-v', options, function (err: Error | null, stdout, stderr) { 66 | if (err) { 67 | return callback(err, null); 68 | } 69 | 70 | var parser = versionParser(callback); 71 | parser(stdout, stderr); 72 | }); 73 | } 74 | 75 | export function find(places: SearchLocations[]) { 76 | places = places || ['cwd', 'bundle', 'shell']; 77 | for (var i = 0; i < places.length; i++) { 78 | var fn = searchFunctions[places[i]]; 79 | if (!fn) { 80 | throw new Error('Unknown search place: ' + places[i]); 81 | } 82 | 83 | var found = fn(); 84 | if (found) { 85 | return found; 86 | } 87 | } 88 | 89 | throw new Error('Can\'t locate `tsc` command'); 90 | } 91 | 92 | var searchFunctions = { 93 | cwd: function () { 94 | try { 95 | var tpath = resolve.sync('typescript', { basedir: process.cwd() }); 96 | var tscPath = path.resolve(path.dirname(tpath), 'tsc'); 97 | return fs.existsSync(tscPath) ? tscPath : null; 98 | } catch (e) { 99 | return null; 100 | } 101 | }, 102 | shell: function () { 103 | try { 104 | return which.sync('tsc'); 105 | } catch (e) { 106 | return null; 107 | } 108 | }, 109 | bundle: function () { 110 | try { 111 | return path.resolve(require.resolve('typescript'), '../tsc'); 112 | } catch (e) { 113 | return null 114 | } 115 | } 116 | }; 117 | -------------------------------------------------------------------------------- /test-e2e/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | src-inplace/**/*.js 3 | -------------------------------------------------------------------------------- /test-e2e/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var gutil = require('gulp-util'); 3 | var sequence = require('run-sequence'); 4 | var glob = require('glob'); 5 | var es = require('event-stream'); 6 | var del = require('del'); 7 | var typescript = require('../index'); 8 | var tsc = require('../lib/tsc'); 9 | var expectFile = require('gulp-expect-file'); 10 | var versionCompare = require('node-version-compare'); 11 | 12 | var expect = function (files) { 13 | return expectFile({ checkRealFile: true, errorOnFailure: true, verbose: true }, files); 14 | }; 15 | 16 | var abort = function (err) { throw err; }; 17 | var ignore = function (err) { }; 18 | var currentVersion = 'INVALID'; 19 | 20 | var isVersionGte150 = function (version) { 21 | version = version.substring(0, 3); 22 | console.log(version, versionCompare(version, "1.5")); 23 | return versionCompare(version, "1.5") >= 0; 24 | } 25 | 26 | gulp.task('default', ['version', 'all']); 27 | 28 | gulp.task('version', function (cb) { 29 | tsc.version(function (err, data) { 30 | if (err) { 31 | throw err; 32 | } 33 | currentVersion = data; 34 | cb(null); 35 | }); 36 | }); 37 | 38 | gulp.task('clean', ['version'], function (cb) { 39 | del([ 40 | 'build/**', 41 | 'src-inplace/**/*.js', 42 | ]).then(function (paths) { 43 | cb(null); 44 | }, null); 45 | }); 46 | 47 | gulp.task('all', ['clean'], function (cb) { 48 | var tasks = Object.keys(this.tasks).filter(function (k) { return /^test\d+/.test(k) }); 49 | tasks.sort(function (a, b) { return a.match(/\d+/)[0] - b.match(/\d+/)[0] }); 50 | tasks.push(cb); 51 | sequence.apply(null, tasks); 52 | }); 53 | 54 | // Compiling single file 55 | gulp.task('test1', ['clean'], function () { 56 | return gulp.src('src/foo.ts') 57 | .pipe(typescript()).on('error', abort) 58 | .pipe(gulp.dest('build/test1')) 59 | .pipe(expect('build/test1/foo.js')); 60 | }); 61 | 62 | // Compiling multiple files 63 | gulp.task('test2', ['clean'], function () { 64 | console.log(expect([ 65 | 'build/test2/foo.js', 66 | 'build/test2/sum.js', 67 | 'build/test2/calc.js' 68 | ])); 69 | return gulp.src('src/*.ts') 70 | .pipe(typescript()).on('error', abort) 71 | .pipe(gulp.dest('build/test2')) 72 | .pipe(expect([ 73 | 'build/test2/foo.js', 74 | 'build/test2/sum.js', 75 | 'build/test2/calc.js' 76 | ])); 77 | }); 78 | 79 | // Compiling multiple files keeping directory structure 80 | gulp.task('test3', ['clean'], function () { 81 | return gulp.src('src/**/*.ts') 82 | .pipe(typescript()).on('error', abort) 83 | .pipe(gulp.dest('build/test3')) 84 | .pipe(expect([ 85 | 'build/test3/foo.js', 86 | 'build/test3/sum.js', 87 | 'build/test3/calc.js', 88 | 'build/test3/s1/a.js', 89 | 'build/test3/s2/b.js' 90 | ])); 91 | }); 92 | 93 | // Compiling multiple files into one file 94 | gulp.task('test4', ['clean'], function () { 95 | return gulp.src('src/*.ts') 96 | .pipe(typescript({ module: 'amd', out: 'test4.js' })).on('error', abort) 97 | .pipe(gulp.dest('build/test4')) 98 | .pipe(expect('build/test4/test4.js')); 99 | }); 100 | 101 | // Compiling fails and outputs nothing 102 | gulp.task('test5', ['clean'], function () { 103 | return gulp.src('src-broken/error.ts') 104 | .pipe(typescript()).on('error', ignore) 105 | .pipe(gulp.dest('build/test5')) 106 | .pipe(!isVersionGte150(currentVersion) 107 | ? expect([]) : expect('build/test5/error.js')); 108 | }); 109 | 110 | // Compiling warns some errors but outputs a file 111 | gulp.task('test6', ['clean'], function () { 112 | return gulp.src('src-broken/warning.ts') 113 | .pipe(typescript()).on('error', ignore) 114 | .pipe(gulp.dest('build/test6')) 115 | .pipe(expect('build/test6/warning.js')); 116 | }); 117 | 118 | // Compiling files including .d.ts file 119 | gulp.task('test7', ['clean'], function () { 120 | return gulp.src(['src-d/*.ts']) 121 | .pipe(typescript()).on('error', abort) 122 | .pipe(gulp.dest('build/test7')) 123 | .pipe(expect([ 124 | 'build/test7/main.js', 125 | 'build/test7/sub.js' 126 | ])) 127 | }); 128 | 129 | // Compiling files including .d.ts file into one 130 | gulp.task('test8', ['clean'], function () { 131 | return gulp.src('src-d/*.ts') 132 | .pipe(typescript({ module: 'amd', out: 'unified.js' })).on('error', abort) 133 | .pipe(gulp.dest('build/test8')) 134 | .pipe(expect('build/test8/unified.js')) 135 | }); 136 | 137 | // Compiling .d.ts file only 138 | gulp.task('test9', ['clean'], function () { 139 | return gulp.src('src-d/hello.d.ts') 140 | .pipe(typescript()).on('error', abort) 141 | .pipe(gulp.dest('build/test9')) 142 | .pipe(expect([])) 143 | }); 144 | 145 | // Compiling cross-project files 146 | gulp.task('test10', ['clean'], function () { 147 | return gulp.src('src-crossproj/proj-a/main.ts') 148 | .pipe(typescript()).on('error', abort) 149 | .pipe(gulp.dest('build/test10')) 150 | .pipe(expect([ 151 | 'build/test10/proj-a/main.js', 152 | 'build/test10/proj-b/util.js', 153 | 'build/test10/proj-b/sub/sub.js', 154 | ])) 155 | }); 156 | 157 | // Compiling with sourcemap 158 | gulp.task('test11', ['clean'], function () { 159 | return gulp.src('src/foo.ts') 160 | .pipe(typescript({ sourcemap: true })).on('error', abort) 161 | .pipe(gulp.dest('build/test11')) 162 | .pipe(expect({ 163 | 'build/test11/foo.js': true, 164 | 'build/test11/foo.js.map': '"sources":["../src/foo.ts"]' 165 | })) 166 | }); 167 | 168 | // Compiling sourcemap files 169 | gulp.task('test12', ['clean'], function () { 170 | return gulp.src('src-crossproj/proj-a/main.ts') 171 | .pipe(typescript({ sourcemap: true, outDir: 'build/test12' })).on('error', abort) 172 | .pipe(gulp.dest('build/test12')) 173 | .pipe(expect({ 174 | 'build/test12/proj-a/main.js': true, 175 | 'build/test12/proj-a/main.js.map': '"sources":["../../../src-crossproj/proj-a/main.ts"]', 176 | 'build/test12/proj-b/util.js': true, 177 | 'build/test12/proj-b/util.js.map': '"sources":["../../../src-crossproj/proj-b/util.ts"]', 178 | 'build/test12/proj-b/sub/sub.js': true, 179 | 'build/test12/proj-b/sub/sub.js.map': '"sources":["../../../../src-crossproj/proj-b/sub/sub.ts"]' 180 | })) 181 | }); 182 | 183 | // Compiling sourcemap files into one file 184 | gulp.task('test13', ['clean'], function () { 185 | return gulp.src('src-crossproj/proj-a/main.ts') 186 | .pipe(typescript({ module: 'amd', sourcemap: true, sourceRoot: '/', out: 'unified.js' })).on('error', abort) 187 | .pipe(gulp.dest('build/test13')) 188 | .pipe(expect({ 189 | 'build/test13/unified.js': true, 190 | 'build/test13/unified.js.map': [ 191 | '"sourceRoot":"/"', 192 | /"sources":\[("(proj-b\/util\.ts|proj-b\/sub\/sub\.ts|proj-a\/main\.ts)",?){3}\]/ 193 | ] 194 | })) 195 | }); 196 | 197 | // Compiling into source directory (in-place) 198 | gulp.task('test14', ['clean'], function () { 199 | return gulp.src('src-inplace/**/*.ts') 200 | .pipe(typescript()).on('error', abort) 201 | .pipe(gulp.dest('src-inplace')) 202 | .pipe(expect([ 203 | 'src-inplace/top1.js', 204 | 'src-inplace/top2.js', 205 | 'src-inplace/sub/sub1.js', 206 | 'src-inplace/sub/sub2.js', 207 | ])) 208 | }); 209 | 210 | // emitError: false 211 | gulp.task('test15', ['clean'], function () { 212 | return gulp.src('src-broken/error.ts') 213 | .pipe(typescript({ emitError: false })) 214 | .pipe(gulp.dest('build/test15')) 215 | .pipe(!isVersionGte150(currentVersion) 216 | ? expect([]) : expect(['build/test15/error.js']) 217 | ); 218 | }); 219 | 220 | // Compile two project in one task 221 | gulp.task('test16', ['clean'], function () { 222 | var ps = es.pause(); 223 | 224 | var one = gulp.src('src/s1/*.ts') 225 | .pipe(ps.pause()) // Pausing stream for 1 sec 226 | .pipe(typescript()).on('error', abort) 227 | .pipe(gulp.dest('build/test16/s1')); 228 | 229 | var two = gulp.src('src/s2/*.ts') 230 | .pipe(typescript()).on('error', abort) 231 | .pipe(gulp.dest('build/test16/s2')); 232 | 233 | setTimeout(function () { ps.resume() }, 1000); 234 | 235 | return es.merge(one, two) 236 | .pipe(expect([ 237 | 'build/test16/s1/a.js', 238 | 'build/test16/s2/b.js' 239 | ])) 240 | .on('end', function () { 241 | if (glob.sync('gulp-tsc-tmp-*').length > 0) { 242 | throw "Temporary directory is left behind"; 243 | } 244 | }); 245 | }); 246 | 247 | // Compile two project in one task with errors 248 | gulp.task('test17', ['clean'], function () { 249 | var one = gulp.src('src-broken/error.ts') 250 | .pipe(typescript()).on('error', ignore) 251 | .pipe(gulp.dest('build/test17/s1')); 252 | 253 | var two = gulp.src('src/s2/*.ts') 254 | .pipe(typescript()).on('error', ignore) 255 | .pipe(gulp.dest('build/test17/s2')); 256 | 257 | return es.merge(one, two) 258 | .pipe(!isVersionGte150(currentVersion) 259 | ? expect(['build/test17/s2/b.js']) 260 | : expect(['build/test17/s1/error.js', 'build/test17/s2/b.js']) 261 | ) 262 | .on('end', function () { 263 | if (glob.sync('gulp-tsc-tmp-*').length > 0) { 264 | throw "Temporary directory is left behind"; 265 | } 266 | }); 267 | }); 268 | 269 | // Compile files in nested directory 270 | gulp.task('test18', ['clean'], function () { 271 | return gulp.src('src-inplace/*/*.ts') 272 | .pipe(typescript({ sourcemap: true, outDir: 'build/test18' })).on('error', abort) 273 | .pipe(gulp.dest('build/test18')) 274 | .pipe(expect({ 275 | 'build/test18/sub/sub1.js': true, 276 | 'build/test18/sub/sub1.js.map': '"sources":["../../../src-inplace/sub/sub1.ts"]', 277 | 'build/test18/sub/sub2.js': true, 278 | 'build/test18/sub/sub2.js.map': '"sources":["../../../src-inplace/sub/sub2.ts"]' 279 | })) 280 | }); 281 | 282 | // Compile files in nested directory into one file 283 | gulp.task('test19', ['clean'], function () { 284 | return gulp.src('src-inplace/*/*.ts') 285 | .pipe(typescript({ module: 'amd', sourcemap: true, outDir: 'build/test19', out: 'test19.js' })).on('error', abort) 286 | .pipe(gulp.dest('build/test19')) 287 | .pipe(expect({ 288 | 'build/test19/test19.js': true, 289 | 'build/test19/test19.js.map': /"sources":\[("..\/..\/src-inplace\/sub\/sub[12].ts",?){2,3}\]/ 290 | })) 291 | }); 292 | 293 | // for https://github.com/kotas/gulp-tsc/issues/21 294 | gulp.task('test20', ['clean'], function () { 295 | return gulp.src('src-crossproj/*-a/*.ts') 296 | .pipe(typescript({ outDir: 'build/test20' })).on('error', abort) 297 | .pipe(gulp.dest('build/test20')) 298 | .pipe(expect([ 299 | 'build/test20/proj-a/main.js', 300 | 'build/test20/proj-b/util.js', 301 | 'build/test20/proj-b/sub/sub.js' 302 | ])); 303 | }); 304 | 305 | // Compiling files with pathFilter 306 | gulp.task('test21', ['clean'], function () { 307 | return gulp.src('src-crossproj/proj-a/*.ts') 308 | .pipe(typescript({ 309 | sourcemap: true, 310 | outDir: 'build/test21', 311 | pathFilter: { 'proj-a': 'a/build', 'proj-b': 'b/build' } 312 | })).on('error', abort) 313 | .pipe(gulp.dest('build/test21')) 314 | .pipe(expect({ 315 | 'build/test21/a/build/main.js': true, 316 | 'build/test21/a/build/main.js.map': '"sources":["../../../../src-crossproj/proj-a/main.ts"]', 317 | 'build/test21/b/build/util.js': true, 318 | 'build/test21/b/build/util.js.map': '"sources":["../../../../src-crossproj/proj-b/util.ts"]', 319 | 'build/test21/b/build/sub/sub.js': true, 320 | 'build/test21/b/build/sub/sub.js.map': '"sources":["../../../../../src-crossproj/proj-b/sub/sub.ts"]' 321 | })) 322 | }); 323 | 324 | // Compiling warns some errors and outputs nothing 325 | gulp.task('test22', ['clean'], function () { 326 | return gulp.src('src-broken/warning.ts') 327 | .pipe(typescript({ safe: true })).on('error', ignore) 328 | .pipe(gulp.dest('build/test22')) 329 | .pipe(expect([])); 330 | }); 331 | 332 | // Compile two project in one task with warnings 333 | gulp.task('test23', ['clean'], function () { 334 | var one = gulp.src('src-broken/warning.ts') 335 | .pipe(typescript({ safe: true })).on('error', ignore) 336 | .pipe(gulp.dest('build/test23/s1')); 337 | 338 | var two = gulp.src('src/s2/*.ts') 339 | .pipe(typescript()).on('error', ignore) 340 | .pipe(gulp.dest('build/test23/s2')); 341 | 342 | return es.merge(one, two) 343 | .pipe(expect([ 344 | 'build/test23/s2/b.js' 345 | ])) 346 | .on('end', function () { 347 | if (glob.sync('gulp-tsc-tmp-*').length > 0) { 348 | throw "Temporary directory is left behind"; 349 | } 350 | }); 351 | }); 352 | 353 | // Compile files reference to declarations in outer directory with correct path 354 | // for https://github.com/kotas/gulp-tsc/issues/26 355 | gulp.task('test24', ['clean'], function () { 356 | return gulp.src('src-d-outer/**/main.ts') 357 | .pipe(typescript({ declaration: true, outDir: 'build/test24' })).on('error', abort) 358 | .pipe(gulp.dest('build/test24')) 359 | .pipe(expect({ 360 | 'build/test24/src/main.js': true, 361 | 'build/test24/src/main.d.ts': '' 362 | })) 363 | }); 364 | -------------------------------------------------------------------------------- /test-e2e/src-broken/error.ts: -------------------------------------------------------------------------------- 1 | notclosed(123 2 | -------------------------------------------------------------------------------- /test-e2e/src-broken/warning.ts: -------------------------------------------------------------------------------- 1 | var s:string = 123; 2 | -------------------------------------------------------------------------------- /test-e2e/src-crossproj/proj-a/main.ts: -------------------------------------------------------------------------------- 1 | /// 2 | console.log(util.upper(util.sub.hello)); 3 | -------------------------------------------------------------------------------- /test-e2e/src-crossproj/proj-b/sub/sub.ts: -------------------------------------------------------------------------------- 1 | module util { 2 | export module sub { 3 | export var hello: string = 'hello'; 4 | } 5 | } -------------------------------------------------------------------------------- /test-e2e/src-crossproj/proj-b/util.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | module util { 4 | export function upper(s: string): string { return s.toUpperCase(); } 5 | } 6 | -------------------------------------------------------------------------------- /test-e2e/src-d-outer/hello.d.ts: -------------------------------------------------------------------------------- 1 | declare class Hello { 2 | constructor(target: string); 3 | greet(): string; 4 | } 5 | -------------------------------------------------------------------------------- /test-e2e/src-d-outer/src/main.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | export function helloWorld(): Hello { 4 | return new Hello("world"); 5 | } 6 | -------------------------------------------------------------------------------- /test-e2e/src-d/hello.d.ts: -------------------------------------------------------------------------------- 1 | declare function hello(world: string): number; 2 | -------------------------------------------------------------------------------- /test-e2e/src-d/main.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | hello("earth"); 4 | -------------------------------------------------------------------------------- /test-e2e/src-d/sub.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | hello("stranger"); 4 | -------------------------------------------------------------------------------- /test-e2e/src-inplace/sub/sub1.ts: -------------------------------------------------------------------------------- 1 | 2 | /// 3 | 4 | console.log("sub1"); 5 | 6 | -------------------------------------------------------------------------------- /test-e2e/src-inplace/sub/sub2.ts: -------------------------------------------------------------------------------- 1 | console.log("sub2"); 2 | -------------------------------------------------------------------------------- /test-e2e/src-inplace/top1.ts: -------------------------------------------------------------------------------- 1 | var s:string = "top1"; 2 | 3 | -------------------------------------------------------------------------------- /test-e2e/src-inplace/top2.ts: -------------------------------------------------------------------------------- 1 | var s:string = "top2"; 2 | 3 | -------------------------------------------------------------------------------- /test-e2e/src/calc.ts: -------------------------------------------------------------------------------- 1 | declare var require:any; 2 | 3 | var sum = require('./sum'); 4 | 5 | var n1: number = 123; 6 | var n2: number = 456; 7 | 8 | console.log(sum(n1, n2)); 9 | -------------------------------------------------------------------------------- /test-e2e/src/foo.ts: -------------------------------------------------------------------------------- 1 | var s:string = 'Hello, world!'; 2 | console.log(s); 3 | -------------------------------------------------------------------------------- /test-e2e/src/s1/a.ts: -------------------------------------------------------------------------------- 1 | console.log("s1"); -------------------------------------------------------------------------------- /test-e2e/src/s2/b.ts: -------------------------------------------------------------------------------- 1 | console.log("s2"); -------------------------------------------------------------------------------- /test-e2e/src/sum.ts: -------------------------------------------------------------------------------- 1 | declare var module:any; 2 | module.exports = (a: number, b: number): number => { 3 | return a + b; 4 | } 5 | -------------------------------------------------------------------------------- /test/compiler-spec.js: -------------------------------------------------------------------------------- 1 | var helper = require('./helper'); 2 | var Compiler = require('../lib/compiler'); 3 | var tsc = require('../lib/tsc'); 4 | var should = require('should'); 5 | var sinon = require('sinon'); 6 | var File = require('gulp-util').File; 7 | var fs = require('fs'); 8 | var path = require('path'); 9 | 10 | describe('Compiler', function () { 11 | 12 | beforeEach(function () { 13 | this.sinon = sinon.sandbox.create(); 14 | }); 15 | 16 | afterEach(function () { 17 | this.sinon.restore(); 18 | }); 19 | 20 | describe('#getVersion', function () { 21 | it('returns the version of tsc', function (done) { 22 | this.sinon.stub(tsc, 'version').callsArgWith(1, null, '1.2.3'); 23 | 24 | var compiler = new Compiler(); 25 | compiler.getVersion(function (err, version) { 26 | if (err) return done(err); 27 | version.should.equal('1.2.3'); 28 | done(); 29 | }); 30 | }); 31 | }); 32 | 33 | describe('#compile', function () { 34 | it('executes tsc command', function (done) { 35 | var proc = helper.createDummyProcess(); 36 | this.sinon.stub(tsc, 'exec', function () { 37 | proc.terminate(0); 38 | return proc; 39 | }); 40 | 41 | var compiler = new Compiler(); 42 | compiler.compile(function (err) { 43 | if (err) return done(err); 44 | 45 | tsc.exec.calledOnce.should.be.true; 46 | var args = tsc.exec.args[0]; 47 | args[0].should.eql([ 48 | '@' + compiler.tscArgumentsFile 49 | ]); 50 | 51 | done(); 52 | }); 53 | }); 54 | 55 | it('removes temporary directory after compilation', function (done) { 56 | var proc = helper.createDummyProcess(); 57 | this.sinon.stub(tsc, 'exec', function () { 58 | proc.terminate(0); 59 | return proc; 60 | }); 61 | 62 | var compiler = new Compiler(); 63 | compiler.compile(function (err) { 64 | if (err) return done(err); 65 | fs.existsSync(compiler.tempDestination).should.be.false; 66 | done(); 67 | }); 68 | }); 69 | 70 | it('emits output file as data event', function (done) { 71 | var _this = this; 72 | helper.createTemporaryFile({ prefix: 'gulp-tsc', suffix: '.ts' }, function (err, file) { 73 | if (err) return done(err); 74 | 75 | var proc = helper.createDummyProcess(); 76 | var outputFilePath; 77 | var outputFileContents = 'test file'; 78 | var fileEmitted = false; 79 | var compiler = new Compiler([file]); 80 | 81 | _this.sinon.stub(tsc, 'exec', function () { 82 | process.nextTick(function () { 83 | outputFilePath = path.join(compiler.tempDestination, 'test.js'); 84 | fs.writeFileSync(outputFilePath, outputFileContents); 85 | proc.terminate(0); 86 | }); 87 | return proc; 88 | }); 89 | 90 | compiler.compile(function (err) { 91 | if (err) return done(err); 92 | if (!fileEmitted) return done(new Error('No data event emitted')); 93 | fs.existsSync(outputFilePath).should.be.false; 94 | fs.existsSync(compiler.treeKeeperFile).should.be.false; 95 | done(); 96 | }); 97 | compiler.on('data', function (file) { 98 | file.path.should.eql(outputFilePath); 99 | file.contents.toString().should.eql(outputFileContents); 100 | fileEmitted = true; 101 | }); 102 | }); 103 | }); 104 | 105 | it('bypasses outputs from tsc process as events', function (done) { 106 | var proc = helper.createDummyProcess(); 107 | this.sinon.stub(tsc, 'exec', function() { 108 | process.nextTick(function () { 109 | proc.stdout.write('test stdout1\n'); 110 | proc.stderr.write('test stderr1\n'); 111 | proc.stdout.write('test stdout2\n'); 112 | proc.stderr.write('test stderr2\n'); 113 | proc.terminate(0); 114 | }); 115 | return proc; 116 | }); 117 | 118 | var stdout = [], stderr = []; 119 | 120 | var compiler = new Compiler(); 121 | compiler.on('stdout', function (line) { stdout.push(line.toString()) }); 122 | compiler.on('stderr', function (line) { stderr.push(line.toString()) }); 123 | 124 | compiler.compile(function (err) { 125 | if (err) return done(err); 126 | 127 | stdout.should.have.length(2); 128 | stdout.should.eql(['test stdout1', 'test stdout2']); 129 | 130 | stderr.should.have.length(2); 131 | stderr.should.eql(['test stderr1', 'test stderr2']); 132 | 133 | done(); 134 | }); 135 | }); 136 | }); 137 | 138 | describe('#filterOutput', function () { 139 | it('passes files to pathFilter', function () { 140 | var filter = this.sinon.spy(); 141 | var file = helper.createDummyFile(); 142 | var compiler = new Compiler([], { pathFilter: filter }); 143 | 144 | var ret = compiler.filterOutput(file); 145 | ret.should.equal(file); 146 | 147 | filter.calledOnce.should.be.true; 148 | filter.calledWith(file.relative, file); 149 | }); 150 | 151 | it('changes file.relative by returned path', function () { 152 | var filter = function () { return 'foo.js' }; 153 | var file = helper.createDummyFile(); 154 | var compiler = new Compiler([], { pathFilter: filter }); 155 | 156 | var ret = compiler.filterOutput(file); 157 | ret.should.equal(file); 158 | file.relative.should.eql('foo.js'); 159 | }); 160 | 161 | it('returns file as-is when filter returned true', function () { 162 | var filter = function () { return true }; 163 | var file = helper.createDummyFile(); 164 | var compiler = new Compiler([], { pathFilter: filter }); 165 | 166 | var ret = compiler.filterOutput(file); 167 | ret.should.equal(file); 168 | }); 169 | 170 | it('returns null when filter returned false', function () { 171 | var filter = function () { return false; }; 172 | var file = helper.createDummyFile(); 173 | var compiler = new Compiler([], { pathFilter: filter }); 174 | 175 | var ret = compiler.filterOutput(file); 176 | should(ret).be.null; 177 | }); 178 | 179 | it('changes file.relative by mapping object', function () { 180 | var file, expected; 181 | if (path.sep === '/') { 182 | file = helper.createDummyFile({ 183 | path: '/tmp/foo/bar/baz.js', 184 | base: '/tmp' 185 | }); 186 | expected = '/tmp/qux/baz.js'; 187 | } else if (path.sep === '\\') { 188 | file = helper.createDummyFile({ 189 | path: 'C:\\tmp\\foo\\bar\\baz.js', 190 | base: 'C:\\tmp' 191 | }); 192 | expected = 'C:\\tmp\\qux\\baz.js'; 193 | } else { 194 | return; 195 | } 196 | 197 | var compiler = new Compiler([], { pathFilter: { 'foo/bar': 'qux' } }); 198 | var ret = compiler.filterOutput(file); 199 | file.path.should.eql(expected); 200 | }); 201 | }); 202 | 203 | describe('.abortAll', function () { 204 | it('aborts all running compiles', function (done) { 205 | var procs = [helper.createDummyProcess(), helper.createDummyProcess()]; 206 | this.sinon.stub(tsc, 'exec', function () { 207 | if (procs.length == 2) { 208 | abort(); 209 | } 210 | var proc = procs.shift(); 211 | process.nextTick(function () { proc.terminate(0); }); 212 | return proc; 213 | }); 214 | 215 | var compiler1 = new Compiler(), called1 = false; 216 | var compiler2 = new Compiler(), called2 = false; 217 | 218 | compiler1.compile(function (err) { 219 | err.should.be.an.Error; 220 | err.message.should.eql('aborted'); 221 | called1 = true; 222 | }); 223 | compiler2.compile(function (err) { 224 | err.should.be.an.Error; 225 | err.message.should.eql('aborted'); 226 | called2 = true; 227 | }); 228 | 229 | function abort() { 230 | Compiler.abortAll(function () { 231 | process.nextTick(function () { 232 | called1.should.be.true; 233 | called2.should.be.true; 234 | done(); 235 | }); 236 | }); 237 | } 238 | }); 239 | }); 240 | 241 | }); 242 | -------------------------------------------------------------------------------- /test/gulp-tsc-spec.js: -------------------------------------------------------------------------------- 1 | var helper = require('./helper'); 2 | var typescript = require('../index'); 3 | var fs = require('fs'); 4 | var gutil = require('gulp-util'); 5 | var sinon = require('sinon'); 6 | 7 | describe('gulp-tsc', function () { 8 | 9 | beforeEach(function () { 10 | sinon.stub(gutil, 'log'); 11 | }); 12 | afterEach(function () { 13 | gutil.log.restore(); 14 | }); 15 | 16 | it('compiles TypeScript files into JavaScript', function (done) { 17 | this.timeout(10000); 18 | 19 | helper.createTemporaryFile({ prefix: 'gulp-tsc', suffix: '.ts' }, function (err, file) { 20 | if (err) return done(err); 21 | 22 | fs.writeSync(file.fd, 'var s:string = "Hello, world";\nvar n:number = 10;\n'); 23 | fs.closeSync(file.fd); 24 | 25 | var stream = typescript(); 26 | var outputFile; 27 | stream.once('data', function (file) { 28 | file.path.should.match(/\.js$/); 29 | file.contents.toString().should.match(/var s = "Hello, world";\r?\nvar n = 10;/); 30 | outputFile = file; 31 | done(); 32 | }); 33 | stream.on('end', function () { 34 | fs.existsSync(outputFile.path).should.be.false; 35 | }); 36 | stream.write(file); 37 | stream.end(); 38 | }); 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /test/helper.js: -------------------------------------------------------------------------------- 1 | var should = require('should'); 2 | var gutil = require('gulp-util'); 3 | var EventEmitter = require('events').EventEmitter; 4 | var stream = require('stream'); 5 | var path = require('path'); 6 | var temp = require('temp'); 7 | 8 | module.exports.createDummyProcess = function () { 9 | var proc = new EventEmitter(); 10 | proc.stdout = new stream.PassThrough(); 11 | proc.stderr = new stream.PassThrough(); 12 | proc.terminate = function (code) { 13 | process.nextTick(function () { 14 | proc.stdout.end(); 15 | proc.stderr.end(); 16 | proc.emit('exit', code); 17 | }); 18 | }; 19 | return proc; 20 | }; 21 | 22 | module.exports.createDummyFile = function (options) { 23 | options = options || {}; 24 | if (!options.path) options.path = temp.path({ suffix: '.ts' }); 25 | if (!options.base) options.base = path.dirname(options.path); 26 | if (!options.cwd) options.cwd = options.base; 27 | return new gutil.File(options); 28 | }; 29 | 30 | module.exports.createTemporaryFile = function (fixes, callback) { 31 | temp.track(); 32 | temp.open(fixes, function (err, info) { 33 | if (err) return callback(err, null); 34 | 35 | var file = new gutil.File({ 36 | cwd: path.dirname(info.path), 37 | base: path.dirname(info.path), 38 | path: info.path, 39 | contents: null 40 | }); 41 | file.fd = info.fd; 42 | file.cleanup = function () { 43 | temp.cleanup(); 44 | }; 45 | 46 | callback(null, file); 47 | }); 48 | }; 49 | -------------------------------------------------------------------------------- /test/tsc-spec.js: -------------------------------------------------------------------------------- 1 | var helper = require('./helper'); 2 | var tsc = require('../lib/tsc'); 3 | var sinon = require('sinon'); 4 | var child_process = require('child_process'); 5 | var shellescape = require('../lib/shellescape'); 6 | 7 | describe('tsc', function () { 8 | var execStub; 9 | 10 | beforeEach(function () { 11 | execStub = sinon.stub(child_process, 'exec'); 12 | }); 13 | 14 | afterEach(function () { 15 | execStub.restore(); 16 | }); 17 | 18 | it('executes tsc command', function (done) { 19 | execStub.callsArgWith(2, null); 20 | execStub.returns('return value'); 21 | 22 | var ret = tsc.exec('foo bar', function (err) { 23 | if (err) return done(err); 24 | 25 | execStub.calledOnce.should.be.true; 26 | 27 | var command = execStub.args[0][0]; 28 | command.should.match(/^.+?tsc(\.cmd|\.exe)?"? foo bar$/i); 29 | 30 | done(); 31 | }); 32 | ret.should.equal('return value'); 33 | }); 34 | 35 | it('returns the version of tsc command', function (done) { 36 | var parser = tsc.versionParser(function (err, version) { 37 | if (err) return done(err); 38 | version.should.equal('1.6.2'); 39 | 40 | done(); 41 | }); 42 | parser("message TS6029: Version 1.6.2", ""); 43 | }); 44 | 45 | it('returns the version of tsc 1.6 command', function (done) { 46 | execStub.callsArgWith(2, null, 'Version 12.34.56.78\n', ''); 47 | execStub.returns('return value'); 48 | 49 | var ret = tsc.version(function (err, version) { 50 | if (err) return done(err); 51 | version.should.equal('12.34.56.78'); 52 | 53 | execStub.calledOnce.should.be.true; 54 | 55 | var command = execStub.args[0][0]; 56 | command.should.match(/^.+?tsc(\.cmd|\.exe)?"? -v$/i); 57 | 58 | done(); 59 | }); 60 | ret.should.equal('return value'); 61 | }); 62 | 63 | it('returns the version of tsc command 3 parts', function (done) { 64 | execStub.callsArgWith(2, null, 'Version 12.34.56\n', ''); 65 | execStub.returns('return value'); 66 | 67 | var ret = tsc.version(function (err, version) { 68 | if (err) return done(err); 69 | version.should.equal('12.34.56'); 70 | 71 | execStub.calledOnce.should.be.true; 72 | 73 | var command = execStub.args[0][0]; 74 | command.should.match(/^.+?tsc(\.cmd|\.exe)?"? -v$/i); 75 | 76 | done(); 77 | }); 78 | ret.should.equal('return value'); 79 | }); 80 | 81 | it('returns the version of tsc command 1.5.0 alpha', function (done) { 82 | execStub.callsArgWith(2, null, 'message TS6029: Version 1.5.0-alpha\n', ''); 83 | execStub.returns('return value'); 84 | 85 | var ret = tsc.version(function (err, version) { 86 | if (err) return done(err); 87 | version.should.equal('1.5.0-alpha'); 88 | 89 | execStub.calledOnce.should.be.true; 90 | 91 | var command = execStub.args[0][0]; 92 | command.should.match(/^.+?tsc(\.cmd|\.exe)?"? -v$/i); 93 | 94 | done(); 95 | }); 96 | ret.should.equal('return value'); 97 | }); 98 | 99 | it('finds the tsc command location', function () { 100 | tsc.find().should.match(/tsc(\.cmd|\.exe)?$/i); 101 | }); 102 | 103 | }); 104 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "noImplicitAny": false, 5 | "noEmitOnError": true, 6 | "strictNullChecks": true, 7 | "alwaysStrict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noFallthroughCasesInSwitch": true, 10 | "noImplicitReturns": false, 11 | "noImplicitThis": false, 12 | "noUnusedLocals": true, 13 | "noUnusedParameters": false, 14 | "removeComments": false, 15 | "sourceMap": false, 16 | "module": "commonjs", 17 | "outDir": "lib/", 18 | "target": "es5", 19 | "types": [ "node" ], 20 | "lib": [ 21 | "es5", 22 | "dom", 23 | "es2015.core", 24 | "es2015.promise", 25 | "es2015.symbol", 26 | "es2015.iterable" 27 | ] 28 | }, 29 | "typeAcquisition": {"enable": true}, 30 | "compileOnSave": true, 31 | "files": [ 32 | "src/compiler.ts", 33 | "src/shellescape.ts", 34 | "src/tsc.ts" 35 | ] 36 | } 37 | --------------------------------------------------------------------------------