UNPKG

11.6 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Component = undefined;
7
8var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
9
10var _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; };
11
12var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
13
14var _command = require('./command');
15
16var _entity = require('./entity');
17
18function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure undefined"); }
19
20function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
21
22function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
23
24function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
25
26/**
27 * A Component is a command that composes one or more components and functions
28 * into a single function that is invokable like any command function.
29 * An initial or default state can be given which is injected into the block
30 * context object each call.
31 */
32var componentCount = 0;
33
34var Component = exports.Component = function (_Command) {
35 _inherits(Component, _Command);
36
37 _createClass(Component, null, [{
38 key: 'id',
39 value: function id() {
40 return ++componentCount;
41 }
42 }, {
43 key: 'defaults',
44 value: function defaults() {
45 return {};
46 }
47 }, {
48 key: 'compose',
49 value: function compose() {
50 for (var _len = arguments.length, components = Array(_len), _key = 0; _key < _len; _key++) {
51 components[_key] = arguments[_key];
52 }
53
54 if (Array.isArray(components[0])) {
55 components = components[0];
56 }
57 components = Array.isArray(components) ? components : [];
58 return component;
59 function component(state, block) {
60 if ('function' == typeof state) {
61 block = state;state = {};
62 }
63 state = 'object' == (typeof state === 'undefined' ? 'undefined' : _typeof(state)) && state ? state : {};
64 block = 'function' == typeof block ? block : function () {};
65 if (0 == components.length) {
66 return block(state);
67 } else {
68 walk(components.slice());
69 }
70 function walk(list) {
71 var component = list.shift();
72 if ('function' == typeof component) {
73 if (list.length) {
74 component(state, function () {
75 return walk(list);
76 });
77 } else if (block != component) {
78 component(state, block);
79 }
80 } else {
81 walk(list);
82 }
83 }
84 }
85 }
86 }]);
87
88 function Component(ctx) {
89 for (var _len2 = arguments.length, children = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
90 children[_key2 - 2] = arguments[_key2];
91 }
92
93 var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
94
95 _classCallCheck(this, Component);
96
97 if ('function' == typeof initialState) {
98 children.unshift(initialState);
99 initialState = {};
100 } else if (Array.isArray(initialState)) {
101 children = initialState;
102 initialState = {};
103 }
104 children = Component.compose(children);
105 var entity = new _entity.Entity(ctx, initialState);
106 return _possibleConstructorReturn(this, (Component.__proto__ || Object.getPrototypeOf(Component)).call(this, function (state, block) {
107 if ('function' == typeof state) {
108 block = state;state = {};
109 }
110 state = 'object' == (typeof state === 'undefined' ? 'undefined' : _typeof(state)) && state ? state : {};
111 block = 'function' == typeof block ? block : function () {};
112 if (Array.isArray(state)) {
113 state = state.map(function (s) {
114 return _extends({}, initialState, s);
115 });
116 } else {
117 state = _extends({}, initialState, state);
118 }
119 entity(state, function (_ref, args) {
120 _objectDestructuringEmpty(_ref);
121
122 children(args, block);
123 });
124 }));
125 }
126
127 return Component;
128}(_command.Command);
129//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvbXBvbmVudC5qcyJdLCJuYW1lcyI6WyJjb21wb25lbnRDb3VudCIsIkNvbXBvbmVudCIsImNvbXBvbmVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJjb21wb25lbnQiLCJzdGF0ZSIsImJsb2NrIiwibGVuZ3RoIiwid2FsayIsInNsaWNlIiwibGlzdCIsInNoaWZ0IiwiY3R4IiwiY2hpbGRyZW4iLCJpbml0aWFsU3RhdGUiLCJ1bnNoaWZ0IiwiY29tcG9zZSIsImVudGl0eSIsIm1hcCIsInMiLCJhcmdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQTs7Ozs7O0FBTUEsSUFBSUEsaUJBQWlCLENBQXJCOztJQUNhQyxTLFdBQUFBLFM7Ozs7O3lCQUNDO0FBQUUsYUFBTyxFQUFHRCxjQUFWO0FBQTBCOzs7K0JBQ3RCO0FBQUUsYUFBTyxFQUFQO0FBQVk7Ozs4QkFDRjtBQUFBLHdDQUFaRSxVQUFZO0FBQVpBLGtCQUFZO0FBQUE7O0FBQzVCLFVBQUlDLE1BQU1DLE9BQU4sQ0FBY0YsV0FBVyxDQUFYLENBQWQsQ0FBSixFQUFrQztBQUFFQSxxQkFBYUEsV0FBVyxDQUFYLENBQWI7QUFBNEI7QUFDaEVBLG1CQUFhQyxNQUFNQyxPQUFOLENBQWNGLFVBQWQsSUFBNEJBLFVBQTVCLEdBQXlDLEVBQXREO0FBQ0EsYUFBT0csU0FBUDtBQUNBLGVBQVNBLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTBCQyxLQUExQixFQUFpQztBQUMvQixZQUFJLGNBQWMsT0FBT0QsS0FBekIsRUFBZ0M7QUFBRUMsa0JBQVFELEtBQVIsQ0FBZUEsUUFBUSxFQUFSO0FBQVk7QUFDN0RBLGdCQUFRLG9CQUFtQkEsS0FBbkIseUNBQW1CQSxLQUFuQixNQUE0QkEsS0FBNUIsR0FBb0NBLEtBQXBDLEdBQTRDLEVBQXBEO0FBQ0FDLGdCQUFRLGNBQWMsT0FBT0EsS0FBckIsR0FBNkJBLEtBQTdCLEdBQXFDLFlBQVcsQ0FBRSxDQUExRDtBQUNBLFlBQUksS0FBS0wsV0FBV00sTUFBcEIsRUFBNEI7QUFBRSxpQkFBT0QsTUFBTUQsS0FBTixDQUFQO0FBQXFCLFNBQW5ELE1BQ0s7QUFBRUcsZUFBS1AsV0FBV1EsS0FBWCxFQUFMO0FBQTBCO0FBQ2pDLGlCQUFTRCxJQUFULENBQWNFLElBQWQsRUFBb0I7QUFDbEIsY0FBTU4sWUFBWU0sS0FBS0MsS0FBTCxFQUFsQjtBQUNBLGNBQUksY0FBYyxPQUFPUCxTQUF6QixFQUFvQztBQUNsQyxnQkFBSU0sS0FBS0gsTUFBVCxFQUFpQjtBQUFFSCx3QkFBVUMsS0FBVixFQUFpQjtBQUFBLHVCQUFNRyxLQUFLRSxJQUFMLENBQU47QUFBQSxlQUFqQjtBQUFvQyxhQUF2RCxNQUNLLElBQUlKLFNBQVNGLFNBQWIsRUFBd0I7QUFBRUEsd0JBQVVDLEtBQVYsRUFBaUJDLEtBQWpCO0FBQXlCO0FBQ3pELFdBSEQsTUFHTztBQUFFRSxpQkFBS0UsSUFBTDtBQUFZO0FBQ3RCO0FBQ0Y7QUFDRjs7O0FBRUQscUJBQVlFLEdBQVosRUFBaUQ7QUFBQSx1Q0FBVkMsUUFBVTtBQUFWQSxjQUFVO0FBQUE7O0FBQUEsUUFBaENDLFlBQWdDLHVFQUFqQixFQUFpQjs7QUFBQTs7QUFDL0MsUUFBSSxjQUFjLE9BQU9BLFlBQXpCLEVBQXVDO0FBQ3JDRCxlQUFTRSxPQUFULENBQWlCRCxZQUFqQjtBQUNBQSxxQkFBZSxFQUFmO0FBQ0QsS0FIRCxNQUdPLElBQUlaLE1BQU1DLE9BQU4sQ0FBY1csWUFBZCxDQUFKLEVBQWlDO0FBQ3RDRCxpQkFBV0MsWUFBWDtBQUNBQSxxQkFBZSxFQUFmO0FBQ0Q7QUFDREQsZUFBV2IsVUFBVWdCLE9BQVYsQ0FBa0JILFFBQWxCLENBQVg7QUFDQSxRQUFNSSxTQUFTLG1CQUFXTCxHQUFYLEVBQWdCRSxZQUFoQixDQUFmO0FBVCtDLGlIQVV6QyxVQUFDVCxLQUFELEVBQVFDLEtBQVIsRUFBa0I7QUFDdEIsVUFBSSxjQUFjLE9BQU9ELEtBQXpCLEVBQWdDO0FBQUVDLGdCQUFRRCxLQUFSLENBQWVBLFFBQVEsRUFBUjtBQUFZO0FBQzdEQSxjQUFRLG9CQUFtQkEsS0FBbkIseUNBQW1CQSxLQUFuQixNQUE0QkEsS0FBNUIsR0FBb0NBLEtBQXBDLEdBQTRDLEVBQXBEO0FBQ0FDLGNBQVEsY0FBYyxPQUFPQSxLQUFyQixHQUE2QkEsS0FBN0IsR0FBcUMsWUFBVyxDQUFFLENBQTFEO0FBQ0EsVUFBSUosTUFBTUMsT0FBTixDQUFjRSxLQUFkLENBQUosRUFBMEI7QUFDeEJBLGdCQUFRQSxNQUFNYSxHQUFOLENBQVUsVUFBQ0MsQ0FBRDtBQUFBLDhCQUFhTCxZQUFiLEVBQThCSyxDQUE5QjtBQUFBLFNBQVYsQ0FBUjtBQUNELE9BRkQsTUFFTztBQUNMZCw2QkFBYVMsWUFBYixFQUE4QlQsS0FBOUI7QUFDRDtBQUNEWSxhQUFPWixLQUFQLEVBQWMsZ0JBQUtlLElBQUwsRUFBYztBQUFBOztBQUMxQlAsaUJBQVNPLElBQVQsRUFBZWQsS0FBZjtBQUNELE9BRkQ7QUFHRCxLQXRCOEM7QUF1QmhEIiwiZmlsZSI6ImNvbXBvbmVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmQnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcblxuLyoqXG4gKiBBIENvbXBvbmVudCBpcyBhIGNvbW1hbmQgdGhhdCBjb21wb3NlcyBvbmUgb3IgbW9yZSBjb21wb25lbnRzIGFuZCBmdW5jdGlvbnNcbiAqIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gIHRoYXQgaXMgaW52b2thYmxlIGxpa2UgYW55IGNvbW1hbmQgZnVuY3Rpb24uXG4gKiBBbiBpbml0aWFsIG9yIGRlZmF1bHQgc3RhdGUgY2FuIGJlIGdpdmVuIHdoaWNoIGlzIGluamVjdGVkIGludG8gdGhlIGJsb2NrXG4gKiBjb250ZXh0IG9iamVjdCBlYWNoIGNhbGwuXG4gKi9cbmxldCBjb21wb25lbnRDb3VudCA9IDBcbmV4cG9ydCBjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgc3RhdGljIGlkKCkgeyByZXR1cm4gKysgY29tcG9uZW50Q291bnQgfVxuICBzdGF0aWMgZGVmYXVsdHMoKSB7IHJldHVybiB7IH0gfVxuICBzdGF0aWMgY29tcG9zZSguLi5jb21wb25lbnRzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50c1swXSkpIHsgY29tcG9uZW50cyA9IGNvbXBvbmVudHNbMF0gfVxuICAgIGNvbXBvbmVudHMgPSBBcnJheS5pc0FycmF5KGNvbXBvbmVudHMpID8gY29tcG9uZW50cyA6IFtdXG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIGZ1bmN0aW9uIGNvbXBvbmVudChzdGF0ZSwgYmxvY2spIHtcbiAgICAgIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBzdGF0ZSkgeyBibG9jayA9IHN0YXRlOyBzdGF0ZSA9IHt9IH1cbiAgICAgIHN0YXRlID0gJ29iamVjdCcgPT0gdHlwZW9mIHN0YXRlICYmIHN0YXRlID8gc3RhdGUgOiB7fVxuICAgICAgYmxvY2sgPSAnZnVuY3Rpb24nID09IHR5cGVvZiBibG9jayA/IGJsb2NrIDogZnVuY3Rpb24oKSB7fVxuICAgICAgaWYgKDAgPT0gY29tcG9uZW50cy5sZW5ndGgpIHsgcmV0dXJuIGJsb2NrKHN0YXRlKSB9XG4gICAgICBlbHNlIHsgd2Fsayhjb21wb25lbnRzLnNsaWNlKCkpIH1cbiAgICAgIGZ1bmN0aW9uIHdhbGsobGlzdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBsaXN0LnNoaWZ0KClcbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT0gdHlwZW9mIGNvbXBvbmVudCkge1xuICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCkgeyBjb21wb25lbnQoc3RhdGUsICgpID0+IHdhbGsobGlzdCkpIH1cbiAgICAgICAgICBlbHNlIGlmIChibG9jayAhPSBjb21wb25lbnQpIHsgY29tcG9uZW50KHN0YXRlLCBibG9jaykgfVxuICAgICAgICB9IGVsc2UgeyB3YWxrKGxpc3QpIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjdHgsIGluaXRpYWxTdGF0ZSA9IHt9LCAuLi5jaGlsZHJlbikge1xuICAgIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBpbml0aWFsU3RhdGUpIHtcbiAgICAgIGNoaWxkcmVuLnVuc2hpZnQoaW5pdGlhbFN0YXRlKVxuICAgICAgaW5pdGlhbFN0YXRlID0ge31cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgY2hpbGRyZW4gPSBpbml0aWFsU3RhdGVcbiAgICAgIGluaXRpYWxTdGF0ZSA9IHt9XG4gICAgfVxuICAgIGNoaWxkcmVuID0gQ29tcG9uZW50LmNvbXBvc2UoY2hpbGRyZW4pXG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShjdHgsIGluaXRpYWxTdGF0ZSlcbiAgICBzdXBlcigoc3RhdGUsIGJsb2NrKSA9PiB7XG4gICAgICBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygc3RhdGUpIHsgYmxvY2sgPSBzdGF0ZTsgc3RhdGUgPSB7fSB9XG4gICAgICBzdGF0ZSA9ICdvYmplY3QnID09IHR5cGVvZiBzdGF0ZSAmJiBzdGF0ZSA/IHN0YXRlIDoge31cbiAgICAgIGJsb2NrID0gJ2Z1bmN0aW9uJyA9PSB0eXBlb2YgYmxvY2sgPyBibG9jayA6IGZ1bmN0aW9uKCkge31cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlKSkge1xuICAgICAgICBzdGF0ZSA9IHN0YXRlLm1hcCgocykgPT4gKHsgLi4uaW5pdGlhbFN0YXRlLCAuLi5zIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUgPSB7IC4uLmluaXRpYWxTdGF0ZSwgLi4uc3RhdGUgfVxuICAgICAgfVxuICAgICAgZW50aXR5KHN0YXRlLCAoe30sIGFyZ3MpID0+IHtcbiAgICAgICAgY2hpbGRyZW4oYXJncywgYmxvY2spXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
\No newline at end of file