access.js (1660B)
1 "use strict"; 2 3 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 4 5 Object.defineProperty(exports, "__esModule", { 6 value: true 7 }); 8 exports.accessFactory = accessFactory; 9 10 var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); 11 12 var _errorTransform = require("../../transform/utils/errorTransform.js"); 13 14 var _customs = require("../../../utils/customs.js"); 15 16 function accessFactory(_ref) { 17 var subset = _ref.subset; 18 19 /** 20 * Retrieve part of an object: 21 * 22 * - Retrieve a property from an object 23 * - Retrieve a part of a string 24 * - Retrieve a matrix subset 25 * 26 * @param {Object | Array | Matrix | string} object 27 * @param {Index} index 28 * @return {Object | Array | Matrix | string} Returns the subset 29 */ 30 return function access(object, index) { 31 try { 32 if (Array.isArray(object)) { 33 return subset(object, index); 34 } else if (object && typeof object.subset === 'function') { 35 // Matrix 36 return object.subset(index); 37 } else if (typeof object === 'string') { 38 // TODO: move getStringSubset into a separate util file, use that 39 return subset(object, index); 40 } else if ((0, _typeof2.default)(object) === 'object') { 41 if (!index.isObjectProperty()) { 42 throw new TypeError('Cannot apply a numeric index as object property'); 43 } 44 45 return (0, _customs.getSafeProperty)(object, index.getObjectProperty()); 46 } else { 47 throw new TypeError('Cannot apply index: unsupported type of object'); 48 } 49 } catch (err) { 50 throw (0, _errorTransform.errorTransform)(err); 51 } 52 }; 53 }