Repository URL to install this package:
|
Version:
1.2.20 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _renderProps = _interopRequireDefault(require("./renderProps"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};
if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
if (desc.get || desc.set) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
}
newObj.default = obj;
return newObj;
}
}
const isElement = element => typeof element.type === 'function';
const compose = (...elements) => {
return composedProps => {
// Stack children arguments recursively and pass
// it down until the last component that render children
// with these stacked arguments
function stackProps(i, elements, propsList = []) {
const element = elements[i];
const isTheLast = i === 0; // Check if is latest component.
// If is latest then render children,
// Otherwise continue stacking arguments
const renderFn = props => isTheLast ? (0, _renderProps.default)(composedProps, ...propsList.concat(props)) : stackProps(i - 1, elements, propsList.concat(props)); // Clone a element if it's passed created as <Element initial={} />
// Or create it if passed as just Element
const elementFn = isElement(element) ? React.cloneElement : React.createElement;
return elementFn(element, {}, renderFn);
}
return stackProps(elements.length - 1, elements.reverse());
};
};
var _default = compose;
exports.default = _default;