Spaces:
Running
Running
(function (global, factory) { | |
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : | |
typeof define === 'function' && define.amd ? define(factory) : | |
(global = global || self, global.arrayBack = factory()); | |
}(this, function () { 'use strict'; | |
/** | |
* Takes any input and guarantees an array back. | |
* | |
* - Converts array-like objects (e.g. `arguments`, `Set`) to a real array. | |
* - Converts `undefined` to an empty array. | |
* - Converts any another other, singular value (including `null`, objects and iterables other than `Set`) into an array containing that value. | |
* - Ignores input which is already an array. | |
* | |
* @module array-back | |
* @example | |
* > const arrayify = require('array-back') | |
* | |
* > arrayify(undefined) | |
* [] | |
* | |
* > arrayify(null) | |
* [ null ] | |
* | |
* > arrayify(0) | |
* [ 0 ] | |
* | |
* > arrayify([ 1, 2 ]) | |
* [ 1, 2 ] | |
* | |
* > arrayify(new Set([ 1, 2 ])) | |
* [ 1, 2 ] | |
* | |
* > function f(){ return arrayify(arguments); } | |
* > f(1,2,3) | |
* [ 1, 2, 3 ] | |
*/ | |
function isObject (input) { | |
return typeof input === 'object' && input !== null | |
} | |
function isArrayLike (input) { | |
return isObject(input) && typeof input.length === 'number' | |
} | |
/** | |
* @param {*} - The input value to convert to an array | |
* @returns {Array} | |
* @alias module:array-back | |
*/ | |
function arrayify (input) { | |
if (Array.isArray(input)) { | |
return input | |
} | |
if (input === undefined) { | |
return [] | |
} | |
if (isArrayLike(input) || input instanceof Set) { | |
return Array.from(input) | |
} | |
return [ input ] | |
} | |
return arrayify; | |
})); | |