You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
/** |
|
* Copyright 2014-2015, Facebook, Inc. |
|
* All rights reserved. |
|
* |
|
* This source code is licensed under the BSD-style license found in the |
|
* LICENSE file in the root directory of this source tree. An additional grant |
|
* of patent rights can be found in the PATENTS file in the same directory. |
|
* |
|
* @providesModule accumulateInto |
|
*/ |
|
|
|
'use strict'; |
|
|
|
var invariant = require("./invariant"); |
|
|
|
/** |
|
* |
|
* Accumulates items that must not be null or undefined into the first one. This |
|
* is used to conserve memory by avoiding array allocations, and thus sacrifices |
|
* API cleanness. Since `current` can be null before being passed in and not |
|
* null after this function, make sure to assign it back to `current`: |
|
* |
|
* `a = accumulateInto(a, b);` |
|
* |
|
* This API should be sparingly used. Try `accumulate` for something cleaner. |
|
* |
|
* @return {*|array<*>} An accumulation of items. |
|
*/ |
|
|
|
function accumulateInto(current, next) { |
|
("production" !== process.env.NODE_ENV ? invariant( |
|
next != null, |
|
'accumulateInto(...): Accumulated items must not be null or undefined.' |
|
) : invariant(next != null)); |
|
if (current == null) { |
|
return next; |
|
} |
|
|
|
// Both are not empty. Warning: Never call x.concat(y) when you are not |
|
// certain that x is an Array (x could be a string with concat method). |
|
var currentIsArray = Array.isArray(current); |
|
var nextIsArray = Array.isArray(next); |
|
|
|
if (currentIsArray && nextIsArray) { |
|
current.push.apply(current, next); |
|
return current; |
|
} |
|
|
|
if (currentIsArray) { |
|
current.push(next); |
|
return current; |
|
} |
|
|
|
if (nextIsArray) { |
|
// A bit too dangerous to mutate `next`. |
|
return [current].concat(next); |
|
} |
|
|
|
return [current, next]; |
|
} |
|
|
|
module.exports = accumulateInto;
|
|
|