initial
This commit is contained in:
62
ts/index.ts
Normal file
62
ts/index.ts
Normal file
@ -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<void>
|
||||
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<plugins.browserSync.BrowserSyncInstance> {
|
||||
let done = plugins.q.defer<plugins.browserSync.BrowserSyncInstance>()
|
||||
if (this.bsStatus === 'idle') {
|
||||
this.bsStatus = 'starting'
|
||||
let localDone = plugins.q.defer<void>()
|
||||
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<void> {
|
||||
let done = plugins.q.defer<void>()
|
||||
this.bsInstance.exit()
|
||||
this.bsStatus = 'idle'
|
||||
done.resolve()
|
||||
return done.promise
|
||||
}
|
||||
}
|
3
ts/smartbrowser.plugins.ts
Normal file
3
ts/smartbrowser.plugins.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import 'typings-global'
|
||||
export import browserSync = require('browser-sync')
|
||||
export import q = require('q')
|
Reference in New Issue
Block a user