@pie-lib/math-evaluator 2.2.0-beta.3 → 2.2.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/lib/__tests__/index.test.js +314 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,46 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [2.2.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.5) (2025-07-25)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-25)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-25)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# [2.2.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.4) (2025-07-23)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-23)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
6
46
|
# [2.2.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.3) (2025-07-20)
|
|
7
47
|
|
|
8
48
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
8
|
+
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
|
|
11
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
12
|
+
|
|
13
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
|
+
|
|
15
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
16
|
+
|
|
17
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
18
|
+
|
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
20
|
+
|
|
21
|
+
describe('math-evaluator', function () {
|
|
22
|
+
describe('latexToText', function () {
|
|
23
|
+
var assertLatexToText = function assertLatexToText(input, expected) {
|
|
24
|
+
it("".concat(input, " => ").concat(expected), function () {
|
|
25
|
+
var result = (0, _index.latexToText)(input);
|
|
26
|
+
expect(result).toEqual(expected);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
assertLatexToText('\\frac{ \\frac{1}{3}}{3}', '(1/3)/3');
|
|
31
|
+
assertLatexToText('\\neq', '0 != 0');
|
|
32
|
+
assertLatexToText('10 \\neq 20', '10 != 20');
|
|
33
|
+
assertLatexToText('10 \\neq', '10 != 0');
|
|
34
|
+
assertLatexToText('\\neq 10', '0 != 10');
|
|
35
|
+
assertLatexToText('40%', 'percent(40)');
|
|
36
|
+
assertLatexToText('%', 'percent(0)');
|
|
37
|
+
assertLatexToText('12%', 'percent(12)');
|
|
38
|
+
assertLatexToText('12\\%', 'percent(12)');
|
|
39
|
+
assertLatexToText('-12.5%', '- percent(12.5)');
|
|
40
|
+
assertLatexToText('-12.5\\%', '- percent(12.5)');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
var assert = function assert(isEqual, opts) {
|
|
44
|
+
return function (label) {
|
|
45
|
+
return function () {
|
|
46
|
+
var args = Array.from(arguments);
|
|
47
|
+
|
|
48
|
+
var pairs = _lodash["default"].chunk(args, 2);
|
|
49
|
+
|
|
50
|
+
describe(label, function () {
|
|
51
|
+
pairs.forEach(function (_ref) {
|
|
52
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
53
|
+
a = _ref2[0],
|
|
54
|
+
b = _ref2[1];
|
|
55
|
+
|
|
56
|
+
it("".concat(a, " === ").concat(b, " ? ").concat(isEqual), function () {
|
|
57
|
+
expect((0, _index["default"])(a, b, opts)).toBe(isEqual);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var assertEqual = assert(true);
|
|
66
|
+
var assertNotEqual = assert(false);
|
|
67
|
+
var assertLatexEqual = assert(true, {
|
|
68
|
+
isLatex: true
|
|
69
|
+
});
|
|
70
|
+
var assertLatexNotEqual = assert(false, {
|
|
71
|
+
isLatex: true
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
var _amjs = function _amjs(only) {
|
|
75
|
+
return function (a, b, equal) {
|
|
76
|
+
var fn = only ? it.only : it;
|
|
77
|
+
fn("".concat(a, " === ").concat(b, " => ").concat(equal), function () {
|
|
78
|
+
var as = (0, _index.latexToText)(a);
|
|
79
|
+
var bs = (0, _index.latexToText)(b);
|
|
80
|
+
expect((0, _index.ave)(as, bs)).toEqual(equal);
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var assertThroughMathJs = _amjs(false);
|
|
86
|
+
|
|
87
|
+
assertThroughMathJs.only = _amjs(true);
|
|
88
|
+
|
|
89
|
+
var _als = function _als(only) {
|
|
90
|
+
return function (input, expected) {
|
|
91
|
+
var fn = only ? it.only : it;
|
|
92
|
+
fn("".concat(input, " => ").concat(expected), function () {
|
|
93
|
+
expect((0, _index.latexToText)(input)).toEqual(expected);
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
var assertLatexFromString = _als(false);
|
|
99
|
+
|
|
100
|
+
assertLatexFromString.only = _als(true);
|
|
101
|
+
describe('ch6456', function () {
|
|
102
|
+
assertEqual('percent')('-12.5%', '-12.5%');
|
|
103
|
+
assertEqual('percent')('-12.5\\%', '-12.5%');
|
|
104
|
+
assertNotEqual('percent')('-11.5%', '-12.5%');
|
|
105
|
+
});
|
|
106
|
+
describe('ch6456 - latex', function () {
|
|
107
|
+
assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5%');
|
|
108
|
+
assertLatexEqual('percent')('\\frac{1}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
|
|
109
|
+
assertLatexNotEqual('percent')('\\frac{4}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
|
|
110
|
+
assertLatexNotEqual('percent')('\\frac{2}{2} -12.5%', '\\frac{2}{4} -12.5\\%');
|
|
111
|
+
});
|
|
112
|
+
describe('PIE-188-math-expressions', function () {
|
|
113
|
+
// it('parses expressions correctly', async () => {
|
|
114
|
+
// geometry
|
|
115
|
+
// MULTIPLY WITH VARIABLE BASED
|
|
116
|
+
assertThroughMathJs('\\parallel x', '\\parallel x', true);
|
|
117
|
+
assertThroughMathJs('\\parallel x', '\\parallel x', true);
|
|
118
|
+
assertThroughMathJs('\\parallel x', '\\parallel 0', false);
|
|
119
|
+
assertThroughMathJs('\\overrightarrow{x + 4}', '\\overrightarrow {4 + x}', true);
|
|
120
|
+
assertThroughMathJs('\\overrightarrow{4x^2 + 4}', '\\overrightarrow {4x^2 + 8 - 4}', true);
|
|
121
|
+
assertThroughMathJs('\\overrightarrow{21*2*x}', '\\overrightarrow {42x}', true);
|
|
122
|
+
assertLatexFromString('\\nparallel x', 'nparallel x');
|
|
123
|
+
assertLatexFromString('\\overrightarrow{x}', 'overrightarrow x');
|
|
124
|
+
assertLatexFromString('\\overleftrightarrow{x}', 'overleftrightarrow x');
|
|
125
|
+
assertLatexFromString('\\perp x', 'perp x');
|
|
126
|
+
assertLatexFromString('\\angle x', 'angle x');
|
|
127
|
+
assertLatexFromString('\\overarc x', 'overarc x');
|
|
128
|
+
assertLatexFromString('\\measuredangle x', 'measuredangle x');
|
|
129
|
+
assertLatexFromString('\\triangle x', 'triangle x');
|
|
130
|
+
assertLatexFromString('\\parallelogram x', 'parallelogram x');
|
|
131
|
+
assertLatexFromString('\\odot x', 'odot x');
|
|
132
|
+
assertLatexFromString('\\degree x', 'degree x');
|
|
133
|
+
assertLatexFromString('\\sim x', 'sim x');
|
|
134
|
+
assertLatexFromString('\\cong x', 'cong x');
|
|
135
|
+
assertLatexFromString('\\ncong x', 'ncong x');
|
|
136
|
+
assertLatexFromString('\\napprox x', 'napprox x'); // UNRECOGNIZED BY LEARNOSITY
|
|
137
|
+
|
|
138
|
+
assertLatexFromString('\\nim x', 'nim x'); // UNRECOGNIZED BY LEARNOSITY
|
|
139
|
+
|
|
140
|
+
assertLatexFromString('\\sim x', 'sim x');
|
|
141
|
+
expect(function () {
|
|
142
|
+
return (0, _index.latexToText)('\\sim 4', {
|
|
143
|
+
unknownCommandBehavior: 'error'
|
|
144
|
+
});
|
|
145
|
+
}).toThrow(); // comparisons
|
|
146
|
+
|
|
147
|
+
assertLatexFromString('1 \\lt 2', '1 < 2');
|
|
148
|
+
assertLatexFromString('1 \\gt 2', '1 > 2');
|
|
149
|
+
assertLatexFromString('1 \\le 2', '1 ≤ 2');
|
|
150
|
+
assertLatexFromString('1 \\ge 2', '1 ≥ 2'); // exponents
|
|
151
|
+
|
|
152
|
+
assertLatexFromString('2^2', '2^2');
|
|
153
|
+
assertLatexFromString('2^{3}', '2^3'); // roots
|
|
154
|
+
|
|
155
|
+
assertLatexFromString('\\sqrt{2}', 'sqrt(2)');
|
|
156
|
+
assertLatexFromString('\\sqrt[{3}]{3}', '3^(1/3)'); // fractions
|
|
157
|
+
|
|
158
|
+
assertLatexFromString('\\frac{3}{3}', '3/3');
|
|
159
|
+
assertLatexFromString('\\frac{x}{3}', 'x/3');
|
|
160
|
+
assertLatexFromString('x\\frac{5}{3}', 'x (5/3)'); // ACTUAL OPERATOR BASED
|
|
161
|
+
|
|
162
|
+
assertLatexFromString('\\overline{x}', 'overline x');
|
|
163
|
+
assertLatexFromString('\\pm', 'pm');
|
|
164
|
+
assertLatexFromString('\\approx x', 'approx x'); // logarithms
|
|
165
|
+
|
|
166
|
+
assertLatexFromString("4'", "4'");
|
|
167
|
+
assertLatexFromString('\\log 4', 'log(4)');
|
|
168
|
+
assertLatexFromString('\\log(4x)', 'log(4 x)');
|
|
169
|
+
assertLatexFromString('\\ln 4', 'ln(4)');
|
|
170
|
+
assertLatexFromString('|4|', '|4|');
|
|
171
|
+
assertLatexFromString('(4)', '4');
|
|
172
|
+
assertLatexFromString('(4 + x) * 5', '(4 + x) * 5');
|
|
173
|
+
assertLatexFromString('[4]', '4');
|
|
174
|
+
assertLatexFromString('\\mu', 'μ');
|
|
175
|
+
assertLatexFromString('\\Sigma', 'Σ');
|
|
176
|
+
assertLatexFromString('x^{15}', 'x^15');
|
|
177
|
+
assertLatexFromString('x_{15}', 'x_15'); // Trigo
|
|
178
|
+
|
|
179
|
+
assertLatexFromString('\\sin(x)', 'sin(x)');
|
|
180
|
+
assertLatexFromString('\\cos(x)', 'cos(x)');
|
|
181
|
+
assertLatexFromString('\\tan(x)', 'tan(x)');
|
|
182
|
+
assertLatexFromString('\\sec(x)', 'sec(x)');
|
|
183
|
+
assertLatexFromString('\\csc(x)', 'csc(x)');
|
|
184
|
+
assertLatexFromString('\\cot(x)', 'cot(x)');
|
|
185
|
+
}); // assertNotEqual('custom latex')('1530', `\\odot`);
|
|
186
|
+
|
|
187
|
+
assertNotEqual('evaluates simple expressions correctly')('0', 'x', '3x', '4x');
|
|
188
|
+
assertEqual('evaluates simple expressions correctly')('x', 'x', '2x', '2x');
|
|
189
|
+
describe('bad frac throws error', function () {
|
|
190
|
+
it('throws an error', function () {
|
|
191
|
+
expect(function () {
|
|
192
|
+
return (0, _index["default"])('\\frac12', '\\frac34', {
|
|
193
|
+
isLatex: true
|
|
194
|
+
});
|
|
195
|
+
}).toThrow('Expecting {');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('7119', function () {
|
|
199
|
+
it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n v | isEqual\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n "])), '4.5', true, '3.2 + 1.3', true, '(4 - \\frac{4}{5}) + 1.3', true, '\\frac{9}{2}', true, '4 \\frac{1}{2}', true, '\\frac{10}{2} - 0.5', true, '4.55', false)('$a == $isEqual', function (_ref3) {
|
|
200
|
+
var v = _ref3.v,
|
|
201
|
+
isEqual = _ref3.isEqual;
|
|
202
|
+
var result = (0, _index["default"])('4 \\frac{1}{2}', v, {
|
|
203
|
+
isLatex: true
|
|
204
|
+
});
|
|
205
|
+
expect(result).toEqual(isEqual);
|
|
206
|
+
});
|
|
207
|
+
it('?', function () {
|
|
208
|
+
expect((0, _index.latexToText)('4\\frac{1}{2}')).toEqual('4 + 1/2');
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
assertEqual('evaluates simple expressions correctly 2')('100', '100', '50 + 50', '25 * 4', '200 / 2', '20 * 5', '2.5 * 40', '10 * 10');
|
|
212
|
+
assertNotEqual('evaluates simple expressions correctly 2')('100', '0', '0', '50 * 2', '44 + 57', '100', '44 + 57', '50 * 3');
|
|
213
|
+
assertEqual('evaluates simple expressions correctly 3')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1');
|
|
214
|
+
assertNotEqual('evaluates simple expressions correctly 3')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1');
|
|
215
|
+
assertEqual('evaluates simple expressions correctly 4')('50 + 50', '100', '100 / 2 + 50', '100', '2 + 2', '4', '1/2 + .5', '1', '13/2', '13/2', '26/4', '13/2', '6 + 1/2', '13/2', '6.5', '13/2');
|
|
216
|
+
assertNotEqual('evaluates simple expressions correctly 4')('50 + 51', '100', '25 * 2 + 51', '100', '1/2 + .5', '1.9', '1/2 + .5', '1.1', '14/2', '13/2', '6.6', '13/2');
|
|
217
|
+
it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n "])), '((x^2 + x) / x) - 1', 'x')('$a == $b', function (_ref4) {
|
|
218
|
+
var a = _ref4.a,
|
|
219
|
+
b = _ref4.b;
|
|
220
|
+
expect((0, _index["default"])(a, b)).toBe(true);
|
|
221
|
+
});
|
|
222
|
+
assertEqual('evaluates simple variable expressions correctly')('x', 'x', 'x + 0', 'x', '(x-2) + 2', 'x', '((x^2 + x) / x) - 1', 'x', '2x/2', 'x', '(x + 2)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
|
|
223
|
+
assertNotEqual('evaluates simple variable expressions correctly')('y', 'x', 'x + 1', 'x', 'x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
|
|
224
|
+
assertEqual('evaluates simple variable expressions correctly 2')('(2 + x)^2', '(x + 2)^2', 'x^2 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+1)', '(x + 2)^2', 'x^2 + 8 ((x+1) / 2)', '(x + 2)^2');
|
|
225
|
+
assertEqual('evaluates expressions correctly with variable exponents')('(2 + x)^2x', '(x + 2)^2x', 'y^(2 x)', 'y^(x+x)');
|
|
226
|
+
assertEqual('evaluates function expressions correctly with variable parameters')('sqrt(4x)', 'sqrt(2x+2x)', 'sqrt(x^2)', 'sqrt(((x+1)^2) - ((x+1)^2) + x^2)');
|
|
227
|
+
assertNotEqual('evaluates simple variable expressions correctly 2')('x^3 + 4x + 4', '(x + 2)^2', 'x^2 + 4(x+2)', '(x + 2)^2');
|
|
228
|
+
it('correctly consumes allowDecimals option', function () {
|
|
229
|
+
expect((0, _index["default"])('123', '123', {
|
|
230
|
+
allowDecimals: true
|
|
231
|
+
})).toEqual(true);
|
|
232
|
+
expect((0, _index["default"])('123', '123.0', {
|
|
233
|
+
allowDecimals: true
|
|
234
|
+
})).toEqual(true);
|
|
235
|
+
expect((0, _index["default"])('123,0', '123.0', {
|
|
236
|
+
allowDecimals: true
|
|
237
|
+
})).toEqual(true);
|
|
238
|
+
expect((0, _index["default"])('123,0', '123.0', {
|
|
239
|
+
allowDecimals: false
|
|
240
|
+
})).toEqual(false);
|
|
241
|
+
expect((0, _index["default"])('123', '123.0', {
|
|
242
|
+
allowDecimals: false
|
|
243
|
+
})).toEqual(false);
|
|
244
|
+
expect((0, _index["default"])('123', '123,0', {
|
|
245
|
+
allowDecimals: false
|
|
246
|
+
})).toEqual(false);
|
|
247
|
+
});
|
|
248
|
+
it('correctly consumes allowDecimals option for complex examples too', function () {
|
|
249
|
+
expect((0, _index["default"])('1500000', '1500000', {
|
|
250
|
+
allowDecimals: true
|
|
251
|
+
})).toEqual(true);
|
|
252
|
+
expect((0, _index["default"])('1,500,000', '1,500,000', {
|
|
253
|
+
allowDecimals: true
|
|
254
|
+
})).toEqual(true);
|
|
255
|
+
expect((0, _index["default"])('1500000', '1,500,000', {
|
|
256
|
+
allowDecimals: true
|
|
257
|
+
})).toEqual(true);
|
|
258
|
+
expect((0, _index["default"])('1500000', '1,500,000.00', {
|
|
259
|
+
allowDecimals: true
|
|
260
|
+
})).toEqual(true);
|
|
261
|
+
expect((0, _index["default"])('1500000', '1,500,000.0', {
|
|
262
|
+
allowDecimals: true
|
|
263
|
+
})).toEqual(true);
|
|
264
|
+
expect((0, _index["default"])('1,500,000.0', '1,500,000.00', {
|
|
265
|
+
allowDecimals: true
|
|
266
|
+
})).toEqual(true);
|
|
267
|
+
expect((0, _index["default"])('1500000', '1,500000', {
|
|
268
|
+
allowDecimals: true
|
|
269
|
+
})).toEqual(false);
|
|
270
|
+
expect((0, _index["default"])('1500000', '1500,000', {
|
|
271
|
+
allowDecimals: true
|
|
272
|
+
})).toEqual(false);
|
|
273
|
+
expect((0, _index["default"])('1500000', '1,500,000.01', {
|
|
274
|
+
allowDecimals: true
|
|
275
|
+
})).toEqual(false);
|
|
276
|
+
expect((0, _index["default"])('1500000', '1,500,00,0', {
|
|
277
|
+
allowDecimals: true
|
|
278
|
+
})).toEqual(false);
|
|
279
|
+
expect((0, _index["default"])('1500000', '1500,000', {
|
|
280
|
+
allowDecimals: true
|
|
281
|
+
})).toEqual(false);
|
|
282
|
+
expect((0, _index["default"])('1500000', ',1500,000', {
|
|
283
|
+
allowDecimals: true
|
|
284
|
+
})).toEqual(false);
|
|
285
|
+
});
|
|
286
|
+
it('evaluates simple trigo expressions correctly', function () {
|
|
287
|
+
expect((0, _index["default"])('sin(x)', 'sin(x)')).toEqual(true);
|
|
288
|
+
expect((0, _index["default"])('tan(x)', 'tan(x)')).toEqual(true);
|
|
289
|
+
});
|
|
290
|
+
it('correctly creates math expressions 1', function () {
|
|
291
|
+
expect((0, _index["default"])('f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3', {
|
|
292
|
+
allowDecimals: true,
|
|
293
|
+
isLatex: true
|
|
294
|
+
})).toEqual(true);
|
|
295
|
+
});
|
|
296
|
+
it('correctly creates math expressions 2', function () {
|
|
297
|
+
expect((0, _index["default"])('72\\div12=6\\text{eggs}', '72\\div12=6\\text{eggs}', {
|
|
298
|
+
allowDecimals: true,
|
|
299
|
+
isLatex: true
|
|
300
|
+
})).toEqual(true);
|
|
301
|
+
});
|
|
302
|
+
describe('PD-3', function () {
|
|
303
|
+
it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n a | b\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", " | ", "\n ", "\n ", "\n "])), '\\left(x\\right)^{ \\frac{1}{\\left(y + 3\\right)}}', '\\sqrt[\\left(y + 3\\right)]{x}', '\\left(x\\right)^{\\frac{1}{3}}', '\\sqrt[3]{x}', '\\left(x\\right)^{\\frac{1}{n}}', '\\sqrt[n]{x}', '\\left(x\\right)^{\\frac{1}{2}}', '\\sqrt{x}', '\\left(x-1\\right)^{\\frac{1}{2}}+3', '\\sqrt{x-1}+3', 'f^{-1}\\left(x\\right)=\\left(x-1\\right)^{\\frac{1}{2}}+3', 'f^{-1}\\left(x\\right)=\\sqrt{x-1}+3')('$a == $b', function (_ref5) {
|
|
304
|
+
var a = _ref5.a,
|
|
305
|
+
b = _ref5.b;
|
|
306
|
+
var opts = {
|
|
307
|
+
allowDecimals: true,
|
|
308
|
+
isLatex: true
|
|
309
|
+
};
|
|
310
|
+
expect((0, _index["default"])(a, b, opts)).toBeTruthy();
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydExhdGV4VG9UZXh0IiwiaW5wdXQiLCJleHBlY3RlZCIsIml0IiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsImFzc2VydCIsImlzRXF1YWwiLCJvcHRzIiwibGFiZWwiLCJhcmdzIiwiQXJyYXkiLCJmcm9tIiwiYXJndW1lbnRzIiwicGFpcnMiLCJfIiwiY2h1bmsiLCJmb3JFYWNoIiwiYSIsImIiLCJ0b0JlIiwiYXNzZXJ0RXF1YWwiLCJhc3NlcnROb3RFcXVhbCIsImFzc2VydExhdGV4RXF1YWwiLCJpc0xhdGV4IiwiYXNzZXJ0TGF0ZXhOb3RFcXVhbCIsIl9hbWpzIiwib25seSIsImVxdWFsIiwiZm4iLCJhcyIsImJzIiwiYXNzZXJ0VGhyb3VnaE1hdGhKcyIsIl9hbHMiLCJhc3NlcnRMYXRleEZyb21TdHJpbmciLCJ1bmtub3duQ29tbWFuZEJlaGF2aW9yIiwidG9UaHJvdyIsImVhY2giLCJ2IiwiYWxsb3dEZWNpbWFscyIsInRvQmVUcnV0aHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDL0JBLEVBQUFBLFFBQVEsQ0FBQyxhQUFELEVBQWdCLFlBQU07QUFDNUIsUUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxLQUFELEVBQVFDLFFBQVIsRUFBcUI7QUFDN0NDLE1BQUFBLEVBQUUsV0FBSUYsS0FBSixpQkFBZ0JDLFFBQWhCLEdBQTRCLFlBQU07QUFDbEMsWUFBTUUsTUFBTSxHQUFHLHdCQUFZSCxLQUFaLENBQWY7QUFDQUksUUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkosUUFBdkI7QUFDRCxPQUhDLENBQUY7QUFJRCxLQUxEOztBQU1BRixJQUFBQSxpQkFBaUIsQ0FBQywwQkFBRCxF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QjtBQUF1QmYsUUFBQUEsT0FBTyxFQUFFO0FBQWhDLE9BQWI7QUFDQXBCLE1BQUFBLE1BQU0sQ0FBQyx1QkFBZWMsQ0FBZixFQUFrQkMsQ0FBbEIsRUFBcUJYLElBQXJCLENBQUQsQ0FBTixDQUFtQ2dDLFVBQW5DO0FBQ0QsS0FaRDtBQWFELEdBZE8sQ0FBUjtBQWVELENBelpPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJlVmFsdWVzRXF1YWwsIHsgYXZlLCBsYXRleFRvVGV4dCB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmRlc2NyaWJlKCdtYXRoLWV2YWx1YXRvcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2xhdGV4VG9UZXh0JywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydExhdGV4VG9UZXh0ID0gKGlucHV0LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCR7aW5wdXR9ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBsYXRleFRvVGV4dChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnXFxcXGZyYWN7IFxcXFxmcmFjezF9ezN9fXszfScsICcoMS8zKS8zJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEnLCAnMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEwIFxcXFxuZXEgMjAnLCAnMTAgIT0gMjAnKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnMTAgXFxcXG5lcScsICcxMCAhPSAwJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJ1xcXFxuZXEgMTAnLCAnMCAhPSAxMCcpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCc0MCUnLCAncGVyY2VudCg0MCknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnJScsICdwZXJjZW50KDApJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJzEyJScsICdwZXJjZW50KDEyKScpO1xuICAgIGFzc2VydExhdGV4VG9UZXh0KCcxMlxcXFwlJywgJ3BlcmNlbnQoMTIpJyk7XG4gICAgYXNzZXJ0TGF0ZXhUb1RleHQoJy0xMi41JScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgICBhc3NlcnRMYXRleFRvVGV4dCgnLTEyLjVcXFxcJScsICctIHBlcmNlbnQoMTIuNSknKTtcbiAgfSk7XG5cbiAgY29uc3QgYXNzZXJ0ID0gKGlzRXF1YWwsIG9wdHMpID0+IChsYWJlbCkgPT5cbiAgICBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XG4gICAgICBjb25zdCBwYWlycyA9IF8uY2h1bmsoYXJncywgMik7XG5cbiAgICAgIGRlc2NyaWJlKGxhYmVsLCAoKSA9PiB7XG4gICAgICAgIHBhaXJzLmZvckVhY2goKFthLCBiXSkgPT4ge1xuICAgICAgICAgIGl0KGAke2F9ID09PSAke2J9ID8gJHtpc0VxdWFsfWAsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiLCBvcHRzKSkudG9CZShpc0VxdWFsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gIGNvbnN0IGFzc2VydEVxdWFsID0gYXNzZXJ0KHRydWUpO1xuICBjb25zdCBhc3NlcnROb3RFcXVhbCA9IGFzc2VydChmYWxzZSk7XG5cbiAgY29uc3QgYXNzZXJ0TGF0ZXhFcXVhbCA9IGFzc2VydCh0cnVlLCB7IGlzTGF0ZXg6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2VydExhdGV4Tm90RXF1YWwgPSBhc3NlcnQoZmFsc2UsIHsgaXNMYXRleDogdHJ1ZSB9KTtcblxuICBjb25zdCBfYW1qcyA9IChvbmx5KSA9PiAoYSwgYiwgZXF1YWwpID0+IHtcbiAgICBjb25zdCBmbiA9IG9ubHkgPyBpdC5vbmx5IDogaXQ7XG4gICAgZm4oYCR7YX0gPT09ICR7Yn0gPT4gJHtlcXVhbH1gLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcyA9IGxhdGV4VG9UZXh0KGEpO1xuICAgICAgY29uc3QgYnMgPSBsYXRleFRvVGV4dChiKTtcbiAgICAgIGV4cGVjdChhdmUoYXMsIGJzKSkudG9FcXVhbChlcXVhbCk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0VGhyb3VnaE1hdGhKcyA9IF9hbWpzKGZhbHNlKTtcbiAgYXNzZXJ0VGhyb3VnaE1hdGhKcy5vbmx5ID0gX2FtanModHJ1ZSk7XG5cbiAgY29uc3QgX2FscyA9IChvbmx5KSA9PiAoaW5wdXQsIGV4cGVjdGVkKSA9PiB7XG4gICAgY29uc3QgZm4gPSBvbmx5ID8gaXQub25seSA6IGl0O1xuICAgIGZuKGAke2lucHV0fSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGV4cGVjdChsYXRleFRvVGV4dChpbnB1dCkpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydExhdGV4RnJvbVN0cmluZyA9IF9hbHMoZmFsc2UpO1xuICBhc3NlcnRMYXRleEZyb21TdHJpbmcub25seSA9IF9hbHModHJ1ZSk7XG5cbiAgZGVzY3JpYmUoJ2NoNjQ1NicsICgpID0+IHtcbiAgICBhc3NlcnRFcXVhbCgncGVyY2VudCcpKCctMTIuNSUnLCAnLTEyLjUlJyk7XG4gICAgYXNzZXJ0RXF1YWwoJ3BlcmNlbnQnKSgnLTEyLjVcXFxcJScsICctMTIuNSUnKTtcbiAgICBhc3NlcnROb3RFcXVhbCgncGVyY2VudCcpKCctMTEuNSUnLCAnLTEyLjUlJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjaDY0NTYgLSBsYXRleCcsICgpID0+IHtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNSUnKTtcbiAgICBhc3NlcnRMYXRleEVxdWFsKCdwZXJjZW50JykoJ1xcXFxmcmFjezF9ezJ9IC0xMi41JScsICdcXFxcZnJhY3syfXs0fSAtMTIuNVxcXFwlJyk7XG4gICAgYXNzZXJ0TGF0ZXhOb3RFcXVhbCgncGVyY2VudCcpKCdcXFxcZnJhY3s0fXsyfSAtMTIuNSUnLCAnXFxcXGZyYWN7Mn17NH0gLTEyLjVcXFxcJScpO1xuICAgIGFzc2VydExhdGV4Tm90RXF1YWwoJ3BlcmNlbnQnKSgnXFxcXGZyYWN7Mn17Mn0gLTEyLjUlJywgJ1xcXFxmcmFjezJ9ezR9IC0xMi41XFxcXCUnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BJRS0xODgtbWF0aC1leHByZXNzaW9ucycsICgpID0+IHtcbiAgICAvLyBpdCgncGFyc2VzIGV4cHJlc3Npb25zIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHtcblxuICAgIC8vIGdlb21ldHJ5XG5cbiAgICAvLyBNVUxUSVBMWSBXSVRIIFZBUklBQkxFIEJBU0VEXG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsIHgnLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxccGFyYWxsZWwgeCcsICdcXFxccGFyYWxsZWwgICB4JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXHBhcmFsbGVsIHgnLCAnXFxcXHBhcmFsbGVsICAgMCcsIGZhbHNlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7eCArIDR9JywgJ1xcXFxvdmVycmlnaHRhcnJvdyB7NCArIHh9JywgdHJ1ZSk7XG4gICAgYXNzZXJ0VGhyb3VnaE1hdGhKcygnXFxcXG92ZXJyaWdodGFycm93ezR4XjIgKyA0fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezR4XjIgKyA4IC0gNH0nLCB0cnVlKTtcbiAgICBhc3NlcnRUaHJvdWdoTWF0aEpzKCdcXFxcb3ZlcnJpZ2h0YXJyb3d7MjEqMip4fScsICdcXFxcb3ZlcnJpZ2h0YXJyb3cgezQyeH0nLCB0cnVlKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxucGFyYWxsZWwgeCcsICducGFyYWxsZWwgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG92ZXJyaWdodGFycm93e3h9JywgJ292ZXJyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7eH0nLCAnb3ZlcmxlZnRyaWdodGFycm93IHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwZXJwIHgnLCAncGVycCB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcYW5nbGUgeCcsICdhbmdsZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb3ZlcmFyYyB4JywgJ292ZXJhcmMgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG1lYXN1cmVkYW5nbGUgeCcsICdtZWFzdXJlZGFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0cmlhbmdsZSB4JywgJ3RyaWFuZ2xlIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxwYXJhbGxlbG9ncmFtIHgnLCAncGFyYWxsZWxvZ3JhbSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcb2RvdCB4JywgJ29kb3QgeCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGRlZ3JlZSB4JywgJ2RlZ3JlZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb25nIHgnLCAnY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmNvbmcgeCcsICduY29uZyB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbmFwcHJveCB4JywgJ25hcHByb3ggeCcpOyAvLyBVTlJFQ09HTklaRUQgQlkgTEVBUk5PU0lUWVxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXG5pbSB4JywgJ25pbSB4Jyk7IC8vIFVOUkVDT0dOSVpFRCBCWSBMRUFSTk9TSVRZXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2ltIHgnLCAnc2ltIHgnKTtcbiAgICBleHBlY3QoKCkgPT4gbGF0ZXhUb1RleHQoJ1xcXFxzaW0gNCcsIHsgdW5rbm93bkNvbW1hbmRCZWhhdmlvcjogJ2Vycm9yJyB9KSkudG9UaHJvdygpO1xuXG4gICAgLy8gY29tcGFyaXNvbnNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnMSBcXFxcbHQgMicsICcxIDwgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxndCAyJywgJzEgPiAyJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzEgXFxcXGxlIDInLCAnMSDiiaQgMicpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcxIFxcXFxnZSAyJywgJzEg4omlIDInKTtcblxuICAgIC8vIGV4cG9uZW50c1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcyXjInLCAnMl4yJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJzJeezN9JywgJzJeMycpO1xuXG4gICAgLy8gcm9vdHNcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXHNxcnR7Mn0nLCAnc3FydCgyKScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc3FydFt7M31dezN9JywgJzNeKDEvMyknKTtcblxuICAgIC8vIGZyYWN0aW9uc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcZnJhY3szfXszfScsICczLzMnKTtcblxuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGZyYWN7eH17M30nLCAneC8zJyk7XG5cbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hcXFxcZnJhY3s1fXszfScsICd4ICg1LzMpJyk7XG5cbiAgICAvLyBBQ1RVQUwgT1BFUkFUT1IgQkFTRURcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxvdmVybGluZXt4fScsICdvdmVybGluZSB4Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxccG0nLCAncG0nKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxhcHByb3ggeCcsICdhcHByb3ggeCcpO1xuXG4gICAgLy8gbG9nYXJpdGhtc1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKFwiNCdcIiwgXCI0J1wiKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2cgNCcsICdsb2coNCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxsb2coNHgpJywgJ2xvZyg0IHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbG4gNCcsICdsbig0KScpO1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCd8NHwnLCAnfDR8Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCcoNCknLCAnNCcpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnKDQgKyB4KSAqIDUnLCAnKDQgKyB4KSAqIDUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1s0XScsICc0Jyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcbXUnLCAnzrwnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxTaWdtYScsICfOoycpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygneF57MTV9JywgJ3heMTUnKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ3hfezE1fScsICd4XzE1Jyk7XG5cbiAgICAvLyBUcmlnb1xuXG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2luKHgpJywgJ3Npbih4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNvcyh4KScsICdjb3MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFx0YW4oeCknLCAndGFuKHgpJyk7XG4gICAgYXNzZXJ0TGF0ZXhGcm9tU3RyaW5nKCdcXFxcc2VjKHgpJywgJ3NlYyh4KScpO1xuICAgIGFzc2VydExhdGV4RnJvbVN0cmluZygnXFxcXGNzYyh4KScsICdjc2MoeCknKTtcbiAgICBhc3NlcnRMYXRleEZyb21TdHJpbmcoJ1xcXFxjb3QoeCknLCAnY290KHgpJyk7XG4gIH0pO1xuXG4gIC8vIGFzc2VydE5vdEVxdWFsKCdjdXN0b20gbGF0ZXgnKSgnMTUzMCcsIGBcXFxcb2RvdGApO1xuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKSgnMCcsICd4JywgJzN4JywgJzR4Jyk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoJ3gnLCAneCcsICcyeCcsICcyeCcpO1xuXG4gIGRlc2NyaWJlKCdiYWQgZnJhYyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7XG4gICAgaXQoJ3Rocm93cyBhbiBlcnJvcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBhcmVWYWx1ZXNFcXVhbCgnXFxcXGZyYWMxMicsICdcXFxcZnJhYzM0JywgeyBpc0xhdGV4OiB0cnVlIH0pKS50b1Rocm93KCdFeHBlY3RpbmcgeycpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJzcxMTknLCAoKSA9PiB7XG4gICAgaXQuZWFjaGBcbiAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXNFcXVhbFxuICAgICAgJHsnNC41J30gICAgICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgICAkeyczLjIgKyAxLjMnfSAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7Jyg0IC0gXFxcXGZyYWN7NH17NX0pICsgMS4zJ30gfCAke3RydWV9XG4gICAgICAkeydcXFxcZnJhY3s5fXsyfSd9ICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICAgJHsnNCBcXFxcZnJhY3sxfXsyfSd9ICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAgICR7J1xcXFxmcmFjezEwfXsyfSAtIDAuNSd9ICAgICAgfCAke3RydWV9XG4gICAgICAkeyc0LjU1J30gICAgICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgYCgnJGEgPT0gJGlzRXF1YWwnLCAoeyB2LCBpc0VxdWFsIH0pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFyZVZhbHVlc0VxdWFsKCc0IFxcXFxmcmFjezF9ezJ9JywgdiwgeyBpc0xhdGV4OiB0cnVlIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChpc0VxdWFsKTtcbiAgICB9KTtcblxuICAgIGl0KCc/JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4VG9UZXh0KCc0XFxcXGZyYWN7MX17Mn0nKSkudG9FcXVhbCgnNCArIDEvMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBhc3NlcnRFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICcxMDAnLFxuICAgICcxMDAnLFxuICAgICc1MCArIDUwJyxcbiAgICAnMjUgKiA0JyxcbiAgICAnMjAwIC8gMicsXG4gICAgJzIwICogNScsXG4gICAgJzIuNSAqIDQwJyxcbiAgICAnMTAgKiAxMCcsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDInKShcbiAgICAnMTAwJyxcbiAgICAnMCcsXG4gICAgJzAnLFxuICAgICc1MCAqIDInLFxuICAgICc0NCArIDU3JyxcbiAgICAnMTAwJyxcbiAgICAnNDQgKyA1NycsXG4gICAgJzUwICogMycsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICk7XG5cbiAgYXNzZXJ0Tm90RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDMnKShcbiAgICAnNTAgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzI1ICogMiArIDUxJyxcbiAgICAnMTAwJyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjknLFxuICAgICcxLzIgKyAuNScsXG4gICAgJzEuMScsXG4gICk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5IDQnKShcbiAgICAnNTAgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzEwMCAvIDIgKyA1MCcsXG4gICAgJzEwMCcsXG4gICAgJzIgKyAyJyxcbiAgICAnNCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMScsXG4gICAgJzEzLzInLFxuICAgICcxMy8yJyxcbiAgICAnMjYvNCcsXG4gICAgJzEzLzInLFxuICAgICc2ICsgMS8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNScsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGFzc2VydE5vdEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSA0JykoXG4gICAgJzUwICsgNTEnLFxuICAgICcxMDAnLFxuICAgICcyNSAqIDIgKyA1MScsXG4gICAgJzEwMCcsXG4gICAgJzEvMiArIC41JyxcbiAgICAnMS45JyxcbiAgICAnMS8yICsgLjUnLFxuICAgICcxLjEnLFxuICAgICcxNC8yJyxcbiAgICAnMTMvMicsXG4gICAgJzYuNicsXG4gICAgJzEzLzInLFxuICApO1xuXG4gIGl0LmVhY2hgXG4gICAgYSAgICAgICAgICAgICAgICAgICAgICAgIHwgYlxuICAgICR7JygoeF4yICsgeCkgLyB4KSAtIDEnfSB8ICR7J3gnfVxuICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbChhLCBiKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgYXNzZXJ0RXF1YWwoJ2V2YWx1YXRlcyBzaW1wbGUgdmFyaWFibGUgZXhwcmVzc2lvbnMgY29ycmVjdGx5JykoXG4gICAgJ3gnLFxuICAgICd4JyxcbiAgICAneCArIDAnLFxuICAgICd4JyxcbiAgICAnKHgtMikgKyAyJyxcbiAgICAneCcsXG4gICAgJygoeF4yICsgeCkgLyB4KSAtIDEnLFxuICAgICd4JyxcbiAgICAnMngvMicsXG4gICAgJ3gnLFxuICAgICcoeCArIDIpXjInLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMSknLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA4ICgoeCsxKSAvIDIpJyxcbiAgICAnKHggKyAyKV4yJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHknKShcbiAgICAneScsXG4gICAgJ3gnLFxuICAgICd4ICsgMScsXG4gICAgJ3gnLFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgc2ltcGxlIHZhcmlhYmxlIGV4cHJlc3Npb25zIGNvcnJlY3RseSAyJykoXG4gICAgJygyICsgeCleMicsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDR4ICsgNCcsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDQoeCsxKScsXG4gICAgJyh4ICsgMileMicsXG4gICAgJ3heMiArIDggKCh4KzEpIC8gMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgZXhwb25lbnRzJykoXG4gICAgJygyICsgeCleMngnLFxuICAgICcoeCArIDIpXjJ4JyxcbiAgICAneV4oMiB4KScsXG4gICAgJ3leKHgreCknLFxuICApO1xuXG4gIGFzc2VydEVxdWFsKCdldmFsdWF0ZXMgZnVuY3Rpb24gZXhwcmVzc2lvbnMgY29ycmVjdGx5IHdpdGggdmFyaWFibGUgcGFyYW1ldGVycycpKFxuICAgICdzcXJ0KDR4KScsXG4gICAgJ3NxcnQoMngrMngpJyxcbiAgICAnc3FydCh4XjIpJyxcbiAgICAnc3FydCgoKHgrMSleMikgLSAoKHgrMSleMikgKyB4XjIpJyxcbiAgKTtcblxuICBhc3NlcnROb3RFcXVhbCgnZXZhbHVhdGVzIHNpbXBsZSB2YXJpYWJsZSBleHByZXNzaW9ucyBjb3JyZWN0bHkgMicpKFxuICAgICd4XjMgKyA0eCArIDQnLFxuICAgICcoeCArIDIpXjInLFxuICAgICd4XjIgKyA0KHgrMiknLFxuICAgICcoeCArIDIpXjInLFxuICApO1xuXG4gIGl0KCdjb3JyZWN0bHkgY29uc3VtZXMgYWxsb3dEZWNpbWFscyBvcHRpb24nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzLDAnLCAnMTIzLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMsMCcsICcxMjMuMCcsIHsgYWxsb3dEZWNpbWFsczogZmFsc2UgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTIzJywgJzEyMy4wJywgeyBhbGxvd0RlY2ltYWxzOiBmYWxzZSB9KSkudG9FcXVhbChmYWxzZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxMjMnLCAnMTIzLDAnLCB7IGFsbG93RGVjaW1hbHM6IGZhbHNlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2NvcnJlY3RseSBjb25zdW1lcyBhbGxvd0RlY2ltYWxzIG9wdGlvbiBmb3IgY29tcGxleCBleGFtcGxlcyB0b28nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzE1MDAwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAnLCAnMSw1MDAsMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKHRydWUpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwLDAwMC4wMCcsIHsgYWxsb3dEZWNpbWFsczogdHJ1ZSB9KSkudG9FcXVhbCh0cnVlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMSw1MDAsMDAwLjAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxLDUwMCwwMDAuMCcsICcxLDUwMCwwMDAuMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCcxNTAwMDAwJywgJzEsNTAwMDAwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMDAuMDEnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcxLDUwMCwwMCwwJywgeyBhbGxvd0RlY2ltYWxzOiB0cnVlIH0pKS50b0VxdWFsKGZhbHNlKTtcbiAgICBleHBlY3QoYXJlVmFsdWVzRXF1YWwoJzE1MDAwMDAnLCAnMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICAgIGV4cGVjdChhcmVWYWx1ZXNFcXVhbCgnMTUwMDAwMCcsICcsMTUwMCwwMDAnLCB7IGFsbG93RGVjaW1hbHM6IHRydWUgfSkpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZXZhbHVhdGVzIHNpbXBsZSB0cmlnbyBleHByZXNzaW9ucyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCdzaW4oeCknLCAnc2luKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKCd0YW4oeCknLCAndGFuKHgpJykpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJ2Zeey0xfVxcXFxsZWZ0KHhcXFxccmlnaHQpPVxcXFxzcXJ0e3gtMX0rMycsICdmXnstMX1cXFxcbGVmdCh4XFxcXHJpZ2h0KT1cXFxcc3FydHt4LTF9KzMnLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdjb3JyZWN0bHkgY3JlYXRlcyBtYXRoIGV4cHJlc3Npb25zIDInLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgYXJlVmFsdWVzRXF1YWwoJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsICc3MlxcXFxkaXYxMj02XFxcXHRleHR7ZWdnc30nLCB7XG4gICAgICAgIGFsbG93RGVjaW1hbHM6IHRydWUsXG4gICAgICAgIGlzTGF0ZXg6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQRC0zJywgKCkgPT4ge1xuICAgIGl0LmVhY2hgXG4gICAgICBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiXG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57IFxcXFxmcmFjezF9e1xcXFxsZWZ0KHkgKyAzXFxcXHJpZ2h0KX19J30gICAgICAgIHwgJHsnXFxcXHNxcnRbXFxcXGxlZnQoeSArIDNcXFxccmlnaHQpXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17M319J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFszXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17bn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydFtuXXt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4XFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19J30gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4fSd9XG4gICAgICAkeydcXFxcbGVmdCh4LTFcXFxccmlnaHQpXntcXFxcZnJhY3sxfXsyfX0rMyd9ICAgICAgICAgICAgICAgICAgICAgICAgfCAkeydcXFxcc3FydHt4LTF9KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXGxlZnQoeC0xXFxcXHJpZ2h0KV57XFxcXGZyYWN7MX17Mn19KzMnfVxuICAgICAgJHsnZl57LTF9XFxcXGxlZnQoeFxcXFxyaWdodCk9XFxcXHNxcnR7eC0xfSszJ31cbiAgICBgKCckYSA9PSAkYicsICh7IGEsIGIgfSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IHsgYWxsb3dEZWNpbWFsczogdHJ1ZSwgaXNMYXRleDogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KGFyZVZhbHVlc0VxdWFsKGEsIGIsIG9wdHMpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.2.0-beta.
|
|
6
|
+
"version": "2.2.0-beta.5",
|
|
7
7
|
"description": "Math evaluator tool for comparing expressions for equality",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"math",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"mathjs": "^7.0.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@pie-lib/test-utils": "
|
|
26
|
+
"@pie-lib/test-utils": "latest"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {},
|
|
29
29
|
"gitHead": "e2aa3ddac60f49bcb8c2562370f496323642f453"
|