@pie-element/placement-ordering 14.1.8 → 14.3.0-beta.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.
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+
3
+ var _lodashEs = require("lodash-es");
4
+ var controller = _interopRequireWildcard(require("../index"));
5
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
6
+ describe('index', () => {
7
+ let base = o => {
8
+ o = (0, _lodashEs.merge)({
9
+ prompt: 'hi',
10
+ promptEnabled: true,
11
+ choices: [],
12
+ correctResponse: [],
13
+ feedbackEnabled: true
14
+ }, o);
15
+ return o;
16
+ };
17
+ describe('model', () => {
18
+ let assertModel = (q, s, e, partialExpected) => {
19
+ return async () => {
20
+ if ((0, _lodashEs.isFunction)(partialExpected) && partialExpected.name === 'Error') {
21
+ expect(() => controller.model(q, s, e)).toThrow(Error);
22
+ return Promise.resolve();
23
+ } else {
24
+ const result = await controller.model(q, s, e);
25
+ if ((0, _lodashEs.isFunction)(partialExpected)) {
26
+ return partialExpected(result);
27
+ } else {
28
+ expect(result).toMatchObject(partialExpected);
29
+ }
30
+ }
31
+ };
32
+ };
33
+ it('returns prompt', assertModel(base(), {}, {}, m => expect(m.prompt).toEqual('hi')));
34
+ it('returns empty config for mode=gather', assertModel(base(), {}, {
35
+ mode: 'gather'
36
+ }, {}));
37
+ it('returns empty config for mode=view', assertModel(base(), {}, {
38
+ mode: 'view'
39
+ }, {
40
+ disabled: true
41
+ }));
42
+ it('returns config.disabled=true for mode=evaluate', assertModel(base(), {}, {
43
+ mode: 'evaluate'
44
+ }, {
45
+ disabled: true
46
+ }));
47
+ it('returns feedback', assertModel(base({
48
+ correctResponse: ['a', 'b'],
49
+ feedback: {
50
+ correct: {
51
+ type: 'custom',
52
+ custom: 'foo'
53
+ }
54
+ }
55
+ }), {
56
+ value: ['a', 'b']
57
+ }, {
58
+ mode: 'evaluate'
59
+ }, {
60
+ feedback: 'foo'
61
+ }));
62
+ describe('choices and outcomes', () => {
63
+ let model, session, env;
64
+ model = base({
65
+ correctResponse: ['a', 'b', 'c'],
66
+ alternateResponses: [{
67
+ response: ['c', 'b', 'a']
68
+ }],
69
+ choices: [{
70
+ label: 'a',
71
+ id: 'a'
72
+ }, {
73
+ label: 'b',
74
+ id: 'b'
75
+ }, {
76
+ label: 'c',
77
+ id: 'c'
78
+ }]
79
+ });
80
+ session = {
81
+ value: ['a', 'b', 'c']
82
+ };
83
+ env = {
84
+ mode: 'evaluate'
85
+ };
86
+ it('choices', assertModel(model, {}, {}, {
87
+ choices: [{
88
+ id: 'a',
89
+ label: 'a'
90
+ }, {
91
+ id: 'b',
92
+ label: 'b'
93
+ }, {
94
+ label: 'c',
95
+ id: 'c'
96
+ }]
97
+ }));
98
+
99
+ // Main Correct Response
100
+ it('returns outcomes - 3 correct', assertModel(model, session, env, {
101
+ outcomes: [{
102
+ id: 'a',
103
+ outcome: 'correct'
104
+ }, {
105
+ id: 'b',
106
+ outcome: 'correct'
107
+ }, {
108
+ id: 'c',
109
+ outcome: 'correct'
110
+ }]
111
+ }));
112
+
113
+ // Alternate Correct Response
114
+ it('returns outcomes for alternate response - 3 correct', assertModel(model, {
115
+ value: ['c', 'b', 'a']
116
+ }, env, {
117
+ outcomes: [{
118
+ id: 'c',
119
+ outcome: 'correct'
120
+ }, {
121
+ id: 'b',
122
+ outcome: 'correct'
123
+ }, {
124
+ id: 'a',
125
+ outcome: 'correct'
126
+ }]
127
+ }));
128
+
129
+ // Main Correct Response
130
+ it('returns outcomes - 1 correct', assertModel(model, {
131
+ value: ['a']
132
+ }, env, {
133
+ outcomes: [{
134
+ id: 'a',
135
+ outcome: 'correct'
136
+ }]
137
+ }));
138
+
139
+ // Alternate Correct Response
140
+ it('returns outcomes for alternate - 1 correct', assertModel(model, {
141
+ value: ['c']
142
+ }, env, {
143
+ outcomes: [{
144
+ id: 'c',
145
+ outcome: 'correct'
146
+ }]
147
+ }));
148
+ it('does not return config.correctResponse - 1 correct', assertModel(model, session, env, {
149
+ disabled: true
150
+ }));
151
+ it('returns outcomes - 2 incorrect', assertModel(model, {
152
+ value: ['b', 'a']
153
+ }, env, {
154
+ outcomes: [{
155
+ id: 'b',
156
+ outcome: 'incorrect'
157
+ }, {
158
+ id: 'a',
159
+ outcome: 'incorrect'
160
+ }]
161
+ }));
162
+ it('returns config.correctResponse - 2 - incorrect', assertModel(model, {
163
+ value: ['b', 'a']
164
+ }, env, {
165
+ correctResponse: ['a', 'b', 'c']
166
+ }));
167
+ });
168
+ describe('session not set', () => {
169
+ const assertModelCorrectness = session => {
170
+ it(`returns correctness: incorrect of session is ${JSON.stringify(session)}`, async () => {
171
+ const m = await controller.model(base({
172
+ correctResponse: ['a', 'b']
173
+ }), session, {
174
+ mode: 'evaluate'
175
+ });
176
+ expect(m.correctness).toEqual('incorrect');
177
+ });
178
+ };
179
+ assertModelCorrectness(undefined);
180
+ assertModelCorrectness(null);
181
+ assertModelCorrectness({});
182
+ });
183
+ describe('correct response', () => {
184
+ const model = base({
185
+ correctResponse: ['a', 'b', 'c'],
186
+ alternateResponses: [{
187
+ response: ['c', 'b', 'a']
188
+ }],
189
+ choices: [{
190
+ label: 'a',
191
+ id: 'a'
192
+ }, {
193
+ label: 'b',
194
+ id: 'b'
195
+ }, {
196
+ label: 'c',
197
+ id: 'c'
198
+ }]
199
+ });
200
+ it('returns correct response if env is correct', async () => {
201
+ const sess = await controller.createCorrectResponseSession(model, {
202
+ mode: 'gather',
203
+ role: 'instructor'
204
+ });
205
+ expect(sess).toEqual({
206
+ id: '1',
207
+ value: ['a', 'b', 'c']
208
+ });
209
+ });
210
+ it('returns correct response if env is correct for shuffled choices', async () => {
211
+ const model = base({
212
+ correctResponse: ['a', 'b', 'c'],
213
+ alternateResponses: [{
214
+ response: ['c', 'b', 'a']
215
+ }],
216
+ choices: [{
217
+ label: 'c',
218
+ id: 'c'
219
+ }, {
220
+ label: 'b',
221
+ id: 'b'
222
+ }, {
223
+ label: 'a',
224
+ id: 'a'
225
+ }]
226
+ });
227
+ const sess = await controller.createCorrectResponseSession(model, {
228
+ mode: 'gather',
229
+ role: 'instructor'
230
+ });
231
+ expect(sess).toEqual({
232
+ id: '1',
233
+ value: ['a', 'b', 'c']
234
+ });
235
+ });
236
+ it('returns null if mode is evaluate', async () => {
237
+ const sess = await controller.createCorrectResponseSession(model, {
238
+ mode: 'evaluate',
239
+ role: 'instructor'
240
+ });
241
+ expect(sess).toBeNull();
242
+ });
243
+ it('returns null if role is student', async () => {
244
+ const noResult = await controller.createCorrectResponseSession(model, {
245
+ mode: 'gather',
246
+ role: 'student'
247
+ });
248
+ expect(noResult).toBeNull();
249
+ });
250
+ });
251
+ });
252
+ describe('outcome', () => {
253
+ const assertOutcome = (question, value, expectedScore, env) => {
254
+ it(`${expectedScore} when answer: ${value} and question: ${JSON.stringify(question)}, env: ${JSON.stringify(env)}`, async () => {
255
+ const result = await controller.outcome(question, {
256
+ value
257
+ }, env);
258
+ expect(result.score).toEqual(expectedScore);
259
+ });
260
+ };
261
+ const assertOutcomeError = (question, session, env) => {
262
+ it(`throws error for ${JSON.stringify(question)}`, () => expect(controller.outcome(question, session, env)).rejects.toThrow(controller.questionError()));
263
+ };
264
+ const assertOutcomeSessionNotset = session => {
265
+ it(`return score: 0 and empty: true if session is ${JSON.stringify(session)}`, () => expect(controller.outcome({}, session, {
266
+ mode: 'evaluate'
267
+ })).resolves.toEqual({
268
+ score: 0,
269
+ empty: true,
270
+ logTrace: ["Student did not interact with the placement-ordering item."]
271
+ }));
272
+ };
273
+ assertOutcomeError(null, {
274
+ value: []
275
+ }, {});
276
+ assertOutcomeError({}, {
277
+ value: []
278
+ }, {});
279
+ assertOutcomeError({
280
+ correctResponse: []
281
+ }, {
282
+ value: []
283
+ }, {});
284
+ assertOutcomeSessionNotset(undefined);
285
+ assertOutcomeSessionNotset(null);
286
+ assertOutcomeSessionNotset({});
287
+
288
+ // Main Correct Response
289
+ assertOutcome({
290
+ partialScoring: true,
291
+ correctResponse: ['a'],
292
+ alternateResponses: [{
293
+ response: ['c']
294
+ }]
295
+ }, ['a'], 1);
296
+ assertOutcome({
297
+ partialScoring: true,
298
+ correctResponse: ['a'],
299
+ alternateResponses: [{
300
+ response: ['c']
301
+ }]
302
+ }, ['b'], 0);
303
+ assertOutcome({
304
+ correctResponse: ['a', 'b', 'c'],
305
+ alternateResponses: [{
306
+ response: ['b', 'c', 'a']
307
+ }]
308
+ }, ['c', 'a', 'b'], 0.33);
309
+ assertOutcome({
310
+ correctResponse: ['a', 'b'],
311
+ alternateResponses: [['c', 'b']]
312
+ }, ['c', 'a', 'b'], 0);
313
+ assertOutcome({
314
+ correctResponse: ['a', 'b', 'c'],
315
+ alternateResponses: [{
316
+ response: ['a', 'c', 'b']
317
+ }]
318
+ }, ['a', 'b'], 0.33);
319
+ assertOutcome({
320
+ partialScoring: true,
321
+ correctResponse: ['a', 'b', 'c'],
322
+ alternateResponses: [{
323
+ response: ['a', 'b']
324
+ }]
325
+ }, ['c', 'a', 'b'], 0.33);
326
+ assertOutcome({
327
+ partialScoring: false,
328
+ correctResponse: ['a', 'b', 'c'],
329
+ alternateResponses: [{
330
+ response: ['a', 'c', 'b']
331
+ }]
332
+ }, ['a', 'b'], 0);
333
+ assertOutcome({
334
+ partialScoring: false,
335
+ correctResponse: ['a', 'b', 'c'],
336
+ alternateResponses: [{
337
+ response: ['a', 'b']
338
+ }]
339
+ }, ['c', 'a', 'b'], 0, {
340
+ partialScoring: true
341
+ });
342
+
343
+ // Alternate Correct Response
344
+ assertOutcome({
345
+ partialScoring: true,
346
+ correctResponse: ['a'],
347
+ alternateResponses: [{
348
+ response: ['c']
349
+ }]
350
+ }, ['c'], 1);
351
+ assertOutcome({
352
+ partialScoring: true,
353
+ correctResponse: ['a'],
354
+ alternateResponses: [{
355
+ response: ['c']
356
+ }]
357
+ }, ['b'], 0);
358
+ assertOutcome({
359
+ correctResponse: ['a', 'b', 'c'],
360
+ alternateResponses: [{
361
+ response: ['c', 'b', 'a']
362
+ }]
363
+ }, ['c', 'a', 'b'], 0.67);
364
+ assertOutcome({
365
+ correctResponse: ['a', 'b'],
366
+ alternateResponses: [{
367
+ response: ['c', 'b']
368
+ }]
369
+ }, ['c', 'a', 'b'], 0);
370
+ assertOutcome({
371
+ correctResponse: ['a', 'b', 'c'],
372
+ alternateResponses: [{
373
+ response: ['c', 'b', 'a']
374
+ }]
375
+ }, ['c', 'b'], 0.33);
376
+ assertOutcome({
377
+ partialScoring: true,
378
+ correctResponse: ['a', 'b', 'c'],
379
+ alternateResponses: [{
380
+ response: ['a', 'c', 'b']
381
+ }]
382
+ }, ['c', 'a', 'b'], 0.67);
383
+ assertOutcome({
384
+ partialScoring: false,
385
+ correctResponse: ['a', 'b', 'c'],
386
+ alternateResponses: [{
387
+ response: ['a', 'c', 'b']
388
+ }]
389
+ }, ['a', 'b'], 0);
390
+ assertOutcome({
391
+ partialScoring: false,
392
+ correctResponse: ['a', 'b', 'c'],
393
+ alternateResponses: [{
394
+ response: ['a', 'c', 'b']
395
+ }]
396
+ }, ['c', 'a', 'b'], 0, {
397
+ partialScoring: true
398
+ });
399
+ });
400
+ });
401
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiY29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJiYXNlIiwibWVyZ2UiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiY2hvaWNlcyIsImNvcnJlY3RSZXNwb25zZSIsImZlZWRiYWNrRW5hYmxlZCIsImFzc2VydE1vZGVsIiwicSIsInMiLCJwYXJ0aWFsRXhwZWN0ZWQiLCJpc0Z1bmN0aW9uIiwibmFtZSIsImV4cGVjdCIsIm1vZGVsIiwidG9UaHJvdyIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXN1bHQiLCJ0b01hdGNoT2JqZWN0IiwiaXQiLCJtIiwidG9FcXVhbCIsIm1vZGUiLCJkaXNhYmxlZCIsImZlZWRiYWNrIiwiY29ycmVjdCIsInR5cGUiLCJjdXN0b20iLCJ2YWx1ZSIsInNlc3Npb24iLCJlbnYiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyZXNwb25zZSIsImxhYmVsIiwiaWQiLCJvdXRjb21lcyIsIm91dGNvbWUiLCJhc3NlcnRNb2RlbENvcnJlY3RuZXNzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvcnJlY3RuZXNzIiwidW5kZWZpbmVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwidG9CZU51bGwiLCJub1Jlc3VsdCIsImFzc2VydE91dGNvbWUiLCJxdWVzdGlvbiIsImV4cGVjdGVkU2NvcmUiLCJzY29yZSIsImFzc2VydE91dGNvbWVFcnJvciIsInJlamVjdHMiLCJxdWVzdGlvbkVycm9yIiwiYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQiLCJyZXNvbHZlcyIsImVtcHR5IiwibG9nVHJhY2UiLCJwYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyBjb250cm9sbGVyIGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ2luZGV4JywgKCkgPT4ge1xuICBsZXQgYmFzZSA9IChvKSA9PiB7XG4gICAgbyA9IG1lcmdlKFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6ICdoaScsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFtdLFxuICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgbyxcbiAgICApO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0TW9kZWwgPSAocSwgcywgZSwgcGFydGlhbEV4cGVjdGVkKSA9PiB7XG4gICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpICYmIHBhcnRpYWxFeHBlY3RlZC5uYW1lID09PSAnRXJyb3InKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSkpLnRvVGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSk7XG5cbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbEV4cGVjdGVkKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QocGFydGlhbEV4cGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGl0KFxuICAgICAgJ3JldHVybnMgcHJvbXB0JyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHt9LCAobSkgPT4gZXhwZWN0KG0ucHJvbXB0KS50b0VxdWFsKCdoaScpKSxcbiAgICApO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgY29uZmlnIGZvciBtb2RlPWdhdGhlcicsIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwge30pKTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGNvbmZpZyBmb3IgbW9kZT12aWV3JywgYXNzZXJ0TW9kZWwoYmFzZSgpLCB7fSwgeyBtb2RlOiAndmlldycgfSwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGNvbmZpZy5kaXNhYmxlZD10cnVlIGZvciBtb2RlPWV2YWx1YXRlJyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCB7IGRpc2FibGVkOiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGZlZWRiYWNrJyxcbiAgICAgIGFzc2VydE1vZGVsKFxuICAgICAgICBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sXG4gICAgICAgICAgZmVlZGJhY2s6IHsgY29ycmVjdDogeyB0eXBlOiAnY3VzdG9tJywgY3VzdG9tOiAnZm9vJyB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7IHZhbHVlOiBbJ2EnLCAnYiddIH0sXG4gICAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgICB7IGZlZWRiYWNrOiAnZm9vJyB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZXMgYW5kIG91dGNvbWVzJywgKCkgPT4ge1xuICAgICAgbGV0IG1vZGVsLCBzZXNzaW9uLCBlbnY7XG5cbiAgICAgIG1vZGVsID0gYmFzZSh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IGxhYmVsOiAnYScsIGlkOiAnYScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYycsIGlkOiAnYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzZXNzaW9uID0geyB2YWx1ZTogWydhJywgJ2InLCAnYyddIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgaXQoXG4gICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgYXNzZXJ0TW9kZWwoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAge30sXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7IGlkOiAnYScsIGxhYmVsOiAnYScgfSxcbiAgICAgICAgICAgICAgeyBpZDogJ2InLCBsYWJlbDogJ2InIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gTWFpbiBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgLSAzIGNvcnJlY3QnLFxuICAgICAgICBhc3NlcnRNb2RlbChtb2RlbCwgc2Vzc2lvbiwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFsdGVybmF0ZSBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgZm9yIGFsdGVybmF0ZSByZXNwb25zZSAtIDMgY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2MnLCAnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdjJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZVxuICAgICAgaXQoXG4gICAgICAgICdyZXR1cm5zIG91dGNvbWVzIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYSddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VcbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyBmb3IgYWx0ZXJuYXRlIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYyddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJldHVybiBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMSBjb3JyZWN0JywgYXNzZXJ0TW9kZWwobW9kZWwsIHNlc3Npb24sIGVudiwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyAtIDIgaW5jb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdiJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMiAtIGluY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2InLCAnYSddIH0sIGVudiwge1xuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2Vzc2lvbiBub3Qgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0TW9kZWxDb3JyZWN0bmVzcyA9IChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGl0KGByZXR1cm5zIGNvcnJlY3RuZXNzOiBpbmNvcnJlY3Qgb2Ygc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgY29udHJvbGxlci5tb2RlbChiYXNlKHsgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYiddIH0pLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICAgICAgZXhwZWN0KG0uY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2luY29ycmVjdCcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3ModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICBhc3NlcnRNb2RlbENvcnJlY3RuZXNzKHt9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdiJywgaWQ6ICdiJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCBmb3Igc2h1ZmZsZWQgY2hvaWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCBpZDogJ2MnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzID0gYXdhaXQgY29udHJvbGxlci5jcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKG1vZGVsLCB7XG4gICAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9CZU51bGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChxdWVzdGlvbiwgdmFsdWUsIGV4cGVjdGVkU2NvcmUsIGVudikgPT4ge1xuICAgICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gd2hlbiBhbnN3ZXI6ICR7dmFsdWV9IGFuZCBxdWVzdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICApfSwgZW52OiAke0pTT04uc3RyaW5naWZ5KGVudil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWUgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZFNjb3JlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZUVycm9yID0gKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgICAgIGl0KGB0aHJvd3MgZXJyb3IgZm9yICR7SlNPTi5zdHJpbmdpZnkocXVlc3Rpb24pfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudikpLnJlamVjdHMudG9UaHJvdyhjb250cm9sbGVyLnF1ZXN0aW9uRXJyb3IoKSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHJldHVybiBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzZXNzaW9uXG4gICAgICApfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChcbiAgICAgICAgICBjb250cm9sbGVyLm91dGNvbWUoe30sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KVxuICAgICAgICApLnJlc29sdmVzLnRvRXF1YWwoe1xuICAgICAgICAgIHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSwgbG9nVHJhY2U6IFtcIlN0dWRlbnQgZGlkIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBwbGFjZW1lbnQtb3JkZXJpbmcgaXRlbS5cIl1cbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lRXJyb3IobnVsbCwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7fSwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7IGNvcnJlY3RSZXNwb25zZTogW10gfSwgeyB2YWx1ZTogW10gfSwge30pO1xuXG4gICAgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldChudWxsKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldCh7fSk7XG5cbiAgICAvLyBNYWluIENvcnJlY3QgUmVzcG9uc2VcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydhJ10sXG4gICAgICAxLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYyddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYiddLFxuICAgICAgMCxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2InLCAnYycsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoeyBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snYycsICdiJ11dIH0sIFsnYycsICdhJywgJ2InXSwgMCk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjMzLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBBbHRlcm5hdGUgQ29ycmVjdCBSZXNwb25zZVxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYSddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnXSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZSh7IGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InXSwgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJywgJ2InXSB9XSB9LCBbJ2MnLCAnYScsICdiJ10sIDApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2InXSxcbiAgICAgIDAuMzMsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYycsICdhJywgJ2InXSxcbiAgICAgIDAsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBdUMsU0FBQUUsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLENBQUFDLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixD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W119
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ var _scoring = require("../scoring");
4
+ var _lodashEs = require("lodash-es");
5
+ describe('pairwiseCombinationScore', () => {
6
+ const assertScore = (correctResponse, opts) => (answer, expectedScore) => {
7
+ it(`${expectedScore} for ${typeof answer === 'string' ? answer : JSON.stringify(answer)}`, () => {
8
+ const c = correctResponse.split('');
9
+ const a = typeof answer === 'string' ? answer.split('') : answer;
10
+ const result = (0, _scoring.pairwiseCombinationScore)(c, a, opts);
11
+ expect(result).toEqual(expectedScore);
12
+ });
13
+ };
14
+ describe('correct response: A', () => {
15
+ const assertA = assertScore('A');
16
+ assertA('A', 1);
17
+ assertA('B', 0);
18
+ assertA('C', 0);
19
+ assertA({
20
+ foo: true
21
+ }, 0);
22
+ assertA([{
23
+ foo: true
24
+ }, {
25
+ bar: true
26
+ }], 0);
27
+ assertA('', 0);
28
+ });
29
+ describe('correct response: AB', () => {
30
+ const assertAB = assertScore('AB');
31
+ assertAB('A', 0);
32
+ assertAB('B', 0);
33
+ assertAB('C', 0);
34
+ assertAB('', 0);
35
+ assertAB('AB', 1);
36
+ assertAB('BA', 0);
37
+ assertAB('AC', 0);
38
+ });
39
+ describe('correct response: AAB', () => {
40
+ it('throws an error because of duplicate in answer', () => {
41
+ expect(() => (0, _scoring.pairwiseCombinationScore)(['A', 'A'], ['A', 'A'])).toThrow((0, _scoring.illegalArgumentError)(['A', 'A']));
42
+ });
43
+ });
44
+ describe('correct response: ABC', () => {
45
+ const assertABC = assertScore('ABC');
46
+ assertABC('', 0);
47
+ assertABC('A', 0);
48
+ assertABC('AA', 0);
49
+ assertABC('AB', 0.33);
50
+ assertABC('AC', 0.33);
51
+ assertABC('AAC', 0);
52
+ assertABC('AAB', 0);
53
+ assertABC('BAA', 0);
54
+ assertABC('ABA', 0);
55
+ assertABC('ABAB', 0);
56
+ assertABC('ABC', 1);
57
+ assertABC('ABC', 1);
58
+ assertABC('BCA', 0.33);
59
+ assertABC('CAB', 0.33);
60
+ assertABC('CBA', 0);
61
+ assertABC('ACB', 0.67);
62
+ assertABC('B', 0);
63
+ assertABC('C', 0);
64
+ assertABC('AB', 0.33);
65
+ assertABC('BC', 0.33);
66
+ assertABC('AC', 0.33);
67
+ assertABC('CA', 0);
68
+ assertABC('CB', 0);
69
+ assertABC('BA', 0);
70
+ assertABC('ABCD', 0);
71
+ });
72
+ describe('correct response: ABCD - order must be complete', () => {
73
+ const assertABCD = assertScore('ABCD', {
74
+ orderMustBeComplete: true
75
+ });
76
+ assertABCD('ABC', 0);
77
+ assertABCD('BCD', 0);
78
+ });
79
+ describe('correct response: ABCD', () => {
80
+ const assertABCD = assertScore('ABCD');
81
+ assertABCD('ABCD', 1);
82
+ assertABCD('ABDC', 0.83);
83
+ assertABCD('ABC', 0.5);
84
+ assertABCD('CDAB', 0.33);
85
+ assertABCD('CDBA', 0.17);
86
+ assertABCD('DCBA', 0);
87
+ assertABCD('DCAB', 0.17);
88
+ assertABCD('ABAB', 0);
89
+ assertABCD('AB', 0.17);
90
+ });
91
+ describe('custom override - allowDuplicates: true, orderMustBeComplete: false', () => {
92
+ describe('correct response: AAB - dups, order incomplete', () => {
93
+ const assertAAB = assertScore('AAB', {
94
+ allowDuplicates: true
95
+ });
96
+ assertAAB('', 0);
97
+ assertAAB('A', 0);
98
+ assertAAB('AA', 0.33);
99
+ assertAAB('AAC', 0.33);
100
+ assertAAB('AAB', 1);
101
+ assertAAB('BAA', 0.33);
102
+ assertAAB('ABA', 0.67);
103
+ assertAAB('ABAB', 0);
104
+ });
105
+ });
106
+ });
107
+ const correctResponse = ['c1', 'c2', 'c3', 'c4'];
108
+ const alternateResponses = [{
109
+ response: ['c4', 'c3', 'c2', 'c1']
110
+ }];
111
+ describe('score', () => {
112
+ let baseQuestion = {
113
+ correctResponse: correctResponse,
114
+ alternateResponses: alternateResponses
115
+ };
116
+ describe('partial scoring', () => {
117
+ let question = (0, _lodashEs.merge)((0, _lodashEs.cloneDeep)(baseQuestion), {
118
+ partialScoring: true
119
+ });
120
+ const assertScore = (value, expectedScore) => {
121
+ it(`${expectedScore} for: ${value}`, () => {
122
+ const result = (0, _scoring.score)(question, {
123
+ value
124
+ });
125
+ expect(result).toEqual(expectedScore);
126
+ });
127
+ };
128
+ const assertScoreSessionNotSet = session => {
129
+ it(`returns 0 if session is: ${JSON.stringify(session)}`, () => {
130
+ const result = (0, _scoring.score)(question, session);
131
+ expect(result).toEqual(0);
132
+ });
133
+ };
134
+ assertScoreSessionNotSet(undefined);
135
+ assertScoreSessionNotSet(null);
136
+ assertScoreSessionNotSet({});
137
+
138
+ // Main Correct Responses
139
+ assertScore([], 0);
140
+ assertScore(['c1'], 0);
141
+ assertScore(['c1', 'c2'], 0.17);
142
+ assertScore(['c1', 'c2', 'c3'], 0.5);
143
+ assertScore(['c1', 'c2', 'c3', 'c4'], 1);
144
+
145
+ // Alternate Correct Responses
146
+ assertScore([], 0);
147
+ assertScore(['c4'], 0);
148
+ assertScore(['c4', 'c3'], 0.17);
149
+ assertScore(['c4', 'c3', 'c2'], 0.5);
150
+ assertScore(['c4', 'c3', 'c2', 'c1'], 1);
151
+ });
152
+ });
153
+ describe('flattenCorrect', () => {
154
+ describe('correctResponse is an array of identifiers', () => {
155
+ let question = {
156
+ correctResponse: correctResponse.map(v => ({
157
+ id: v
158
+ }))
159
+ };
160
+ it('returns correctResponse field value', () => {
161
+ expect((0, _scoring.flattenCorrect)(question)).toEqual(correctResponse);
162
+ });
163
+ });
164
+ });
165
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2NvcmluZyIsInJlcXVpcmUiLCJfbG9kYXNoRXMiLCJkZXNjcmliZSIsImFzc2VydFNjb3JlIiwiY29ycmVjdFJlc3BvbnNlIiwib3B0cyIsImFuc3dlciIsImV4cGVjdGVkU2NvcmUiLCJpdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjIiwic3BsaXQiLCJhIiwicmVzdWx0IiwicGFpcndpc2VDb21iaW5hdGlvblNjb3JlIiwiZXhwZWN0IiwidG9FcXVhbCIsImFzc2VydEEiLCJmb28iLCJiYXIiLCJhc3NlcnRBQiIsInRvVGhyb3ciLCJpbGxlZ2FsQXJndW1lbnRFcnJvciIsImFzc2VydEFCQyIsImFzc2VydEFCQ0QiLCJvcmRlck11c3RCZUNvbXBsZXRlIiwiYXNzZXJ0QUFCIiwiYWxsb3dEdXBsaWNhdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwicmVzcG9uc2UiLCJiYXNlUXVlc3Rpb24iLCJxdWVzdGlvbiIsIm1lcmdlIiwiY2xvbmVEZWVwIiwicGFydGlhbFNjb3JpbmciLCJ2YWx1ZSIsInNjb3JlIiwiYXNzZXJ0U2NvcmVTZXNzaW9uTm90U2V0Iiwic2Vzc2lvbiIsInVuZGVmaW5lZCIsIm1hcCIsInYiLCJpZCIsImZsYXR0ZW5Db3JyZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9zY29yaW5nLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkNvcnJlY3QsIHNjb3JlLCBwYWlyd2lzZUNvbWJpbmF0aW9uU2NvcmUsIGlsbGVnYWxBcmd1bWVudEVycm9yIH0gZnJvbSAnLi4vc2NvcmluZyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIG1lcmdlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZGVzY3JpYmUoJ3BhaXJ3aXNlQ29tYmluYXRpb25TY29yZScsICgpID0+IHtcbiAgY29uc3QgYXNzZXJ0U2NvcmUgPSAoY29ycmVjdFJlc3BvbnNlLCBvcHRzKSA9PiAoYW5zd2VyLCBleHBlY3RlZFNjb3JlKSA9PiB7XG4gICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gZm9yICR7dHlwZW9mIGFuc3dlciA9PT0gJ3N0cmluZycgPyBhbnN3ZXIgOiBKU09OLnN0cmluZ2lmeShhbnN3ZXIpfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IGMgPSBjb3JyZWN0UmVzcG9uc2Uuc3BsaXQoJycpO1xuICAgICAgY29uc3QgYSA9IHR5cGVvZiBhbnN3ZXIgPT09ICdzdHJpbmcnID8gYW5zd2VyLnNwbGl0KCcnKSA6IGFuc3dlcjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhaXJ3aXNlQ29tYmluYXRpb25TY29yZShjLCBhLCBvcHRzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRTY29yZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2U6IEEnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0QSA9IGFzc2VydFNjb3JlKCdBJyk7XG4gICAgYXNzZXJ0QSgnQScsIDEpO1xuICAgIGFzc2VydEEoJ0InLCAwKTtcbiAgICBhc3NlcnRBKCdDJywgMCk7XG4gICAgYXNzZXJ0QSh7IGZvbzogdHJ1ZSB9LCAwKTtcbiAgICBhc3NlcnRBKFt7IGZvbzogdHJ1ZSB9LCB7IGJhcjogdHJ1ZSB9XSwgMCk7XG4gICAgYXNzZXJ0QSgnJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQicsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBQiA9IGFzc2VydFNjb3JlKCdBQicpO1xuICAgIGFzc2VydEFCKCdBJywgMCk7XG4gICAgYXNzZXJ0QUIoJ0InLCAwKTtcbiAgICBhc3NlcnRBQignQycsIDApO1xuICAgIGFzc2VydEFCKCcnLCAwKTtcbiAgICBhc3NlcnRBQignQUInLCAxKTtcbiAgICBhc3NlcnRBQignQkEnLCAwKTtcbiAgICBhc3NlcnRBQignQUMnLCAwKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2U6IEFBQicsICgpID0+IHtcbiAgICBpdCgndGhyb3dzIGFuIGVycm9yIGJlY2F1c2Ugb2YgZHVwbGljYXRlIGluIGFuc3dlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBwYWlyd2lzZUNvbWJpbmF0aW9uU2NvcmUoWydBJywgJ0EnXSwgWydBJywgJ0EnXSkpLnRvVGhyb3coaWxsZWdhbEFyZ3VtZW50RXJyb3IoWydBJywgJ0EnXSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29ycmVjdCByZXNwb25zZTogQUJDJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFCQyA9IGFzc2VydFNjb3JlKCdBQkMnKTtcbiAgICBhc3NlcnRBQkMoJycsIDApO1xuICAgIGFzc2VydEFCQygnQScsIDApO1xuICAgIGFzc2VydEFCQygnQUEnLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0FCJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdBQycsIDAuMzMpO1xuICAgIGFzc2VydEFCQygnQUFDJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQUInLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0JBQScsIDApO1xuICAgIGFzc2VydEFCQygnQUJBJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkFCJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkMnLCAxKTtcbiAgICBhc3NlcnRBQkMoJ0FCQycsIDEpO1xuICAgIGFzc2VydEFCQygnQkNBJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdDQUInLCAwLjMzKTtcbiAgICBhc3NlcnRBQkMoJ0NCQScsIDApO1xuICAgIGFzc2VydEFCQygnQUNCJywgMC42Nyk7XG4gICAgYXNzZXJ0QUJDKCdCJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdDJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQicsIDAuMzMpO1xuICAgIGFzc2VydEFCQygnQkMnLCAwLjMzKTtcbiAgICBhc3NlcnRBQkMoJ0FDJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDKCdDQScsIDApO1xuICAgIGFzc2VydEFCQygnQ0InLCAwKTtcbiAgICBhc3NlcnRBQkMoJ0JBJywgMCk7XG4gICAgYXNzZXJ0QUJDKCdBQkNEJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQkNEIC0gb3JkZXIgbXVzdCBiZSBjb21wbGV0ZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBQkNEID0gYXNzZXJ0U2NvcmUoJ0FCQ0QnLCB7IG9yZGVyTXVzdEJlQ29tcGxldGU6IHRydWUgfSk7XG4gICAgYXNzZXJ0QUJDRCgnQUJDJywgMCk7XG4gICAgYXNzZXJ0QUJDRCgnQkNEJywgMCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQkNEJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFCQ0QgPSBhc3NlcnRTY29yZSgnQUJDRCcpO1xuICAgIGFzc2VydEFCQ0QoJ0FCQ0QnLCAxKTtcbiAgICBhc3NlcnRBQkNEKCdBQkRDJywgMC44Myk7XG4gICAgYXNzZXJ0QUJDRCgnQUJDJywgMC41KTtcbiAgICBhc3NlcnRBQkNEKCdDREFCJywgMC4zMyk7XG4gICAgYXNzZXJ0QUJDRCgnQ0RCQScsIDAuMTcpO1xuICAgIGFzc2VydEFCQ0QoJ0RDQkEnLCAwKTtcbiAgICBhc3NlcnRBQkNEKCdEQ0FCJywgMC4xNyk7XG4gICAgYXNzZXJ0QUJDRCgnQUJBQicsIDApO1xuICAgIGFzc2VydEFCQ0QoJ0FCJywgMC4xNyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjdXN0b20gb3ZlcnJpZGUgLSBhbGxvd0R1cGxpY2F0ZXM6IHRydWUsIG9yZGVyTXVzdEJlQ29tcGxldGU6IGZhbHNlJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlOiBBQUIgLSBkdXBzLCBvcmRlciBpbmNvbXBsZXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0QUFCID0gYXNzZXJ0U2NvcmUoJ0FBQicsIHtcbiAgICAgICAgYWxsb3dEdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnRBQUIoJycsIDApO1xuICAgICAgYXNzZXJ0QUFCKCdBJywgMCk7XG4gICAgICBhc3NlcnRBQUIoJ0FBJywgMC4zMyk7XG4gICAgICBhc3NlcnRBQUIoJ0FBQycsIDAuMzMpO1xuICAgICAgYXNzZXJ0QUFCKCdBQUInLCAxKTtcbiAgICAgIGFzc2VydEFBQignQkFBJywgMC4zMyk7XG4gICAgICBhc3NlcnRBQUIoJ0FCQScsIDAuNjcpO1xuICAgICAgYXNzZXJ0QUFCKCdBQkFCJywgMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmNvbnN0IGNvcnJlY3RSZXNwb25zZSA9IFsnYzEnLCAnYzInLCAnYzMnLCAnYzQnXTtcbmNvbnN0IGFsdGVybmF0ZVJlc3BvbnNlcyA9IFt7IHJlc3BvbnNlOiBbJ2M0JywgJ2MzJywgJ2MyJywgJ2MxJ10gfV07XG5cbmRlc2NyaWJlKCdzY29yZScsICgpID0+IHtcbiAgbGV0IGJhc2VRdWVzdGlvbiA9IHtcbiAgICBjb3JyZWN0UmVzcG9uc2U6IGNvcnJlY3RSZXNwb25zZSxcbiAgICBhbHRlcm5hdGVSZXNwb25zZXM6IGFsdGVybmF0ZVJlc3BvbnNlcyxcbiAgfTtcblxuICBkZXNjcmliZSgncGFydGlhbCBzY29yaW5nJywgKCkgPT4ge1xuICAgIGxldCBxdWVzdGlvbiA9IG1lcmdlKGNsb25lRGVlcChiYXNlUXVlc3Rpb24pLCB7XG4gICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2VydFNjb3JlID0gKHZhbHVlLCBleHBlY3RlZFNjb3JlKSA9PiB7XG4gICAgICBpdChgJHtleHBlY3RlZFNjb3JlfSBmb3I6ICR7dmFsdWV9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY29yZShxdWVzdGlvbiwgeyB2YWx1ZSB9KTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkU2NvcmUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFzc2VydFNjb3JlU2Vzc2lvbk5vdFNldCA9IChzZXNzaW9uKSA9PiB7XG4gICAgICBpdChgcmV0dXJucyAwIGlmIHNlc3Npb24gaXM6ICR7SlNPTi5zdHJpbmdpZnkoc2Vzc2lvbil9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY29yZShxdWVzdGlvbiwgc2Vzc2lvbik7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgwKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRTY29yZVNlc3Npb25Ob3RTZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRTY29yZVNlc3Npb25Ob3RTZXQobnVsbCk7XG4gICAgYXNzZXJ0U2NvcmVTZXNzaW9uTm90U2V0KHt9KTtcblxuICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZXNcbiAgICBhc3NlcnRTY29yZShbXSwgMCk7XG4gICAgYXNzZXJ0U2NvcmUoWydjMSddLCAwKTtcbiAgICBhc3NlcnRTY29yZShbJ2MxJywgJ2MyJ10sIDAuMTcpO1xuICAgIGFzc2VydFNjb3JlKFsnYzEnLCAnYzInLCAnYzMnXSwgMC41KTtcbiAgICBhc3NlcnRTY29yZShbJ2MxJywgJ2MyJywgJ2MzJywgJ2M0J10sIDEpO1xuXG4gICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VzXG4gICAgYXNzZXJ0U2NvcmUoW10sIDApO1xuICAgIGFzc2VydFNjb3JlKFsnYzQnXSwgMCk7XG4gICAgYXNzZXJ0U2NvcmUoWydjNCcsICdjMyddLCAwLjE3KTtcbiAgICBhc3NlcnRTY29yZShbJ2M0JywgJ2MzJywgJ2MyJ10sIDAuNSk7XG4gICAgYXNzZXJ0U2NvcmUoWydjNCcsICdjMycsICdjMicsICdjMSddLCAxKTtcbiAgfSk7XG59KTtcbmRlc2NyaWJlKCdmbGF0dGVuQ29ycmVjdCcsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2NvcnJlY3RSZXNwb25zZSBpcyBhbiBhcnJheSBvZiBpZGVudGlmaWVycycsICgpID0+IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB7XG4gICAgICBjb3JyZWN0UmVzcG9uc2U6IGNvcnJlY3RSZXNwb25zZS5tYXAoKHYpID0+ICh7IGlkOiB2IH0pKSxcbiAgICB9O1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdFJlc3BvbnNlIGZpZWxkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZsYXR0ZW5Db3JyZWN0KHF1ZXN0aW9uKSkudG9FcXVhbChjb3JyZWN0UmVzcG9uc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUVBRSxRQUFRLENBQUMsMEJBQTBCLEVBQUUsTUFBTTtFQUN6QyxNQUFNQyxXQUFXLEdBQUdBLENBQUNDLGVBQWUsRUFBRUMsSUFBSSxLQUFLLENBQUNDLE1BQU0sRUFBRUMsYUFBYSxLQUFLO0lBQ3hFQyxFQUFFLENBQUMsR0FBR0QsYUFBYSxRQUFRLE9BQU9ELE1BQU0sS0FBSyxRQUFRLEdBQUdBLE1BQU0sR0FBR0csSUFBSSxDQUFDQyxTQUFTLENBQUNKLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTTtNQUMvRixNQUFNSyxDQUFDLEdBQUdQLGVBQWUsQ0FBQ1EsS0FBSyxDQUFDLEVBQUUsQ0FBQztNQUNuQyxNQUFNQyxDQUFDLEdBQUcsT0FBT1AsTUFBTSxLQUFLLFFBQVEsR0FBR0EsTUFBTSxDQUFDTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUdOLE1BQU07TUFDaEUsTUFBTVEsTUFBTSxHQUFHLElBQUFDLGlDQUF3QixFQUFDSixDQUFDLEVBQUVFLENBQUMsRUFBRVIsSUFBSSxDQUFDO01BQ25EVyxNQUFNLENBQUNGLE1BQU0sQ0FBQyxDQUFDRyxPQUFPLENBQUNWLGFBQWEsQ0FBQztJQUN2QyxDQUFDLENBQUM7RUFDSixDQUFDO0VBRURMLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNO0lBQ3BDLE1BQU1nQixPQUFPLEdBQUdmLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDaENlLE9BQU8sQ0FBQyxH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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/placement-ordering-controller",
3
- "version": "11.1.2",
3
+ "version": "11.3.0-beta.0",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",