create.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. var createFormatter = require('power-assert-context-formatter');
  3. var appendAst = require('power-assert-context-reducer-ast');
  4. var FileRenderer = require('power-assert-renderer-file');
  5. var AssertionRenderer = require('power-assert-renderer-assertion');
  6. var DiagramRenderer = require('power-assert-renderer-diagram');
  7. var ComparisonRenderer = require('power-assert-renderer-comparison');
  8. var defaultOptions = require('./default-options');
  9. var assign = require('core-js/library/fn/object/assign');
  10. var map = require('core-js/library/fn/array/map');
  11. // "Browserify can only analyze static requires. It is not in the scope of browserify to handle dynamic requires."
  12. // https://github.com/substack/node-browserify/issues/377
  13. var defaultRendererClasses = {
  14. './built-in/file': FileRenderer,
  15. './built-in/assertion': AssertionRenderer,
  16. './built-in/diagram': DiagramRenderer,
  17. './built-in/binary-expression': ComparisonRenderer
  18. };
  19. function toRendererClass (rendererName) {
  20. var RendererClass;
  21. if (typeof rendererName === 'function') {
  22. RendererClass = rendererName;
  23. } else if (typeof rendererName === 'string') {
  24. if (defaultRendererClasses[rendererName]) {
  25. RendererClass = defaultRendererClasses[rendererName];
  26. } else {
  27. RendererClass = require(rendererName);
  28. }
  29. }
  30. return RendererClass;
  31. }
  32. function create (options) {
  33. var config = assign(defaultOptions(), options);
  34. var rendererClasses = map(config.renderers, toRendererClass);
  35. var renderers = map(rendererClasses, function (clazz) {
  36. return { ctor: clazz, options: config };
  37. });
  38. return createFormatter(assign({}, config, {
  39. reducers: [
  40. appendAst
  41. ],
  42. renderers: renderers,
  43. legacy: true
  44. }));
  45. }
  46. create.renderers = {
  47. AssertionRenderer: AssertionRenderer,
  48. FileRenderer: FileRenderer,
  49. DiagramRenderer: DiagramRenderer,
  50. BinaryExpressionRenderer: ComparisonRenderer
  51. };
  52. create.defaultOptions = defaultOptions;
  53. module.exports = create;