set-options.js 944 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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(
  17. 'Invalid value `' + options + '` ' +
  18. 'for setting `options`'
  19. );
  20. }
  21. for (key in defaults) {
  22. value = options[key];
  23. if (value == null) {
  24. value = current[key];
  25. }
  26. if (
  27. (key !== 'blocks' && typeof value !== 'boolean') ||
  28. (key === 'blocks' && typeof value !== 'object')
  29. ) {
  30. throw new Error('Invalid value `' + value + '` for setting `options.' + key + '`');
  31. }
  32. options[key] = value;
  33. }
  34. self.options = options;
  35. self.escape = escapes(options);
  36. return self;
  37. }