Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / chain-able-deps   js

Repository URL to install this package:

Version: 6.0.4 

/ src / cast / toArr.ts

/**
 * @todo @file @deprecated @depreciated will be only in exoitc
 */
import {
  isSet,
  isStringPrimitive,
  isArray,
  isNil,
  isMap,
  isIterator,
} from '../is'
import ArrayFrom from '../util/from'

/**
 * @desc anything into an array
 * @memberOf cast
 * @name toArr
 * @alias toArray
 *
 * @sig * => Array
 * @since 0.0.1
 *
 * @param ar turn this into an array
 * @return anything into an array
 *
 * @tests deps/to-arr
 * @types deps
 *
 * {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L465 underscore-to-arr}
 * @see {@link underscore-to-arr}
 *
 * @example
 *
 *   toarr([])
 *   //=> []
 *
 *   toarr('')
 *   //=> ['']
 *
 *   toarr('1,2')
 *   //=> ['1', '2']
 *
 *   toarr('1,2')
 *   //=> ['1', '2']
 *
 *   const map = new Map()
 *   map.set('eh', true)
 *   const arr = toarr(map.entries())
 *   //=> ['eh', true]
 *
 *   const set = new Set()
 *   set.add('eh')
 *   set.add(true)
 *   const arr = toarr(map.entries())
 *   //=> ['eh', true]
 *
 *   toarr('').concat(toarr(false)).concat(toarr(null))
 *   //=> ['', false, null]
 *
 */
const toArray = (ar: any): any => {
  // @NOTE: !'' === true
  if (isStringPrimitive(ar)) return ar.includes(',') ? ar.split(',') : [ar]
  else if (isNil(ar)) return []
  else if (!ar) return [ar]
  else if (isArray(ar)) return ar
  else if (isSet(ar) || isMap(ar) || ar.values) {
    // hasIn(ar, 'values')
    /**
     * @desc when using `new Set().values`... no forEach o.o
     * @NOTE .values is also on `Object`...
     */
    return ArrayFrom(ar.values(ar))
  }
  // else if (isIterator(ar)) return ArrayFrom(ar)
  else return [ar]
}

export default toArray