45 lines
949 B
JavaScript
45 lines
949 B
JavaScript
var Set = require('es6-set')
|
|
|
|
module.exports = Binding
|
|
|
|
function Binding (name, definition) {
|
|
this.name = name
|
|
this.definition = definition
|
|
this.references = new Set()
|
|
|
|
if (definition) this.add(definition)
|
|
}
|
|
|
|
Binding.prototype.add = function (node) {
|
|
this.references.add(node)
|
|
return this
|
|
}
|
|
|
|
Binding.prototype.remove = function (node) {
|
|
if (!this.references.has(node)) {
|
|
throw new Error('Tried removing nonexistent reference')
|
|
}
|
|
this.references.delete(node)
|
|
return this
|
|
}
|
|
|
|
Binding.prototype.isReferenced = function () {
|
|
var definition = this.definition
|
|
var isReferenced = false
|
|
this.each(function (ref) {
|
|
if (ref !== definition) isReferenced = true
|
|
})
|
|
return isReferenced
|
|
}
|
|
|
|
Binding.prototype.getReferences = function () {
|
|
var arr = []
|
|
this.each(function (ref) { arr.push(ref) })
|
|
return arr
|
|
}
|
|
|
|
Binding.prototype.each = function (cb) {
|
|
this.references.forEach(function (ref) { cb(ref) })
|
|
return this
|
|
}
|