newline-iterator
Version:
Line-by-line string iterator
66 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, /**
* Create a newline iterator recognizing CR, LF, and CRLF using the Symbol.iterator interface
*
* @param string The string to iterate through
*
* ```typescript
* import newlineIterator from "newline-iterator";
*
* const iterator = newlineIterator("some\r\nstring\ncombination\r");
* const results = [];
* for (const line of iterator) results.push(line);
* console.log(results); // ["some", "string", "combination"];
* ```
*/ "default", {
enumerable: true,
get: function() {
return newlineIterator;
}
});
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
var REGEX_NEW_LINE = /\r?\n|\r/g;
var root = typeof window === 'undefined' ? global : window;
// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy
var Symbol = typeof root.Symbol === 'undefined' ? {
iterator: undefined
} : root.Symbol;
function newlineIterator(string) {
var lines = string.split(REGEX_NEW_LINE).reverse();
var iterator = _define_property({
next: function next() {
if (lines.length === 0) return {
value: null,
done: true
};
var value = lines.pop();
if (lines.length === 0 && value.length === 0) return {
value: null,
done: true
};
return {
value: value,
done: false
};
}
}, Symbol.iterator, function() {
return this;
});
return iterator;
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }