UNPKG

1.84 kBJavaScriptView Raw
1'use strict';
2
3var stringifier = require('stringifier'),
4 stringWidth = require('./string-width'),
5 StringWriter = require('./string-writer'),
6 ContextTraversal = require('./traverse'),
7 defaultOptions = require('./default-options'),
8 typeName = require('type-name'),
9 extend = require('xtend');
10
11(function() {
12 // "Browserify can only analyze static requires. It is not in the scope of browserify to handle dynamic requires."
13 // https://github.com/substack/node-browserify/issues/377
14 require('./built-in/assertion');
15 require('./built-in/binary-expression');
16 require('./built-in/diagram');
17 require('./built-in/file');
18})();
19
20function create (options) {
21 var config = extend(defaultOptions(), options);
22 if (typeof config.widthOf !== 'function') {
23 config.widthOf = stringWidth;
24 }
25 if (typeof config.stringify !== 'function') {
26 config.stringify = stringifier(config);
27 }
28 if (!config.writerClass) {
29 config.writerClass = StringWriter;
30 }
31 return function (context) {
32 var traversal = new ContextTraversal(context);
33 var writer = new config.writerClass(extend(config));
34 config.renderers.forEach(function (rendererName) {
35 var RendererClass;
36 if (typeName(rendererName) === 'function') {
37 RendererClass = rendererName;
38 } else if (typeName(rendererName) === 'string') {
39 RendererClass = require(rendererName);
40 }
41 new RendererClass(traversal, extend(config));
42 });
43 traversal.emit('start', context);
44 traversal.traverse();
45 traversal.emit('render', writer);
46 writer.write('');
47 return writer.flush();
48 };
49}
50
51create.defaultOptions = defaultOptions;
52create.stringWidth = stringWidth;
53module.exports = create;