UNPKG

2.36 kBJavaScriptView Raw
1'use strict';
2
3var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
4 * Imports
5 */
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10
11var _isUndefined = require('@f/is-undefined');
12
13var _isUndefined2 = _interopRequireDefault(_isUndefined);
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17/**
18 * Vnode creator
19 */
20
21function element(type, props) {
22 var len = arguments.length;
23 var children = [];
24
25 for (var i = 2, j = 0; i < len; ++i) {
26 j += filterFlatten(arguments[i], children, j);
27 }
28
29 var key = undefined;
30 if (props && !(0, _isUndefined2.default)(props.key)) {
31 key = props.key;
32 if (Object.keys(props).length === 1) {
33 props = undefined;
34 } else {
35 props.key = undefined;
36 }
37 }
38
39 return {
40 key: key,
41 type: type,
42 props: props,
43 children: children
44 };
45}
46
47/**
48 * Very fast in-place, single-pass filter/flatten
49 * algorithm
50 */
51
52function filterFlatten(item, arr, arrStart) {
53 var added = 0;
54
55 switch (type(item)) {
56 case 'array':
57 var len = item.length;
58 for (var i = 0; i < len; ++i) {
59 added += filterFlatten(item[i], arr, arrStart + added);
60 }
61 return added;
62 case 'boolean':
63 case 'null':
64 case 'undefined':
65 return 0;
66 case 'string':
67 case 'number':
68 arr[arrStart] = element('#text', { nodeValue: item });
69 break;
70 default:
71 arr[arrStart] = item;
72 break;
73 }
74
75 return 1;
76}
77
78function type(val) {
79 if (Array.isArray(val)) return 'array';
80 if (val === null) return 'null';
81 return typeof val === 'undefined' ? 'undefined' : _typeof(val);
82}
83
84/**
85 * Exports
86 */
87
88exports.default = element;
\No newline at end of file