access.js 1.6 KB

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