@pie-element/hotspot 9.1.0 → 9.2.0-mui-update.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.
Files changed (117) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/configure/CHANGELOG.md +66 -0
  3. package/configure/lib/DeleteWidget.js +31 -44
  4. package/configure/lib/DeleteWidget.js.map +1 -1
  5. package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
  6. package/configure/lib/__tests__/hotspot-container.test.js +377 -0
  7. package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
  8. package/configure/lib/__tests__/index.test.js +211 -0
  9. package/configure/lib/__tests__/root.test.js +440 -0
  10. package/configure/lib/__tests__/utils.test.js +287 -0
  11. package/configure/lib/button.js +27 -46
  12. package/configure/lib/button.js.map +1 -1
  13. package/configure/lib/buttons/circle.js +21 -28
  14. package/configure/lib/buttons/circle.js.map +1 -1
  15. package/configure/lib/buttons/polygon.js +27 -34
  16. package/configure/lib/buttons/polygon.js.map +1 -1
  17. package/configure/lib/buttons/rectangle.js +27 -34
  18. package/configure/lib/buttons/rectangle.js.map +1 -1
  19. package/configure/lib/defaults.js +3 -4
  20. package/configure/lib/defaults.js.map +1 -1
  21. package/configure/lib/hotspot-circle.js +133 -199
  22. package/configure/lib/hotspot-circle.js.map +1 -1
  23. package/configure/lib/hotspot-container.js +251 -356
  24. package/configure/lib/hotspot-container.js.map +1 -1
  25. package/configure/lib/hotspot-drawable.js +361 -473
  26. package/configure/lib/hotspot-drawable.js.map +1 -1
  27. package/configure/lib/hotspot-palette.js +93 -140
  28. package/configure/lib/hotspot-palette.js.map +1 -1
  29. package/configure/lib/hotspot-polygon.js +213 -318
  30. package/configure/lib/hotspot-polygon.js.map +1 -1
  31. package/configure/lib/hotspot-rectangle.js +129 -193
  32. package/configure/lib/hotspot-rectangle.js.map +1 -1
  33. package/configure/lib/icons.js +1 -1
  34. package/configure/lib/icons.js.map +1 -1
  35. package/configure/lib/image-konva.js +47 -87
  36. package/configure/lib/image-konva.js.map +1 -1
  37. package/configure/lib/index.js +163 -223
  38. package/configure/lib/index.js.map +1 -1
  39. package/configure/lib/root.js +302 -394
  40. package/configure/lib/root.js.map +1 -1
  41. package/configure/lib/shapes/circle.js +70 -102
  42. package/configure/lib/shapes/circle.js.map +1 -1
  43. package/configure/lib/shapes/index.js +5 -13
  44. package/configure/lib/shapes/index.js.map +1 -1
  45. package/configure/lib/shapes/polygon.js +65 -97
  46. package/configure/lib/shapes/polygon.js.map +1 -1
  47. package/configure/lib/shapes/rectagle.js +70 -102
  48. package/configure/lib/shapes/rectagle.js.map +1 -1
  49. package/configure/lib/shapes/utils.js +3 -9
  50. package/configure/lib/shapes/utils.js.map +1 -1
  51. package/configure/lib/upload-control.js +26 -53
  52. package/configure/lib/upload-control.js.map +1 -1
  53. package/configure/lib/utils.js +85 -138
  54. package/configure/lib/utils.js.map +1 -1
  55. package/configure/package.json +11 -10
  56. package/configure/src/__tests__/index.test.js +11 -5
  57. package/configure/src/button.jsx +12 -20
  58. package/configure/src/hotspot-circle.jsx +5 -18
  59. package/configure/src/hotspot-container.jsx +82 -98
  60. package/configure/src/hotspot-drawable.jsx +43 -45
  61. package/configure/src/hotspot-palette.jsx +45 -37
  62. package/configure/src/hotspot-polygon.jsx +4 -20
  63. package/configure/src/hotspot-rectangle.jsx +4 -17
  64. package/configure/src/index.js +12 -2
  65. package/configure/src/root.jsx +85 -79
  66. package/configure/src/upload-control.jsx +6 -16
  67. package/controller/CHANGELOG.md +52 -0
  68. package/controller/lib/__tests__/index.test.js +586 -0
  69. package/controller/lib/__tests__/utils.test.js +8 -0
  70. package/controller/lib/defaults.js +3 -4
  71. package/controller/lib/defaults.js.map +1 -1
  72. package/controller/lib/index.js +152 -206
  73. package/controller/lib/index.js.map +1 -1
  74. package/controller/lib/utils.js +15 -35
  75. package/controller/lib/utils.js.map +1 -1
  76. package/controller/package.json +2 -2
  77. package/docs/demo/pie.manifest.json +11 -0
  78. package/lib/__tests__/container.test.js +221 -0
  79. package/lib/__tests__/index.test.js +113 -0
  80. package/lib/__tests__/polygon.test.js +245 -0
  81. package/lib/__tests__/rectangle.test.js +236 -0
  82. package/lib/__tests__/session-updater.test.js +69 -0
  83. package/lib/hotspot/circle.js +111 -170
  84. package/lib/hotspot/circle.js.map +1 -1
  85. package/lib/hotspot/container.js +175 -261
  86. package/lib/hotspot/container.js.map +1 -1
  87. package/lib/hotspot/icons.js +1 -1
  88. package/lib/hotspot/icons.js.map +1 -1
  89. package/lib/hotspot/image-konva-tooltip.js +66 -113
  90. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  91. package/lib/hotspot/index.js +136 -199
  92. package/lib/hotspot/index.js.map +1 -1
  93. package/lib/hotspot/polygon.js +151 -215
  94. package/lib/hotspot/polygon.js.map +1 -1
  95. package/lib/hotspot/rectangle.js +130 -186
  96. package/lib/hotspot/rectangle.js.map +1 -1
  97. package/lib/index.js +188 -257
  98. package/lib/index.js.map +1 -1
  99. package/lib/session-updater.js +13 -19
  100. package/lib/session-updater.js.map +1 -1
  101. package/package.json +14 -11
  102. package/src/hotspot/circle.jsx +2 -13
  103. package/src/hotspot/container.jsx +35 -50
  104. package/src/hotspot/index.jsx +16 -28
  105. package/src/hotspot/polygon.jsx +4 -13
  106. package/src/hotspot/rectangle.jsx +4 -13
  107. package/src/index.js +21 -12
  108. package/LICENSE.md +0 -5
  109. package/configure/node_modules/debug/CHANGELOG.md +0 -395
  110. package/configure/node_modules/debug/LICENSE +0 -19
  111. package/configure/node_modules/debug/README.md +0 -437
  112. package/configure/node_modules/debug/node.js +0 -1
  113. package/configure/node_modules/debug/package.json +0 -51
  114. package/configure/node_modules/debug/src/browser.js +0 -180
  115. package/configure/node_modules/debug/src/common.js +0 -249
  116. package/configure/node_modules/debug/src/index.js +0 -12
  117. package/configure/node_modules/debug/src/node.js +0 -177
@@ -0,0 +1,586 @@
1
+ "use strict";
2
+
3
+ var _index = require("../index");
4
+ var _utils = require("../utils");
5
+ describe('controller', () => {
6
+ let result, question, session, env;
7
+ beforeEach(() => {
8
+ question = {
9
+ prompt: 'prompt',
10
+ promptEnabled: true,
11
+ imageUrl: '',
12
+ dimensions: {
13
+ height: 0,
14
+ width: 0
15
+ },
16
+ outlineColor: 'blue',
17
+ hotspotColor: 'lightblue',
18
+ shapes: {
19
+ rectangles: [{
20
+ id: '1',
21
+ correct: true
22
+ }, {
23
+ id: '2'
24
+ }, {
25
+ id: '3'
26
+ }],
27
+ polygons: [{
28
+ id: '4',
29
+ correct: true
30
+ }],
31
+ circles: [{
32
+ id: '5',
33
+ correct: true
34
+ }]
35
+ },
36
+ multipleCorrect: true,
37
+ partialScoring: false
38
+ };
39
+ });
40
+ describe('outcome partialScoring test', () => {
41
+ describe('hanging controller', () => {
42
+ it('doesnt hang if answers is missing', async () => {
43
+ const response = await (0, _index.outcome)({}, {
44
+ id: '1'
45
+ }, {});
46
+ expect(response).toEqual({
47
+ score: 0,
48
+ empty: true
49
+ });
50
+ });
51
+ it('doesnt hang if the rest is missing', async () => {
52
+ const response = await (0, _index.outcome)({}, {
53
+ id: '1',
54
+ answers: {}
55
+ }, {});
56
+ expect(response).toEqual({
57
+ score: 0
58
+ });
59
+ });
60
+ });
61
+ beforeEach(() => {
62
+ const rectangles = question.shapes.rectangles.concat({
63
+ id: '5',
64
+ correct: true
65
+ });
66
+ question = {
67
+ ...question,
68
+ shapes: {
69
+ ...question.shapes,
70
+ rectangles
71
+ }
72
+ };
73
+ });
74
+ const assertOutcome = (message, extra, sessionValue, env, expected) => {
75
+ it(message, async () => {
76
+ const result = await (0, _index.outcome)({
77
+ ...question,
78
+ ...extra
79
+ }, sessionValue, env);
80
+ expect(result).toEqual(expect.objectContaining(expected));
81
+ });
82
+ };
83
+ assertOutcome('element.partialScoring = true', {
84
+ partialScoring: true
85
+ }, {
86
+ answers: [{
87
+ id: '2'
88
+ }]
89
+ }, {
90
+ mode: 'evaluate'
91
+ }, {
92
+ score: 0
93
+ });
94
+ assertOutcome('element.partialScoring = false', {
95
+ partialScoring: false
96
+ }, {
97
+ answers: [{
98
+ id: '2'
99
+ }]
100
+ }, {
101
+ mode: 'evaluate'
102
+ }, {
103
+ score: 0
104
+ });
105
+ assertOutcome('element.partialScoring = false, env.partialScoring = true', {
106
+ partialScoring: false
107
+ }, {
108
+ answers: [{
109
+ id: '2'
110
+ }]
111
+ }, {
112
+ mode: 'evaluate',
113
+ partialScoring: true
114
+ }, {
115
+ score: 0
116
+ });
117
+ assertOutcome('element.partialScoring = true, env.partialScoring = false', {
118
+ partialScoring: true
119
+ }, {
120
+ answers: [{
121
+ id: '2'
122
+ }]
123
+ }, {
124
+ mode: 'evaluate',
125
+ partialScoring: false
126
+ }, {
127
+ score: 0
128
+ });
129
+ });
130
+ describe('outcome', () => {
131
+ it('returns score of 0', async () => {
132
+ const result = await (0, _index.outcome)(question, {
133
+ answers: [{
134
+ id: '2'
135
+ }]
136
+ });
137
+ expect(result.score).toEqual(0);
138
+ });
139
+ it('returns score of 1 (partialScoring: false, answers in order)', async () => {
140
+ const result = await (0, _index.outcome)(question, {
141
+ answers: [{
142
+ id: '1'
143
+ }, {
144
+ id: '4'
145
+ }, {
146
+ id: '5'
147
+ }]
148
+ });
149
+ expect(result.score).toEqual(1);
150
+ });
151
+ it('returns score of 1 (partialScoring: false, answers not in order)', async () => {
152
+ const result = await (0, _index.outcome)(question, {
153
+ answers: [{
154
+ id: '5'
155
+ }, {
156
+ id: '4'
157
+ }, {
158
+ id: '1'
159
+ }]
160
+ });
161
+ expect(result.score).toEqual(1);
162
+ });
163
+ describe('partial scoring', () => {
164
+ beforeEach(() => {
165
+ const rectangles = question.shapes.rectangles.concat({
166
+ id: '5',
167
+ correct: true
168
+ }, {
169
+ id: '6',
170
+ correct: true
171
+ });
172
+ question = {
173
+ ...question,
174
+ partialScoring: true,
175
+ shapes: {
176
+ ...question.shapes,
177
+ rectangles
178
+ }
179
+ };
180
+ });
181
+ it('returns a score of 0', async () => {
182
+ const result = await (0, _index.outcome)(question, {
183
+ answers: [{
184
+ id: '2'
185
+ }]
186
+ });
187
+ expect(result.score).toEqual(0);
188
+ });
189
+ it('returns a score of 0.2 for 1/5 correct answers and 0 incorrect answers', async () => {
190
+ const result = await (0, _index.outcome)(question, {
191
+ answers: [{
192
+ id: '1'
193
+ }]
194
+ });
195
+ expect(result.score).toEqual(0.2);
196
+ });
197
+ it('returns a score of 0.2, even if answers are not in order', async () => {
198
+ const result = await (0, _index.outcome)(question, {
199
+ answers: [{
200
+ id: '1'
201
+ }]
202
+ });
203
+ expect(result.score).toEqual(0.2);
204
+ });
205
+ it('returns a score of 0.6 for 2/5 correct answers and 0 incorrect answers', async () => {
206
+ const result = await (0, _index.outcome)(question, {
207
+ answers: [{
208
+ id: '5'
209
+ }, {
210
+ id: '4'
211
+ }]
212
+ });
213
+ expect(result.score).toEqual(0.6);
214
+ });
215
+ it('returns a score of 0.8 for 3/5 correct answers and 0 incorrect answers', async () => {
216
+ const result = await (0, _index.outcome)(question, {
217
+ answers: [{
218
+ id: '1'
219
+ }, {
220
+ id: '5'
221
+ }, {
222
+ id: '4'
223
+ }]
224
+ });
225
+ expect(result.score).toEqual(0.8);
226
+ });
227
+ it('returns a score of 1 for 4/5 correct answers and 0 incorrect answers', async () => {
228
+ const result = await (0, _index.outcome)(question, {
229
+ answers: [{
230
+ id: '1'
231
+ }, {
232
+ id: '4'
233
+ }, {
234
+ id: '5'
235
+ }, {
236
+ id: '6'
237
+ }]
238
+ });
239
+ expect(result.score).toEqual(1);
240
+ });
241
+ it('returns a score of 0.2 for 1/5 correct answers and 2 incorrect answers', async () => {
242
+ const result = await (0, _index.outcome)(question, {
243
+ answers: [{
244
+ id: '1'
245
+ }, {
246
+ id: '2'
247
+ }, {
248
+ id: '3'
249
+ }]
250
+ });
251
+ expect(result.score).toEqual(0.2);
252
+ });
253
+ it('returns a score of 0.4 for 2/5 correct answers and 2 incorrect answers', async () => {
254
+ const result = await (0, _index.outcome)(question, {
255
+ answers: [{
256
+ id: '1'
257
+ }, {
258
+ id: '4'
259
+ }, {
260
+ id: '2'
261
+ }, {
262
+ id: '3'
263
+ }]
264
+ });
265
+ expect(result.score).toEqual(0.4);
266
+ });
267
+ it('returns a score of 0.4 for 2/5 correct answers and 2 incorrect answers', async () => {
268
+ const result = await (0, _index.outcome)(question, {
269
+ answers: [{
270
+ id: '1'
271
+ }, {
272
+ id: '4'
273
+ }, {
274
+ id: '2'
275
+ }, {
276
+ id: '3'
277
+ }]
278
+ });
279
+ expect(result.score).toEqual(0.4);
280
+ });
281
+ it('returns a score of 0.6 for 3/5 correct answers and 1 incorrect answer', async () => {
282
+ const result = await (0, _index.outcome)(question, {
283
+ answers: [{
284
+ id: '6'
285
+ }, {
286
+ id: '4'
287
+ }, {
288
+ id: '1'
289
+ }, {
290
+ id: '3'
291
+ }]
292
+ });
293
+ expect(result.score).toEqual(0.6);
294
+ });
295
+ it('returns a score of 0.6 for 3/5 correct answers and 1 incorrect answer', async () => {
296
+ const result = await (0, _index.outcome)(question, {
297
+ answers: [{
298
+ id: '6'
299
+ }, {
300
+ id: '4'
301
+ }, {
302
+ id: '1'
303
+ }, {
304
+ id: '3'
305
+ }]
306
+ });
307
+ expect(result.score).toEqual(0.6);
308
+ });
309
+ it('returns a score of 0.6 for 3/5 correct answers and 2 incorrect answer', async () => {
310
+ const result = await (0, _index.outcome)(question, {
311
+ answers: [{
312
+ id: '6'
313
+ }, {
314
+ id: '4'
315
+ }, {
316
+ id: '2'
317
+ }, {
318
+ id: '3'
319
+ }, {
320
+ id: '1'
321
+ }]
322
+ });
323
+ expect(result.score).toEqual(0.6);
324
+ });
325
+ it('returns a score of 0.8 for 3/5 correct answers and 1 incorrect answer', async () => {
326
+ const result = await (0, _index.outcome)(question, {
327
+ answers: [{
328
+ id: '6'
329
+ }, {
330
+ id: '4'
331
+ }, {
332
+ id: '2'
333
+ }, {
334
+ id: '5'
335
+ }, {
336
+ id: '1'
337
+ }]
338
+ });
339
+ expect(result.score).toEqual(0.8);
340
+ });
341
+ it('returns a score of 0.6 for 3/5 correct answers and 2 incorrect answers', async () => {
342
+ const result = await (0, _index.outcome)(question, {
343
+ answers: [{
344
+ id: '6'
345
+ }, {
346
+ id: '4'
347
+ }, {
348
+ id: '2'
349
+ }, {
350
+ id: '5'
351
+ }, {
352
+ id: '1'
353
+ }, {
354
+ id: '3'
355
+ }]
356
+ });
357
+ expect(result.score).toEqual(0.6);
358
+ });
359
+ });
360
+ const returnOutcome = session => {
361
+ it(`returns empty: true when session is ${JSON.stringify(session)}`, async () => {
362
+ const result = await (0, _index.outcome)(question, session);
363
+ expect(result).toEqual({
364
+ score: 0,
365
+ empty: true
366
+ });
367
+ });
368
+ };
369
+ returnOutcome(undefined);
370
+ returnOutcome(null);
371
+ returnOutcome({});
372
+ });
373
+ describe('model', () => {
374
+ describe('mode: gather', () => {
375
+ beforeEach(async () => {
376
+ session = {};
377
+ env = {
378
+ mode: 'gather'
379
+ };
380
+ result = await (0, _index.model)(question, session, env);
381
+ });
382
+ it('returns disabled', () => {
383
+ expect(result.disabled).toEqual(false);
384
+ });
385
+ it('returns mode', () => {
386
+ expect(result.mode).toEqual('gather');
387
+ });
388
+ it('returns prompt', () => {
389
+ expect(result.prompt).toEqual('prompt');
390
+ });
391
+ it('returns dimensions', () => {
392
+ expect(result.dimensions).toEqual({
393
+ height: 0,
394
+ width: 0
395
+ });
396
+ });
397
+ it('returns outlineColor', () => {
398
+ expect(result.outlineColor).toEqual('blue');
399
+ });
400
+ it('returns hotspotColor', () => {
401
+ expect(result.hotspotColor).toEqual('lightblue');
402
+ });
403
+ it('returns multipleCorrect', () => {
404
+ expect(result.multipleCorrect).toEqual(true);
405
+ });
406
+ it('returns shapes', () => {
407
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
408
+ id: '1'
409
+ }, {
410
+ id: '2'
411
+ }, {
412
+ id: '3'
413
+ }]));
414
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
415
+ id: '4'
416
+ }]));
417
+ });
418
+ it('does not return responseCorrect', () => {
419
+ expect(result.responseCorrect).toBe(undefined);
420
+ });
421
+ });
422
+ describe('mode: view', () => {
423
+ beforeEach(async () => {
424
+ session = {};
425
+ env = {
426
+ mode: 'view'
427
+ };
428
+ result = await (0, _index.model)(question, session, env);
429
+ });
430
+ it('returns disabled', () => {
431
+ expect(result.disabled).toEqual(true);
432
+ });
433
+ });
434
+ describe('mode: evaluate', () => {
435
+ beforeEach(async () => {
436
+ session = {
437
+ answers: []
438
+ };
439
+ env = {
440
+ mode: 'evaluate'
441
+ };
442
+ result = await (0, _index.model)(question, session, env);
443
+ return result;
444
+ });
445
+ it('returns choices w/ correct', () => {
446
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
447
+ id: '1',
448
+ correct: true
449
+ }, {
450
+ id: '2'
451
+ }, {
452
+ id: '3'
453
+ }]));
454
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
455
+ id: '4',
456
+ correct: true
457
+ }]));
458
+ });
459
+ it('returns is response correct', () => {
460
+ expect(result.responseCorrect).toEqual(false);
461
+ });
462
+ });
463
+ });
464
+ describe('isResponseCorrect', () => {
465
+ const returnIsResponseCorect = session => {
466
+ it(`response is not correct if session is ${JSON.stringify(session)}`, () => {
467
+ expect((0, _utils.isResponseCorrect)(question, session)).toEqual(false);
468
+ });
469
+ };
470
+ returnIsResponseCorect(undefined);
471
+ returnIsResponseCorect(null);
472
+ returnIsResponseCorect({});
473
+ });
474
+ describe('correct response', () => {
475
+ it('returns correct response if env is correct', async () => {
476
+ const sess = await (0, _index.createCorrectResponseSession)(question, {
477
+ mode: 'gather',
478
+ role: 'instructor'
479
+ });
480
+ expect(sess).toEqual({
481
+ answers: [{
482
+ id: '1'
483
+ }, {
484
+ id: '4'
485
+ }, {
486
+ id: '5'
487
+ }],
488
+ id: '1'
489
+ });
490
+ });
491
+ it('returns null env is student', async () => {
492
+ const noResult = await (0, _index.createCorrectResponseSession)(question, {
493
+ mode: 'gather',
494
+ role: 'student'
495
+ });
496
+ expect(noResult).toBeNull();
497
+ });
498
+ });
499
+ describe('shouldIncludeCorrectResponse behavior', () => {
500
+ it('includes correct property when shouldIncludeCorrectResponse is true', async () => {
501
+ env = {
502
+ mode: 'evaluate'
503
+ };
504
+ result = await (0, _index.model)(question, {}, env);
505
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
506
+ id: '1',
507
+ correct: true
508
+ }, {
509
+ id: '2'
510
+ }, {
511
+ id: '3'
512
+ }]));
513
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
514
+ id: '4',
515
+ correct: true
516
+ }]));
517
+ expect(result.shapes.circles).toEqual(expect.arrayContaining([{
518
+ id: '5',
519
+ correct: true
520
+ }]));
521
+ });
522
+ it('excludes correct property when shouldIncludeCorrectResponse is false', async () => {
523
+ env = {
524
+ mode: 'gather'
525
+ };
526
+ result = await (0, _index.model)(question, {}, env);
527
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
528
+ id: '1'
529
+ }, {
530
+ id: '2'
531
+ }, {
532
+ id: '3'
533
+ }]));
534
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
535
+ id: '4'
536
+ }]));
537
+ expect(result.shapes.circles).toEqual(expect.arrayContaining([{
538
+ id: '5'
539
+ }]));
540
+ });
541
+ it('includes correct for instructor in view mode', async () => {
542
+ env = {
543
+ mode: 'view',
544
+ role: 'instructor'
545
+ };
546
+ result = await (0, _index.model)(question, {}, env);
547
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
548
+ id: '1',
549
+ correct: true
550
+ }, {
551
+ id: '2'
552
+ }, {
553
+ id: '3'
554
+ }]));
555
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
556
+ id: '4',
557
+ correct: true
558
+ }]));
559
+ expect(result.shapes.circles).toEqual(expect.arrayContaining([{
560
+ id: '5',
561
+ correct: true
562
+ }]));
563
+ });
564
+ it('excludes correct for student in view mode', async () => {
565
+ env = {
566
+ mode: 'view',
567
+ role: 'student'
568
+ };
569
+ result = await (0, _index.model)(question, {}, env);
570
+ expect(result.shapes.rectangles).toEqual(expect.arrayContaining([{
571
+ id: '1'
572
+ }, {
573
+ id: '2'
574
+ }, {
575
+ id: '3'
576
+ }]));
577
+ expect(result.shapes.polygons).toEqual(expect.arrayContaining([{
578
+ id: '4'
579
+ }]));
580
+ expect(result.shapes.circles).toEqual(expect.arrayContaining([{
581
+ id: '5'
582
+ }]));
583
+ });
584
+ });
585
+ });
586
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3V0aWxzIiwiZGVzY3JpYmUiLCJyZXN1bHQiLCJxdWVzdGlvbiIsInNlc3Npb24iLCJlbnYiLCJiZWZvcmVFYWNoIiwicHJvbXB0IiwicHJvbXB0RW5hYmxlZCIsImltYWdlVXJsIiwiZGltZW5zaW9ucyIsImhlaWdodCIsIndpZHRoIiwib3V0bGluZUNvbG9yIiwiaG90c3BvdENvbG9yIiwic2hhcGVzIiwicmVjdGFuZ2xlcyIsImlkIiwiY29ycmVjdCIsInBvbHlnb25zIiwiY2lyY2xlcyIsIm11bHRpcGxlQ29ycmVjdCIsInBhcnRpYWxTY29yaW5nIiwiaXQiLCJyZXNwb25zZSIsIm91dGNvbWUiLCJleHBlY3QiLCJ0b0VxdWFsIiwic2NvcmUiLCJlbXB0eSIsImFuc3dlcnMiLCJjb25jYXQiLCJhc3NlcnRPdXRjb21lIiwibWVzc2FnZSIsImV4dHJhIiwic2Vzc2lvblZhbHVlIiwiZXhwZWN0ZWQiLCJvYmplY3RDb250YWluaW5nIiwibW9kZSIsInJldHVybk91dGNvbWUiLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwibW9kZWwiLCJkaXNhYmxlZCIsImFycmF5Q29udGFpbmluZyIsInJlc3BvbnNlQ29ycmVjdCIsInRvQmUiLCJyZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0IiwiaXNSZXNwb25zZUNvcnJlY3QiLCJzZXNzIiwiY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiIsInJvbGUiLCJub1Jlc3VsdCIsInRvQmVOdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCBvdXRjb21lLCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uIH0gZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgaXNSZXNwb25zZUNvcnJlY3QgfSBmcm9tICcuLi91dGlscyc7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcmVzdWx0LCBxdWVzdGlvbiwgc2Vzc2lvbiwgZW52O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHF1ZXN0aW9uID0ge1xuICAgICAgcHJvbXB0OiAncHJvbXB0JyxcbiAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICBpbWFnZVVybDogJycsXG4gICAgICBkaW1lbnNpb25zOiB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICB9LFxuICAgICAgb3V0bGluZUNvbG9yOiAnYmx1ZScsXG4gICAgICBob3RzcG90Q29sb3I6ICdsaWdodGJsdWUnLFxuICAgICAgc2hhcGVzOiB7XG4gICAgICAgIHJlY3RhbmdsZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBvbHlnb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICc0JyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2lyY2xlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnNScsXG4gICAgICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgbXVsdGlwbGVDb3JyZWN0OiB0cnVlLFxuICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgIH07XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdvdXRjb21lIHBhcnRpYWxTY29yaW5nIHRlc3QnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ2hhbmdpbmcgY29udHJvbGxlcicsICgpID0+IHtcbiAgICAgIGl0KCdkb2VzbnQgaGFuZyBpZiBhbnN3ZXJzIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3V0Y29tZSh7fSwgeyBpZDogJzEnIH0sIHt9KTtcbiAgICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0VxdWFsKHsgc2NvcmU6IDAsIGVtcHR5OiB0cnVlIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzbnQgaGFuZyBpZiB0aGUgcmVzdCBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG91dGNvbWUoe30sIHsgaWQ6ICcxJywgYW5zd2Vyczoge30gfSwge30pO1xuICAgICAgICBleHBlY3QocmVzcG9uc2UpLnRvRXF1YWwoeyBzY29yZTogMCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjb25zdCByZWN0YW5nbGVzID0gcXVlc3Rpb24uc2hhcGVzLnJlY3RhbmdsZXMuY29uY2F0KHtcbiAgICAgICAgaWQ6ICc1JyxcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgcXVlc3Rpb24gPSB7XG4gICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICBzaGFwZXM6IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbi5zaGFwZXMsXG4gICAgICAgICAgcmVjdGFuZ2xlcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBhc3NlcnRPdXRjb21lID0gKG1lc3NhZ2UsIGV4dHJhLCBzZXNzaW9uVmFsdWUsIGVudiwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KG1lc3NhZ2UsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZSh7IC4uLnF1ZXN0aW9uLCAuLi5leHRyYSB9LCBzZXNzaW9uVmFsdWUsIGVudik7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoZXhwZWN0ZWQpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSB0cnVlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSxcbiAgICAgIHsgYW5zd2VyczogW3sgaWQ6ICcyJyB9XSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IGZhbHNlIH0sXG4gICAgICB7IGFuc3dlcnM6IFt7IGlkOiAnMicgfV0gfSxcbiAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgeyBzY29yZTogMCB9LFxuICAgICk7XG5cbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSBmYWxzZSwgZW52LnBhcnRpYWxTY29yaW5nID0gdHJ1ZScsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiBmYWxzZSB9LFxuICAgICAgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0sXG4gICAgICB7IG1vZGU6ICdldmFsdWF0ZScsIHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgICB7IHNjb3JlOiAwIH0sXG4gICAgKTtcblxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9IHRydWUsIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlJyxcbiAgICAgIHsgcGFydGlhbFNjb3Jpbmc6IHRydWUgfSxcbiAgICAgIHsgYW5zd2VyczogW3sgaWQ6ICcyJyB9XSB9LFxuICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogZmFsc2UgfSxcbiAgICAgIHsgc2NvcmU6IDAgfSxcbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBzY29yZSBvZiAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyBhbnN3ZXJzOiBbeyBpZDogJzInIH1dIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDEgKHBhcnRpYWxTY29yaW5nOiBmYWxzZSwgYW5zd2VycyBpbiBvcmRlciknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7XG4gICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMScgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICc1JyB9XSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNjb3JlIG9mIDEgKHBhcnRpYWxTY29yaW5nOiBmYWxzZSwgYW5zd2VycyBub3QgaW4gb3JkZXIpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzUnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMScgfV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncGFydGlhbCBzY29yaW5nJywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZXMgPSBxdWVzdGlvbi5zaGFwZXMucmVjdGFuZ2xlcy5jb25jYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICc1JyxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzYnLFxuICAgICAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBxdWVzdGlvbiA9IHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgICBzaGFwZXM6IHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLnNoYXBlcyxcbiAgICAgICAgICAgIHJlY3RhbmdsZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7IGFuc3dlcnM6IFt7IGlkOiAnMicgfV0gfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwLjIgZm9yIDEvNSBjb3JyZWN0IGFuc3dlcnMgYW5kIDAgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC4yLCBldmVuIGlmIGFuc3dlcnMgYXJlIG5vdCBpbiBvcmRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMScgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuMik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwLjYgZm9yIDIvNSBjb3JyZWN0IGFuc3dlcnMgYW5kIDAgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHsgYW5zd2VyczogW3sgaWQ6ICc1JyB9LCB7IGlkOiAnNCcgfV0gfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC42KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuOCBmb3IgMy81IGNvcnJlY3QgYW5zd2VycyBhbmQgMCBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwgeyBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc1JyB9LCB7IGlkOiAnNCcgfV0gfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC44KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDEgZm9yIDQvNSBjb3JyZWN0IGFuc3dlcnMgYW5kIDAgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnNScgfSwgeyBpZDogJzYnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgxKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuMiBmb3IgMS81IGNvcnJlY3QgYW5zd2VycyBhbmQgMiBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMScgfSwgeyBpZDogJzInIH0sIHsgaWQ6ICczJyB9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC4yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuNCBmb3IgMi81IGNvcnJlY3QgYW5zd2VycyBhbmQgMiBpbmNvcnJlY3QgYW5zd2VycycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShxdWVzdGlvbiwge1xuICAgICAgICAgIGFuc3dlcnM6IFt7IGlkOiAnMScgfSwgeyBpZDogJzQnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnMycgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuNCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwLjQgZm9yIDIvNSBjb3JyZWN0IGFuc3dlcnMgYW5kIDIgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzEnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC42IGZvciAzLzUgY29ycmVjdCBhbnN3ZXJzIGFuZCAxIGluY29ycmVjdCBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMScgfSwgeyBpZDogJzMnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC42IGZvciAzLzUgY29ycmVjdCBhbnN3ZXJzIGFuZCAxIGluY29ycmVjdCBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMScgfSwgeyBpZDogJzMnIH1dLFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbCgwLjYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGEgc2NvcmUgb2YgMC42IGZvciAzLzUgY29ycmVjdCBhbnN3ZXJzIGFuZCAyIGluY29ycmVjdCBhbnN3ZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH0sIHsgaWQ6ICcxJyB9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2NvcmUpLnRvRXF1YWwoMC42KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBhIHNjb3JlIG9mIDAuOCBmb3IgMy81IGNvcnJlY3QgYW5zd2VycyBhbmQgMSBpbmNvcnJlY3QgYW5zd2VyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCB7XG4gICAgICAgICAgYW5zd2VyczogW3sgaWQ6ICc2JyB9LCB7IGlkOiAnNCcgfSwgeyBpZDogJzInIH0sIHsgaWQ6ICc1JyB9LCB7IGlkOiAnMScgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuOCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgYSBzY29yZSBvZiAwLjYgZm9yIDMvNSBjb3JyZWN0IGFuc3dlcnMgYW5kIDIgaW5jb3JyZWN0IGFuc3dlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUocXVlc3Rpb24sIHtcbiAgICAgICAgICBhbnN3ZXJzOiBbeyBpZDogJzYnIH0sIHsgaWQ6ICc0JyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzUnIH0sIHsgaWQ6ICcxJyB9LCB7IGlkOiAnMycgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3QocmVzdWx0LnNjb3JlKS50b0VxdWFsKDAuNik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldHVybk91dGNvbWUgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHJldHVybnMgZW1wdHk6IHRydWUgd2hlbiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvdXRjb21lKHF1ZXN0aW9uLCBzZXNzaW9uKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm5PdXRjb21lKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuT3V0Y29tZShudWxsKTtcbiAgICByZXR1cm5PdXRjb21lKHt9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21vZGVsJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdtb2RlOiBnYXRoZXInLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdnYXRoZXInIH07XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LmRpc2FibGVkKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBtb2RlJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0Lm1vZGUpLnRvRXF1YWwoJ2dhdGhlcicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIHByb21wdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5wcm9tcHQpLnRvRXF1YWwoJ3Byb21wdCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGRpbWVuc2lvbnMnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuZGltZW5zaW9ucykudG9FcXVhbCh7IGhlaWdodDogMCwgd2lkdGg6IDAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgb3V0bGluZUNvbG9yJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0Lm91dGxpbmVDb2xvcikudG9FcXVhbCgnYmx1ZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGhvdHNwb3RDb2xvcicsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5ob3RzcG90Q29sb3IpLnRvRXF1YWwoJ2xpZ2h0Ymx1ZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIG11bHRpcGxlQ29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5tdWx0aXBsZUNvcnJlY3QpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgc2hhcGVzJywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5yZWN0YW5nbGVzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICcxJyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH1dKSxcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucG9seWdvbnMpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzQnIH1dKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJldHVybiByZXNwb25zZUNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2VDb3JyZWN0KS50b0JlKHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtb2RlOiB2aWV3JywgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICAgIHNlc3Npb24gPSB7fTtcbiAgICAgICAgZW52ID0geyBtb2RlOiAndmlldycgfTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuZGlzYWJsZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtb2RlOiBldmFsdWF0ZScsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgICBzZXNzaW9uID0geyBhbnN3ZXJzOiBbXSB9O1xuICAgICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY2hvaWNlcyB3LyBjb3JyZWN0JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5yZWN0YW5nbGVzKS50b0VxdWFsKFxuICAgICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICcxJywgY29ycmVjdDogdHJ1ZSB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH1dKSxcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucG9seWdvbnMpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzQnLCBjb3JyZWN0OiB0cnVlIH1dKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgaXMgcmVzcG9uc2UgY29ycmVjdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZUNvcnJlY3QpLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1Jlc3BvbnNlQ29ycmVjdCcsICgpID0+IHtcbiAgICBjb25zdCByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0ID0gKHNlc3Npb24pID0+IHtcbiAgICAgIGl0KGByZXNwb25zZSBpcyBub3QgY29ycmVjdCBpZiBzZXNzaW9uIGlzICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoaXNSZXNwb25zZUNvcnJlY3QocXVlc3Rpb24sIHNlc3Npb24pKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0KHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuSXNSZXNwb25zZUNvcmVjdChudWxsKTtcbiAgICByZXR1cm5Jc1Jlc3BvbnNlQ29yZWN0KHt9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHsgYW5zd2VyczogW3sgaWQ6ICcxJyB9LCB7IGlkOiAnNCcgfSwgeyBpZDogJzUnIH1dLCBpZDogJzEnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBlbnYgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ3N0dWRlbnQnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGRJbmNsdWRlQ29ycmVjdFJlc3BvbnNlIGJlaGF2aW9yJywgKCkgPT4ge1xuICAgIGl0KCdpbmNsdWRlcyBjb3JyZWN0IHByb3BlcnR5IHdoZW4gc2hvdWxkSW5jbHVkZUNvcnJlY3RSZXNwb25zZSBpcyB0cnVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAnZXZhbHVhdGUnIH07XG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIGVudik7XG4gICAgICBcbiAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLnJlY3RhbmdsZXMpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICcxJywgY29ycmVjdDogdHJ1ZSB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH1dKVxuICAgICAgKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLnBvbHlnb25zKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICc0JywgY29ycmVjdDogdHJ1ZSB9XSkpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMuY2lyY2xlcykudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGlkOiAnNScsIGNvcnJlY3Q6IHRydWUgfV0pKTtcbiAgICB9KTtcblxuICAgIGl0KCdleGNsdWRlcyBjb3JyZWN0IHByb3BlcnR5IHdoZW4gc2hvdWxkSW5jbHVkZUNvcnJlY3RSZXNwb25zZSBpcyBmYWxzZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7fSwgZW52KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucmVjdGFuZ2xlcykudG9FcXVhbChcbiAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzEnIH0sIHsgaWQ6ICcyJyB9LCB7IGlkOiAnMycgfV0pXG4gICAgICApO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMucG9seWdvbnMpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzQnIH1dKSk7XG4gICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5jaXJjbGVzKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICc1JyB9XSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luY2x1ZGVzIGNvcnJlY3QgZm9yIGluc3RydWN0b3IgaW4gdmlldyBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZW52ID0geyBtb2RlOiAndmlldycsIHJvbGU6ICdpbnN0cnVjdG9yJyB9O1xuICAgICAgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCBlbnYpO1xuXG4gICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5yZWN0YW5nbGVzKS50b0VxdWFsKFxuICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGlkOiAnMScsIGNvcnJlY3Q6IHRydWUgfSwgeyBpZDogJzInIH0sIHsgaWQ6ICczJyB9XSlcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzdWx0LnNoYXBlcy5wb2x5Z29ucykudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGlkOiAnNCcsIGNvcnJlY3Q6IHRydWUgfV0pKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLmNpcmNsZXMpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBpZDogJzUnLCBjb3JyZWN0OiB0cnVlIH1dKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhjbHVkZXMgY29ycmVjdCBmb3Igc3R1ZGVudCBpbiB2aWV3IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBlbnYgPSB7IG1vZGU6ICd2aWV3Jywgcm9sZTogJ3N0dWRlbnQnIH07XG4gICAgICByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIGVudik7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLnJlY3RhbmdsZXMpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICcxJyB9LCB7IGlkOiAnMicgfSwgeyBpZDogJzMnIH1dKVxuICAgICAgKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuc2hhcGVzLnBvbHlnb25zKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW3sgaWQ6ICc0JyB9XSkpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5zaGFwZXMuY2lyY2xlcykudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFt7IGlkOiAnNScgfV0pKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFFQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNO0VBQzNCLElBQUlDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEdBQUc7RUFFbENDLFVBQVUsQ0FBQyxNQUFNO0lBQ2ZILFFBQVEsR0FBRztNQUNUSSxNQUFNLEVBQUUsUUFBUTtNQUNoQkMsYUFBYSxFQUFFLElBQUk7TUFDbkJDLFFBQVEsRUFBRSxFQUFFO01BQ1pDLFVBQVUsRUFBRTtRQUNWQyxNQUFNLEVBQUUsQ0FBQztRQUNUQyxLQUFLLEVBQUU7TUFDVCxDQUFDO01BQ0RDLFlBQVksRUFBRSxNQUFNO01BQ3BCQyxZQUFZLEVBQUUsV0FBVztNQUN6QkMsTUFBTSxFQUFFO1FBQ05DLFVBQVUsRUFBRSxDQUNWO1VBQ0VDLEVBQUUsRUFBRSxHQUFHO1VBQ1BDLE9BQU8sRUFBRTtRQUNYLENBQUMsRUFDRDtVQUNFRCxFQUFFLEVBQUU7UUFDTixDQUFDLEVBQ0Q7VUFDRUEsRUFBRSxFQUFFO1FBQ04sQ0FBQyxDQUNGO1FBQ0RFLFFBQVEsRUFBRSxDQUNSO1VBQ0VGLEVBQUUsRUFBRSxHQUFHO1VBQ1BDLE9BQU8sRUFBRTtRQUNYLENBQUMsQ0FDRjtRQUNERSxPQUFPLEVBQUUsQ0FDUDtVQUNFSCxFQUFFLEVBQUUsR0FBRztVQUNQQyxPQUFPLEVBQUU7UUFDWCxDQUFDO01BRUwsQ0FBQztNQUNERyxlQUFlLEVBQUUsSUFBSTtNQUNyQkMsY0FBYyxFQUFFO0lBQ2xCLENBQUM7RUFDSCxDQUFDLENBQUM7RUFFRnJCLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxNQUFNO0lBQzVD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
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ describe('utils', () => {
4
+ xit('todo', () => {
5
+ expect(true).toEqual(false);
6
+ });
7
+ });
8
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsInhpdCIsImV4cGVjdCIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3V0aWxzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICB4aXQoJ3RvZG8nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRydWUpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU07RUFDdEJDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUNoQkMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQzdCLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==