12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 'use strict';
- var assign = require('core-js/library/fn/object/assign');
- var ContextTraversal = require('power-assert-context-traversal');
- var LegacyContextTraversal = require('./legacy-context-traversal');
- var StringWriter = require('./string-writer');
- var defaultOptions = require('./default-options');
- var reduce = require('core-js/library/fn/array/reduce');
- /**
- * options.reducers [array]
- * options.renderers [array]
- * options.outputOffset [number]
- * options.lineSeparator [string]
- * options.legacy [boolean]
- */
- function createFormatter (options) {
- var formatterConfig = assign({}, defaultOptions(), options);
- var reducers = formatterConfig.reducers || [];
- var rendererConfigs = formatterConfig.renderers;
- var len = rendererConfigs.length;
- return function (powerAssertContext) {
- var context = reduce(reducers, function (prevContext, reducer) {
- return reducer(prevContext);
- }, powerAssertContext);
- var writer = new StringWriter(formatterConfig);
- var traversal;
- if (formatterConfig.legacy) {
- traversal = new LegacyContextTraversal(context);
- traversal.setWritable(writer);
- } else {
- traversal = new ContextTraversal(context);
- }
- for (var i = 0; i < len; i += 1) {
- var RendererClass;
- var renderer;
- var config = rendererConfigs[i];
- if (typeof config === 'object') {
- RendererClass = config.ctor;
- renderer = new RendererClass(config.options);
- } else if (typeof config === 'function') {
- RendererClass = config;
- renderer = new RendererClass();
- }
- renderer.init(traversal);
- if (typeof renderer.setWritable === 'function') {
- renderer.setWritable(writer);
- }
- }
- traversal.traverse();
- writer.write('');
- return writer.toString();
- };
- }
- createFormatter.StringWriter = StringWriter;
- module.exports = createFormatter;
|