@pie-element/categorize 13.1.7 → 13.1.9

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 (39) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/configure/CHANGELOG.md +8 -0
  3. package/configure/lib/__tests__/main.test.js +100 -0
  4. package/configure/lib/__tests__/utils.js +39 -0
  5. package/configure/lib/design/__tests__/builder.test.js +34 -0
  6. package/configure/lib/design/__tests__/buttons.test.js +36 -0
  7. package/configure/lib/design/__tests__/header.test.js +37 -0
  8. package/configure/lib/design/__tests__/index.test.js +269 -0
  9. package/configure/lib/design/__tests__/input-header.test.js +41 -0
  10. package/configure/lib/design/categories/__tests__/alternateResponses.test.js +93 -0
  11. package/configure/lib/design/categories/__tests__/category.test.js +65 -0
  12. package/configure/lib/design/categories/__tests__/choice-preview.test.js +52 -0
  13. package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +63 -0
  14. package/configure/lib/design/categories/__tests__/index.test.js +91 -0
  15. package/configure/lib/design/choices/__tests__/choice.test.js +62 -0
  16. package/configure/lib/design/choices/__tests__/config.test.js +66 -0
  17. package/configure/lib/design/choices/__tests__/index.test.js +70 -0
  18. package/configure/package.json +3 -3
  19. package/controller/CHANGELOG.md +4 -0
  20. package/controller/lib/__tests__/index.test.js +526 -0
  21. package/controller/package.json +1 -1
  22. package/docs/demo/.pie/.configure/package.json +10 -0
  23. package/docs/demo/.pie/.configure/yarn.lock +2122 -0
  24. package/docs/demo/.pie/.controllers/package.json +10 -0
  25. package/docs/demo/.pie/.controllers/yarn.lock +110 -0
  26. package/docs/demo/.pie/info.entry.js +89 -0
  27. package/docs/demo/.pie/info.webpack.config.js +119 -0
  28. package/docs/demo/.pie/package.json +10 -0
  29. package/docs/demo/.pie/yarn.lock +2137 -0
  30. package/docs/demo/pie.manifest.json +11 -0
  31. package/lib/__tests__/index.test.js +197 -0
  32. package/lib/categorize/__tests__/categories.test.js +138 -0
  33. package/lib/categorize/__tests__/category.test.js +137 -0
  34. package/lib/categorize/__tests__/choice.test.js +88 -0
  35. package/lib/categorize/__tests__/choices.test.js +118 -0
  36. package/lib/categorize/__tests__/droppable-placeholder.test.js +96 -0
  37. package/lib/categorize/__tests__/grid-content.test.js +48 -0
  38. package/lib/categorize/__tests__/index.test.js +250 -0
  39. package/package.json +3 -3
@@ -0,0 +1,526 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _index = require("../index");
5
+ var _react = _interopRequireDefault(require("react"));
6
+ jest.mock('@pie-lib/categorize', () => ({
7
+ // used this algorithm in order to control the value of correct; check `fakeCorrect` below
8
+ buildState: (mockedCategories, choices, answers) => ({
9
+ categories: mockedCategories,
10
+ correct: mockedCategories === answers
11
+ })
12
+ }));
13
+ jest.mock('@pie-lib/feedback', () => ({
14
+ getFeedbackForCorrectness: () => new Promise(resolve => resolve('This is getFeedbackForCorrectness response.'))
15
+ }));
16
+ jest.mock('@pie-lib/controller-utils', () => ({
17
+ ...jest.requireActual('@pie-lib/controller-utils'),
18
+ getShuffledChoices: (choices, session, updateSession, key) => {
19
+ const currentShuffled = ((session || {}).shuffledValues || []).filter(v => v);
20
+ if (session && !currentShuffled.length && updateSession && typeof updateSession === 'function') {
21
+ updateSession();
22
+ }
23
+ return choices;
24
+ },
25
+ partialScoring: {
26
+ enabled: (config, env) => {
27
+ config = config || {};
28
+ env = env || {};
29
+ if (config.partialScoring === false) {
30
+ return false;
31
+ }
32
+ if (env.partialScoring === false) {
33
+ return false;
34
+ }
35
+ return true;
36
+ }
37
+ }
38
+ }));
39
+ const categories = [{
40
+ id: '1',
41
+ label: 'One'
42
+ }];
43
+ const choices = [{
44
+ id: '1',
45
+ content: 'Foo'
46
+ }, {
47
+ id: '2',
48
+ content: 'Bar'
49
+ }];
50
+ const category10 = {
51
+ id: '10',
52
+ label: 'SUM=10'
53
+ };
54
+ const category11 = {
55
+ id: '11',
56
+ label: 'SUM=11'
57
+ };
58
+ const choice3 = {
59
+ id: '3',
60
+ content: '3'
61
+ };
62
+ const choice4 = {
63
+ id: '4',
64
+ content: '4'
65
+ };
66
+ const choice5 = {
67
+ id: '5',
68
+ content: '5'
69
+ };
70
+ const choice6 = {
71
+ id: '6',
72
+ content: '6'
73
+ };
74
+ const choice7 = {
75
+ id: '7',
76
+ content: '7'
77
+ };
78
+ const scoringCorrectResponseNoAlternates = [{
79
+ category: '10',
80
+ choices: ['3', '7']
81
+ }, {
82
+ category: '11',
83
+ choices: ['4', '7']
84
+ }];
85
+ const scoringCorrectResponseWithAlternates = [{
86
+ category: '10',
87
+ choices: ['3', '7'],
88
+ alternateResponses: [['4', '6']]
89
+ }, {
90
+ category: '11',
91
+ choices: ['4', '7'],
92
+ alternateResponses: [['5', '6']]
93
+ }];
94
+ const makeQuestion = extras => ({
95
+ categories,
96
+ choices,
97
+ correctResponse: [{
98
+ category: '1',
99
+ choices: ['1', '2']
100
+ }],
101
+ lockChoiceOrder: true,
102
+ ...extras
103
+ });
104
+ describe('controller', () => {
105
+ let question = makeQuestion();
106
+ describe('model', () => {
107
+ it('returns model', async () => {
108
+ const result = await (0, _index.model)(question, {}, {
109
+ mode: 'gather'
110
+ }, jest.fn());
111
+ expect(result).toMatchObject({
112
+ ...question,
113
+ correctResponse: undefined
114
+ });
115
+ });
116
+ it('returns model in evaluate mode', async () => {
117
+ const result = await (0, _index.model)(question, {}, {
118
+ mode: 'evaluate'
119
+ }, jest.fn());
120
+ expect(result).toMatchObject({
121
+ ...question,
122
+ correctness: 'incorrect'
123
+ });
124
+ });
125
+ it('feedback: returns proper feedback in evaluate mode', async () => {
126
+ const result = await (0, _index.model)({
127
+ ...question,
128
+ feedbackEnabled: true
129
+ }, {}, {
130
+ mode: 'evaluate'
131
+ }, jest.fn());
132
+ expect(result.feedback).toEqual('This is getFeedbackForCorrectness response.');
133
+ });
134
+ it('feedback: returns proper feedback if feedback is not enabled', async () => {
135
+ const result = await (0, _index.model)({
136
+ ...question,
137
+ feedbackEnabled: false
138
+ }, {}, {
139
+ mode: 'evaluate'
140
+ }, jest.fn());
141
+ expect(result.feedback).toEqual(undefined);
142
+ });
143
+ it('feedback: returns proper feedback in gather mode', async () => {
144
+ const result = await (0, _index.model)(question, {}, {
145
+ mode: 'gather'
146
+ }, jest.fn());
147
+ expect(result.feedback).toEqual(undefined);
148
+ });
149
+ describe('disabled', () => {
150
+ it('disabled false for gather', async () => {
151
+ const result = await (0, _index.model)(question, {}, {
152
+ mode: 'gather'
153
+ }, jest.fn());
154
+ expect(result).toMatchObject({
155
+ disabled: false
156
+ });
157
+ });
158
+ it('disabled true for view', async () => {
159
+ const result = await (0, _index.model)(question, {}, {
160
+ mode: 'view'
161
+ }, jest.fn());
162
+ expect(result).toMatchObject({
163
+ disabled: true
164
+ });
165
+ });
166
+ it('disabled true for evaluate', async () => {
167
+ const result = await (0, _index.model)(question, {}, {
168
+ mode: 'evaluate'
169
+ }, jest.fn());
170
+ expect(result).toMatchObject({
171
+ disabled: true
172
+ });
173
+ });
174
+ });
175
+ it('adds correctResponse for evaluate', async () => {
176
+ const result = await (0, _index.model)(question, {}, {
177
+ mode: 'evaluate'
178
+ }, jest.fn());
179
+ expect(result).toMatchObject({
180
+ correctResponse: [{
181
+ category: '1',
182
+ choices: ['1', '2']
183
+ }]
184
+ });
185
+ });
186
+ it('adds default config', async () => {
187
+ const result = await (0, _index.model)(question, {}, {
188
+ mode: 'gather'
189
+ }, jest.fn());
190
+ expect(result).toMatchObject({
191
+ categoriesPerRow: 2,
192
+ choicesLabel: ''
193
+ });
194
+ });
195
+ describe('model - with updateSession', () => {
196
+ it('calls updateSession', async () => {
197
+ const session = {
198
+ id: '1',
199
+ element: 'categorize-element'
200
+ };
201
+ const env = {
202
+ mode: 'gather'
203
+ };
204
+ const updateSession = jest.fn().mockResolvedValue();
205
+ await (0, _index.model)({
206
+ id: '1',
207
+ element: 'categorize-element',
208
+ ...question,
209
+ lockChoiceOrder: false
210
+ }, session, env, updateSession);
211
+ expect(updateSession).toHaveBeenCalled();
212
+ });
213
+ });
214
+ });
215
+ describe('correct response', () => {
216
+ it('returns correct response if env is correct', async () => {
217
+ const sess = await (0, _index.createCorrectResponseSession)(question, {
218
+ mode: 'gather',
219
+ role: 'instructor'
220
+ });
221
+ expect(sess).toEqual({
222
+ answers: [{
223
+ category: '1',
224
+ choices: ['1', '2']
225
+ }],
226
+ id: 1
227
+ });
228
+ });
229
+ it('returns null env is student', async () => {
230
+ const noResult = await (0, _index.createCorrectResponseSession)(question, {
231
+ mode: 'gather',
232
+ role: 'student'
233
+ });
234
+ expect(noResult).toBeNull();
235
+ });
236
+ });
237
+ const mC1 = [{
238
+ id: '10',
239
+ label: 'SUM=10',
240
+ correct: true,
241
+ choices: [{
242
+ ...choice3,
243
+ correct: true
244
+ }, {
245
+ ...choice7,
246
+ correct: true
247
+ }]
248
+ }, {
249
+ id: '11',
250
+ label: 'SUM=11',
251
+ correct: false,
252
+ choices: [{
253
+ ...choice3,
254
+ correct: true
255
+ }, {
256
+ ...choice7,
257
+ correct: false
258
+ }]
259
+ }];
260
+ const mC2 = [{
261
+ id: '10',
262
+ label: 'SUM=10',
263
+ correct: true,
264
+ choices: [{
265
+ ...choice3,
266
+ correct: true
267
+ }, {
268
+ ...choice7,
269
+ correct: true
270
+ }]
271
+ }, {
272
+ id: '11',
273
+ label: 'SUM=11',
274
+ correct: true,
275
+ choices: [{
276
+ ...choice3,
277
+ correct: true
278
+ }, {
279
+ ...choice7,
280
+ correct: true
281
+ }]
282
+ }];
283
+ const mC3 = [{
284
+ id: '10',
285
+ label: 'SUM=10',
286
+ correct: true,
287
+ choices: [{
288
+ ...choice3,
289
+ correct: true
290
+ }, {
291
+ ...choice3,
292
+ correct: false
293
+ }, {
294
+ ...choice7,
295
+ correct: true
296
+ }]
297
+ }, {
298
+ id: '11',
299
+ label: 'SUM=11',
300
+ correct: true,
301
+ choices: [{
302
+ ...choice3,
303
+ correct: true
304
+ }, {
305
+ ...choice7,
306
+ correct: true
307
+ }]
308
+ }];
309
+ const mC4 = [{
310
+ id: '10',
311
+ label: 'SUM=10',
312
+ correct: true,
313
+ choices: [{
314
+ ...choice3,
315
+ correct: true
316
+ }, {
317
+ ...choice3,
318
+ correct: false
319
+ }, {
320
+ ...choice7,
321
+ correct: true
322
+ }]
323
+ }, {
324
+ id: '11',
325
+ label: 'SUM=11',
326
+ correct: true,
327
+ choices: [{
328
+ ...choice3,
329
+ correct: true
330
+ }, {
331
+ ...choice7,
332
+ correct: true
333
+ }, {
334
+ ...choice7,
335
+ correct: false
336
+ }]
337
+ }];
338
+ const mC5 = [{
339
+ id: '10',
340
+ label: 'SUM=10',
341
+ correct: false,
342
+ choices: [{
343
+ ...choice3,
344
+ correct: false
345
+ }, {
346
+ ...choice3,
347
+ correct: false
348
+ }, {
349
+ ...choice7,
350
+ correct: false
351
+ }]
352
+ }, {
353
+ id: '11',
354
+ label: 'SUM=11',
355
+ correct: false,
356
+ choices: [{
357
+ ...choice3,
358
+ correct: false
359
+ }, {
360
+ ...choice7,
361
+ correct: false
362
+ }, {
363
+ ...choice7,
364
+ correct: false
365
+ }]
366
+ }];
367
+ describe('getCorrectness', () => {
368
+ it('mode: gather -> resolves undefined', () => {
369
+ expect((0, _index.getCorrectness)(question, {}, {
370
+ mode: 'gather'
371
+ })).resolves.toEqual(undefined);
372
+ });
373
+ it('mode: view -> resolves undefined', () => {
374
+ expect((0, _index.getCorrectness)(question, {}, {
375
+ mode: 'view'
376
+ })).resolves.toEqual(undefined);
377
+ });
378
+ const sessionCorrect = {
379
+ answers: mC2
380
+ };
381
+ const sessionPartially = {
382
+ answers: mC1
383
+ };
384
+ it.each`
385
+ session | categories | expected
386
+ ${undefined} | ${mC1} | ${'incorrect'}
387
+ ${null} | ${mC1} | ${'incorrect'}
388
+ ${{}} | ${mC1} | ${'incorrect'}
389
+ ${sessionCorrect} | ${mC2} | ${'correct'}
390
+ ${sessionPartially} | ${mC1} | ${'partially-correct'}
391
+ `('mode: evaluate -> resolves $expected if session is $session', async ({
392
+ session,
393
+ categories,
394
+ expected
395
+ }) => {
396
+ const res = await (0, _index.getCorrectness)({
397
+ ...question,
398
+ partialScoring: true,
399
+ categories,
400
+ correctResponse: scoringCorrectResponseNoAlternates
401
+ }, session, {
402
+ mode: 'evaluate'
403
+ });
404
+ expect(res).toEqual(expected);
405
+ });
406
+ });
407
+ describe('getTotalScore', () => {
408
+ it.each`
409
+ partialScoring | mockedCategories | fakeCorrect | expected
410
+ ${true} | ${mC1} | ${false} | ${0}
411
+ ${false} | ${mC1} | ${false} | ${0}
412
+ ${true} | ${mC1} | ${true} | ${1}
413
+ ${false} | ${mC1} | ${true} | ${1}
414
+ `('With Alternates, partialScoring = $partialScoring -> dychotomous: $expected', ({
415
+ partialScoring,
416
+ mockedCategories,
417
+ fakeCorrect,
418
+ expected
419
+ }) => {
420
+ const totalScore = (0, _index.getTotalScore)({
421
+ ...question,
422
+ partialScoring,
423
+ categories: mockedCategories,
424
+ correctResponse: scoringCorrectResponseWithAlternates
425
+ }, {
426
+ answers: fakeCorrect ? mockedCategories : []
427
+ }, {});
428
+ expect(totalScore).toEqual(expected);
429
+ });
430
+ it.each`
431
+ partialScoring | mockedCategories | expected
432
+ ${true} | ${mC1} | ${0.75}
433
+ ${false} | ${mC1} | ${0}
434
+ ${true} | ${mC2} | ${1}
435
+ ${false} | ${mC2} | ${0}
436
+ ${true} | ${mC3} | ${0.75}
437
+ ${true} | ${mC4} | ${0.5}
438
+ ${true} | ${mC5} | ${0}
439
+ `('Without Alternates, partialScoring = $partialScoring -> $expected', ({
440
+ partialScoring,
441
+ mockedCategories,
442
+ expected
443
+ }) => {
444
+ const totalScore = (0, _index.getTotalScore)({
445
+ ...question,
446
+ partialScoring,
447
+ categories: mockedCategories,
448
+ correctResponse: scoringCorrectResponseNoAlternates
449
+ }, {
450
+ answers: []
451
+ }, {});
452
+ expect(totalScore).toEqual(expected);
453
+ });
454
+ });
455
+ describe('getPartialScore', () => {
456
+ it.each`
457
+ mockedCategories | expected
458
+ ${mC1} | ${0.75}
459
+ ${mC2} | ${1}
460
+ ${mC3} | ${0.75}
461
+ ${mC4} | ${0.5}
462
+ ${mC5} | ${0}
463
+ `('Without Alternates, partialScoring = $partialScoring -> $expected', ({
464
+ mockedCategories,
465
+ expected
466
+ }) => {
467
+ const totalScore = (0, _index.getPartialScore)(scoringCorrectResponseNoAlternates, mockedCategories);
468
+ expect(totalScore).toEqual(expected);
469
+ });
470
+ });
471
+ describe('outcome', () => {
472
+ describe('mode: gather', () => {
473
+ it('rejects with an error for gather', () => {
474
+ expect((0, _index.outcome)(question, {}, {
475
+ mode: 'gather'
476
+ })).rejects.toEqual(expect.any(Error));
477
+ });
478
+ });
479
+ describe('mode: view', () => {
480
+ it('rejects with an error for gather', () => {
481
+ expect((0, _index.outcome)(question, {}, {
482
+ mode: 'view'
483
+ })).rejects.toEqual(expect.any(Error));
484
+ });
485
+ });
486
+ describe('mode: evaluate', () => {
487
+ it.each`
488
+ partialScoring | envPartialScoring | expected
489
+ ${true} | ${undefined} | ${{
490
+ empty: false,
491
+ score: 0.75
492
+ }}
493
+ ${false} | ${undefined} | ${{
494
+ empty: false,
495
+ score: 1
496
+ }}
497
+ ${true} | ${false} | ${{
498
+ empty: false,
499
+ score: 1
500
+ }}
501
+ ${false} | ${true} | ${{
502
+ empty: false,
503
+ score: 1
504
+ }}
505
+ `('element.partialScoring = $partialScoring, env.partialScoring = $envPartialScoring', async ({
506
+ partialScoring,
507
+ envPartialScoring,
508
+ expected
509
+ }) => {
510
+ const result = await (0, _index.outcome)({
511
+ ...question,
512
+ partialScoring,
513
+ correctResponse: scoringCorrectResponseNoAlternates,
514
+ categories: mC1
515
+ }, {
516
+ answers: mC1
517
+ }, {
518
+ mode: 'evaluate',
519
+ partialScoring: envPartialScoring
520
+ });
521
+ expect(result).toEqual(expect.objectContaining(expected));
522
+ });
523
+ });
524
+ });
525
+ });
526
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiYnVpbGRTdGF0ZSIsIm1vY2tlZENhdGVnb3JpZXMiLCJjaG9pY2VzIiwiYW5zd2VycyIsImNhdGVnb3JpZXMiLCJjb3JyZWN0IiwiZ2V0RmVlZGJhY2tGb3JDb3JyZWN0bmVzcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVxdWlyZUFjdHVhbCIsImdldFNodWZmbGVkQ2hvaWNlcyIsInNlc3Npb24iLCJ1cGRhdGVTZXNzaW9uIiwia2V5IiwiY3VycmVudFNodWZmbGVkIiwic2h1ZmZsZWRWYWx1ZXMiLCJmaWx0ZXIiLCJ2IiwibGVuZ3RoIiwicGFydGlhbFNjb3JpbmciLCJlbmFibGVkIiwiY29uZmlnIiwiZW52IiwiaWQiLCJsYWJlbCIsImNvbnRlbnQiLCJjYXRlZ29yeTEwIiwiY2F0ZWdvcnkxMSIsImNob2ljZTMiLCJjaG9pY2U0IiwiY2hvaWNlNSIsImNob2ljZTYiLCJjaG9pY2U3Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyIsImNhdGVnb3J5Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZVdpdGhBbHRlcm5hdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwibWFrZVF1ZXN0aW9uIiwiZXh0cmFzIiwiY29ycmVjdFJlc3BvbnNlIiwibG9ja0Nob2ljZU9yZGVyIiwiZGVzY3JpYmUiLCJxdWVzdGlvbiIsIml0IiwicmVzdWx0IiwibW9kZWwiLCJtb2RlIiwiZm4iLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0IiwidW5kZWZpbmVkIiwiY29ycmVjdG5lc3MiLCJmZWVkYmFja0VuYWJsZWQiLCJmZWVkYmFjayIsInRvRXF1YWwiLCJkaXNhYmxlZCIsImNhdGVnb3JpZXNQZXJSb3ciLCJjaG9pY2VzTGFiZWwiLCJlbGVtZW50IiwibW9ja1Jlc29sdmVkVmFsdWUiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsIm1DMSIsIm1DMiIsIm1DMyIsIm1DNCIsIm1DNSIsImdldENvcnJlY3RuZXNzIiwicmVzb2x2ZXMiLCJzZXNzaW9uQ29ycmVjdCIsInNlc3Npb25QYXJ0aWFsbHkiLCJlYWNoIiwiZXhwZWN0ZWQiLCJyZXMiLCJmYWtlQ29ycmVjdCIsInRvdGFsU2NvcmUiLCJnZXRUb3RhbFNjb3JlIiwiZ2V0UGFydGlhbFNjb3JlIiwib3V0Y29tZSIsInJlamVjdHMiLCJhbnkiLCJFcnJvciIsImVtcHR5Iiwic2NvcmUiLCJlbnZQYXJ0aWFsU2NvcmluZyIsIm9iamVjdENvbnRhaW5pbmciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWwsIG91dGNvbWUsIGdldENvcnJlY3RuZXNzLCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uLCBnZXRUb3RhbFNjb3JlLCBnZXRQYXJ0aWFsU2NvcmUgfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2NhdGVnb3JpemUnLCAoKSA9PiAoe1xuICAvLyB1c2VkIHRoaXMgYWxnb3JpdGhtIGluIG9yZGVyIHRvIGNvbnRyb2wgdGhlIHZhbHVlIG9mIGNvcnJlY3Q7IGNoZWNrIGBmYWtlQ29ycmVjdGAgYmVsb3dcbiAgYnVpbGRTdGF0ZTogKG1vY2tlZENhdGVnb3JpZXMsIGNob2ljZXMsIGFuc3dlcnMpID0+ICh7XG4gICAgY2F0ZWdvcmllczogbW9ja2VkQ2F0ZWdvcmllcyxcbiAgICBjb3JyZWN0OiBtb2NrZWRDYXRlZ29yaWVzID09PSBhbnN3ZXJzLFxuICB9KSxcbn0pKTtcbmplc3QubW9jaygnQHBpZS1saWIvZmVlZGJhY2snLCAoKSA9PiAoe1xuICBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzOiAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgnVGhpcyBpcyBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzIHJlc3BvbnNlLicpKSxcbn0pKTtcbmplc3QubW9jaygnQHBpZS1saWIvY29udHJvbGxlci11dGlscycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnQHBpZS1saWIvY29udHJvbGxlci11dGlscycpLFxuICBnZXRTaHVmZmxlZENob2ljZXM6IChjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXkpID0+IHtcbiAgICBjb25zdCBjdXJyZW50U2h1ZmZsZWQgPSAoKHNlc3Npb24gfHwge30pLnNodWZmbGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIoKHYpID0+IHYpO1xuXG4gICAgaWYgKHNlc3Npb24gJiYgIWN1cnJlbnRTaHVmZmxlZC5sZW5ndGggJiYgdXBkYXRlU2Vzc2lvbiAmJiB0eXBlb2YgdXBkYXRlU2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdXBkYXRlU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjaG9pY2VzO1xuICB9LFxuICBwYXJ0aWFsU2NvcmluZzoge1xuICAgIGVuYWJsZWQ6IChjb25maWcsIGVudikgPT4ge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgZW52ID0gZW52IHx8IHt9O1xuXG4gICAgICBpZiAoY29uZmlnLnBhcnRpYWxTY29yaW5nID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnYucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgfSxcbn0pKTtcblxuY29uc3QgY2F0ZWdvcmllcyA9IFt7IGlkOiAnMScsIGxhYmVsOiAnT25lJyB9XTtcbmNvbnN0IGNob2ljZXMgPSBbXG4gIHsgaWQ6ICcxJywgY29udGVudDogJ0ZvbycgfSxcbiAgeyBpZDogJzInLCBjb250ZW50OiAnQmFyJyB9LFxuXTtcblxuY29uc3QgY2F0ZWdvcnkxMCA9IHsgaWQ6ICcxMCcsIGxhYmVsOiAnU1VNPTEwJyB9O1xuY29uc3QgY2F0ZWdvcnkxMSA9IHsgaWQ6ICcxMScsIGxhYmVsOiAnU1VNPTExJyB9O1xuXG5jb25zdCBjaG9pY2UzID0geyBpZDogJzMnLCBjb250ZW50OiAnMycgfTtcbmNvbnN0IGNob2ljZTQgPSB7IGlkOiAnNCcsIGNvbnRlbnQ6ICc0JyB9O1xuY29uc3QgY2hvaWNlNSA9IHsgaWQ6ICc1JywgY29udGVudDogJzUnIH07XG5jb25zdCBjaG9pY2U2ID0geyBpZDogJzYnLCBjb250ZW50OiAnNicgfTtcbmNvbnN0IGNob2ljZTcgPSB7IGlkOiAnNycsIGNvbnRlbnQ6ICc3JyB9O1xuY29uc3Qgc2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyA9IFtcbiAgeyBjYXRlZ29yeTogJzEwJywgY2hvaWNlczogWyczJywgJzcnXSB9LFxuICB7IGNhdGVnb3J5OiAnMTEnLCBjaG9pY2VzOiBbJzQnLCAnNyddIH0sXG5dO1xuY29uc3Qgc2NvcmluZ0NvcnJlY3RSZXNwb25zZVdpdGhBbHRlcm5hdGVzID0gW1xuICB7IGNhdGVnb3J5OiAnMTAnLCBjaG9pY2VzOiBbJzMnLCAnNyddLCBhbHRlcm5hdGVSZXNwb25zZXM6IFtbJzQnLCAnNiddXSB9LFxuICB7IGNhdGVnb3J5OiAnMTEnLCBjaG9pY2VzOiBbJzQnLCAnNyddLCBhbHRlcm5hdGVSZXNwb25zZXM6IFtbJzUnLCAnNiddXSB9LFxuXTtcblxuY29uc3QgbWFrZVF1ZXN0aW9uID0gKGV4dHJhcykgPT4gKHtcbiAgY2F0ZWdvcmllcyxcbiAgY2hvaWNlcyxcbiAgY29ycmVjdFJlc3BvbnNlOiBbeyBjYXRlZ29yeTogJzEnLCBjaG9pY2VzOiBbJzEnLCAnMiddIH1dLFxuICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gIC4uLmV4dHJhcyxcbn0pO1xuXG5kZXNjcmliZSgnY29udHJvbGxlcicsICgpID0+IHtcbiAgbGV0IHF1ZXN0aW9uID0gbWFrZVF1ZXN0aW9uKCk7XG5cbiAgZGVzY3JpYmUoJ21vZGVsJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIG1vZGVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdnYXRoZXInIH0sIGplc3QuZm4oKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgLi4ucXVlc3Rpb24sIGNvcnJlY3RSZXNwb25zZTogdW5kZWZpbmVkIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbW9kZWwgaW4gZXZhbHVhdGUgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAnZXZhbHVhdGUnIH0sIGplc3QuZm4oKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgLi4ucXVlc3Rpb24sIGNvcnJlY3RuZXNzOiAnaW5jb3JyZWN0JyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWVkYmFjazogcmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaW4gZXZhbHVhdGUgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKHsgLi4ucXVlc3Rpb24sIGZlZWRiYWNrRW5hYmxlZDogdHJ1ZSB9LCB7fSwgeyBtb2RlOiAnZXZhbHVhdGUnIH0sIGplc3QuZm4oKSk7XG4gICAgICBleHBlY3QocmVzdWx0LmZlZWRiYWNrKS50b0VxdWFsKCdUaGlzIGlzIGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3MgcmVzcG9uc2UuJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmVlZGJhY2s6IHJldHVybnMgcHJvcGVyIGZlZWRiYWNrIGlmIGZlZWRiYWNrIGlzIG5vdCBlbmFibGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7fSxcbiAgICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICAgIGplc3QuZm4oKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzdWx0LmZlZWRiYWNrKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmVlZGJhY2s6IHJldHVybnMgcHJvcGVyIGZlZWRiYWNrIGluIGdhdGhlciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdnYXRoZXInIH0sIGplc3QuZm4oKSk7XG4gICAgICBleHBlY3QocmVzdWx0LmZlZWRiYWNrKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZGlzYWJsZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnZGlzYWJsZWQgZmFsc2UgZm9yIGdhdGhlcicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdnYXRoZXInIH0sIGplc3QuZm4oKSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeyBkaXNhYmxlZDogZmFsc2UgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc2FibGVkIHRydWUgZm9yIHZpZXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGVsKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAndmlldycgfSwgamVzdC5mbigpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaXNhYmxlZCB0cnVlIGZvciBldmFsdWF0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWRkcyBjb3JyZWN0UmVzcG9uc2UgZm9yIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFt7IGNhdGVnb3J5OiAnMScsIGNob2ljZXM6IFsnMScsICcyJ10gfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRzIGRlZmF1bHQgY29uZmlnJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdnYXRoZXInIH0sIGplc3QuZm4oKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgY2F0ZWdvcmllc1BlclJvdzogMixcbiAgICAgICAgY2hvaWNlc0xhYmVsOiAnJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGVsIC0gd2l0aCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB7IGlkOiAnMScsIGVsZW1lbnQ6ICdjYXRlZ29yaXplLWVsZW1lbnQnIH07XG4gICAgICAgIGNvbnN0IGVudiA9IHsgbW9kZTogJ2dhdGhlcicgfTtcbiAgICAgICAgY29uc3QgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgpO1xuICAgICAgICBhd2FpdCBtb2RlbChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJzEnLFxuICAgICAgICAgICAgZWxlbWVudDogJ2NhdGVnb3JpemUtZWxlbWVudCcsXG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXNzaW9uLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICB1cGRhdGVTZXNzaW9uLFxuICAgICAgICApO1xuICAgICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXNzID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ2luc3RydWN0b3InLFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7XG4gICAgICAgIGFuc3dlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYXRlZ29yeTogJzEnLFxuICAgICAgICAgICAgY2hvaWNlczogWycxJywgJzInXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBpZDogMSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBlbnYgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG5vUmVzdWx0ID0gYXdhaXQgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbihxdWVzdGlvbiwge1xuICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgcm9sZTogJ3N0dWRlbnQnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1DMSA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzExJyxcbiAgICAgIGxhYmVsOiAnU1VNPTExJyxcbiAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuICBjb25zdCBtQzIgPSBbXG4gICAge1xuICAgICAgaWQ6ICcxMCcsXG4gICAgICBsYWJlbDogJ1NVTT0xMCcsXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxMScsXG4gICAgICBsYWJlbDogJ1NVTT0xMScsXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DMyA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuICBjb25zdCBtQzQgPSBbXG4gICAge1xuICAgICAgaWQ6ICcxMCcsXG4gICAgICBsYWJlbDogJ1NVTT0xMCcsXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzExJyxcbiAgICAgIGxhYmVsOiAnU1VNPTExJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuICBjb25zdCBtQzUgPSBbXG4gICAge1xuICAgICAgaWQ6ICcxMCcsXG4gICAgICBsYWJlbDogJ1NVTT0xMCcsXG4gICAgICBjb3JyZWN0OiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzExJyxcbiAgICAgIGxhYmVsOiAnU1VNPTExJyxcbiAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGRlc2NyaWJlKCdnZXRDb3JyZWN0bmVzcycsICgpID0+IHtcbiAgICBpdCgnbW9kZTogZ2F0aGVyIC0+IHJlc29sdmVzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRDb3JyZWN0bmVzcyhxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSkpLnJlc29sdmVzLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdtb2RlOiB2aWV3IC0+IHJlc29sdmVzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRDb3JyZWN0bmVzcyhxdWVzdGlvbiwge30sIHsgbW9kZTogJ3ZpZXcnIH0pKS5yZXNvbHZlcy50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXNzaW9uQ29ycmVjdCA9IHsgYW5zd2VyczogbUMyIH07XG4gICAgY29uc3Qgc2Vzc2lvblBhcnRpYWxseSA9IHsgYW5zd2VyczogbUMxIH07XG5cbiAgICBpdC5lYWNoYFxuICAgICAgc2Vzc2lvbiAgICAgICAgICAgICB8IGNhdGVnb3JpZXMgfCBleHBlY3RlZFxuICAgICAgJHt1bmRlZmluZWR9ICAgICAgICB8ICR7bUMxfSAgICAgfCAkeydpbmNvcnJlY3QnfVxuICAgICAgJHtudWxsfSAgICAgICAgICAgICB8ICR7bUMxfSAgICAgfCAkeydpbmNvcnJlY3QnfVxuICAgICAgJHt7fX0gICAgICAgICAgICAgICB8ICR7bUMxfSAgICAgfCAkeydpbmNvcnJlY3QnfVxuICAgICAgJHtzZXNzaW9uQ29ycmVjdH0gICB8ICR7bUMyfSAgICAgfCAkeydjb3JyZWN0J31cbiAgICAgICR7c2Vzc2lvblBhcnRpYWxseX0gfCAke21DMX0gICAgIHwgJHsncGFydGlhbGx5LWNvcnJlY3QnfVxuICAgIGAoJ21vZGU6IGV2YWx1YXRlIC0+IHJlc29sdmVzICRleHBlY3RlZCBpZiBzZXNzaW9uIGlzICRzZXNzaW9uJywgYXN5bmMgKHsgc2Vzc2lvbiwgY2F0ZWdvcmllcywgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Q29ycmVjdG5lc3MoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgICBjYXRlZ29yaWVzLFxuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogc2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVzKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFRvdGFsU2NvcmUnLCAoKSA9PiB7XG4gICAgaXQuZWFjaGBcbiAgICAgIHBhcnRpYWxTY29yaW5nIHwgbW9ja2VkQ2F0ZWdvcmllcyB8IGZha2VDb3JyZWN0IHwgZXhwZWN0ZWRcbiAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHttQzF9ICAgICAgICAgICB8ICR7ZmFsc2V9ICAgIHwgJHswfVxuICAgICAgJHtmYWxzZX0gICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHtmYWxzZX0gICAgfCAkezB9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAke3RydWV9ICAgICB8ICR7MX1cbiAgICAgICR7ZmFsc2V9ICAgICAgIHwgJHttQzF9ICAgICAgICAgICB8ICR7dHJ1ZX0gICAgIHwgJHsxfVxuICAgIGAoXG4gICAgICAnV2l0aCBBbHRlcm5hdGVzLCBwYXJ0aWFsU2NvcmluZyA9ICRwYXJ0aWFsU2NvcmluZyAtPiBkeWNob3RvbW91czogJGV4cGVjdGVkJyxcbiAgICAgICh7IHBhcnRpYWxTY29yaW5nLCBtb2NrZWRDYXRlZ29yaWVzLCBmYWtlQ29ycmVjdCwgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFNjb3JlID0gZ2V0VG90YWxTY29yZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogbW9ja2VkQ2F0ZWdvcmllcyxcbiAgICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogc2NvcmluZ0NvcnJlY3RSZXNwb25zZVdpdGhBbHRlcm5hdGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBhbnN3ZXJzOiBmYWtlQ29ycmVjdCA/IG1vY2tlZENhdGVnb3JpZXMgOiBbXSB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdCh0b3RhbFNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGl0LmVhY2hgXG4gICAgICBwYXJ0aWFsU2NvcmluZyB8IG1vY2tlZENhdGVnb3JpZXMgfCBleHBlY3RlZFxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHswLjc1fVxuICAgICAgJHtmYWxzZX0gICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHswfVxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DMn0gICAgICAgICAgIHwgJHsxfVxuICAgICAgJHtmYWxzZX0gICAgICAgfCAke21DMn0gICAgICAgICAgIHwgJHswfVxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DM30gICAgICAgICAgIHwgJHswLjc1fVxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DNH0gICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUM1fSAgICAgICAgICAgfCAkezB9XG4gICAgYChcbiAgICAgICdXaXRob3V0IEFsdGVybmF0ZXMsIHBhcnRpYWxTY29yaW5nID0gJHBhcnRpYWxTY29yaW5nIC0+ICRleHBlY3RlZCcsXG4gICAgICAoeyBwYXJ0aWFsU2NvcmluZywgbW9ja2VkQ2F0ZWdvcmllcywgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFNjb3JlID0gZ2V0VG90YWxTY29yZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogbW9ja2VkQ2F0ZWdvcmllcyxcbiAgICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogc2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYW5zd2VyczogW10gfSxcbiAgICAgICAgICB7fSxcbiAgICAgICAgKTtcblxuICAgICAgICBleHBlY3QodG90YWxTY29yZSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRQYXJ0aWFsU2NvcmUnLCAoKSA9PiB7XG4gICAgaXQuZWFjaGBcbiAgICAgIG1vY2tlZENhdGVnb3JpZXMgfCBleHBlY3RlZFxuICAgICAgJHttQzF9ICAgICAgICAgICB8ICR7MC43NX1cbiAgICAgICR7bUMyfSAgICAgICAgICAgfCAkezF9XG4gICAgICAke21DM30gICAgICAgICAgIHwgJHswLjc1fVxuICAgICAgJHttQzR9ICAgICAgICAgICB8ICR7MC41fVxuICAgICAgJHttQzV9ICAgICAgICAgICB8ICR7MH1cbiAgICBgKCdXaXRob3V0IEFsdGVybmF0ZXMsIHBhcnRpYWxTY29yaW5nID0gJHBhcnRpYWxTY29yaW5nIC0+ICRleHBlY3RlZCcsICh7IG1vY2tlZENhdGVnb3JpZXMsIGV4cGVjdGVkIH0pID0+IHtcbiAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBnZXRQYXJ0aWFsU2NvcmUoc2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcywgbW9ja2VkQ2F0ZWdvcmllcyk7XG5cbiAgICAgIGV4cGVjdCh0b3RhbFNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vZGU6IGdhdGhlcicsICgpID0+IHtcbiAgICAgIGl0KCdyZWplY3RzIHdpdGggYW4gZXJyb3IgZm9yIGdhdGhlcicsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG91dGNvbWUocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdnYXRoZXInIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShFcnJvcikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZTogdmlldycsICgpID0+IHtcbiAgICAgIGl0KCdyZWplY3RzIHdpdGggYW4gZXJyb3IgZm9yIGdhdGhlcicsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG91dGNvbWUocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICd2aWV3JyB9KSkucmVqZWN0cy50b0VxdWFsKGV4cGVjdC5hbnkoRXJyb3IpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vZGU6IGV2YWx1YXRlJywgKCkgPT4ge1xuICAgICAgaXQuZWFjaGBcbiAgICAgICAgcGFydGlhbFNjb3JpbmcgfCBlbnZQYXJ0aWFsU2NvcmluZyB8IGV4cGVjdGVkXG4gICAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgfCAke3sgZW1wdHk6IGZhbHNlLCBzY29yZTogMC43NSB9fVxuICAgICAgICAke2ZhbHNlfSAgICAgICB8ICR7dW5kZWZpbmVkfSAgICAgIHwgJHt7IGVtcHR5OiBmYWxzZSwgc2NvcmU6IDEgfX1cbiAgICAgICAgJHt0cnVlfSAgICAgICAgfCAke2ZhbHNlfSAgICAgICAgICB8ICR7eyBlbXB0eTogZmFsc2UsIHNjb3JlOiAxIH19XG4gICAgICAgICR7ZmFsc2V9ICAgICAgIHwgJHt0cnVlfSAgICAgICAgICAgfCAke3sgZW1wdHk6IGZhbHNlLCBzY29yZTogMSB9fVxuICAgICAgYChcbiAgICAgICAgJ2VsZW1lbnQucGFydGlhbFNjb3JpbmcgPSAkcGFydGlhbFNjb3JpbmcsIGVudi5wYXJ0aWFsU2NvcmluZyA9ICRlbnZQYXJ0aWFsU2NvcmluZycsXG4gICAgICAgIGFzeW5jICh7IHBhcnRpYWxTY29yaW5nLCBlbnZQYXJ0aWFsU2NvcmluZywgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG91dGNvbWUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBwYXJ0aWFsU2NvcmluZyxcbiAgICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLFxuICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBtQzEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbnN3ZXJzOiBtQzEgfSxcbiAgICAgICAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJywgcGFydGlhbFNjb3Jpbmc6IGVudlBhcnRpYWxTY29yaW5nIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKGV4cGVjdGVkKSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQUcsSUFBSSxDQUFDQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTztFQUN0QztFQUNBQyxVQUFVLEVBQUVBLENBQUNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUVDLE9BQU8sTUFBTTtJQUNuREMsVUFBVSxFQUFFSCxnQkFBZ0I7SUFDNUJJLE9BQU8sRUFBRUosZ0JBQWdCLEtBQUtFO0VBQ2hDLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNITCxJQUFJLENBQUNDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxPQUFPO0VBQ3BDTyx5QkFBeUIsRUFBRUEsQ0FBQSxLQUFNLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLQSxPQUFPLENBQUMsNkNBQTZDLENBQUM7QUFDbEgsQ0FBQyxDQUFDLENBQUM7QUFDSFYsSUFBSSxDQUFDQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsT0FBTztFQUM1QyxHQUFHRCxJQUFJLENBQUNXLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQztFQUNsREMsa0JBQWtCLEVBQUVBLENBQUNSLE9BQU8sRUFBRVMsT0FBTyxFQUFFQyxhQUFh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
@@ -8,7 +8,7 @@
8
8
  "@pie-lib/translator": "4.0.2",
9
9
  "lodash-es": "^4.17.23"
10
10
  },
11
- "version": "10.1.5",
11
+ "version": "10.1.6",
12
12
  "description": "",
13
13
  "scripts": {},
14
14
  "main": "lib/index.js",
@@ -0,0 +1,10 @@
1
+ {
2
+ "description": "auto generated package.json",
3
+ "license": "MIT",
4
+ "name": "configure-generated-pkg",
5
+ "private": true,
6
+ "version": "0.0.1",
7
+ "dependencies": {
8
+ "@pie-element/categorize-configure": "file:../node_modules/@pie-element/categorize/configure"
9
+ }
10
+ }