63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
|
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
|
||
|
}
|
||
|
}
|