serverless-spy
Version:
CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.
94 lines (76 loc) • 2.02 kB
JavaScript
/**
* Mnemonist Iterable Function
* ============================
*
* Harmonized iteration helpers over mixed iterable targets.
*/
var forEach = require('obliterator/foreach');
var typed = require('./typed-arrays.js');
/**
* Function used to determine whether the given object supports array-like
* random access.
*
* @param {any} target - Target object.
* @return {boolean}
*/
function isArrayLike(target) {
return Array.isArray(target) || typed.isTypedArray(target);
}
/**
* Function used to guess the length of the structure over which we are going
* to iterate.
*
* @param {any} target - Target object.
* @return {number|undefined}
*/
function guessLength(target) {
if (typeof target.length === 'number')
return target.length;
if (typeof target.size === 'number')
return target.size;
return;
}
/**
* Function used to convert an iterable to an array.
*
* @param {any} target - Iteration target.
* @return {array}
*/
function toArray(target) {
var l = guessLength(target);
var array = typeof l === 'number' ? new Array(l) : [];
var i = 0;
// TODO: we could optimize when given target is array like
forEach(target, function(value) {
array[i++] = value;
});
return array;
}
/**
* Same as above but returns a supplementary indices array.
*
* @param {any} target - Iteration target.
* @return {array}
*/
function toArrayWithIndices(target) {
var l = guessLength(target);
var IndexArray = typeof l === 'number' ?
typed.getPointerArray(l) :
Array;
var array = typeof l === 'number' ? new Array(l) : [];
var indices = typeof l === 'number' ? new IndexArray(l) : [];
var i = 0;
// TODO: we could optimize when given target is array like
forEach(target, function(value) {
array[i] = value;
indices[i] = i++;
});
return [array, indices];
}
/**
* Exporting.
*/
exports.isArrayLike = isArrayLike;
exports.guessLength = guessLength;
exports.toArray = toArray;
exports.toArrayWithIndices = toArrayWithIndices;