import toBoolean from '../../primitive/boolean/cast/toBoolean'
import { isArguments } from '../../NATIVE/builtin'
import { isArray } from '../../array/check/isArray'
/**
* Checks if `value` is a flattenable `arguments` object or array.
*
* @since 5.0.0-beta.5
* @alias isConcatSpreadable
* @alias isSpreadable
*
* @param {*} value The value to check.
* @return {boolean} Returns `true` if `value` is flattenable, else `false`.
*
* @example
*
* (function() {
* isFlattenable(arguments) //=> true
* })([0, 1, 2])
*
* @example
*
* isFlattenable([[0], [1]])
* //=> true
*
* @example
* const obj = {}
* obj[Symbol.isConcatSpreadable] = true
* isFlattenable(obj)
* //=> true
*
*/
function isFlattenable(value: any) {
return (
isArray(value) ||
isArguments(value) ||
toBoolean(
Symbol.isConcatSpreadable && value && value[Symbol.isConcatSpreadable]
)
)
}
export default isFlattenable