chain-able
Version:
interfaces that describe their intentions.
67 lines (61 loc) • 5.07 kB
JavaScript
var isUndefined = require('../is/undefined')
var isString = require('../is/string')
var keys = [
/* --- chain --- */
/* 0 */ 'parent',
/* 1 */ 'store',
/* 2 */ 'meta',
/* 3 */ 'className',
/* --- meta --- */
/* 4 */ 'observers',
/* 5 */ 'transformers',
/* 6 */ 'decorated',
/* 7 */ 'shorthands',
/* --- types --- */
/* 8 */ 'undefined',
/* 9 */ 'null',
/* 10 */ 'string',
/* 11 */ 'number',
/* 12 */ 'function',
/* 13 */ 'array',
/* 14 */ 'boolean',
/* --- next --- */
'_', // ?
]
/* prettier-ignore */
/**
* @param {number} [index=Number]
* @param {undefined | Object | Array} [obj=undefined]
* @param {undefined | any} [val=undefined]
* @return {string | number | any}
*/
function access(index, obj, val) {
if ( index === void 0 ) index = -Infinity;
if ( obj === void 0 ) obj = undefined;
if ( val === void 0 ) val = undefined;
if (isString(index)) { index = keys.indexOf(index) }
// now map this to the arrays...
var key = keys[index]
// just name
if (isUndefined(obj)) { return key }
// get prop
else if (isUndefined(val)) { return obj[key] }
// set prop
else if (!isUndefined(val)) { return (obj[key] = val) }
}
module.exports = Object.assign(access, require('./enums'), {access: access})
// const eh = {parent: 100}
// const timer = require('fliplog').fliptime()
// timer.start('access')
//
// let a = []
// let i = 0
// while (i < 10000000) {
// a.push(access(0, eh, 'eh'))
// eh.parent = 'eh'
// a.push(eh.parent)
// i++
// }
//
// timer.stop('access').log('access')
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5bWFwLmpzIiwic291cmNlcyI6WyJrZXltYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pcy91bmRlZmluZWQnKVxuY29uc3QgaXNTdHJpbmcgPSByZXF1aXJlKCcuLi9pcy9zdHJpbmcnKVxuXG5jb25zdCBrZXlzID0gW1xuICAvKiAtLS0gY2hhaW4gLS0tICovXG4gIC8qICAwICAqLyAncGFyZW50JyxcbiAgLyogIDEgICovICdzdG9yZScsXG4gIC8qICAyICAqLyAnbWV0YScsXG4gIC8qICAzICAqLyAnY2xhc3NOYW1lJyxcbiAgLyogLS0tIG1ldGEgLS0tICovXG4gIC8qICA0ICAqLyAnb2JzZXJ2ZXJzJyxcbiAgLyogIDUgICovICd0cmFuc2Zvcm1lcnMnLFxuICAvKiAgNiAgKi8gJ2RlY29yYXRlZCcsXG4gIC8qICA3ICAqLyAnc2hvcnRoYW5kcycsXG4gIC8qIC0tLSB0eXBlcyAtLS0gKi9cbiAgLyogIDggICovICd1bmRlZmluZWQnLFxuICAvKiAgOSAgKi8gJ251bGwnLFxuICAvKiAgMTAgKi8gJ3N0cmluZycsXG4gIC8qICAxMSAqLyAnbnVtYmVyJyxcbiAgLyogIDEyICovICdmdW5jdGlvbicsXG4gIC8qICAxMyAqLyAnYXJyYXknLFxuICAvKiAgMTQgKi8gJ2Jvb2xlYW4nLFxuICAvKiAtLS0gbmV4dCAtLS0gKi9cbiAgJ18nLCAvLyA/XG5dXG5cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xuLyoqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtpbmRleD1OdW1iZXJdXG4gKiBAcGFyYW0gIHt1bmRlZmluZWQgfCBPYmplY3QgfCBBcnJheX0gW29iaj11bmRlZmluZWRdXG4gKiBAcGFyYW0gIHt1bmRlZmluZWQgfCBhbnl9IFt2YWw9dW5kZWZpbmVkXVxuICogQHJldHVybiB7c3RyaW5nIHwgbnVtYmVyIHwgYW55fVxuICovXG5mdW5jdGlvbiBhY2Nlc3MoaW5kZXggPSAtSW5maW5pdHksIG9iaiA9IHVuZGVmaW5lZCwgdmFsID0gdW5kZWZpbmVkKSB7XG4gIGlmIChpc1N0cmluZyhpbmRleCkpIGluZGV4ID0ga2V5cy5pbmRleE9mKGluZGV4KVxuICAvLyBub3cgbWFwIHRoaXMgdG8gdGhlIGFycmF5cy4uLlxuICBsZXQga2V5ID0ga2V5c1tpbmRleF1cbiAgLy8ganVzdCBuYW1lXG4gIGlmIChpc1VuZGVmaW5lZChvYmopKSByZXR1cm4ga2V5XG4gIC8vIGdldCBwcm9wXG4gIGVsc2UgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHJldHVybiBvYmpba2V5XVxuICAvLyBzZXQgcHJvcFxuICBlbHNlIGlmICghaXNVbmRlZmluZWQodmFsKSkgcmV0dXJuIChvYmpba2V5XSA9IHZhbClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduKGFjY2VzcywgcmVxdWlyZSgnLi9lbnVtcycpLCB7YWNjZXNzfSlcblxuLy8gY29uc3QgZWggPSB7cGFyZW50OiAxMDB9XG4vLyBjb25zdCB0aW1lciA9IHJlcXVpcmUoJ2ZsaXBsb2cnKS5mbGlwdGltZSgpXG4vLyB0aW1lci5zdGFydCgnYWNjZXNzJylcbi8vXG4vLyBsZXQgYSA9IFtdXG4vLyBsZXQgaSA9IDBcbi8vIHdoaWxlIChpIDwgMTAwMDAwMDApIHtcbi8vICAgYS5wdXNoKGFjY2VzcygwLCBlaCwgJ2VoJykpXG4vLyAgIGVoLnBhcmVudCA9ICdlaCdcbi8vICAgYS5wdXNoKGVoLnBhcmVudClcbi8vICAgaSsrXG4vLyB9XG4vL1xuLy8gdGltZXIuc3RvcCgnYWNjZXNzJykubG9nKCdhY2Nlc3MnKVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDOUNBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7QUFFeENBLEdBQUssQ0FBQyxJQUFJLEdBQUc7O1lBRUQsUUFBUTtZQUNSLE9BQU87WUFDUCxNQUFNO1lBQ04sV0FBVzs7WUFFWCxXQUFXO1lBQ1gsY0FBYztZQUNkLFdBQVc7WUFDWCxZQUFZOztZQUVaLFdBQVc7WUFDWCxNQUFNO1lBQ04sUUFBUTtZQUNSLFFBQVE7WUFDUixVQUFVO1lBQ1YsT0FBTztZQUNQLFNBQVM7O0VBRW5CLEdBQUc7Q0FDSjs7Ozs7Ozs7O0FBU0QsU0FBUyxNQUFNLENBQUMsS0FBaUIsRUFBRSxHQUFlLEVBQUUsR0FBZSxFQUFFLENBQWhEOytCQUFBLEdBQUcsQ0FBQyxRQUFRLENBQUs7MkJBQUEsR0FBRyxTQUFTLENBQUs7MkJBQUEsR0FBRyxTQUFTO0FBQUc7RUFDcEUsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBQTs7RUFFaERDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7RUFFckIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQSxPQUFPLEdBQUcsRUFBQTs7T0FFM0IsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQTs7T0FFckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUE7Q0FDcEQ7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFBLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OyJ9