12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { errorTransform } from '../../transform/utils/errorTransform.js';
- import { getSafeProperty } from '../../../utils/customs.js';
- export function accessFactory(_ref) {
- var {
- subset
- } = _ref;
- /**
- * Retrieve part of an object:
- *
- * - Retrieve a property from an object
- * - Retrieve a part of a string
- * - Retrieve a matrix subset
- *
- * @param {Object | Array | Matrix | string} object
- * @param {Index} index
- * @return {Object | Array | Matrix | string} Returns the subset
- */
- return function access(object, index) {
- try {
- if (Array.isArray(object)) {
- return subset(object, index);
- } else if (object && typeof object.subset === 'function') {
- // Matrix
- return object.subset(index);
- } else if (typeof object === 'string') {
- // TODO: move getStringSubset into a separate util file, use that
- return subset(object, index);
- } else if (typeof object === 'object') {
- if (!index.isObjectProperty()) {
- throw new TypeError('Cannot apply a numeric index as object property');
- }
- return getSafeProperty(object, index.getObjectProperty());
- } else {
- throw new TypeError('Cannot apply index: unsupported type of object');
- }
- } catch (err) {
- throw errorTransform(err);
- }
- };
- }
|