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.
69 lines (56 loc) • 1.62 kB
JavaScript
/**
* Obliterator Split Function
* ===========================
*
* Function returning an iterator over the pieces of a regex split.
*/
var Iterator = require('./iterator.js');
/**
* Function used to make the given pattern global.
*
* @param {RegExp} pattern - Regular expression to make global.
* @return {RegExp}
*/
function makeGlobal(pattern) {
var flags = 'g';
if (pattern.multiline) flags += 'm';
if (pattern.ignoreCase) flags += 'i';
if (pattern.sticky) flags += 'y';
if (pattern.unicode) flags += 'u';
return new RegExp(pattern.source, flags);
}
/**
* Split.
*
* @param {RegExp} pattern - Regular expression to use.
* @param {string} string - Target string.
* @return {Iterator}
*/
module.exports = function split(pattern, string) {
if (!(pattern instanceof RegExp))
throw new Error('obliterator/split: invalid pattern. Expecting a regular expression.');
if (typeof string !== 'string')
throw new Error('obliterator/split: invalid target. Expecting a string.');
// NOTE: cloning the pattern has a performance cost but side effects for not
// doing so might be worse.
pattern = makeGlobal(pattern);
var consumed = false,
current = 0;
return new Iterator(function() {
if (consumed)
return {done: true};
var match = pattern.exec(string),
value,
length;
if (match) {
length = match.index + match[0].length;
value = string.slice(current, match.index);
current = length;
}
else {
consumed = true;
value = string.slice(current);
}
return {value: value};
});
};