Files
atom/packages/dev-live-reload/lib/watcher.js
2018-09-28 10:06:44 -07:00

73 lines
1.8 KiB
JavaScript

const {CompositeDisposable, File, Directory, Emitter} = require('atom')
const path = require('path')
module.exports =
class Watcher {
constructor () {
this.destroy = this.destroy.bind(this)
this.emitter = new Emitter()
this.disposables = new CompositeDisposable()
this.entities = [] // Used for specs
}
onDidDestroy (callback) {
this.emitter.on('did-destroy', callback)
}
onDidChangeGlobals (callback) {
this.emitter.on('did-change-globals', callback)
}
destroy () {
this.disposables.dispose()
this.entities = null
this.emitter.emit('did-destroy')
this.emitter.dispose()
}
watch () {
// override me
}
loadStylesheet (stylesheetPath) {
// override me
}
loadAllStylesheets () {
// override me
}
emitGlobalsChanged () {
this.emitter.emit('did-change-globals')
}
watchDirectory (directoryPath) {
if (this.isInAsarArchive(directoryPath)) return
const entity = new Directory(directoryPath)
this.disposables.add(entity.onDidChange(() => this.loadAllStylesheets()))
this.entities.push(entity)
}
watchGlobalFile (filePath) {
const entity = new File(filePath)
this.disposables.add(entity.onDidChange(() => this.emitGlobalsChanged()))
this.entities.push(entity)
}
watchFile (filePath) {
if (this.isInAsarArchive(filePath)) return
const reloadFn = () => this.loadStylesheet(entity.getPath())
const entity = new File(filePath)
this.disposables.add(entity.onDidChange(reloadFn))
this.disposables.add(entity.onDidDelete(reloadFn))
this.disposables.add(entity.onDidRename(reloadFn))
this.entities.push(entity)
}
isInAsarArchive (pathToCheck) {
const {resourcePath} = atom.getLoadSettings()
return pathToCheck.startsWith(`${resourcePath}${path.sep}`) && path.extname(resourcePath) === '.asar'
}
}