UNPKG

5.39 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
8
9exports.typeName = typeName;
10exports.spaces = spaces;
11exports.indent = indent;
12exports.debugNode = debugNode;
13exports.debugNodes = debugNodes;
14
15var _lodash = require('lodash.escape');
16
17var _lodash2 = _interopRequireDefault(_lodash);
18
19var _functionPrototype = require('function.prototype.name');
20
21var _functionPrototype2 = _interopRequireDefault(_functionPrototype);
22
23var _isString = require('is-string');
24
25var _isString2 = _interopRequireDefault(_isString);
26
27var _isNumberObject = require('is-number-object');
28
29var _isNumberObject2 = _interopRequireDefault(_isNumberObject);
30
31var _isCallable = require('is-callable');
32
33var _isCallable2 = _interopRequireDefault(_isCallable);
34
35var _isBooleanObject = require('is-boolean-object');
36
37var _isBooleanObject2 = _interopRequireDefault(_isBooleanObject);
38
39var _objectInspect = require('object-inspect');
40
41var _objectInspect2 = _interopRequireDefault(_objectInspect);
42
43var _has = require('has');
44
45var _has2 = _interopRequireDefault(_has);
46
47var _RSTTraversal = require('./RSTTraversal');
48
49var _getAdapter = require('./getAdapter');
50
51var _getAdapter2 = _interopRequireDefault(_getAdapter);
52
53function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
54
55var booleanValue = Function.bind.call(Function.call, Boolean.prototype.valueOf);
56
57function typeName(node) {
58 var adapter = (0, _getAdapter2['default'])();
59 if (adapter.displayNameOfNode) {
60 return (0, _getAdapter2['default'])().displayNameOfNode(node) || 'Component';
61 }
62 return typeof node.type === 'function' ? node.type.displayName || (0, _functionPrototype2['default'])(node.type) || 'Component' : node.type;
63}
64
65function spaces(n) {
66 return Array(n + 1).join(' ');
67}
68
69function indent(depth, string) {
70 return string.split('\n').map(function (x) {
71 return '' + String(spaces(depth)) + String(x);
72 }).join('\n');
73}
74
75function propString(prop, options) {
76 if ((0, _isString2['default'])(prop)) {
77 return (0, _objectInspect2['default'])(String(prop), { quoteStyle: 'double' });
78 }
79 if ((0, _isNumberObject2['default'])(prop)) {
80 return '{' + String((0, _objectInspect2['default'])(Number(prop))) + '}';
81 }
82 if ((0, _isBooleanObject2['default'])(prop)) {
83 return '{' + String((0, _objectInspect2['default'])(booleanValue(prop))) + '}';
84 }
85 if ((0, _isCallable2['default'])(prop)) {
86 return '{' + String((0, _objectInspect2['default'])(prop)) + '}';
87 }
88 if ((typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) === 'object') {
89 if (options.verbose) {
90 return '{' + String((0, _objectInspect2['default'])(prop)) + '}';
91 }
92
93 return '{{...}}';
94 }
95 return '{[' + (typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) + ']}';
96}
97
98function propsString(node, options) {
99 var props = (0, _RSTTraversal.propsOfNode)(node);
100 var keys = Object.keys(props).filter(function (x) {
101 return x !== 'children';
102 });
103 return keys.map(function (key) {
104 return String(key) + '=' + String(propString(props[key], options));
105 }).join(' ');
106}
107
108function indentChildren(childrenStrs, indentLength) {
109 return childrenStrs.length ? '\n' + String(childrenStrs.map(function (x) {
110 return indent(indentLength, x);
111 }).join('\n')) + '\n' : '';
112}
113
114function isRSTNodeLike(node) {
115 return (0, _has2['default'])(node, 'nodeType') && typeof node.nodeType === 'string' && (0, _has2['default'])(node, 'type') && (0, _has2['default'])(node, 'key') && (0, _has2['default'])(node, 'ref') && (0, _has2['default'])(node, 'instance') && (0, _has2['default'])(node, 'rendered');
116}
117
118function debugNode(node) {
119 var indentLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
120 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
121
122 if (typeof node === 'string' || typeof node === 'number') return (0, _lodash2['default'])(node);
123 if (typeof node === 'function') {
124 var name = (0, _functionPrototype2['default'])(node);
125 return '[function' + (name ? ' ' + String(name) : '') + ']';
126 }
127 if (!node) return '';
128
129 var adapter = (0, _getAdapter2['default'])();
130 if (!adapter.isValidElement(node) && !isRSTNodeLike(node)) {
131 return '{' + String((0, _objectInspect2['default'])(node)) + '}';
132 }
133
134 var childrenStrs = (0, _RSTTraversal.childrenOfNode)(node).map(function (n) {
135 return debugNode(n, indentLength, options);
136 }).filter(Boolean);
137 var type = typeName(node);
138
139 var props = options.ignoreProps ? '' : propsString(node, options);
140 var beforeProps = props ? ' ' : '';
141 var afterProps = childrenStrs.length ? '>' : ' ';
142 var childrenIndented = indentChildren(childrenStrs, indentLength);
143 var nodeClose = childrenStrs.length ? '</' + String(type) + '>' : '/>';
144 return '<' + String(type) + beforeProps + String(props) + afterProps + String(childrenIndented) + nodeClose;
145}
146
147function debugNodes(nodes) {
148 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
149
150 return nodes.map(function (node) {
151 return debugNode(node, undefined, options);
152 }).join('\n\n\n');
153}
\No newline at end of file