@pie-element/categorize 12.0.0-beta.1 → 12.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/configure/lib/defaults.js +4 -1
  2. package/configure/lib/defaults.js.map +1 -1
  3. package/configure/lib/design/builder.js +3 -4
  4. package/configure/lib/design/builder.js.map +1 -1
  5. package/configure/lib/design/buttons.js +1 -1
  6. package/configure/lib/design/categories/RowLabel.js +1 -1
  7. package/configure/lib/design/categories/alternateResponses.js +1 -1
  8. package/configure/lib/design/categories/category.js +1 -1
  9. package/configure/lib/design/categories/choice-preview.js +1 -1
  10. package/configure/lib/design/categories/droppable-placeholder.js +1 -1
  11. package/configure/lib/design/categories/index.js +1 -1
  12. package/configure/lib/design/choices/choice.js +1 -1
  13. package/configure/lib/design/choices/config.js +1 -1
  14. package/configure/lib/design/choices/index.js +1 -1
  15. package/configure/lib/design/header.js +1 -1
  16. package/configure/lib/design/index.js +1 -1
  17. package/configure/lib/design/input-header.js +1 -1
  18. package/configure/lib/design/utils.js +1 -1
  19. package/configure/lib/index.js +1 -1
  20. package/configure/lib/main.js +1 -1
  21. package/configure/lib/utils.js +1 -1
  22. package/configure/package.json +11 -11
  23. package/controller/lib/defaults.js +1 -1
  24. package/controller/lib/index.js +5 -5
  25. package/controller/lib/index.js.map +1 -1
  26. package/controller/lib/utils.js +1 -1
  27. package/controller/package.json +5 -5
  28. package/lib/categorize/categories.js +1 -1
  29. package/lib/categorize/category.js +2 -25
  30. package/lib/categorize/category.js.map +1 -1
  31. package/lib/categorize/choice.js +1 -1
  32. package/lib/categorize/choices.js +1 -1
  33. package/lib/categorize/droppable-placeholder.js +29 -4
  34. package/lib/categorize/droppable-placeholder.js.map +1 -1
  35. package/lib/categorize/grid-content.js +1 -1
  36. package/lib/categorize/index.js +1 -1
  37. package/lib/index.js +1 -1
  38. package/package.json +12 -12
  39. package/configure/lib/__tests__/main.test.js +0 -100
  40. package/configure/lib/__tests__/utils.js +0 -39
  41. package/configure/lib/design/__tests__/builder.test.js +0 -34
  42. package/configure/lib/design/__tests__/buttons.test.js +0 -36
  43. package/configure/lib/design/__tests__/header.test.js +0 -37
  44. package/configure/lib/design/__tests__/index.test.js +0 -125
  45. package/configure/lib/design/__tests__/input-header.test.js +0 -41
  46. package/configure/lib/design/categories/__tests__/alternateResponses.test.js +0 -93
  47. package/configure/lib/design/categories/__tests__/category.test.js +0 -65
  48. package/configure/lib/design/categories/__tests__/choice-preview.test.js +0 -52
  49. package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +0 -63
  50. package/configure/lib/design/categories/__tests__/index.test.js +0 -91
  51. package/configure/lib/design/choices/__tests__/choice.test.js +0 -62
  52. package/configure/lib/design/choices/__tests__/config.test.js +0 -66
  53. package/configure/lib/design/choices/__tests__/index.test.js +0 -70
  54. package/controller/lib/__tests__/index.test.js +0 -526
  55. package/docs/demo/.pie/.configure/package.json +0 -10
  56. package/docs/demo/.pie/.configure/yarn.lock +0 -2181
  57. package/docs/demo/.pie/.controllers/package.json +0 -10
  58. package/docs/demo/.pie/.controllers/yarn.lock +0 -110
  59. package/docs/demo/.pie/info.entry.js +0 -89
  60. package/docs/demo/.pie/info.webpack.config.js +0 -119
  61. package/docs/demo/.pie/package.json +0 -10
  62. package/docs/demo/.pie/yarn.lock +0 -2190
  63. package/docs/demo/pie.manifest.json +0 -11
  64. package/lib/__tests__/index.test.js +0 -197
  65. package/lib/categorize/__tests__/categories.test.js +0 -138
  66. package/lib/categorize/__tests__/category.test.js +0 -137
  67. package/lib/categorize/__tests__/choice.test.js +0 -88
  68. package/lib/categorize/__tests__/choices.test.js +0 -118
  69. package/lib/categorize/__tests__/droppable-placeholder.test.js +0 -96
  70. package/lib/categorize/__tests__/grid-content.test.js +0 -48
  71. package/lib/categorize/__tests__/index.test.js +0 -152
@@ -1,526 +0,0 @@
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(expected);
522
- });
523
- });
524
- });
525
- });
526
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiYnVpbGRTdGF0ZSIsIm1vY2tlZENhdGVnb3JpZXMiLCJjaG9pY2VzIiwiYW5zd2VycyIsImNhdGVnb3JpZXMiLCJjb3JyZWN0IiwiZ2V0RmVlZGJhY2tGb3JDb3JyZWN0bmVzcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVxdWlyZUFjdHVhbCIsImdldFNodWZmbGVkQ2hvaWNlcyIsInNlc3Npb24iLCJ1cGRhdGVTZXNzaW9uIiwia2V5IiwiY3VycmVudFNodWZmbGVkIiwic2h1ZmZsZWRWYWx1ZXMiLCJmaWx0ZXIiLCJ2IiwibGVuZ3RoIiwicGFydGlhbFNjb3JpbmciLCJlbmFibGVkIiwiY29uZmlnIiwiZW52IiwiaWQiLCJsYWJlbCIsImNvbnRlbnQiLCJjYXRlZ29yeTEwIiwiY2F0ZWdvcnkxMSIsImNob2ljZTMiLCJjaG9pY2U0IiwiY2hvaWNlNSIsImNob2ljZTYiLCJjaG9pY2U3Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyIsImNhdGVnb3J5Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZVdpdGhBbHRlcm5hdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwibWFrZVF1ZXN0aW9uIiwiZXh0cmFzIiwiY29ycmVjdFJlc3BvbnNlIiwibG9ja0Nob2ljZU9yZGVyIiwiZGVzY3JpYmUiLCJxdWVzdGlvbiIsIml0IiwicmVzdWx0IiwibW9kZWwiLCJtb2RlIiwiZm4iLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0IiwidW5kZWZpbmVkIiwiY29ycmVjdG5lc3MiLCJmZWVkYmFja0VuYWJsZWQiLCJmZWVkYmFjayIsInRvRXF1YWwiLCJkaXNhYmxlZCIsImNhdGVnb3JpZXNQZXJSb3ciLCJjaG9pY2VzTGFiZWwiLCJlbGVtZW50IiwibW9ja1Jlc29sdmVkVmFsdWUiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsIm1DMSIsIm1DMiIsIm1DMyIsIm1DNCIsIm1DNSIsImdldENvcnJlY3RuZXNzIiwicmVzb2x2ZXMiLCJzZXNzaW9uQ29ycmVjdCIsInNlc3Npb25QYXJ0aWFsbHkiLCJlYWNoIiwiZXhwZWN0ZWQiLCJyZXMiLCJmYWtlQ29ycmVjdCIsInRvdGFsU2NvcmUiLCJnZXRUb3RhbFNjb3JlIiwiZ2V0UGFydGlhbFNjb3JlIiwib3V0Y29tZSIsInJlamVjdHMiLCJhbnkiLCJFcnJvciIsImVtcHR5Iiwic2NvcmUiLCJlbnZQYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgb3V0Y29tZSwgZ2V0Q29ycmVjdG5lc3MsIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sIGdldFRvdGFsU2NvcmUsIGdldFBhcnRpYWxTY29yZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY2F0ZWdvcml6ZScsICgpID0+ICh7XG4gIC8vIHVzZWQgdGhpcyBhbGdvcml0aG0gaW4gb3JkZXIgdG8gY29udHJvbCB0aGUgdmFsdWUgb2YgY29ycmVjdDsgY2hlY2sgYGZha2VDb3JyZWN0YCBiZWxvd1xuICBidWlsZFN0YXRlOiAobW9ja2VkQ2F0ZWdvcmllcywgY2hvaWNlcywgYW5zd2VycykgPT4gKHtcbiAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgIGNvcnJlY3Q6IG1vY2tlZENhdGVnb3JpZXMgPT09IGFuc3dlcnMsXG4gIH0pLFxufSkpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9mZWVkYmFjaycsICgpID0+ICh7XG4gIGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3M6ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKCdUaGlzIGlzIGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3MgcmVzcG9uc2UuJykpLFxufSkpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9jb250cm9sbGVyLXV0aWxzJywgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCdAcGllLWxpYi9jb250cm9sbGVyLXV0aWxzJyksXG4gIGdldFNodWZmbGVkQ2hvaWNlczogKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9ICgoc2Vzc2lvbiB8fCB7fSkuc2h1ZmZsZWRWYWx1ZXMgfHwgW10pLmZpbHRlcigodikgPT4gdik7XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiAhY3VycmVudFNodWZmbGVkLmxlbmd0aCAmJiB1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1cGRhdGVTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNob2ljZXM7XG4gIH0sXG4gIHBhcnRpYWxTY29yaW5nOiB7XG4gICAgZW5hYmxlZDogKGNvbmZpZywgZW52KSA9PiB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBlbnYgPSBlbnYgfHwge307XG5cbiAgICAgIGlmIChjb25maWcucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudi5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxufSkpO1xuXG5jb25zdCBjYXRlZ29yaWVzID0gW3sgaWQ6ICcxJywgbGFiZWw6ICdPbmUnIH1dO1xuY29uc3QgY2hvaWNlcyA9IFtcbiAgeyBpZDogJzEnLCBjb250ZW50OiAnRm9vJyB9LFxuICB7IGlkOiAnMicsIGNvbnRlbnQ6ICdCYXInIH0sXG5dO1xuXG5jb25zdCBjYXRlZ29yeTEwID0geyBpZDogJzEwJywgbGFiZWw6ICdTVU09MTAnIH07XG5jb25zdCBjYXRlZ29yeTExID0geyBpZDogJzExJywgbGFiZWw6ICdTVU09MTEnIH07XG5cbmNvbnN0IGNob2ljZTMgPSB7IGlkOiAnMycsIGNvbnRlbnQ6ICczJyB9O1xuY29uc3QgY2hvaWNlNCA9IHsgaWQ6ICc0JywgY29udGVudDogJzQnIH07XG5jb25zdCBjaG9pY2U1ID0geyBpZDogJzUnLCBjb250ZW50OiAnNScgfTtcbmNvbnN0IGNob2ljZTYgPSB7IGlkOiAnNicsIGNvbnRlbnQ6ICc2JyB9O1xuY29uc3QgY2hvaWNlNyA9IHsgaWQ6ICc3JywgY29udGVudDogJzcnIH07XG5jb25zdCBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzID0gW1xuICB7IGNhdGVnb3J5OiAnMTAnLCBjaG9pY2VzOiBbJzMnLCAnNyddIH0sXG4gIHsgY2F0ZWdvcnk6ICcxMScsIGNob2ljZXM6IFsnNCcsICc3J10gfSxcbl07XG5jb25zdCBzY29yaW5nQ29ycmVjdFJlc3BvbnNlV2l0aEFsdGVybmF0ZXMgPSBbXG4gIHsgY2F0ZWdvcnk6ICcxMCcsIGNob2ljZXM6IFsnMycsICc3J10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snNCcsICc2J11dIH0sXG4gIHsgY2F0ZWdvcnk6ICcxMScsIGNob2ljZXM6IFsnNCcsICc3J10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snNScsICc2J11dIH0sXG5dO1xuXG5jb25zdCBtYWtlUXVlc3Rpb24gPSAoZXh0cmFzKSA9PiAoe1xuICBjYXRlZ29yaWVzLFxuICBjaG9pY2VzLFxuICBjb3JyZWN0UmVzcG9uc2U6IFt7IGNhdGVnb3J5OiAnMScsIGNob2ljZXM6IFsnMScsICcyJ10gfV0sXG4gIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgLi4uZXh0cmFzLFxufSk7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcXVlc3Rpb24gPSBtYWtlUXVlc3Rpb24oKTtcblxuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgbW9kZWwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeyAuLi5xdWVzdGlvbiwgY29ycmVjdFJlc3BvbnNlOiB1bmRlZmluZWQgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBtb2RlbCBpbiBldmFsdWF0ZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeyAuLi5xdWVzdGlvbiwgY29ycmVjdG5lc3M6ICdpbmNvcnJlY3QnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZlZWRiYWNrOiByZXR1cm5zIHByb3BlciBmZWVkYmFjayBpbiBldmFsdWF0ZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoeyAuLi5xdWVzdGlvbiwgZmVlZGJhY2tFbmFibGVkOiB0cnVlIH0sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwoJ1RoaXMgaXMgZ2V0RmVlZGJhY2tGb3JDb3JyZWN0bmVzcyByZXNwb25zZS4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWVkYmFjazogcmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaWYgZmVlZGJhY2sgaXMgbm90IGVuYWJsZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHt9LFxuICAgICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgICAgamVzdC5mbigpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWVkYmFjazogcmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaW4gZ2F0aGVyIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIGl0KCdkaXNhYmxlZCBmYWxzZSBmb3IgZ2F0aGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7IGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzYWJsZWQgdHJ1ZSBmb3IgdmlldycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICd2aWV3JyB9LCBqZXN0LmZuKCkpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc2FibGVkIHRydWUgZm9yIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCBqZXN0LmZuKCkpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRzIGNvcnJlY3RSZXNwb25zZSBmb3IgZXZhbHVhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCBqZXN0LmZuKCkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogW3sgY2F0ZWdvcnk6ICcxJywgY2hvaWNlczogWycxJywgJzInXSB9XSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHMgZGVmYXVsdCBjb25maWcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBjYXRlZ29yaWVzUGVyUm93OiAyLFxuICAgICAgICBjaG9pY2VzTGFiZWw6ICcnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZWwgLSB3aXRoIHVwZGF0ZVNlc3Npb24nLCAoKSA9PiB7XG4gICAgICBpdCgnY2FsbHMgdXBkYXRlU2Vzc2lvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHsgaWQ6ICcxJywgZWxlbWVudDogJ2NhdGVnb3JpemUtZWxlbWVudCcgfTtcbiAgICAgICAgY29uc3QgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTZXNzaW9uID0gamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKCk7XG4gICAgICAgIGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnY2F0ZWdvcml6ZS1lbGVtZW50JyxcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgbG9ja0Nob2ljZU9yZGVyOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb24sXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIHVwZGF0ZVNlc3Npb24sXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHtcbiAgICAgICAgYW5zd2VyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnMScsXG4gICAgICAgICAgICBjaG9pY2VzOiBbJzEnLCAnMiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAxLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGVudiBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgbUMxID0gW1xuICAgIHtcbiAgICAgIGlkOiAnMTAnLFxuICAgICAgbGFiZWw6ICdTVU09MTAnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DMiA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzExJyxcbiAgICAgIGxhYmVsOiAnU1VNPTExJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgbUMzID0gW1xuICAgIHtcbiAgICAgIGlkOiAnMTAnLFxuICAgICAgbGFiZWw6ICdTVU09MTAnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxMScsXG4gICAgICBsYWJlbDogJ1NVTT0xMScsXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DNCA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DNSA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgZGVzY3JpYmUoJ2dldENvcnJlY3RuZXNzJywgKCkgPT4ge1xuICAgIGl0KCdtb2RlOiBnYXRoZXIgLT4gcmVzb2x2ZXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldENvcnJlY3RuZXNzKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAnZ2F0aGVyJyB9KSkucmVzb2x2ZXMudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21vZGU6IHZpZXcgLT4gcmVzb2x2ZXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldENvcnJlY3RuZXNzKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAndmlldycgfSkpLnJlc29sdmVzLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlc3Npb25Db3JyZWN0ID0geyBhbnN3ZXJzOiBtQzIgfTtcbiAgICBjb25zdCBzZXNzaW9uUGFydGlhbGx5ID0geyBhbnN3ZXJzOiBtQzEgfTtcblxuICAgIGl0LmVhY2hgXG4gICAgICBzZXNzaW9uICAgICAgICAgICAgIHwgY2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke3VuZGVmaW5lZH0gICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke251bGx9ICAgICAgICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke3t9fSAgICAgICAgICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke3Nlc3Npb25Db3JyZWN0fSAgIHwgJHttQzJ9ICAgICB8ICR7J2NvcnJlY3QnfVxuICAgICAgJHtzZXNzaW9uUGFydGlhbGx5fSB8ICR7bUMxfSAgICAgfCAkeydwYXJ0aWFsbHktY29ycmVjdCd9XG4gICAgYCgnbW9kZTogZXZhbHVhdGUgLT4gcmVzb2x2ZXMgJGV4cGVjdGVkIGlmIHNlc3Npb24gaXMgJHNlc3Npb24nLCBhc3luYyAoeyBzZXNzaW9uLCBjYXRlZ29yaWVzLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRDb3JyZWN0bmVzcyhcbiAgICAgICAge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICAgIGNhdGVnb3JpZXMsXG4gICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChyZXMpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VG90YWxTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgcGFydGlhbFNjb3JpbmcgfCBtb2NrZWRDYXRlZ29yaWVzIHwgZmFrZUNvcnJlY3QgfCBleHBlY3RlZFxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHtmYWxzZX0gICAgfCAkezB9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAke2ZhbHNlfSAgICB8ICR7MH1cbiAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHttQzF9ICAgICAgICAgICB8ICR7dHJ1ZX0gICAgIHwgJHsxfVxuICAgICAgJHtmYWxzZX0gICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHt0cnVlfSAgICAgfCAkezF9XG4gICAgYChcbiAgICAgICdXaXRoIEFsdGVybmF0ZXMsIHBhcnRpYWxTY29yaW5nID0gJHBhcnRpYWxTY29yaW5nIC0+IGR5Y2hvdG9tb3VzOiAkZXhwZWN0ZWQnLFxuICAgICAgKHsgcGFydGlhbFNjb3JpbmcsIG1vY2tlZENhdGVnb3JpZXMsIGZha2VDb3JyZWN0LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBnZXRUb3RhbFNjb3JlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlV2l0aEFsdGVybmF0ZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGFuc3dlcnM6IGZha2VDb3JyZWN0ID8gbW9ja2VkQ2F0ZWdvcmllcyA6IFtdIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHRvdGFsU2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaXQuZWFjaGBcbiAgICAgIHBhcnRpYWxTY29yaW5nIHwgbW9ja2VkQ2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAkezB9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMyfSAgICAgICAgICAgfCAkezF9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMyfSAgICAgICAgICAgfCAkezB9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMzfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUM0fSAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHttQzV9ICAgICAgICAgICB8ICR7MH1cbiAgICBgKFxuICAgICAgJ1dpdGhvdXQgQWx0ZXJuYXRlcywgcGFydGlhbFNjb3JpbmcgPSAkcGFydGlhbFNjb3JpbmcgLT4gJGV4cGVjdGVkJyxcbiAgICAgICh7IHBhcnRpYWxTY29yaW5nLCBtb2NrZWRDYXRlZ29yaWVzLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBnZXRUb3RhbFNjb3JlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBhbnN3ZXJzOiBbXSB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdCh0b3RhbFNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFBhcnRpYWxTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgbW9ja2VkQ2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke21DMX0gICAgICAgICAgIHwgJHswLjc1fVxuICAgICAgJHttQzJ9ICAgICAgICAgICB8ICR7MX1cbiAgICAgICR7bUMzfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke21DNH0gICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke21DNX0gICAgICAgICAgIHwgJHswfVxuICAgIGAoJ1dpdGhvdXQgQWx0ZXJuYXRlcywgcGFydGlhbFNjb3JpbmcgPSAkcGFydGlhbFNjb3JpbmcgLT4gJGV4cGVjdGVkJywgKHsgbW9ja2VkQ2F0ZWdvcmllcywgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgY29uc3QgdG90YWxTY29yZSA9IGdldFBhcnRpYWxTY29yZShzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLCBtb2NrZWRDYXRlZ29yaWVzKTtcblxuICAgICAgZXhwZWN0KHRvdGFsU2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZTogZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlamVjdHMgd2l0aCBhbiBlcnJvciBmb3IgZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgICBleHBlY3Qob3V0Y29tZShxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSkpLnJlamVjdHMudG9FcXVhbChleHBlY3QuYW55KEVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtb2RlOiB2aWV3JywgKCkgPT4ge1xuICAgICAgaXQoJ3JlamVjdHMgd2l0aCBhbiBlcnJvciBmb3IgZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgICBleHBlY3Qob3V0Y29tZShxdWVzdGlvbiwge30sIHsgbW9kZTogJ3ZpZXcnIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShFcnJvcikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZTogZXZhbHVhdGUnLCAoKSA9PiB7XG4gICAgICBpdC5lYWNoYFxuICAgICAgICBwYXJ0aWFsU2NvcmluZyB8IGVudlBhcnRpYWxTY29yaW5nIHwgZXhwZWN0ZWRcbiAgICAgICAgJHt0cnVlfSAgICAgICAgfCAke3VuZGVmaW5lZH0gICAgICB8ICR7eyBlbXB0eTogZmFsc2UsIHNjb3JlOiAwLjc1IH19XG4gICAgICAgICR7ZmFsc2V9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgfCAke3sgZW1wdHk6IGZhbHNlLCBzY29yZTogMSB9fVxuICAgICAgICAke3RydWV9ICAgICAgICB8ICR7ZmFsc2V9ICAgICAgICAgIHwgJHt7IGVtcHR5OiBmYWxzZSwgc2NvcmU6IDEgfX1cbiAgICAgICAgJHtmYWxzZX0gICAgICAgfCAke3RydWV9ICAgICAgICAgICB8ICR7eyBlbXB0eTogZmFsc2UsIHNjb3JlOiAxIH19XG4gICAgICBgKFxuICAgICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9ICRwYXJ0aWFsU2NvcmluZywgZW52LnBhcnRpYWxTY29yaW5nID0gJGVudlBhcnRpYWxTY29yaW5nJyxcbiAgICAgICAgYXN5bmMgKHsgcGFydGlhbFNjb3JpbmcsIGVudlBhcnRpYWxTY29yaW5nLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nLFxuICAgICAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IHNjb3JpbmdDb3JyZWN0UmVzcG9uc2VOb0FsdGVybmF0ZXMsXG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM6IG1DMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFuc3dlcnM6IG1DMSB9LFxuICAgICAgICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogZW52UGFydGlhbFNjb3JpbmcgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU87RUFDdEM7RUFDQUMsVUFBVSxFQUFFQSxDQUFDQyxnQkFBZ0IsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLE1BQU07SUFDbkRDLFVBQVUsRUFBRUgsZ0JBQWdCO0lBQzVCSSxPQUFPLEVBQUVKLGdCQUFnQixLQUFLRTtFQUNoQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSEwsSUFBSSxDQUFDQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsT0FBTztFQUNwQ08seUJBQXlCLEVBQUVBLENBQUEsS0FBTSxJQUFJQyxPQUFPLENBQUVDLE9BQU8sSUFBS0EsT0FBTyxDQUFDLDZDQUE2QyxDQUFDO0FBQ2xILENBQUMsQ0FBQyxDQUFDO0FBQ0hWLElBQUksQ0FBQ0MsSUFBSSxDQUFDLDJCQUEyQixFQUFFLE9BQU87RUFDNUMsR0FBR0QsSUFBSSxDQUFDVyxhQUFhLENBQUMsMkJBQTJCLENBQUM7RUFDbERDLGtCQUFrQixFQUFFQSxDQUFDUixPQUFPLEVBQUVTLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxHQUFHLEtBQUs7SUFDNUQsTUFBTUMsZUFBZSxHQUFHLENBQUMs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YUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFNLENBQUMsQ0FBQztNQUNuRCxDQUFDLENBQUM7TUFFRlosRUFBRSxDQUFDLHdCQUF3QixFQUFFLFlBQVk7UUFDdkMsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFBRUksSUFBSSxFQUFFO1FBQU8sQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNsRCxDQUFDLENBQUM7TUFFRlosRUFBRSxDQUFDLDRCQUE0QixFQUFFLFlBQVk7UUFDM0MsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFBRUksSUFBSSxFQUFFO1FBQVcsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLG1DQUFtQyxFQUFFLFlBQVk7TUFDbEQsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFBRUksSUFBSSxFQUFFO01BQVcsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN6RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1FBQzNCVixlQUFlLEVBQUUsQ0FBQztVQUFFTCxRQUFRLEVBQUUsR0FBRztVQUFFaEMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFBRSxDQUFDO01BQzFELENBQUMs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
@@ -1,10 +0,0 @@
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
- }