Files
atom/packages/dev-live-reload/lib/watcher.js
2019-02-25 12:19:44 +01:00

75 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'
)
}
}