foop
Version:
interfaces that describe their intentions.
62 lines (54 loc) • 5.06 kB
JavaScript
var isArray = require('../is/array')
var isUndefined = require('../is/undefined')
var lengthMinusOne = require('../util/lengthMinusOne')
var cache
/**
* @name dotPropSegments
* @alias castPath
*
* @TODO `isKey(value, object) ? [value] : stringToPath(value)`
* // isKey/hasIn
*
* @since 4.0.0
* @memberOf dot
*
* @param {string | Array<string>} path dot-prop-path
* @return {Array<string>} array path
*
* @example
*
* dotPropSegments('eh.oh') //=> ['eh', 'oh']
* dotPropSegments(['eh', 'oh']) //=> ['eh', 'oh']
* dotPropSegments('ehoh') //=> ['ehoh']
*
*/
module.exports = function (path) {
if (!cache) { cache = new Map() }
if (cache.has(path)) { return cache.get(path) }
if (isArray(path)) { return path }
var pathArr = path.split('.')
var parts = []
for (var i = 0; i < pathArr.length; i++) {
var p = pathArr[i]
/**
* @example 1
* '\.eh' -1 === '\\' //=> true
* +1 !== undefined //=> true, eh
*
* @example 2
* '.eh' -1 === '\\' (false, undefined)
* +1 !== undefined (true, eh)
*
* @example 3
* '\.' -1 === '\\' (true)
* +1 !== undefined (false, eh)
*/
while (p[lengthMinusOne(p)] === '\\' && !isUndefined(pathArr[i + 1])) {
p = p.slice(0, -1) + '.' + pathArr[++i]
}
parts.push(p)
}
cache.set(path, parts)
return parts
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VzIjpbInNlZ21lbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2lzL3VuZGVmaW5lZCcpXG5jb25zdCBsZW5ndGhNaW51c09uZSA9IHJlcXVpcmUoJy4uL3V0aWwvbGVuZ3RoTWludXNPbmUnKVxuXG5sZXQgY2FjaGVcblxuLyoqXG4gKiBAbmFtZSBkb3RQcm9wU2VnbWVudHNcbiAqIEBhbGlhcyBjYXN0UGF0aFxuICpcbiAqIEBUT0RPIGBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodmFsdWUpYFxuICogICAgICAgLy8gaXNLZXkvaGFzSW5cbiAqXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBtZW1iZXJPZiBkb3RcbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBwYXRoIGRvdC1wcm9wLXBhdGhcbiAqIEByZXR1cm4ge0FycmF5PHN0cmluZz59IGFycmF5IHBhdGhcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGRvdFByb3BTZWdtZW50cygnZWgub2gnKSAvLz0+IFsnZWgnLCAnb2gnXVxuICogICAgZG90UHJvcFNlZ21lbnRzKFsnZWgnLCAnb2gnXSkgLy89PiBbJ2VoJywgJ29oJ11cbiAqICAgIGRvdFByb3BTZWdtZW50cygnZWhvaCcpIC8vPT4gWydlaG9oJ11cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcGF0aCA9PiB7XG4gIGlmICghY2FjaGUpIGNhY2hlID0gbmV3IE1hcCgpXG4gIGlmIChjYWNoZS5oYXMocGF0aCkpIHJldHVybiBjYWNoZS5nZXQocGF0aClcbiAgaWYgKGlzQXJyYXkocGF0aCkpIHJldHVybiBwYXRoXG5cbiAgY29uc3QgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKVxuICBjb25zdCBwYXJ0cyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHAgPSBwYXRoQXJyW2ldXG5cbiAgICAvKipcbiAgICAgKiBAZXhhbXBsZSAxXG4gICAgICogICAgICAgICAgJ1xcLmVoJyAtMSA9PT0gJ1xcXFwnICAgICAvLz0+IHRydWVcbiAgICAgKiAgICAgICAgICAgICAgICArMSAhPT0gdW5kZWZpbmVkIC8vPT4gdHJ1ZSwgZWhcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDJcbiAgICAgKiAgICAgICAgICAnLmVoJyAgLTEgPT09ICdcXFxcJyAgICAgIChmYWxzZSwgdW5kZWZpbmVkKVxuICAgICAqICAgICAgICAgICAgICAgICArMSAhPT0gdW5kZWZpbmVkICh0cnVlLCBlaClcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIDNcbiAgICAgKiAgICAgICAgICAnXFwuJyAgLTEgPT09ICdcXFxcJyAgICAgICh0cnVlKVxuICAgICAqICAgICAgICAgICAgICAgICsxICE9PSB1bmRlZmluZWQgKGZhbHNlLCBlaClcbiAgICAgKi9cbiAgICB3aGlsZSAocFtsZW5ndGhNaW51c09uZShwKV0gPT09ICdcXFxcJyAmJiAhaXNVbmRlZmluZWQocGF0aEFycltpICsgMV0pKSB7XG4gICAgICBwID0gcC5zbGljZSgwLCAtMSkgKyAnLicgKyBwYXRoQXJyWysraV1cbiAgICB9XG5cbiAgICBwYXJ0cy5wdXNoKHApXG4gIH1cblxuICBjYWNoZS5zZXQocGF0aCwgcGFydHMpXG4gIHJldHVybiBwYXJ0c1xufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUM5Q0EsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUM7O0FBRXhEQyxHQUFHLENBQUMsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCVCxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUEsSUFBSSxDQUFBLENBQUMsQUFBRztFQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUEsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUE7RUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFBO0VBQzNDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxJQUFJLEVBQUE7O0VBRTlCRCxHQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQy9CQSxHQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7O0VBRWhCLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDQSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWVsQixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3BFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDeEM7O0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7R0FDZDs7RUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7RUFDdEIsT0FBTyxLQUFLO0NBQ2I7In0=