From f6fb816a54fe3cb382725eb536feb1423dfb4fad Mon Sep 17 00:00:00 2001 From: jkuri Date: Sun, 3 Jan 2016 19:38:11 +0100 Subject: [PATCH] feat(build): add desktop notifications --- addon/ng2/blueprints/ng2/files/package.json | 6 ++++++ assets/angular.png | Bin 0 -> 10234 bytes lib/broccoli/broccoli-typescript.js | 19 +++++++++++++++++++ package.json | 3 ++- 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 assets/angular.png diff --git a/addon/ng2/blueprints/ng2/files/package.json b/addon/ng2/blueprints/ng2/files/package.json index 0555c2d9a7b2..be609c027cdc 100644 --- a/addon/ng2/blueprints/ng2/files/package.json +++ b/addon/ng2/blueprints/ng2/files/package.json @@ -2,6 +2,12 @@ "name": "<%= htmlComponentName %>", "version": "0.0.0", "license": "Apache-2.0", + "angular-cli": { + "notifications": { + "enabled": true, + "playSound": false + } + }, "dependencies": { "angular2": "2.0.0-alpha.55", "es6-promise": "^3.0.2", diff --git a/assets/angular.png b/assets/angular.png new file mode 100644 index 0000000000000000000000000000000000000000..7929242740ed3bfa668b534f4311981b57e8788a GIT binary patch literal 10234 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 literal 0 HcmV?d00001 diff --git a/lib/broccoli/broccoli-typescript.js b/lib/broccoli/broccoli-typescript.js index dab2d6dc0958..fdd45adadb1f 100644 --- a/lib/broccoli/broccoli-typescript.js +++ b/lib/broccoli/broccoli-typescript.js @@ -4,6 +4,7 @@ var fse = require('fs-extra'); var path = require('path'); var ts = require('typescript'); var diffing_broccoli_plugin_1 = require('./diffing-broccoli-plugin'); +var notifier = require('node-notifier'); var FS_OPTS = { encoding: 'utf-8' }; @@ -44,6 +45,7 @@ var DiffingTSCompiler = (function () { this.tsOpts.outDir = this.cachePath; this.tsServiceHost = new CustomLanguageServiceHost(this.tsOpts, this.rootFilePaths, this.fileRegistry, this.inputPath); this.tsService = ts.createLanguageService(this.tsServiceHost, ts.createDocumentRegistry()); + this.config = require(path.resolve(this.cachePath, '..', '..', 'package.json')); } DiffingTSCompiler.prototype.rebuild = function (treeDiff) { var _this = this; @@ -93,6 +95,7 @@ var DiffingTSCompiler = (function () { this.previousRunFailed = true; var error = new Error('Typescript found the following errors:\n' + errorMessages.join('\n')); error['showStack'] = false; + this.showNotification(errorMessages); throw error; } else if (this.previousRunFailed) { @@ -142,6 +145,7 @@ var DiffingTSCompiler = (function () { this.previousRunFailed = true; var error = new Error('Typescript found the following errors:\n' + errorMessages.join('\n')); error['showStack'] = false; + this.showNotification(errorMessages); throw error; } else { @@ -186,6 +190,21 @@ var DiffingTSCompiler = (function () { fs.unlinkSync(absoluteDtsFilePath); } }; + + DiffingTSCompiler.prototype.showNotification = function (errorMessages) { + if (!this.config['angular-cli'].notifications.enabled) { + return; + } + + notifier.notify({ + title: 'Build Errors: ' + errorMessages.length, + message: errorMessages.map(function (msg) { return msg.trim(); }).join('\n'), + icon: path.resolve(__dirname, '..', '..', 'assets', 'angular.png'), + sound: this.config['angular-cli'].notifications.playSound, + wait: false + }); + }; + DiffingTSCompiler.includeExtensions = ['.ts']; DiffingTSCompiler.excludeExtensions = ['.d.ts']; return DiffingTSCompiler; diff --git a/package.json b/package.json index acbea66439ed..b92637d6d86e 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "fs-extra": "^0.18.4", "leek": "0.0.19", "lodash": "^3.10.0", + "node-notifier": "^4.4.0", "resolve": "^1.0.0", "silent-error": "^1.0.0", "symlink-or-copy": "^1.0.1", @@ -59,6 +60,6 @@ "mocha": "^2.2.5", "rewire": "^2.3.4", "through": "^2.3.8", - "walk-sync": "^0.1.3" + "walk-sync": "^0.2.6" } }