chain-able
Version:
interfaces that describe their intentions.
41 lines (34 loc) • 3.96 kB
JavaScript
var isArray = require('../is/array')
var isUndefined = require('../is/undefined')
var lengthMinusOne = require('../util/lengthMinusOne')
var cache
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VzIjpbInNlZ21lbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2lzL3VuZGVmaW5lZCcpXG5jb25zdCBsZW5ndGhNaW51c09uZSA9IHJlcXVpcmUoJy4uL3V0aWwvbGVuZ3RoTWludXNPbmUnKVxuXG5sZXQgY2FjaGVcbm1vZHVsZS5leHBvcnRzID0gcGF0aCA9PiB7XG4gIGlmICghY2FjaGUpIGNhY2hlID0gbmV3IE1hcCgpXG4gIGlmIChjYWNoZS5oYXMocGF0aCkpIHJldHVybiBjYWNoZS5nZXQocGF0aClcbiAgaWYgKGlzQXJyYXkocGF0aCkpIHJldHVybiBwYXRoXG5cbiAgY29uc3QgcGF0aEFyciA9IHBhdGguc3BsaXQoJy4nKVxuICBjb25zdCBwYXJ0cyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHAgPSBwYXRoQXJyW2ldXG5cbiAgICAvKipcbiAgICAgKiBAZXhhbXBsZSAxXG4gICAgICogICAgICAgICAgJ1xcLmVoJyAtMSA9PT0gJ1xcXFwnICAgICAgKHRydWUpXG4gICAgICogICAgICAgICAgICAgICAgKzEgIT09IHVuZGVmaW5lZCAodHJ1ZSwgZWgpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSAyXG4gICAgICogICAgICAgICAgJy5laCcgIC0xID09PSAnXFxcXCcgICAgICAoZmFsc2UsIHVuZGVmaW5lZClcbiAgICAgKiAgICAgICAgICAgICAgICAgKzEgIT09IHVuZGVmaW5lZCAodHJ1ZSwgZWgpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSAzXG4gICAgICogICAgICAgICAgJ1xcLicgIC0xID09PSAnXFxcXCcgICAgICAodHJ1ZSlcbiAgICAgKiAgICAgICAgICAgICAgICArMSAhPT0gdW5kZWZpbmVkIChmYWxzZSwgZWgpXG4gICAgICovXG4gICAgd2hpbGUgKHBbbGVuZ3RoTWludXNPbmUocCldID09PSAnXFxcXCcgJiYgIWlzVW5kZWZpbmVkKHBhdGhBcnJbaSArIDFdKSkge1xuICAgICAgcCA9IHAuc2xpY2UoMCwgLTEpICsgJy4nICsgcGF0aEFyclsrK2ldXG4gICAgfVxuXG4gICAgcGFydHMucHVzaChwKVxuICB9XG5cbiAgY2FjaGUuc2V0KHBhdGgsIHBhcnRzKVxuICByZXR1cm4gcGFydHNcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDOUNBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDOztBQUV4REMsR0FBRyxDQUFDLEtBQUs7QUFDVCxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUEsSUFBSSxDQUFBLENBQUMsQUFBRztFQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUEsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUE7RUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFBO0VBQzNDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUEsT0FBTyxJQUFJLEVBQUE7O0VBRTlCRCxHQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQy9CQSxHQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7O0VBRWhCLEtBQUtDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3ZDQSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWVsQixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3BFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDeEM7O0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7R0FDZDs7RUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7RUFDdEIsT0FBTyxLQUFLO0NBQ2I7In0=