@pie-lib/math-evaluator 2.3.0-beta.0 → 2.3.0
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.json +1 -457
- package/CHANGELOG.md +135 -11
- package/package.json +4 -3
- package/lib/__tests__/index.test.js +0 -314
- package/lib/index.js +0 -189
package/CHANGELOG.json
CHANGED
|
@@ -1,457 +1 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"type": "fix",
|
|
4
|
-
"scope": null,
|
|
5
|
-
"subject": "rm child prepack in favour of root prepack",
|
|
6
|
-
"merge": null,
|
|
7
|
-
"header": "fix: rm child prepack in favour of root prepack",
|
|
8
|
-
"body": null,
|
|
9
|
-
"footer": null,
|
|
10
|
-
"notes": [],
|
|
11
|
-
"hash": "381d8d6485269b641d8d4655148966d2e70803be",
|
|
12
|
-
"gitTags": "",
|
|
13
|
-
"committerDate": "2019-03-15 09:51:11 +0000",
|
|
14
|
-
"isTagged": true,
|
|
15
|
-
"tag": "@pie-lib/math-evaluator@0.3.9"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"type": "chore",
|
|
19
|
-
"scope": null,
|
|
20
|
-
"subject": "get packages to call changelog function on prepack",
|
|
21
|
-
"merge": null,
|
|
22
|
-
"header": "chore: get packages to call changelog function on prepack",
|
|
23
|
-
"body": null,
|
|
24
|
-
"footer": null,
|
|
25
|
-
"notes": [],
|
|
26
|
-
"hash": "8828f01f2d16d29404ba837c1de40d09e7230ec5",
|
|
27
|
-
"gitTags": "",
|
|
28
|
-
"committerDate": "2019-03-14 12:40:05 +0000",
|
|
29
|
-
"isTagged": true,
|
|
30
|
-
"tag": "@pie-lib/math-evaluator@0.3.5"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"type": "chore",
|
|
34
|
-
"scope": null,
|
|
35
|
-
"subject": "call changelog on prepack",
|
|
36
|
-
"merge": null,
|
|
37
|
-
"header": "chore: call changelog on prepack",
|
|
38
|
-
"body": null,
|
|
39
|
-
"footer": null,
|
|
40
|
-
"notes": [],
|
|
41
|
-
"hash": "b672c012de096c55b765a765f758da3fc5df2f90",
|
|
42
|
-
"gitTags": "",
|
|
43
|
-
"committerDate": "2019-03-13 23:00:44 +0000",
|
|
44
|
-
"isTagged": true,
|
|
45
|
-
"tag": "@pie-lib/math-evaluator@0.3.4"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"type": "chore",
|
|
49
|
-
"scope": null,
|
|
50
|
-
"subject": "generate changelog.json instead of markdown",
|
|
51
|
-
"merge": null,
|
|
52
|
-
"header": "chore: generate changelog.json instead of markdown",
|
|
53
|
-
"body": null,
|
|
54
|
-
"footer": null,
|
|
55
|
-
"notes": [],
|
|
56
|
-
"hash": "eaa5019a11f70c53425d55856bd3b940237f8c7d",
|
|
57
|
-
"gitTags": "",
|
|
58
|
-
"committerDate": "2019-03-13 17:24:09 +0000",
|
|
59
|
-
"isTagged": true,
|
|
60
|
-
"tag": "@pie-lib/math-evaluator@0.3.2"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"type": "feat",
|
|
64
|
-
"scope": null,
|
|
65
|
-
"subject": "libs version bump",
|
|
66
|
-
"merge": null,
|
|
67
|
-
"header": "feat: libs version bump",
|
|
68
|
-
"body": null,
|
|
69
|
-
"footer": null,
|
|
70
|
-
"notes": [],
|
|
71
|
-
"hash": "4edc4bebdd7694efe5b18230c0dd5215591d4a28",
|
|
72
|
-
"gitTags": "",
|
|
73
|
-
"committerDate": "2019-01-30 22:14:28 +0000",
|
|
74
|
-
"isTagged": true,
|
|
75
|
-
"tag": "@pie-lib/math-evaluator@0.3.0"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"type": "fix",
|
|
79
|
-
"scope": null,
|
|
80
|
-
"subject": "math-expressions import",
|
|
81
|
-
"merge": null,
|
|
82
|
-
"header": "fix: math-expressions import",
|
|
83
|
-
"body": null,
|
|
84
|
-
"footer": null,
|
|
85
|
-
"notes": [],
|
|
86
|
-
"hash": "10d25b98d80d0295e5386320d885107a10f9b7d1",
|
|
87
|
-
"gitTags": "",
|
|
88
|
-
"committerDate": "2019-01-30 22:14:28 +0000",
|
|
89
|
-
"isTagged": true,
|
|
90
|
-
"tag": "@pie-lib/math-evaluator@0.3.0"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"type": "fix",
|
|
94
|
-
"scope": null,
|
|
95
|
-
"subject": "use plain module from math-expressions",
|
|
96
|
-
"merge": null,
|
|
97
|
-
"header": "fix: use plain module from math-expressions",
|
|
98
|
-
"body": null,
|
|
99
|
-
"footer": null,
|
|
100
|
-
"notes": [],
|
|
101
|
-
"hash": "a8f0647adb9cf9419c12f742914a34b570f3f661",
|
|
102
|
-
"gitTags": "",
|
|
103
|
-
"committerDate": "2019-01-16 21:44:10 +0000",
|
|
104
|
-
"isTagged": true,
|
|
105
|
-
"tag": "@pie-lib/math-evaluator@0.3.0"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"type": "chore",
|
|
109
|
-
"scope": "math-evaluator",
|
|
110
|
-
"subject": "unit test adjustments and fixes",
|
|
111
|
-
"merge": null,
|
|
112
|
-
"header": "chore(math-evaluator): unit test adjustments and fixes",
|
|
113
|
-
"body": null,
|
|
114
|
-
"footer": null,
|
|
115
|
-
"notes": [],
|
|
116
|
-
"hash": "38fc44c3f06549efe72b5d1608aad0ca9f0b98fe",
|
|
117
|
-
"gitTags": "",
|
|
118
|
-
"committerDate": "2018-11-09 13:48:04 +0200",
|
|
119
|
-
"isTagged": true,
|
|
120
|
-
"tag": "@pie-lib/math-evaluator@0.2.0"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"type": "feat",
|
|
124
|
-
"scope": "math-evaluator",
|
|
125
|
-
"subject": "finalized for first release",
|
|
126
|
-
"merge": null,
|
|
127
|
-
"header": "feat(math-evaluator): finalized for first release",
|
|
128
|
-
"body": null,
|
|
129
|
-
"footer": null,
|
|
130
|
-
"notes": [],
|
|
131
|
-
"hash": "e696925b36d047b689174fabf25950c17e53abdf",
|
|
132
|
-
"gitTags": "",
|
|
133
|
-
"committerDate": "2018-11-08 08:57:08 +0200",
|
|
134
|
-
"isTagged": true,
|
|
135
|
-
"tag": "@pie-lib/math-evaluator@0.2.0"
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"type": "feat",
|
|
139
|
-
"scope": "math-evaluator",
|
|
140
|
-
"subject": "finalized feature for first release",
|
|
141
|
-
"merge": null,
|
|
142
|
-
"header": "feat(math-evaluator): finalized feature for first release",
|
|
143
|
-
"body": null,
|
|
144
|
-
"footer": null,
|
|
145
|
-
"notes": [],
|
|
146
|
-
"hash": "f02d7b36a7c3e8ae1d9e5950cd8a173250ec2905",
|
|
147
|
-
"gitTags": "",
|
|
148
|
-
"committerDate": "2018-11-07 12:17:28 +0200",
|
|
149
|
-
"isTagged": true,
|
|
150
|
-
"tag": "@pie-lib/math-evaluator@0.2.0"
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"type": "fix",
|
|
154
|
-
"scope": "math-evaluator",
|
|
155
|
-
"subject": "small unit test adjustments",
|
|
156
|
-
"merge": null,
|
|
157
|
-
"header": "fix(math-evaluator): small unit test adjustments",
|
|
158
|
-
"body": null,
|
|
159
|
-
"footer": null,
|
|
160
|
-
"notes": [],
|
|
161
|
-
"hash": "92a2eab125b023374c6d69dcf191a49b7f78b122",
|
|
162
|
-
"gitTags": "",
|
|
163
|
-
"committerDate": "2018-10-23 14:00:09 +0300",
|
|
164
|
-
"isTagged": true,
|
|
165
|
-
"tag": "@pie-lib/math-evaluator@0.1.0"
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
"type": "feat",
|
|
169
|
-
"scope": "math-evaluator",
|
|
170
|
-
"subject": "feature added",
|
|
171
|
-
"merge": null,
|
|
172
|
-
"header": "feat(math-evaluator): feature added",
|
|
173
|
-
"body": null,
|
|
174
|
-
"footer": null,
|
|
175
|
-
"notes": [],
|
|
176
|
-
"hash": "0703e9e94b4126c943d6af5e2b1cc45ec2454115",
|
|
177
|
-
"gitTags": "",
|
|
178
|
-
"committerDate": "2018-10-22 09:48:19 +0300",
|
|
179
|
-
"isTagged": true,
|
|
180
|
-
"tag": "@pie-lib/math-evaluator@0.1.0"
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
"type": "chore",
|
|
184
|
-
"scope": null,
|
|
185
|
-
"subject": "prettify it",
|
|
186
|
-
"merge": null,
|
|
187
|
-
"header": "chore: prettify it",
|
|
188
|
-
"body": null,
|
|
189
|
-
"footer": null,
|
|
190
|
-
"notes": [],
|
|
191
|
-
"hash": "32b365bcd81976fbe8ecb6c7c0574d6a9226a4aa",
|
|
192
|
-
"gitTags": "",
|
|
193
|
-
"committerDate": "2019-04-10 10:27:22 +0300",
|
|
194
|
-
"isTagged": true,
|
|
195
|
-
"tag": "@pie-lib/math-evaluator@0.4.0"
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
"type": "feat",
|
|
199
|
-
"scope": "math-evaluator",
|
|
200
|
-
"subject": "introduce partial rationalization, polynomial equation fixes and allowDecimals option",
|
|
201
|
-
"merge": null,
|
|
202
|
-
"header": "feat(math-evaluator): introduce partial rationalization, polynomial equation fixes and allowDecimals option",
|
|
203
|
-
"body": null,
|
|
204
|
-
"footer": null,
|
|
205
|
-
"notes": [],
|
|
206
|
-
"hash": "78fe0a11eaaf23db7134e08d2b2ed2a2cd1b427b",
|
|
207
|
-
"gitTags": "",
|
|
208
|
-
"committerDate": "2019-04-10 10:22:39 +0300",
|
|
209
|
-
"isTagged": true,
|
|
210
|
-
"tag": "@pie-lib/math-evaluator@0.4.0"
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
"type": "chore",
|
|
214
|
-
"scope": null,
|
|
215
|
-
"subject": "update unit tests for math-evaluator",
|
|
216
|
-
"merge": null,
|
|
217
|
-
"header": "chore: update unit tests for math-evaluator",
|
|
218
|
-
"body": null,
|
|
219
|
-
"footer": null,
|
|
220
|
-
"notes": [],
|
|
221
|
-
"hash": "b478b0fb87da0d321fe1af40a5cdef1b7bb0d1d3",
|
|
222
|
-
"gitTags": "",
|
|
223
|
-
"committerDate": "2019-05-13 15:02:24 +0300",
|
|
224
|
-
"isTagged": true,
|
|
225
|
-
"tag": "@pie-lib/math-evaluator@0.5.0"
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
"type": "feat",
|
|
229
|
-
"scope": "math-evaluator",
|
|
230
|
-
"subject": "re-define what allowDecimals means - thousand separator support with decimal dot support",
|
|
231
|
-
"merge": null,
|
|
232
|
-
"header": "feat(math-evaluator): re-define what allowDecimals means - thousand separator support with decimal dot support",
|
|
233
|
-
"body": null,
|
|
234
|
-
"footer": null,
|
|
235
|
-
"notes": [],
|
|
236
|
-
"hash": "f79ff3b9b239716076fc9b1fd79868ab74680894",
|
|
237
|
-
"gitTags": "",
|
|
238
|
-
"committerDate": "2019-05-13 14:59:36 +0300",
|
|
239
|
-
"isTagged": true,
|
|
240
|
-
"tag": "@pie-lib/math-evaluator@0.5.0"
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
"type": "chore",
|
|
244
|
-
"scope": "merge",
|
|
245
|
-
"subject": "merged with develop",
|
|
246
|
-
"merge": null,
|
|
247
|
-
"header": "chore(merge): merged with develop",
|
|
248
|
-
"body": null,
|
|
249
|
-
"footer": null,
|
|
250
|
-
"notes": [],
|
|
251
|
-
"hash": "e68506cf63b2a17973821bb0cfef40828faccd1f",
|
|
252
|
-
"gitTags": "",
|
|
253
|
-
"committerDate": "2019-05-21 06:26:54 +0300",
|
|
254
|
-
"isTagged": true,
|
|
255
|
-
"tag": "@pie-lib/math-evaluator@0.5.1"
|
|
256
|
-
},
|
|
257
|
-
{
|
|
258
|
-
"type": "fix",
|
|
259
|
-
"scope": "math-evaluator",
|
|
260
|
-
"subject": "fix equals sign treatment in expressions",
|
|
261
|
-
"merge": null,
|
|
262
|
-
"header": "fix(math-evaluator): fix equals sign treatment in expressions",
|
|
263
|
-
"body": null,
|
|
264
|
-
"footer": null,
|
|
265
|
-
"notes": [],
|
|
266
|
-
"hash": "f81e9245ad3fefd0895c510cd3e2b2f3d4d11843",
|
|
267
|
-
"gitTags": " (origin/fix/math-evaluator-expression-fixes)",
|
|
268
|
-
"committerDate": "2019-06-25 15:43:58 +0300",
|
|
269
|
-
"isTagged": true,
|
|
270
|
-
"tag": "@pie-lib/math-evaluator@0.5.4"
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
"type": "chore",
|
|
274
|
-
"scope": null,
|
|
275
|
-
"subject": "added two failing tests for math-evaluator",
|
|
276
|
-
"merge": null,
|
|
277
|
-
"header": "chore: added two failing tests for math-evaluator",
|
|
278
|
-
"body": null,
|
|
279
|
-
"footer": null,
|
|
280
|
-
"notes": [],
|
|
281
|
-
"hash": "326a94b419dc16c3a23b80d155e0b0a3e32a7b28",
|
|
282
|
-
"gitTags": "",
|
|
283
|
-
"committerDate": "2019-06-24 18:26:25 +0300",
|
|
284
|
-
"isTagged": true,
|
|
285
|
-
"tag": "@pie-lib/math-evaluator@0.5.4"
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
"type": "feat",
|
|
289
|
-
"scope": "math-evaluator",
|
|
290
|
-
"subject": "change math-expressions to pie fork",
|
|
291
|
-
"merge": null,
|
|
292
|
-
"header": "feat(math-evaluator): change math-expressions to pie fork",
|
|
293
|
-
"body": null,
|
|
294
|
-
"footer": null,
|
|
295
|
-
"notes": [],
|
|
296
|
-
"hash": "06e8b617fd8f3d54057850d3964616165bdf7ad7",
|
|
297
|
-
"gitTags": "",
|
|
298
|
-
"committerDate": "2019-11-22 16:17:54 +0200",
|
|
299
|
-
"isTagged": true,
|
|
300
|
-
"tag": "@pie-lib/math-evaluator@0.6.0"
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
"type": "fix",
|
|
304
|
-
"scope": "math-evaluator",
|
|
305
|
-
"subject": "finalize fix for PIE-188, custom and unrecognized latex commands",
|
|
306
|
-
"merge": null,
|
|
307
|
-
"header": "fix(math-evaluator): finalize fix for PIE-188, custom and unrecognized latex commands",
|
|
308
|
-
"body": null,
|
|
309
|
-
"footer": null,
|
|
310
|
-
"notes": [],
|
|
311
|
-
"hash": "b37184d6a1a7676fe25372b2388dd60fad94638d",
|
|
312
|
-
"gitTags": "",
|
|
313
|
-
"committerDate": "2019-11-22 12:32:30 +0200",
|
|
314
|
-
"isTagged": true,
|
|
315
|
-
"tag": "@pie-lib/math-evaluator@0.6.0"
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
"type": "fix",
|
|
319
|
-
"scope": "math-evaluator",
|
|
320
|
-
"subject": "finalize fix for PIE-188",
|
|
321
|
-
"merge": null,
|
|
322
|
-
"header": "fix(math-evaluator): finalize fix for PIE-188",
|
|
323
|
-
"body": null,
|
|
324
|
-
"footer": null,
|
|
325
|
-
"notes": [],
|
|
326
|
-
"hash": "d7bd4a1d0576d1c6e2fbf6b46ad5c6a12ad70133",
|
|
327
|
-
"gitTags": "",
|
|
328
|
-
"committerDate": "2019-11-22 12:14:12 +0200",
|
|
329
|
-
"isTagged": true,
|
|
330
|
-
"tag": "@pie-lib/math-evaluator@0.6.0"
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
"type": "fix",
|
|
334
|
-
"scope": "math-evaluator",
|
|
335
|
-
"subject": "PIE-188 related fixes and tests",
|
|
336
|
-
"merge": null,
|
|
337
|
-
"header": "fix(math-evaluator): PIE-188 related fixes and tests",
|
|
338
|
-
"body": null,
|
|
339
|
-
"footer": null,
|
|
340
|
-
"notes": [],
|
|
341
|
-
"hash": "76424c677a8d0147e7654ca27098d682da9a42bb",
|
|
342
|
-
"gitTags": "",
|
|
343
|
-
"committerDate": "2019-11-19 13:16:36 +0200",
|
|
344
|
-
"isTagged": true,
|
|
345
|
-
"tag": "@pie-lib/math-evaluator@0.6.0"
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
"type": "fix",
|
|
349
|
-
"scope": null,
|
|
350
|
-
"subject": "bump @pie-framework/math-expressions@^2.1.0 ch6456",
|
|
351
|
-
"merge": null,
|
|
352
|
-
"header": "fix: bump @pie-framework/math-expressions@^2.1.0 ch6456",
|
|
353
|
-
"body": null,
|
|
354
|
-
"footer": null,
|
|
355
|
-
"notes": [],
|
|
356
|
-
"hash": "d57971f1f1dd2943ced3ffa3dec0a324ba04e487",
|
|
357
|
-
"gitTags": " (origin/fix/ch6456-percent)",
|
|
358
|
-
"committerDate": "2019-12-20 11:14:25 +0000",
|
|
359
|
-
"isTagged": true,
|
|
360
|
-
"tag": "@pie-lib/math-evaluator@0.6.5"
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
"type": "fix",
|
|
364
|
-
"scope": null,
|
|
365
|
-
"subject": "bump @pie-framework/math-expressions@2.2.0 [ch7119]",
|
|
366
|
-
"merge": null,
|
|
367
|
-
"header": "fix: bump @pie-framework/math-expressions@2.2.0 [ch7119]",
|
|
368
|
-
"body": null,
|
|
369
|
-
"footer": null,
|
|
370
|
-
"notes": [],
|
|
371
|
-
"hash": "b7fa81033d2980228e5f07f44904c63e0aea84c1",
|
|
372
|
-
"gitTags": "",
|
|
373
|
-
"committerDate": "2020-01-27 11:07:32 +0000",
|
|
374
|
-
"isTagged": true,
|
|
375
|
-
"tag": "@pie-lib/math-evaluator@0.6.6"
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
"type": "fix",
|
|
379
|
-
"scope": null,
|
|
380
|
-
"subject": "throw error if number missing factor",
|
|
381
|
-
"merge": null,
|
|
382
|
-
"header": "fix: throw error if number missing factor",
|
|
383
|
-
"body": null,
|
|
384
|
-
"footer": null,
|
|
385
|
-
"notes": [],
|
|
386
|
-
"hash": "3b23b28e851d07c49c414b05d747141d415e960e",
|
|
387
|
-
"gitTags": " (origin/develop, origin/HEAD, develop)",
|
|
388
|
-
"committerDate": "2020-01-28 11:27:09 +0000",
|
|
389
|
-
"isTagged": true,
|
|
390
|
-
"tag": "@pie-lib/math-evaluator@0.6.7"
|
|
391
|
-
},
|
|
392
|
-
{
|
|
393
|
-
"type": "fix",
|
|
394
|
-
"scope": null,
|
|
395
|
-
"subject": "add module prop to package.json",
|
|
396
|
-
"merge": null,
|
|
397
|
-
"header": "fix: add module prop to package.json",
|
|
398
|
-
"body": null,
|
|
399
|
-
"footer": null,
|
|
400
|
-
"notes": [],
|
|
401
|
-
"hash": "f0d7718fe0c7ec5a3f0bbab23e8a981cac112488",
|
|
402
|
-
"gitTags": "",
|
|
403
|
-
"committerDate": "2020-03-30 13:02:17 +0100",
|
|
404
|
-
"isTagged": true,
|
|
405
|
-
"tag": "@pie-lib/math-evaluator@0.6.9"
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
"type": "fix",
|
|
409
|
-
"scope": "math-evaluator",
|
|
410
|
-
"subject": "support `x^(1/y) == sqrt(x,y)` PD-3",
|
|
411
|
-
"merge": null,
|
|
412
|
-
"header": "fix(math-evaluator): support `x^(1/y) == sqrt(x,y)` PD-3",
|
|
413
|
-
"body": "* add a mathjs simplify rule to extend the default ruleset",
|
|
414
|
-
"footer": null,
|
|
415
|
-
"notes": [],
|
|
416
|
-
"hash": "fa148ff4db1703f572beefa2d6c929fdc445261a",
|
|
417
|
-
"gitTags": "",
|
|
418
|
-
"committerDate": "2020-04-15 13:13:15 +0100",
|
|
419
|
-
"isTagged": true,
|
|
420
|
-
"tag": "@pie-lib/math-evaluator@0.6.21"
|
|
421
|
-
},
|
|
422
|
-
{
|
|
423
|
-
"type": "feat",
|
|
424
|
-
"scope": null,
|
|
425
|
-
"subject": "major version bump",
|
|
426
|
-
"merge": null,
|
|
427
|
-
"header": "feat: major version bump",
|
|
428
|
-
"body": null,
|
|
429
|
-
"footer": "BREAKING CHANGE: The last release should have been breaking - this\nshould trigger a major bump now",
|
|
430
|
-
"notes": [
|
|
431
|
-
{
|
|
432
|
-
"title": "BREAKING CHANGE",
|
|
433
|
-
"text": "The last release should have been breaking - this\nshould trigger a major bump now"
|
|
434
|
-
}
|
|
435
|
-
],
|
|
436
|
-
"hash": "78da9d590c5fe67dab54f3b2668995762634ba79",
|
|
437
|
-
"gitTags": " (develop)",
|
|
438
|
-
"committerDate": "2020-04-27 12:30:42 +0100",
|
|
439
|
-
"isTagged": true,
|
|
440
|
-
"tag": "@pie-lib/math-evaluator@2.0.0"
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
"type": "feat",
|
|
444
|
-
"scope": null,
|
|
445
|
-
"subject": "bump mathjs@^7.0.1",
|
|
446
|
-
"merge": null,
|
|
447
|
-
"header": "feat: bump mathjs@^7.0.1",
|
|
448
|
-
"body": null,
|
|
449
|
-
"footer": null,
|
|
450
|
-
"notes": [],
|
|
451
|
-
"hash": "865de4b8be0829cbbd083dfee9afeea0b1559eb2",
|
|
452
|
-
"gitTags": " (develop)",
|
|
453
|
-
"committerDate": "2020-06-05 12:56:06 +0100",
|
|
454
|
-
"isTagged": true,
|
|
455
|
-
"tag": "@pie-lib/math-evaluator@2.1.0"
|
|
456
|
-
}
|
|
457
|
-
]
|
|
1
|
+
[]
|
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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.3.0
|
|
6
|
+
# [2.3.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0) (2025-07-31)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
# [2.
|
|
14
|
+
# [2.4.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.4.0) (2025-07-31)
|
|
15
15
|
|
|
16
16
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
17
17
|
|
|
@@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
# [2.3.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0) (2025-07-31)
|
|
23
23
|
|
|
24
24
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
25
25
|
|
|
@@ -27,7 +27,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
# [2.2.0-beta.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.8) (2025-07-25)
|
|
31
31
|
|
|
32
32
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
33
33
|
|
|
@@ -35,7 +35,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
# [2.2.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.7) (2025-07-25)
|
|
39
39
|
|
|
40
40
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
41
41
|
|
|
@@ -43,7 +43,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
# [2.2.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.7) (2025-07-25)
|
|
47
47
|
|
|
48
48
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
49
49
|
|
|
@@ -51,7 +51,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
# [2.2.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.6) (2025-07-25)
|
|
55
55
|
|
|
56
56
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
57
57
|
|
|
@@ -59,7 +59,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
# [2.2.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.6) (2025-07-25)
|
|
63
63
|
|
|
64
64
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
# [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)
|
|
71
71
|
|
|
72
72
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
# [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)
|
|
79
79
|
|
|
80
80
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
81
81
|
|
|
@@ -83,7 +83,31 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
83
83
|
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
# [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)
|
|
87
|
+
|
|
88
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# [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)
|
|
95
|
+
|
|
96
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
# [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)
|
|
103
|
+
|
|
104
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# [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)
|
|
87
111
|
|
|
88
112
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
89
113
|
|
|
@@ -91,6 +115,106 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|
|
91
115
|
|
|
92
116
|
|
|
93
117
|
|
|
118
|
+
# [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)
|
|
119
|
+
|
|
120
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# [2.2.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.2) (2025-07-20)
|
|
127
|
+
|
|
128
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
|
|
135
|
+
|
|
136
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
# [2.2.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.2) (2025-07-20)
|
|
143
|
+
|
|
144
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
# [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
|
|
151
|
+
|
|
152
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
# [2.2.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.1) (2025-07-20)
|
|
159
|
+
|
|
160
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# [2.2.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.0) (2025-07-20)
|
|
167
|
+
|
|
168
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# [2.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.3.0-beta.0) (2025-07-15)
|
|
175
|
+
|
|
176
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
177
|
+
|
|
178
|
+
# [2.2.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.23...@pie-lib/math-evaluator@2.2.0-beta.0) (2025-07-15)
|
|
179
|
+
|
|
180
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
181
|
+
|
|
182
|
+
## [2.1.23](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.22...@pie-lib/math-evaluator@2.1.23) (2023-06-24)
|
|
183
|
+
|
|
184
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
185
|
+
|
|
186
|
+
## [2.1.22](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.20...@pie-lib/math-evaluator@2.1.22) (2023-01-31)
|
|
187
|
+
|
|
188
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
189
|
+
|
|
190
|
+
## [2.1.20](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.19...@pie-lib/math-evaluator@2.1.20) (2023-01-31)
|
|
191
|
+
|
|
192
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
193
|
+
|
|
194
|
+
## [2.1.19](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.18...@pie-lib/math-evaluator@2.1.19) (2023-01-31)
|
|
195
|
+
|
|
196
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
197
|
+
|
|
198
|
+
## [2.1.18](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.17...@pie-lib/math-evaluator@2.1.18) (2023-01-31)
|
|
199
|
+
|
|
200
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
201
|
+
|
|
202
|
+
## [2.1.17](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.11...@pie-lib/math-evaluator@2.1.17) (2023-01-31)
|
|
203
|
+
|
|
204
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
205
|
+
|
|
206
|
+
## [2.1.11](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.9...@pie-lib/math-evaluator@2.1.11) (2023-01-31)
|
|
207
|
+
|
|
208
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
209
|
+
|
|
210
|
+
## [2.1.9](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.7...@pie-lib/math-evaluator@2.1.9) (2023-01-31)
|
|
211
|
+
|
|
212
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
213
|
+
|
|
214
|
+
## [2.1.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.6...@pie-lib/math-evaluator@2.1.7) (2022-11-23)
|
|
215
|
+
|
|
216
|
+
**Note:** Version bump only for package @pie-lib/math-evaluator
|
|
217
|
+
|
|
94
218
|
## [2.1.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/math-evaluator@2.1.4...@pie-lib/math-evaluator@2.1.6) (2021-06-25)
|
|
95
219
|
|
|
96
220
|
**Note:** Version bump only for package @pie-lib/math-evaluator
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.3.0
|
|
6
|
+
"version": "2.3.0",
|
|
7
7
|
"description": "Math evaluator tool for comparing expressions for equality",
|
|
8
8
|
"keywords": [
|
|
9
9
|
"math",
|
|
@@ -19,11 +19,12 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@pie-framework/math-expressions": "^3.0.0",
|
|
21
21
|
"jsesc": "^2.5.2",
|
|
22
|
+
"lodash": "^4.17.11",
|
|
22
23
|
"mathjs": "^7.0.1"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
|
-
"@pie-lib/test-utils": "^0.
|
|
26
|
+
"@pie-lib/test-utils": "^0.5.0"
|
|
26
27
|
},
|
|
27
28
|
"scripts": {},
|
|
28
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "889a13bfea2c768b8a3a6eabfc6fe7b7725aa832"
|
|
29
30
|
}
|
|
@@ -1,314 +0,0 @@
|
|
|
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/lib/index.js
DELETED
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports.textToMathText = exports.latexToText = exports["default"] = exports.ave = void 0;
|
|
11
|
-
|
|
12
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
|
|
14
|
-
var mathjs = _interopRequireWildcard(require("mathjs"));
|
|
15
|
-
|
|
16
|
-
var _mathExpressions = _interopRequireDefault(require("@pie-framework/math-expressions"));
|
|
17
|
-
|
|
18
|
-
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); }
|
|
19
|
-
|
|
20
|
-
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; }
|
|
21
|
-
|
|
22
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
23
|
-
|
|
24
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
25
|
-
|
|
26
|
-
var decimalCommaRegex = /,/g;
|
|
27
|
-
var decimalRegex = /\.|,/g;
|
|
28
|
-
var decimalWithThousandSeparatorNumberRegex = /^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/;
|
|
29
|
-
|
|
30
|
-
var rationalizeAllPossibleSubNodes = function rationalizeAllPossibleSubNodes(expression) {
|
|
31
|
-
return rationalize(mathjs.parse(expression));
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
var rationalize = function rationalize(tree) {
|
|
35
|
-
var transformedTree = tree.transform(function (node) {
|
|
36
|
-
try {
|
|
37
|
-
var rationalizedNode = mathjs.rationalize(node);
|
|
38
|
-
return rationalizedNode;
|
|
39
|
-
} catch (_unused) {
|
|
40
|
-
return node;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
return transformedTree;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
function prepareExpression(string, isLatex) {
|
|
47
|
-
var returnValue = string ? string.trim() : '';
|
|
48
|
-
returnValue = returnValue.replace(decimalCommaRegex, '.');
|
|
49
|
-
returnValue = isLatex ? latexToText("".concat(returnValue)) : textToMathText("".concat(returnValue), {
|
|
50
|
-
unknownCommands: 'passthrough'
|
|
51
|
-
}).toString();
|
|
52
|
-
returnValue = returnValue.replace('=', '==');
|
|
53
|
-
return rationalizeAllPossibleSubNodes(returnValue);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
var latexToAstOpts = {
|
|
57
|
-
missingFactor: function missingFactor(token, e) {
|
|
58
|
-
console.warn('missing factor for: ', token.token_type);
|
|
59
|
-
|
|
60
|
-
if (token.token_type === 'NUMBER') {
|
|
61
|
-
throw e;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return 0;
|
|
65
|
-
},
|
|
66
|
-
unknownCommandBehavior: 'passthrough'
|
|
67
|
-
};
|
|
68
|
-
var astToTextOpts = {
|
|
69
|
-
unicode_operators: {
|
|
70
|
-
ne: function ne(operands) {
|
|
71
|
-
return operands.join(' != ');
|
|
72
|
-
},
|
|
73
|
-
'%': function _(operands) {
|
|
74
|
-
return "percent(".concat(operands[0], ")");
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
var latexToText = function latexToText(latex) {
|
|
80
|
-
var extraOtps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
81
|
-
var la = new _mathExpressions["default"].converters.latexToAstObj(_objectSpread(_objectSpread({}, latexToAstOpts), extraOtps));
|
|
82
|
-
var at = new _mathExpressions["default"].converters.astToTextObj(_objectSpread(_objectSpread({}, astToTextOpts), extraOtps));
|
|
83
|
-
var ast = la.convert(latex);
|
|
84
|
-
return at.convert(ast);
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
exports.latexToText = latexToText;
|
|
88
|
-
|
|
89
|
-
var textToMathText = function textToMathText(latex) {
|
|
90
|
-
var extraOtps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
91
|
-
var la = new _mathExpressions["default"].converters.textToAstObj(_objectSpread(_objectSpread({}, latexToAstOpts), extraOtps));
|
|
92
|
-
var at = new _mathExpressions["default"].converters.astToTextObj(_objectSpread(_objectSpread({}, astToTextOpts), extraOtps));
|
|
93
|
-
var ast = la.convert(latex);
|
|
94
|
-
return at.convert(ast);
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
exports.textToMathText = textToMathText;
|
|
98
|
-
|
|
99
|
-
function shouldRationalizeEntireTree(tree) {
|
|
100
|
-
var shouldDoIt = true; // we need to iterate the entire tree to check for some conditions that might make rationalization impossible
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
tree.traverse(function (node) {
|
|
104
|
-
// if we have a variable as an exponent for power operation, we should not rationalize
|
|
105
|
-
// try to see if there are power operations with variable exponents
|
|
106
|
-
if (node.type === 'OperatorNode' && node.fn === 'pow') {
|
|
107
|
-
var exponent = node.args[1]; // try to see if it can be compiled and evaluated - if it's a non-numerical value, it'll throw an error
|
|
108
|
-
|
|
109
|
-
exponent.compile().eval();
|
|
110
|
-
} // we cannot have variables for unresolved function calls either
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (node.type === 'FunctionNode') {
|
|
114
|
-
//try to see if the argument that the function is called with can be resolved as non-variable
|
|
115
|
-
var functionParameter = node.args[0]; // if it holds variables, this will throw an error
|
|
116
|
-
|
|
117
|
-
functionParameter.compile().eval();
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
mathjs.rationalize(tree);
|
|
121
|
-
} catch (_unused2) {
|
|
122
|
-
shouldDoIt = false;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return shouldDoIt;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function containsDecimal() {
|
|
129
|
-
var expression = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
130
|
-
return expression.match(decimalRegex);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
var SIMPLIFY_RULES = [{
|
|
134
|
-
l: 'n1^(1/n2)',
|
|
135
|
-
r: 'nthRoot(n1, n2)'
|
|
136
|
-
}, {
|
|
137
|
-
l: 'sqrt(n1)',
|
|
138
|
-
r: 'nthRoot(n1, 2)'
|
|
139
|
-
}];
|
|
140
|
-
|
|
141
|
-
var simplify = function simplify(v) {
|
|
142
|
-
return mathjs.simplify(v, SIMPLIFY_RULES.concat(mathjs.simplify.rules));
|
|
143
|
-
}; //.concat(SIMPLIFY_RULES));
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
var areValuesEqual = function areValuesEqual(valueOne, valueTwo) {
|
|
147
|
-
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
148
|
-
var allowDecimals = options.allowDecimals,
|
|
149
|
-
isLatex = options.isLatex,
|
|
150
|
-
inverse = options.inverse;
|
|
151
|
-
var valueOneToUse = valueOne;
|
|
152
|
-
var valueTwoToUse = valueTwo;
|
|
153
|
-
|
|
154
|
-
if (allowDecimals === false) {
|
|
155
|
-
if (containsDecimal(valueOne) || containsDecimal(valueTwo)) {
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
} else if (allowDecimals === true) {
|
|
159
|
-
if (containsDecimal(valueOne) && decimalWithThousandSeparatorNumberRegex.test(valueOne)) {
|
|
160
|
-
valueOneToUse = valueOne.replace(decimalCommaRegex, '');
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (containsDecimal(valueTwo) && decimalWithThousandSeparatorNumberRegex.test(valueTwo)) {
|
|
164
|
-
valueTwoToUse = valueTwo.replace(decimalCommaRegex, '');
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
var preparedValueOne = prepareExpression(valueOneToUse, isLatex, allowDecimals);
|
|
169
|
-
var preparedValueTwo = prepareExpression(valueTwoToUse, isLatex, allowDecimals);
|
|
170
|
-
var one = shouldRationalizeEntireTree(preparedValueOne) ? mathjs.rationalize(preparedValueOne) : preparedValueOne;
|
|
171
|
-
var two = shouldRationalizeEntireTree(preparedValueTwo) ? mathjs.rationalize(preparedValueTwo) : preparedValueTwo;
|
|
172
|
-
one = simplify(one);
|
|
173
|
-
two = simplify(two);
|
|
174
|
-
var equals = one.equals(two);
|
|
175
|
-
return inverse ? !equals : equals;
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
var ave = function ave(a, b) {
|
|
179
|
-
var am = mathjs.parse(a);
|
|
180
|
-
var bm = mathjs.parse(b);
|
|
181
|
-
var arm = simplify(am);
|
|
182
|
-
var brm = simplify(bm);
|
|
183
|
-
return arm.equals(brm);
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
exports.ave = ave;
|
|
187
|
-
var _default = areValuesEqual;
|
|
188
|
-
exports["default"] = _default;
|
|
189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWNpbWFsQ29tbWFSZWdleCIsImRlY2ltYWxSZWdleCIsImRlY2ltYWxXaXRoVGhvdXNhbmRTZXBhcmF0b3JOdW1iZXJSZWdleCIsInJhdGlvbmFsaXplQWxsUG9zc2libGVTdWJOb2RlcyIsImV4cHJlc3Npb24iLCJyYXRpb25hbGl6ZSIsIm1hdGhqcyIsInBhcnNlIiwidHJlZSIsInRyYW5zZm9ybWVkVHJlZSIsInRyYW5zZm9ybSIsIm5vZGUiLCJyYXRpb25hbGl6ZWROb2RlIiwicHJlcGFyZUV4cHJlc3Npb24iLCJzdHJpbmciLCJpc0xhdGV4IiwicmV0dXJuVmFsdWUiLCJ0cmltIiwicmVwbGFjZSIsImxhdGV4VG9UZXh0IiwidGV4dFRvTWF0aFRleHQiLCJ1bmtub3duQ29tbWFuZHMiLCJ0b1N0cmluZyIsImxhdGV4VG9Bc3RPcHRzIiwibWlzc2luZ0ZhY3RvciIsInRva2VuIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwidG9rZW5fdHlwZSIsInVua25vd25Db21tYW5kQmVoYXZpb3IiLCJhc3RUb1RleHRPcHRzIiwidW5pY29kZV9vcGVyYXRvcnMiLCJuZSIsIm9wZXJhbmRzIiwiam9pbiIsImxhdGV4IiwiZXh0cmFPdHBzIiwibGEiLCJtZSIsImNvbnZlcnRlcnMiLCJsYXRleFRvQXN0T2JqIiwiYXQiLCJhc3RUb1RleHRPYmoiLCJhc3QiLCJjb252ZXJ0IiwidGV4dFRvQXN0T2JqIiwic2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlIiwic2hvdWxkRG9JdCIsInRyYXZlcnNlIiwidHlwZSIsImZuIiwiZXhwb25lbnQiLCJhcmdzIiwiY29tcGlsZSIsImV2YWwiLCJmdW5jdGlvblBhcmFtZXRlciIsImNvbnRhaW5zRGVjaW1hbCIsIm1hdGNoIiwiU0lNUExJRllfUlVMRVMiLCJsIiwiciIsInNpbXBsaWZ5IiwidiIsImNvbmNhdCIsInJ1bGVzIiwiYXJlVmFsdWVzRXF1YWwiLCJ2YWx1ZU9uZSIsInZhbHVlVHdvIiwib3B0aW9ucyIsImFsbG93RGVjaW1hbHMiLCJpbnZlcnNlIiwidmFsdWVPbmVUb1VzZSIsInZhbHVlVHdvVG9Vc2UiLCJ0ZXN0IiwicHJlcGFyZWRWYWx1ZU9uZSIsInByZXBhcmVkVmFsdWVUd28iLCJvbmUiLCJ0d28iLCJlcXVhbHMiLCJhdmUiLCJhIiwiYiIsImFtIiwiYm0iLCJhcm0iLCJicm0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQU1BLGlCQUFpQixHQUFHLElBQTFCO0FBQ0EsSUFBTUMsWUFBWSxHQUFHLE9BQXJCO0FBQ0EsSUFBTUMsdUNBQXVDLEdBQUcsaUVBQWhEOztBQUVBLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBaUMsQ0FBQ0MsVUFBRDtBQUFBLFNBQWdCQyxXQUFXLENBQUNDLE1BQU0sQ0FBQ0MsS0FBUCxDQUFhSCxVQUFiLENBQUQsQ0FBM0I7QUFBQSxDQUF2Qzs7QUFDQSxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDRyxJQUFELEVBQVU7QUFDNUIsTUFBTUMsZUFBZSxHQUFHRCxJQUFJLENBQUNFLFNBQUwsQ0FBZSxVQUFDQyxJQUFELEVBQVU7QUFDL0MsUUFBSTtBQUNGLFVBQU1DLGdCQUFnQixHQUFHTixNQUFNLENBQUNELFdBQVAsQ0FBbUJNLElBQW5CLENBQXpCO0FBQ0EsYUFBT0MsZ0JBQVA7QUFDRCxLQUhELENBR0UsZ0JBQU07QUFDTixhQUFPRCxJQUFQO0FBQ0Q7QUFDRixHQVB1QixDQUF4QjtBQVFBLFNBQU9GLGVBQVA7QUFDRCxDQVZEOztBQVlBLFNBQVNJLGlCQUFULENBQTJCQyxNQUEzQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFDMUMsTUFBSUMsV0FBVyxHQUFHRixNQUFNLEdBQUdBLE1BQU0sQ0FBQ0csSUFBUCxFQUFILEdBQW1CLEVBQTNDO0FBRUFELEVBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDRSxPQUFaLENBQW9CbEIsaUJBQXBCLEVBQXVDLEdBQXZDLENB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RCxHQUF1RkEsZ0JBQWpHO0FBQ0EsTUFBSUcsR0FBRyxHQUFHL0IsMkJBQTJCLENBQUM2QixnQkFBRCxDQUEzQixHQUFnRHRFLE1BQU0sQ0FBQ0QsV0FBUCxDQUFtQnVFLGdCQUFuQixDQUFoRCxHQUF1RkEsZ0JBQWpHO0FBRUFDLEVBQUFBLEdBQUcsR0FBR2YsUUFBUSxDQUFDZSxHQUFELENBQWQ7QUFDQUMsRUFBQUEsR0FBRyxHQUFHaEIsUUFBUSxDQUFDZ0IsR0FBRCxDQUFkO0FBRUEsTUFBTUMsTUFBTSxHQUFHRixHQUFHLENBQUNFLE1BQUosQ0FBV0QsR0FBWCxDQUFmO0FBRUEsU0FBT1AsT0FBTyxHQUFHLENBQUNRLE1BQUosR0FBYUEsTUFBM0I7QUFDRCxDQXRDRDs7QUF3Q08sSUFBTUMsR0FBRyxHQUFHLFNBQU5BLEdBQU0sQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQVU7QUFDM0IsTUFBTUMsRUFBRSxHQUFHN0UsTUFBTSxDQUFDQyxLQUFQLENBQWEwRSxDQUFiLENBQVg7QUFDQSxNQUFNRyxFQUFFLEdBQUc5RSxNQUFNLENBQUNDLEtBQVAsQ0FBYTJFLENBQWIsQ0FBWDtBQUVBLE1BQU1HLEdBQUcsR0FBR3ZCLFFBQVEsQ0FBQ3FCLEVBQUQsQ0FBcEI7QUFDQSxNQUFNRyxHQUFHLEdBQUd4QixRQUFRLENBQUNzQixFQUFELENBQXBCO0FBQ0EsU0FBT0MsR0FBRyxDQUFDTixNQUFKLENBQVdPLEdBQVgsQ0FBUDtBQUNELENBUE07OztlQVNRcEIsYyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIG1hdGhqcyBmcm9tICdtYXRoanMnO1xuaW1wb3J0IG1lIGZyb20gJ0BwaWUtZnJhbWV3b3JrL21hdGgtZXhwcmVzc2lvbnMnO1xuXG5jb25zdCBkZWNpbWFsQ29tbWFSZWdleCA9IC8sL2c7XG5jb25zdCBkZWNpbWFsUmVnZXggPSAvXFwufCwvZztcbmNvbnN0IGRlY2ltYWxXaXRoVGhvdXNhbmRTZXBhcmF0b3JOdW1iZXJSZWdleCA9IC9eKD8hMCtcXC4wMCkoPz0uezEsOX0oXFwufCQpKSg/ITAoPyFcXC4pKVxcZHsxLDN9KCxcXGR7M30pKihcXC5cXGQrKT8kLztcblxuY29uc3QgcmF0aW9uYWxpemVBbGxQb3NzaWJsZVN1Yk5vZGVzID0gKGV4cHJlc3Npb24pID0+IHJhdGlvbmFsaXplKG1hdGhqcy5wYXJzZShleHByZXNzaW9uKSk7XG5jb25zdCByYXRpb25hbGl6ZSA9ICh0cmVlKSA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkVHJlZSA9IHRyZWUudHJhbnNmb3JtKChub2RlKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdGlvbmFsaXplZE5vZGUgPSBtYXRoanMucmF0aW9uYWxpemUobm9kZSk7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemVkTm9kZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0cmFuc2Zvcm1lZFRyZWU7XG59O1xuXG5mdW5jdGlvbiBwcmVwYXJlRXhwcmVzc2lvbihzdHJpbmcsIGlzTGF0ZXgpIHtcbiAgbGV0IHJldHVyblZhbHVlID0gc3RyaW5nID8gc3RyaW5nLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShkZWNpbWFsQ29tbWFSZWdleCwgJy4nKTtcblxuICByZXR1cm5WYWx1ZSA9IGlzTGF0ZXhcbiAgICA/IGxhdGV4VG9UZXh0KGAke3JldHVyblZhbHVlfWApXG4gICAgOiB0ZXh0VG9NYXRoVGV4dChgJHtyZXR1cm5WYWx1ZX1gLCB7IHVua25vd25Db21tYW5kczogJ3Bhc3N0aHJvdWdoJyB9KS50b1N0cmluZygpO1xuXG4gIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZSgnPScsICc9PScpO1xuICByZXR1cm4gcmF0aW9uYWxpemVBbGxQb3NzaWJsZVN1Yk5vZGVzKHJldHVyblZhbHVlKTtcbn1cblxuY29uc3QgbGF0ZXhUb0FzdE9wdHMgPSB7XG4gIG1pc3NpbmdGYWN0b3I6ICh0b2tlbiwgZSkgPT4ge1xuICAgIGNvbnNvbGUud2FybignbWlzc2luZyBmYWN0b3IgZm9yOiAnLCB0b2tlbi50b2tlbl90eXBlKTtcbiAgICBpZiAodG9rZW4udG9rZW5fdHlwZSA9PT0gJ05VTUJFUicpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICB1bmtub3duQ29tbWFuZEJlaGF2aW9yOiAncGFzc3Rocm91Z2gnLFxufTtcblxuY29uc3QgYXN0VG9UZXh0T3B0cyA9IHtcbiAgdW5pY29kZV9vcGVyYXRvcnM6IHtcbiAgICBuZTogZnVuY3Rpb24ob3BlcmFuZHMpIHtcbiAgICAgIHJldHVybiBvcGVyYW5kcy5qb2luKCcgIT0gJyk7XG4gICAgfSxcbiAgICAnJSc6IGZ1bmN0aW9uKG9wZXJhbmRzKSB7XG4gICAgICByZXR1cm4gYHBlcmNlbnQoJHtvcGVyYW5kc1swXX0pYDtcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGxhdGV4VG9UZXh0ID0gKGxhdGV4LCBleHRyYU90cHMgPSB7fSkgPT4ge1xuICBjb25zdCBsYSA9IG5ldyBtZS5jb252ZXJ0ZXJzLmxhdGV4VG9Bc3RPYmooeyAuLi5sYXRleFRvQXN0T3B0cywgLi4uZXh0cmFPdHBzIH0pO1xuXG4gIGNvbnN0IGF0ID0gbmV3IG1lLmNvbnZlcnRlcnMuYXN0VG9UZXh0T2JqKHsgLi4uYXN0VG9UZXh0T3B0cywgLi4uZXh0cmFPdHBzIH0pO1xuXG4gIGNvbnN0IGFzdCA9IGxhLmNvbnZlcnQobGF0ZXgpO1xuXG4gIHJldHVybiBhdC5jb252ZXJ0KGFzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgdGV4dFRvTWF0aFRleHQgPSAobGF0ZXgsIGV4dHJhT3RwcyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxhID0gbmV3IG1lLmNvbnZlcnRlcnMudGV4dFRvQXN0T2JqKHsgLi4ubGF0ZXhUb0FzdE9wdHMsIC4uLmV4dHJhT3RwcyB9KTtcblxuICBjb25zdCBhdCA9IG5ldyBtZS5jb252ZXJ0ZXJzLmFzdFRvVGV4dE9iaih7IC4uLmFzdFRvVGV4dE9wdHMsIC4uLmV4dHJhT3RwcyB9KTtcblxuICBjb25zdCBhc3QgPSBsYS5jb252ZXJ0KGxhdGV4KTtcblxuICByZXR1cm4gYXQuY29udmVydChhc3QpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlKHRyZWUpIHtcbiAgbGV0IHNob3VsZERvSXQgPSB0cnVlO1xuXG4gIC8vIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aGUgZW50aXJlIHRyZWUgdG8gY2hlY2sgZm9yIHNvbWUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IG1ha2UgcmF0aW9uYWxpemF0aW9uIGltcG9zc2libGVcbiAgdHJ5IHtcbiAgICB0cmVlLnRyYXZlcnNlKChub2RlKSA9PiB7XG4gICAgICAvLyBpZiB3ZSBoYXZlIGEgdmFyaWFibGUgYXMgYW4gZXhwb25lbnQgZm9yIHBvd2VyIG9wZXJhdGlvbiwgd2Ugc2hvdWxkIG5vdCByYXRpb25hbGl6ZVxuICAgICAgLy8gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgcG93ZXIgb3BlcmF0aW9ucyB3aXRoIHZhcmlhYmxlIGV4cG9uZW50c1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgbm9kZS5mbiA9PT0gJ3BvdycpIHtcbiAgICAgICAgY29uc3QgZXhwb25lbnQgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgLy8gdHJ5IHRvIHNlZSBpZiBpdCBjYW4gYmUgY29tcGlsZWQgYW5kIGV2YWx1YXRlZCAtIGlmIGl0J3MgYSBub24tbnVtZXJpY2FsIHZhbHVlLCBpdCdsbCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBleHBvbmVudC5jb21waWxlKCkuZXZhbCgpO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBjYW5ub3QgaGF2ZSB2YXJpYWJsZXMgZm9yIHVucmVzb2x2ZWQgZnVuY3Rpb24gY2FsbHMgZWl0aGVyXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvL3RyeSB0byBzZWUgaWYgdGhlIGFyZ3VtZW50IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGNhbiBiZSByZXNvbHZlZCBhcyBub24tdmFyaWFibGVcbiAgICAgICAgY29uc3QgZnVuY3Rpb25QYXJhbWV0ZXIgPSBub2RlLmFyZ3NbMF07XG5cbiAgICAgICAgLy8gaWYgaXQgaG9sZHMgdmFyaWFibGVzLCB0aGlzIHdpbGwgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgZnVuY3Rpb25QYXJhbWV0ZXIuY29tcGlsZSgpLmV2YWwoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG1hdGhqcy5yYXRpb25hbGl6ZSh0cmVlKTtcbiAgfSBjYXRjaCB7XG4gICAgc2hvdWxkRG9JdCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZERvSXQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zRGVjaW1hbChleHByZXNzaW9uID0gJycpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb24ubWF0Y2goZGVjaW1hbFJlZ2V4KTtcbn1cbmNvbnN0IFNJTVBMSUZZX1JVTEVTID0gW1xuICB7IGw6ICduMV4oMS9uMiknLCByOiAnbnRoUm9vdChuMSwgbjIpJyB9LFxuICB7IGw6ICdzcXJ0KG4xKScsIHI6ICdudGhSb290KG4xLCAyKScgfSxcbl07XG5cbmNvbnN0IHNpbXBsaWZ5ID0gKHYpID0+IG1hdGhqcy5zaW1wbGlmeSh2LCBTSU1QTElGWV9SVUxFUy5jb25jYXQobWF0aGpzLnNpbXBsaWZ5LnJ1bGVzKSk7IC8vLmNvbmNhdChTSU1QTElGWV9SVUxFUykpO1xuXG5jb25zdCBhcmVWYWx1ZXNFcXVhbCA9ICh2YWx1ZU9uZSwgdmFsdWVUd28sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgLy8gaWYgZXhwbGljaXRseSBzZXQgdG8gZmFsc2UsIGhhdmluZyBhIGRlY2ltYWwgdmFsdWUgaW4gZWl0aGVyIHNpZGUgd2lsbCByZXN1bHQgaW4gYSBmYWxzZSBlcXVhbGl0eVxuICAgIC8vIHJlZ2FyZGxlc3Mgb2YgbWF0aGVtYXRpY2FsIGNvcnJlY3RuZXNzXG4gICAgYWxsb3dEZWNpbWFscyxcbiAgICBpc0xhdGV4LCAvLyBpZiB0aGUgcGFzc2VkIGluIHZhbHVlcyBhcmUgbGF0ZXgsIHRoZXkgbmVlZCB0byBiZSBlc2NhcGVkXG4gICAgaW52ZXJzZSwgLy8gcmV0dXJucyBpbnZlcnNlIGZvciB0aGUgY29tcGFyaXNvbiByZXN1bHRcbiAgfSA9IG9wdGlvbnM7XG5cbiAgbGV0IHZhbHVlT25lVG9Vc2UgPSB2YWx1ZU9uZTtcbiAgbGV0IHZhbHVlVHdvVG9Vc2UgPSB2YWx1ZVR3bztcblxuICBpZiAoYWxsb3dEZWNpbWFscyA9PT0gZmFsc2UpIHtcbiAgICBpZiAoY29udGFpbnNEZWNpbWFsKHZhbHVlT25lKSB8fCBjb250YWluc0RlY2ltYWwodmFsdWVUd28pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFsbG93RGVjaW1hbHMgPT09IHRydWUpIHtcbiAgICBpZiAoY29udGFpbnNEZWNpbWFsKHZhbHVlT25lKSAmJiBkZWNpbWFsV2l0aFRob3VzYW5kU2VwYXJhdG9yTnVtYmVyUmVnZXgudGVzdCh2YWx1ZU9uZSkpIHtcbiAgICAgIHZhbHVlT25lVG9Vc2UgPSB2YWx1ZU9uZS5yZXBsYWNlKGRlY2ltYWxDb21tYVJlZ2V4LCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5zRGVjaW1hbCh2YWx1ZVR3bykgJiYgZGVjaW1hbFdpdGhUaG91c2FuZFNlcGFyYXRvck51bWJlclJlZ2V4LnRlc3QodmFsdWVUd28pKSB7XG4gICAgICB2YWx1ZVR3b1RvVXNlID0gdmFsdWVUd28ucmVwbGFjZShkZWNpbWFsQ29tbWFSZWdleCwgJycpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZXBhcmVkVmFsdWVPbmUgPSBwcmVwYXJlRXhwcmVzc2lvbih2YWx1ZU9uZVRvVXNlLCBpc0xhdGV4LCBhbGxvd0RlY2ltYWxzKTtcbiAgY29uc3QgcHJlcGFyZWRWYWx1ZVR3byA9IHByZXBhcmVFeHByZXNzaW9uKHZhbHVlVHdvVG9Vc2UsIGlzTGF0ZXgsIGFsbG93RGVjaW1hbHMpO1xuXG4gIGxldCBvbmUgPSBzaG91bGRSYXRpb25hbGl6ZUVudGlyZVRyZWUocHJlcGFyZWRWYWx1ZU9uZSkgPyBtYXRoanMucmF0aW9uYWxpemUocHJlcGFyZWRWYWx1ZU9uZSkgOiBwcmVwYXJlZFZhbHVlT25lO1xuICBsZXQgdHdvID0gc2hvdWxkUmF0aW9uYWxpemVFbnRpcmVUcmVlKHByZXBhcmVkVmFsdWVUd28pID8gbWF0aGpzLnJhdGlvbmFsaXplKHByZXBhcmVkVmFsdWVUd28pIDogcHJlcGFyZWRWYWx1ZVR3bztcblxuICBvbmUgPSBzaW1wbGlmeShvbmUpO1xuICB0d28gPSBzaW1wbGlmeSh0d28pO1xuXG4gIGNvbnN0IGVxdWFscyA9IG9uZS5lcXVhbHModHdvKTtcblxuICByZXR1cm4gaW52ZXJzZSA/ICFlcXVhbHMgOiBlcXVhbHM7XG59O1xuXG5leHBvcnQgY29uc3QgYXZlID0gKGEsIGIpID0+IHtcbiAgY29uc3QgYW0gPSBtYXRoanMucGFyc2UoYSk7XG4gIGNvbnN0IGJtID0gbWF0aGpzLnBhcnNlKGIpO1xuXG4gIGNvbnN0IGFybSA9IHNpbXBsaWZ5KGFtKTtcbiAgY29uc3QgYnJtID0gc2ltcGxpZnkoYm0pO1xuICByZXR1cm4gYXJtLmVxdWFscyhicm0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXJlVmFsdWVzRXF1YWw7XG4iXX0=
|