foop
Version:
interfaces that describe their intentions.
64 lines (58 loc) • 5.53 kB
JavaScript
var ENV_PERF = require('../env/preferPerf')
var FROZEN_ARRAY = require('../native/EMPTY_ARRAY')
var MAX_ARRAY_LENGTH = require('../native/MAX_ARRAY_LENGTH')
var stringToArray = require('../cast/stringToArray')
var castSlice = require('../fp/slice')
var isString = require('../is/stringPrimitive')
var isRegExp = require('../is/regexp')
var isUndefined = require('../is/undefined')
var isNill = require('../is/nullOrUndefined')
var hasUnicode = require('./hasUnicode')
/**
* Splits `string` by `separator`.
* @symb 🤸
*
* @NOTE This method is based on
* [`String#split`](https://mdn.io/String/split).
*
* @curried 2
* @since 4.0.0
* @category String
*
*
* @param {string} [string=''] The string to split.
* @param {RegExp|string} separator The separator pattern to split by.
* @param {number} [limitArg] The length to truncate results to.
* @return {Array} Returns the string segments.
*
* @see http://speakingjs.com/es5/ch24.html
*
* @example
*
* split('a-b-c', '-', 2)
* //=> ['a', 'b']
*
*/
function split(string, separator, limitArg) {
var limit = isUndefined(limitArg) ? MAX_ARRAY_LENGTH : limitArg >>> 0
// @TODO EMPTY_ARRAY?
if (!limit) {
return ENV_PERF ? FROZEN_ARRAY : []
}
// split the unicode string into an array, then slice it
if (string &&
// isString, or nill && !regexp
(
isString(separator) ||
(isNill(separator) && !isRegExp(separator))
)
) {
if (!separator && hasUnicode(string)) {
return castSlice(stringToArray(string), 0, limit)
}
}
// normal...
return string.split(separator, limit)
}
module.exports = split
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VzIjpbInNwbGl0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVOVl9QRVJGID0gcmVxdWlyZSgnLi4vZW52L3ByZWZlclBlcmYnKVxuY29uc3QgRlJPWkVOX0FSUkFZID0gcmVxdWlyZSgnLi4vbmF0aXZlL0VNUFRZX0FSUkFZJylcbmNvbnN0IE1BWF9BUlJBWV9MRU5HVEggPSByZXF1aXJlKCcuLi9uYXRpdmUvTUFYX0FSUkFZX0xFTkdUSCcpXG5jb25zdCBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi4vY2FzdC9zdHJpbmdUb0FycmF5JylcbmNvbnN0IGNhc3RTbGljZSA9IHJlcXVpcmUoJy4uL2ZwL3NsaWNlJylcbmNvbnN0IGlzU3RyaW5nID0gcmVxdWlyZSgnLi4vaXMvc3RyaW5nUHJpbWl0aXZlJylcbmNvbnN0IGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaXMvcmVnZXhwJylcbmNvbnN0IGlzVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaXMvdW5kZWZpbmVkJylcbmNvbnN0IGlzTmlsbCA9IHJlcXVpcmUoJy4uL2lzL251bGxPclVuZGVmaW5lZCcpXG5jb25zdCBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9oYXNVbmljb2RlJylcblxuLyoqXG4gKiBTcGxpdHMgYHN0cmluZ2AgYnkgYHNlcGFyYXRvcmAuXG4gKiBAc3ltYiDwn6S4XG4gKlxuICogQE5PVEUgVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgU3RyaW5nI3NwbGl0YF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3NwbGl0KS5cbiAqXG4gKiBAY3VycmllZCAyXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gc3BsaXQuXG4gKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHNlcGFyYXRvciBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gc3BsaXQgYnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0QXJnXSBUaGUgbGVuZ3RoIHRvIHRydW5jYXRlIHJlc3VsdHMgdG8uXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgc3RyaW5nIHNlZ21lbnRzLlxuICpcbiAqIEBzZWUgaHR0cDovL3NwZWFraW5nanMuY29tL2VzNS9jaDI0Lmh0bWxcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgc3BsaXQoJ2EtYi1jJywgJy0nLCAyKVxuICogICAvLz0+IFsnYScsICdiJ11cbiAqXG4gKi9cbmZ1bmN0aW9uIHNwbGl0KHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdEFyZykge1xuICBjb25zdCBsaW1pdCA9IGlzVW5kZWZpbmVkKGxpbWl0QXJnKSA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdEFyZyA+Pj4gMFxuXG4gIC8vIEBUT0RPIEVNUFRZX0FSUkFZP1xuICBpZiAoIWxpbWl0KSB7XG4gICAgcmV0dXJuIEVOVl9QRVJGID8gRlJPWkVOX0FSUkFZIDogW11cbiAgfVxuXG4gIC8vIHNwbGl0IHRoZSB1bmljb2RlIHN0cmluZyBpbnRvIGFuIGFycmF5LCB0aGVuIHNsaWNlIGl0XG4gIGlmIChzdHJpbmcgJiZcbiAgICAvLyBpc1N0cmluZywgb3IgbmlsbCAmJiAhcmVnZXhwXG4gICAgKFxuICAgICAgaXNTdHJpbmcoc2VwYXJhdG9yKSB8fFxuICAgICAgKGlzTmlsbChzZXBhcmF0b3IpICYmICFpc1JlZ0V4cChzZXBhcmF0b3IpKVxuICAgIClcbiAgKSB7XG4gICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwgMCwgbGltaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gbm9ybWFsLi4uXG4gIHJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzcGxpdFxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDN0NBLEdBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQ3JEQSxHQUFLLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDO0FBQzlEQSxHQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUN0REEsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3hDQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUNqREEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3hDQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUM5Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDL0NBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkIxQyxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRTtFQUMxQ0EsR0FBSyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsUUFBUSxLQUFLLENBQUM7OztFQUd2RSxJQUFJLENBQUMsS0FBSyxFQUFFO0lBQ1YsT0FBTyxRQUFRLEdBQUcsWUFBWSxHQUFHLEVBQUU7R0FDcEM7OztFQUdELElBQUksTUFBTTs7SUFFUjtNQUNFLFFBQVEsQ0FBQyxTQUFTLENBQUM7TUFDbkIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDNUM7SUFDRDtJQUNBLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO01BQ3BDLE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0tBQ2xEO0dBQ0Y7OztFQUdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO0NBQ3RDOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSzsifQ==