simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

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 }