From 0352a8ce21c081b77f1405184b4794502bdb5df7 Mon Sep 17 00:00:00 2001 From: PhilKunz Date: Mon, 19 Sep 2016 20:00:19 +0200 Subject: [PATCH] initial --- .gitignore | 3 ++ coverage/coverage-final.json | 3 ++ coverage/lcov.info | 88 ++++++++++++++++++++++++++++++++++ dist/index.d.ts | 32 +++++++++++++ dist/index.js | 48 +++++++++++++++++++ dist/smartbrowser.plugins.d.ts | 3 ++ dist/smartbrowser.plugins.js | 5 ++ package.json | 33 +++++++++++++ test/test.d.ts | 1 + test/test.js | 33 +++++++++++++ test/test.ts | 34 +++++++++++++ ts/index.ts | 62 ++++++++++++++++++++++++ ts/smartbrowser.plugins.ts | 3 ++ tslint.json | 3 ++ 14 files changed, 351 insertions(+) create mode 100644 .gitignore create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov.info create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/smartbrowser.plugins.d.ts create mode 100644 dist/smartbrowser.plugins.js create mode 100644 package.json create mode 100644 test/test.d.ts create mode 100644 test/test.js create mode 100644 test/test.ts create mode 100644 ts/index.ts create mode 100644 ts/smartbrowser.plugins.ts create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f8eee18 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +pages/ +public/ diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..7f75ef7 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,3 @@ +{ +"/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/index.js":{"path":"/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/index.js","s":{"1":1,"2":1,"3":1,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":1,"11":1,"12":1,"13":1,"14":0,"15":1,"16":1,"17":1,"18":0,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":0,"41":0,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1},"b":{"1":[2,2],"2":[2,0],"3":[1,0],"4":[0,1],"5":[0,1],"6":[1,0]},"f":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":0,"11":1},"fnMap":{"1":{"name":"(anonymous_1)","line":3,"loc":{"start":{"line":3,"column":19},"end":{"line":3,"column":31}}},"2":{"name":"defineProperties","line":3,"loc":{"start":{"line":3,"column":33},"end":{"line":3,"column":74}}},"3":{"name":"(anonymous_3)","line":3,"loc":{"start":{"line":3,"column":357},"end":{"line":3,"column":405}}},"4":{"name":"_classCallCheck","line":5,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":48}}},"5":{"name":"(anonymous_5)","line":12,"loc":{"start":{"line":12,"column":19},"end":{"line":12,"column":31}}},"6":{"name":"Smartbrowser","line":13,"loc":{"start":{"line":13,"column":4},"end":{"line":13,"column":38}}},"7":{"name":"start","line":31,"loc":{"start":{"line":31,"column":15},"end":{"line":31,"column":32}}},"8":{"name":"(anonymous_8)","line":36,"loc":{"start":{"line":36,"column":17},"end":{"line":36,"column":29}}},"9":{"name":"(anonymous_9)","line":40,"loc":{"start":{"line":40,"column":58},"end":{"line":40,"column":70}}},"10":{"name":"(anonymous_10)","line":47,"loc":{"start":{"line":47,"column":36},"end":{"line":47,"column":48}}},"11":{"name":"stop","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":31}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":564}},"2":{"start":{"line":3,"column":33},"end":{"line":3,"column":349}},"3":{"start":{"line":3,"column":76},"end":{"line":3,"column":347}},"4":{"start":{"line":3,"column":117},"end":{"line":3,"column":143}},"5":{"start":{"line":3,"column":144},"end":{"line":3,"column":199}},"6":{"start":{"line":3,"column":200},"end":{"line":3,"column":231}},"7":{"start":{"line":3,"column":232},"end":{"line":3,"column":286}},"8":{"start":{"line":3,"column":259},"end":{"line":3,"column":286}},"9":{"start":{"line":3,"column":287},"end":{"line":3,"column":345}},"10":{"start":{"line":3,"column":350},"end":{"line":3,"column":559}},"11":{"start":{"line":3,"column":407},"end":{"line":3,"column":475}},"12":{"start":{"line":3,"column":423},"end":{"line":3,"column":475}},"13":{"start":{"line":3,"column":476},"end":{"line":3,"column":536}},"14":{"start":{"line":3,"column":493},"end":{"line":3,"column":536}},"15":{"start":{"line":3,"column":537},"end":{"line":3,"column":556}},"16":{"start":{"line":5,"column":0},"end":{"line":5,"column":153}},"17":{"start":{"line":5,"column":50},"end":{"line":5,"column":151}},"18":{"start":{"line":5,"column":92},"end":{"line":5,"column":149}},"19":{"start":{"line":7,"column":0},"end":{"line":7,"column":48}},"20":{"start":{"line":12,"column":0},"end":{"line":69,"column":4}},"21":{"start":{"line":13,"column":4},"end":{"line":23,"column":5}},"22":{"start":{"line":14,"column":8},"end":{"line":14,"column":44}},"23":{"start":{"line":16,"column":8},"end":{"line":16,"column":55}},"24":{"start":{"line":17,"column":8},"end":{"line":19,"column":10}},"25":{"start":{"line":20,"column":8},"end":{"line":20,"column":31}},"26":{"start":{"line":21,"column":8},"end":{"line":21,"column":58}},"27":{"start":{"line":22,"column":8},"end":{"line":22,"column":52}},"28":{"start":{"line":29,"column":4},"end":{"line":66,"column":8}},"29":{"start":{"line":32,"column":12},"end":{"line":32,"column":29}},"30":{"start":{"line":34,"column":12},"end":{"line":34,"column":41}},"31":{"start":{"line":35,"column":12},"end":{"line":50,"column":13}},"32":{"start":{"line":36,"column":16},"end":{"line":45,"column":21}},"33":{"start":{"line":37,"column":20},"end":{"line":37,"column":48}},"34":{"start":{"line":38,"column":20},"end":{"line":38,"column":54}},"35":{"start":{"line":39,"column":20},"end":{"line":39,"column":56}},"36":{"start":{"line":40,"column":20},"end":{"line":44,"column":23}},"37":{"start":{"line":41,"column":24},"end":{"line":41,"column":51}},"38":{"start":{"line":42,"column":24},"end":{"line":42,"column":44}},"39":{"start":{"line":43,"column":24},"end":{"line":43,"column":55}},"40":{"start":{"line":47,"column":16},"end":{"line":49,"column":19}},"41":{"start":{"line":48,"column":20},"end":{"line":48,"column":51}},"42":{"start":{"line":51,"column":12},"end":{"line":51,"column":32}},"43":{"start":{"line":60,"column":12},"end":{"line":60,"column":41}},"44":{"start":{"line":61,"column":12},"end":{"line":61,"column":35}},"45":{"start":{"line":62,"column":12},"end":{"line":62,"column":35}},"46":{"start":{"line":63,"column":12},"end":{"line":63,"column":27}},"47":{"start":{"line":64,"column":12},"end":{"line":64,"column":32}},"48":{"start":{"line":68,"column":4},"end":{"line":68,"column":24}},"49":{"start":{"line":71,"column":0},"end":{"line":71,"column":36}}},"branchMap":{"1":{"line":3,"type":"binary-expr","locations":[{"start":{"line":3,"column":168},"end":{"line":3,"column":189}},{"start":{"line":3,"column":193},"end":{"line":3,"column":198}}]},"2":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":232},"end":{"line":3,"column":232}},{"start":{"line":3,"column":232},"end":{"line":3,"column":232}}]},"3":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":407},"end":{"line":3,"column":407}},{"start":{"line":3,"column":407},"end":{"line":3,"column":407}}]},"4":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":476},"end":{"line":3,"column":476}},{"start":{"line":3,"column":476},"end":{"line":3,"column":476}}]},"5":{"line":5,"type":"if","locations":[{"start":{"line":5,"column":50},"end":{"line":5,"column":50}},{"start":{"line":5,"column":50},"end":{"line":5,"column":50}}]},"6":{"line":35,"type":"if","locations":[{"start":{"line":35,"column":12},"end":{"line":35,"column":12}},{"start":{"line":35,"column":12},"end":{"line":35,"column":12}}]}},"l":{"3":2,"5":1,"7":1,"12":1,"13":1,"14":1,"16":1,"17":1,"20":1,"21":1,"22":1,"29":1,"32":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"47":0,"48":0,"51":1,"60":1,"61":1,"62":1,"63":1,"64":1,"68":1,"71":1}}, +"/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/smartbrowser.plugins.js":{"path":"/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/smartbrowser.plugins.js","s":{"1":1,"2":1,"3":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":46}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":25}}},"branchMap":{},"l":{"3":1,"4":1,"5":1}}} diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000..46759f0 --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,88 @@ +TN: +SF:/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/index.js +FN:3,(anonymous_1) +FN:3,defineProperties +FN:3,(anonymous_3) +FN:5,_classCallCheck +FN:12,(anonymous_5) +FN:13,Smartbrowser +FN:31,start +FN:36,(anonymous_8) +FN:40,(anonymous_9) +FN:47,(anonymous_10) +FN:59,stop +FNF:11 +FNH:10 +FNDA:1,(anonymous_1) +FNDA:1,defineProperties +FNDA:1,(anonymous_3) +FNDA:1,_classCallCheck +FNDA:1,(anonymous_5) +FNDA:1,Smartbrowser +FNDA:1,start +FNDA:1,(anonymous_8) +FNDA:1,(anonymous_9) +FNDA:0,(anonymous_10) +FNDA:1,stop +DA:3,2 +DA:5,1 +DA:7,1 +DA:12,1 +DA:13,1 +DA:14,1 +DA:16,1 +DA:17,1 +DA:20,1 +DA:21,1 +DA:22,1 +DA:29,1 +DA:32,1 +DA:34,1 +DA:35,1 +DA:36,1 +DA:37,1 +DA:38,1 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:47,0 +DA:48,0 +DA:51,1 +DA:60,1 +DA:61,1 +DA:62,1 +DA:63,1 +DA:64,1 +DA:68,1 +DA:71,1 +LF:33 +LH:31 +BRDA:3,1,0,2 +BRDA:3,1,1,2 +BRDA:3,2,0,2 +BRDA:3,2,1,0 +BRDA:3,3,0,1 +BRDA:3,3,1,0 +BRDA:3,4,0,0 +BRDA:3,4,1,1 +BRDA:5,5,0,0 +BRDA:5,5,1,1 +BRDA:35,6,0,1 +BRDA:35,6,1,0 +BRF:12 +BRH:7 +end_of_record +TN: +SF:/Users/philkunz/gitlab/pushrocks/smartbrowser/dist/smartbrowser.plugins.js +FNF:0 +FNH:0 +DA:3,1 +DA:4,1 +DA:5,1 +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..527e929 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,32 @@ +/// +/// +import * as plugins from './smartbrowser.plugins'; +/** + * the options interface of a Smartbrowser instance + */ +export interface ISmartbrowserOptions { + webroot: string; + watchFiles: string[]; +} +/** + * Type of status that a bsInstance can have + */ +export declare type bsStatus = 'idle' | 'starting' | 'running'; +/** + * class smartbrowser controls a browser-sync instance for you + */ +export declare class Smartbrowser { + bsInstance: plugins.browserSync.BrowserSyncInstance; + bsConfig: plugins.browserSync.Options; + bsStatus: bsStatus; + bsStarted: plugins.q.Promise; + constructor(optionsArg: ISmartbrowserOptions); + /** + * starts the server and returns the browserSync instance in a resolved Promise + */ + start(): plugins.q.Promise; + /** + * stops the smartbrowser instance + */ + stop(): plugins.q.Promise; +} diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..05a94e1 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,48 @@ +"use strict"; +const plugins = require("./smartbrowser.plugins"); +/** + * class smartbrowser controls a browser-sync instance for you + */ +class Smartbrowser { + constructor(optionsArg) { + this.bsInstance = plugins.browserSync.create(); + this.bsConfig = { + server: {} + }; + this.bsStatus = 'idle'; + this.bsConfig.server.baseDir = optionsArg.webroot; + this.bsConfig.files = optionsArg.watchFiles; + } + /** + * starts the server and returns the browserSync instance in a resolved Promise + */ + start() { + let done = plugins.q.defer(); + if (this.bsStatus === 'idle') { + this.bsStatus = 'starting'; + let localDone = plugins.q.defer(); + this.bsStarted = localDone.promise; + this.bsInstance.init(this.bsConfig, () => { + this.bsStatus = 'running'; + localDone.resolve(); + done.resolve(this.bsInstance); + }); + } + else { + this.bsStarted.then(() => { done.resolve(this.bsInstance); }); + } + return done.promise; + } + /** + * stops the smartbrowser instance + */ + stop() { + let done = plugins.q.defer(); + this.bsInstance.exit(); + this.bsStatus = 'idle'; + done.resolve(); + return done.promise; + } +} +exports.Smartbrowser = Smartbrowser; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsa0RBQWlEO0FBZ0JqRDs7R0FFRztBQUNIO0lBT0ksWUFBWSxVQUFnQztRQU41QyxlQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUN6QyxhQUFRLEdBQWdDO1lBQ3BDLE1BQU0sRUFBRSxFQUFFO1NBQ2IsQ0FBQTtRQUNELGFBQVEsR0FBYSxNQUFNLENBQUE7UUFHdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQTJDLENBQUE7UUFDckUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1lBQzFCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFRLENBQUE7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFBO2dCQUN6QixTQUFTLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2pDLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUUsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQVEsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3ZCLENBQUM7Q0FDSjtBQTFDRCxvQ0EwQ0MifQ== \ No newline at end of file diff --git a/dist/smartbrowser.plugins.d.ts b/dist/smartbrowser.plugins.d.ts new file mode 100644 index 0000000..d25ce2c --- /dev/null +++ b/dist/smartbrowser.plugins.d.ts @@ -0,0 +1,3 @@ +import 'typings-global'; +export import browserSync = require('browser-sync'); +export import q = require('q'); diff --git a/dist/smartbrowser.plugins.js b/dist/smartbrowser.plugins.js new file mode 100644 index 0000000..4626731 --- /dev/null +++ b/dist/smartbrowser.plugins.js @@ -0,0 +1,5 @@ +"use strict"; +require("typings-global"); +exports.browserSync = require("browser-sync"); +exports.q = require("q"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRicm93c2VyLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGJyb3dzZXIucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLDhDQUFtRDtBQUNuRCx5QkFBOEIifQ== \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..5a6ce6d --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "smartbrowser", + "version": "1.0.0", + "description": "wraps browser-sync", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "scripts": { + "test": "(npmts)" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@gitlab.com/pushrocks/smartbrowser.git" + }, + "author": "Lossless GmbH", + "license": "MIT", + "bugs": { + "url": "https://gitlab.com/pushrocks/smartbrowser/issues" + }, + "homepage": "https://gitlab.com/pushrocks/smartbrowser#README", + "dependencies": { + "@types/browser-sync": "0.0.32", + "@types/q": "0.0.30", + "browser-sync": "^2.16.0", + "q": "^1.4.1", + "typings-global": "^1.0.14" + }, + "devDependencies": { + "@types/should": "^8.1.29", + "npmts-g": "^5.2.8", + "should": "^11.1.0", + "typings-test": "^1.0.3" + } +} diff --git a/test/test.d.ts b/test/test.d.ts new file mode 100644 index 0000000..2fd432a --- /dev/null +++ b/test/test.d.ts @@ -0,0 +1 @@ +import 'typings-test'; diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..f0eccb1 --- /dev/null +++ b/test/test.js @@ -0,0 +1,33 @@ +"use strict"; +require("typings-test"); +const should = require("should"); +const smartbrowser = require("../dist/index"); +let testSmartBrowser; +describe('smartbrowser', () => { + it('should instanstiate a new browser ', function () { + testSmartBrowser = new smartbrowser.Smartbrowser({ + webroot: './test/assets/', + watchFiles: ['./test/assets/'] + }); + should(testSmartBrowser).be.instanceof(smartbrowser.Smartbrowser); + }); + it('should start the browser ', function (done) { + testSmartBrowser.start().then((bsInstance) => { + done(); + }).catch((err) => { console.log(err); }); + }); + it('should stop the browser ', function (done) { + this.timeout(10000); + setTimeout(() => { + testSmartBrowser.stop().then(() => { + done(); + }).catch((err) => { console.log(err); }); + }, 2000); + }); + it('should exit correctly', function () { + setTimeout(() => { + process.exit(0); + }, 2000); + }); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixpQ0FBZ0M7QUFFaEMsOENBQTZDO0FBRTdDLElBQUksZ0JBQTJDLENBQUE7QUFFL0MsUUFBUSxDQUFDLGNBQWMsRUFBRTtJQUNyQixFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDckMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQzdDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7U0FDakMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDckUsQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxJQUFJO1FBQzFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVU7WUFDckMsSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsSUFBSTtRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLFVBQVUsQ0FBQztZQUNQLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLENBQUE7WUFDVixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLHVCQUF1QixFQUFDO1FBQ3ZCLFVBQVUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkIsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQ1gsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..2936c3f --- /dev/null +++ b/test/test.ts @@ -0,0 +1,34 @@ +import 'typings-test' +import * as should from 'should' + +import * as smartbrowser from '../dist/index' + +let testSmartBrowser: smartbrowser.Smartbrowser + +describe('smartbrowser', () => { + it('should instanstiate a new browser ', function () { + testSmartBrowser = new smartbrowser.Smartbrowser({ + webroot: './test/assets/', + watchFiles: ['./test/assets/'] + }) + should(testSmartBrowser).be.instanceof(smartbrowser.Smartbrowser) + }) + it('should start the browser ', function (done) { + testSmartBrowser.start().then((bsInstance) => { + done() + }).catch((err) => { console.log(err) }) + }) + it('should stop the browser ', function (done) { + this.timeout(10000) + setTimeout(() => { + testSmartBrowser.stop().then(() => { + done() + }).catch((err) => { console.log(err) }) + }, 2000) + }) + it('should exit correctly',function(){ + setTimeout(() => { + process.exit(0) + },2000) + }) +}) diff --git a/ts/index.ts b/ts/index.ts new file mode 100644 index 0000000..f4332e4 --- /dev/null +++ b/ts/index.ts @@ -0,0 +1,62 @@ +import * as plugins from './smartbrowser.plugins' + +/** + * the options interface of a Smartbrowser instance + */ +export interface ISmartbrowserOptions { + webroot: string + watchFiles: string[] + +} + +/** + * Type of status that a bsInstance can have + */ +export type bsStatus = 'idle' | 'starting' | 'running' + +/** + * class smartbrowser controls a browser-sync instance for you + */ +export class Smartbrowser { + bsInstance = plugins.browserSync.create() + bsConfig: plugins.browserSync.Options = { + server: {} + } + bsStatus: bsStatus = 'idle' + bsStarted: plugins.q.Promise + constructor(optionsArg: ISmartbrowserOptions) { + this.bsConfig.server.baseDir = optionsArg.webroot + this.bsConfig.files = optionsArg.watchFiles + } + + /** + * starts the server and returns the browserSync instance in a resolved Promise + */ + start(): plugins.q.Promise { + let done = plugins.q.defer() + if (this.bsStatus === 'idle') { + this.bsStatus = 'starting' + let localDone = plugins.q.defer() + this.bsStarted = localDone.promise + this.bsInstance.init(this.bsConfig, () => { + this.bsStatus = 'running' + localDone.resolve() + done.resolve(this.bsInstance) + }) + } else { + this.bsStarted.then( () => { done.resolve(this.bsInstance) }) + } + return done.promise + } + + /** + * stops the smartbrowser instance + */ + stop(): plugins.q.Promise { + let done = plugins.q.defer() + this.bsInstance.exit() + this.bsStatus = 'idle' + done.resolve() + return done.promise + } +} diff --git a/ts/smartbrowser.plugins.ts b/ts/smartbrowser.plugins.ts new file mode 100644 index 0000000..bd19bb9 --- /dev/null +++ b/ts/smartbrowser.plugins.ts @@ -0,0 +1,3 @@ +import 'typings-global' +export import browserSync = require('browser-sync') +export import q = require('q') diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..508bcac --- /dev/null +++ b/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "tslint-config-standard" +} \ No newline at end of file