@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.
- package/CHANGELOG.md +66 -0
- package/configure/CHANGELOG.md +66 -0
- package/configure/lib/DeleteWidget.js +31 -44
- package/configure/lib/DeleteWidget.js.map +1 -1
- package/configure/lib/__tests__/DeleteWidget.test.js +60 -0
- package/configure/lib/__tests__/hotspot-container.test.js +377 -0
- package/configure/lib/__tests__/hotspot-drawable.test.js +233 -0
- package/configure/lib/__tests__/index.test.js +211 -0
- package/configure/lib/__tests__/root.test.js +440 -0
- package/configure/lib/__tests__/utils.test.js +287 -0
- package/configure/lib/button.js +27 -46
- package/configure/lib/button.js.map +1 -1
- package/configure/lib/buttons/circle.js +21 -28
- package/configure/lib/buttons/circle.js.map +1 -1
- package/configure/lib/buttons/polygon.js +27 -34
- package/configure/lib/buttons/polygon.js.map +1 -1
- package/configure/lib/buttons/rectangle.js +27 -34
- package/configure/lib/buttons/rectangle.js.map +1 -1
- package/configure/lib/defaults.js +3 -4
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-circle.js +133 -199
- package/configure/lib/hotspot-circle.js.map +1 -1
- package/configure/lib/hotspot-container.js +251 -356
- package/configure/lib/hotspot-container.js.map +1 -1
- package/configure/lib/hotspot-drawable.js +361 -473
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +93 -140
- package/configure/lib/hotspot-palette.js.map +1 -1
- package/configure/lib/hotspot-polygon.js +213 -318
- package/configure/lib/hotspot-polygon.js.map +1 -1
- package/configure/lib/hotspot-rectangle.js +129 -193
- package/configure/lib/hotspot-rectangle.js.map +1 -1
- package/configure/lib/icons.js +1 -1
- package/configure/lib/icons.js.map +1 -1
- package/configure/lib/image-konva.js +47 -87
- package/configure/lib/image-konva.js.map +1 -1
- package/configure/lib/index.js +163 -223
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/root.js +302 -394
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/shapes/circle.js +70 -102
- package/configure/lib/shapes/circle.js.map +1 -1
- package/configure/lib/shapes/index.js +5 -13
- package/configure/lib/shapes/index.js.map +1 -1
- package/configure/lib/shapes/polygon.js +65 -97
- package/configure/lib/shapes/polygon.js.map +1 -1
- package/configure/lib/shapes/rectagle.js +70 -102
- package/configure/lib/shapes/rectagle.js.map +1 -1
- package/configure/lib/shapes/utils.js +3 -9
- package/configure/lib/shapes/utils.js.map +1 -1
- package/configure/lib/upload-control.js +26 -53
- package/configure/lib/upload-control.js.map +1 -1
- package/configure/lib/utils.js +85 -138
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +11 -10
- package/configure/src/__tests__/index.test.js +11 -5
- package/configure/src/button.jsx +12 -20
- package/configure/src/hotspot-circle.jsx +5 -18
- package/configure/src/hotspot-container.jsx +82 -98
- package/configure/src/hotspot-drawable.jsx +43 -45
- package/configure/src/hotspot-palette.jsx +45 -37
- package/configure/src/hotspot-polygon.jsx +4 -20
- package/configure/src/hotspot-rectangle.jsx +4 -17
- package/configure/src/index.js +12 -2
- package/configure/src/root.jsx +85 -79
- package/configure/src/upload-control.jsx +6 -16
- package/controller/CHANGELOG.md +52 -0
- package/controller/lib/__tests__/index.test.js +586 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +3 -4
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +152 -206
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +15 -35
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/container.test.js +221 -0
- package/lib/__tests__/index.test.js +113 -0
- package/lib/__tests__/polygon.test.js +245 -0
- package/lib/__tests__/rectangle.test.js +236 -0
- package/lib/__tests__/session-updater.test.js +69 -0
- package/lib/hotspot/circle.js +111 -170
- package/lib/hotspot/circle.js.map +1 -1
- package/lib/hotspot/container.js +175 -261
- package/lib/hotspot/container.js.map +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/icons.js.map +1 -1
- package/lib/hotspot/image-konva-tooltip.js +66 -113
- package/lib/hotspot/image-konva-tooltip.js.map +1 -1
- package/lib/hotspot/index.js +136 -199
- package/lib/hotspot/index.js.map +1 -1
- package/lib/hotspot/polygon.js +151 -215
- package/lib/hotspot/polygon.js.map +1 -1
- package/lib/hotspot/rectangle.js +130 -186
- package/lib/hotspot/rectangle.js.map +1 -1
- package/lib/index.js +188 -257
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js +13 -19
- package/lib/session-updater.js.map +1 -1
- package/package.json +14 -11
- package/src/hotspot/circle.jsx +2 -13
- package/src/hotspot/container.jsx +35 -50
- package/src/hotspot/index.jsx +16 -28
- package/src/hotspot/polygon.jsx +4 -13
- package/src/hotspot/rectangle.jsx +4 -13
- package/src/index.js +21 -12
- package/LICENSE.md +0 -5
- package/configure/node_modules/debug/CHANGELOG.md +0 -395
- package/configure/node_modules/debug/LICENSE +0 -19
- package/configure/node_modules/debug/README.md +0 -437
- package/configure/node_modules/debug/node.js +0 -1
- package/configure/node_modules/debug/package.json +0 -51
- package/configure/node_modules/debug/src/browser.js +0 -180
- package/configure/node_modules/debug/src/common.js +0 -249
- package/configure/node_modules/debug/src/index.js +0 -12
- 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==
|