index.transform.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.createIndexTransform = void 0;
  6. var _is = require("../../utils/is.js");
  7. var _factory = require("../../utils/factory.js");
  8. var name = 'index';
  9. var dependencies = ['Index'];
  10. var createIndexTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
  11. var Index = _ref.Index;
  12. /**
  13. * Attach a transform function to math.index
  14. * Adds a property transform containing the transform function.
  15. *
  16. * This transform creates a one-based index instead of a zero-based index
  17. */
  18. return function indexTransform() {
  19. var args = [];
  20. for (var i = 0, ii = arguments.length; i < ii; i++) {
  21. var arg = arguments[i];
  22. // change from one-based to zero based, and convert BigNumber to number
  23. if ((0, _is.isRange)(arg)) {
  24. arg.start--;
  25. arg.end -= arg.step > 0 ? 0 : 2;
  26. } else if (arg && arg.isSet === true) {
  27. arg = arg.map(function (v) {
  28. return v - 1;
  29. });
  30. } else if ((0, _is.isArray)(arg) || (0, _is.isMatrix)(arg)) {
  31. arg = arg.map(function (v) {
  32. return v - 1;
  33. });
  34. } else if ((0, _is.isNumber)(arg)) {
  35. arg--;
  36. } else if ((0, _is.isBigNumber)(arg)) {
  37. arg = arg.toNumber() - 1;
  38. } else if (typeof arg === 'string') {
  39. // leave as is
  40. } else {
  41. throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
  42. }
  43. args[i] = arg;
  44. }
  45. var res = new Index();
  46. Index.apply(res, args);
  47. return res;
  48. };
  49. }, {
  50. isTransformFunction: true
  51. });
  52. exports.createIndexTransform = createIndexTransform;