1var baseLodash = require('./_baseLodash'),
2    wrapperClone = require('./_wrapperClone');
3
4/**
5 * Creates a clone of the chain sequence planting `value` as the wrapped value.
6 *
7 * @name plant
8 * @memberOf _
9 * @since 3.2.0
10 * @category Seq
11 * @param {*} value The value to plant.
12 * @returns {Object} Returns the new `lodash` wrapper instance.
13 * @example
14 *
15 * function square(n) {
16 *   return n * n;
17 * }
18 *
19 * var wrapped = _([1, 2]).map(square);
20 * var other = wrapped.plant([3, 4]);
21 *
22 * other.value();
23 * // => [9, 16]
24 *
25 * wrapped.value();
26 * // => [1, 4]
27 */
28function wrapperPlant(value) {
29  var result,
30      parent = this;
31
32  while (parent instanceof baseLodash) {
33    var clone = wrapperClone(parent);
34    clone.__index__ = 0;
35    clone.__values__ = undefined;
36    if (result) {
37      previous.__wrapped__ = clone;
38    } else {
39      result = clone;
40    }
41    var previous = clone;
42    parent = parent.__wrapped__;
43  }
44  previous.__wrapped__ = value;
45  return result;
46}
47
48module.exports = wrapperPlant;
49