deps-parser.js 1006 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var Emitter = require('./emitter'),
  2. utils = require('./utils'),
  3. observer = new Emitter()
  4. /**
  5. * Auto-extract the dependencies of a computed property
  6. * by recording the getters triggered when evaluating it.
  7. */
  8. function catchDeps (binding) {
  9. utils.log('\n─ ' + binding.key)
  10. var depsHash = {}
  11. observer.on('get', function (dep) {
  12. if (depsHash[dep.key]) return
  13. depsHash[dep.key] = 1
  14. utils.log(' └─ ' + dep.key)
  15. binding.deps.push(dep)
  16. dep.subs.push(binding)
  17. })
  18. binding.value.get()
  19. observer.off('get')
  20. }
  21. module.exports = {
  22. /**
  23. * the observer that catches events triggered by getters
  24. */
  25. observer: observer,
  26. /**
  27. * parse a list of computed property bindings
  28. */
  29. parse: function (bindings) {
  30. utils.log('\nparsing dependencies...')
  31. observer.isObserving = true
  32. bindings.forEach(catchDeps)
  33. observer.isObserving = false
  34. utils.log('\ndone.')
  35. }
  36. }