text: "use strict";
  var __extends = (this && this.__extends) || (function () {
      var extendStatics = Object.setPrototypeOf ||
          ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
          function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
      return function (d, b) {
          extendStatics(d, b);
          function __() { this.constructor = d; }
          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
      };
  })();
  var __assign = (this && this.__assign) || Object.assign || function(t) {
      for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
              t[p] = s[p];
      }
      return t;
  };
  Object.defineProperty(exports, "__esModule", { value: true });
  var React = require("react");
  var cache_1 = require("./cache");
  var utils_1 = require("./utils");
  function default_1(YieldComp) {
      return function (C) {
          if (!C)
              return YieldComp;
          var YieldNext = /** @class */ (function (_super) {
              __extends(YieldNext, _super);
              function YieldNext() {
                  return _super !== null && _super.apply(this, arguments) || this;
              }
              YieldNext.prototype.render = function () {
                  return React.createElement(C, this.props);
              };
              return YieldNext;
          }(React.PureComponent));
          return /** @class */ (function (_super) {
              __extends(Yield, _super);
              function Yield() {
                  var _this = _super !== null && _super.apply(this, arguments) || this;
                  _this.state = { cache: cache_1.default(), next: null };
                  return _this;
              }
              Yield.getDerivedStateFromProps = function (props, state) {
                  return {
                      next: Object.assign(function (extra, cache) {
                          if (!extra)
                              return React.createElement(C, props);
                          return React.createElement(YieldNext, state.cache(utils_1.clearUndef(__assign({}, (typeof extra === 'function' ? extra(props) : extra), { next: props.next })), cache));
                      }, { noCache: true }),
                  };
              };
              Yield.prototype.render = function () {
                  return React.createElement(YieldComp, __assign({}, this.props, { next: this.state.next }));
              };
              return Yield;
          }(React.Component));
      };
  }
  exports.default = default_1;
  