UNPKG

foop

Version:

interfaces that describe their intentions.

62 lines (54 loc) 5.06 kB
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=