UNPKG

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