set-options.js 918 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. 'use strict'
  2. var xtend = require('xtend')
  3. var escapes = require('markdown-escapes')
  4. var defaults = require('./defaults')
  5. module.exports = setOptions
  6. function setOptions(options) {
  7. var self = this
  8. var current = self.options
  9. var key
  10. var value
  11. if (options == null) {
  12. options = {}
  13. } else if (typeof options === 'object') {
  14. options = xtend(options)
  15. } else {
  16. throw new Error('Invalid value `' + options + '` for setting `options`')
  17. }
  18. for (key in defaults) {
  19. value = options[key]
  20. if (value == null) {
  21. value = current[key]
  22. }
  23. if (
  24. (key !== 'blocks' && typeof value !== 'boolean') ||
  25. (key === 'blocks' && typeof value !== 'object')
  26. ) {
  27. throw new Error(
  28. 'Invalid value `' + value + '` for setting `options.' + key + '`'
  29. )
  30. }
  31. options[key] = value
  32. }
  33. self.options = options
  34. self.escape = escapes(options)
  35. return self
  36. }