@pie-element/placement-ordering 14.2.0-beta.0 → 14.2.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.
@@ -1,90 +0,0 @@
1
- "use strict";
2
-
3
- var _index = require("../index");
4
- describe('isValidSession', () => {
5
- it('returns true if includeTargets is true and session is empty', () => {
6
- expect((0, _index.isValidSession)({
7
- model: {
8
- config: {
9
- includeTargets: true
10
- }
11
- },
12
- session: {
13
- value: []
14
- }
15
- })).toEqual(true);
16
- });
17
- it('returns true if includeTargets is true and session is not complete', () => {
18
- expect((0, _index.isValidSession)({
19
- model: {
20
- config: {
21
- includeTargets: true
22
- }
23
- },
24
- session: {
25
- value: ['c1', null, 'c3', null]
26
- }
27
- })).toEqual(true);
28
- });
29
- it('returns true if includeTargets is true and session is not complete', () => {
30
- expect((0, _index.isValidSession)({
31
- model: {
32
- config: {
33
- includeTargets: true
34
- }
35
- },
36
- session: {
37
- value: [null, 'c2']
38
- }
39
- })).toEqual(true);
40
- });
41
- it('returns true if includeTargets is false, but session is valid', () => {
42
- expect((0, _index.isValidSession)({
43
- model: {
44
- config: {
45
- includeTargets: false
46
- }
47
- },
48
- session: {
49
- value: ['c1', 'c3', 'c2', 'c4']
50
- }
51
- })).toEqual(true);
52
- });
53
- it('returns false if includeTargets is false and session is empty', () => {
54
- expect((0, _index.isValidSession)({
55
- model: {
56
- config: {
57
- includeTargets: false
58
- }
59
- },
60
- session: {
61
- value: []
62
- }
63
- })).toEqual(false);
64
- });
65
- it('returns false if includeTargets is false and session is not complete', () => {
66
- expect((0, _index.isValidSession)({
67
- model: {
68
- config: {
69
- includeTargets: false
70
- }
71
- },
72
- session: {
73
- value: ['c1', null, 'c3', null]
74
- }
75
- })).toEqual(false);
76
- });
77
- it('returns false if includeTargets is false and session is not complete', () => {
78
- expect((0, _index.isValidSession)({
79
- model: {
80
- config: {
81
- includeTargets: false
82
- }
83
- },
84
- session: {
85
- value: [null, 'c2']
86
- }
87
- })).toEqual(false);
88
- });
89
- });
90
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsImlzVmFsaWRTZXNzaW9uIiwibW9kZWwiLCJjb25maWciLCJpbmNsdWRlVGFyZ2V0cyIsInNlc3Npb24iLCJ2YWx1ZSIsInRvRXF1YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2luZGV4LXRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzVmFsaWRTZXNzaW9uIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5kZXNjcmliZSgnaXNWYWxpZFNlc3Npb24nLCAoKSA9PiB7XG4gIGl0KCdyZXR1cm5zIHRydWUgaWYgaW5jbHVkZVRhcmdldHMgaXMgdHJ1ZSBhbmQgc2Vzc2lvbiBpcyBlbXB0eScsICgpID0+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbjogeyB2YWx1ZTogW10gfVxuICAgICAgfSkpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHRydWUgaWYgaW5jbHVkZVRhcmdldHMgaXMgdHJ1ZSBhbmQgc2Vzc2lvbiBpcyBub3QgY29tcGxldGUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzVmFsaWRTZXNzaW9uKFxuICAgICAge1xuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgaW5jbHVkZVRhcmdldHM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb246IHsgdmFsdWU6IFsnYzEnLCBudWxsLCAnYzMnLCBudWxsXSB9XG4gICAgICB9KSkudG9FcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdHJ1ZSBpZiBpbmNsdWRlVGFyZ2V0cyBpcyB0cnVlIGFuZCBzZXNzaW9uIGlzIG5vdCBjb21wbGV0ZScsICgpID0+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvbjogeyB2YWx1ZTogW251bGwsICdjMiddIH1cbiAgICAgIH0pKS50b0VxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB0cnVlIGlmIGluY2x1ZGVUYXJnZXRzIGlzIGZhbHNlLCBidXQgc2Vzc2lvbiBpcyB2YWxpZCcsICgpID0+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb246IHsgdmFsdWU6IFsnYzEnLCAnYzMnLCAnYzInLCAnYzQnXSB9XG4gICAgICB9KSkudG9FcXVhbCh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZmFsc2UgaWYgaW5jbHVkZVRhcmdldHMgaXMgZmFsc2UgYW5kIHNlc3Npb24gaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgZXhwZWN0KGlzVmFsaWRTZXNzaW9uKFxuICAgICAge1xuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgaW5jbHVkZVRhcmdldHM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uOiB7IHZhbHVlOiBbXSB9XG4gICAgICB9KSkudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGZhbHNlIGlmIGluY2x1ZGVUYXJnZXRzIGlzIGZhbHNlIGFuZCBzZXNzaW9uIGlzIG5vdCBjb21wbGV0ZScsICgpID0+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb246IHsgdmFsdWU6IFsnYzEnLCBudWxsLCAnYzMnLCBudWxsXSB9XG4gICAgICB9KSkudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGZhbHNlIGlmIGluY2x1ZGVUYXJnZXRzIGlzIGZhbHNlIGFuZCBzZXNzaW9uIGlzIG5vdCBjb21wbGV0ZScsICgpID0+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb246IHsgdmFsdWU6IFtudWxsLCAnYzInXSB9XG4gICAgICB9KSkudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xufSlcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU07RUFDL0JDLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxNQUFNO0lBQ3RFQyxNQUFNLENBQUMsSUFBQUMscUJBQWMsRUFDbkI7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLE1BQU0sRUFBRTtVQUNOQyxjQUFjLEVBQUU7UUFDbEI7TUFDRixDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUFFQyxLQUFLLEVBQUU7TUFBRztJQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ3JCLENBQUMsQ0FBQztFQUVGUixFQUFFLENBQUMsb0VBQW9FLEVBQUUsTUFBTTtJQUM3RUMsTUFBTSxDQUFDLElBQUFDLHFCQUFjLEVBQ25CO01BQ0VDLEtBQUssRUFBRTtRQUNMQyxNQUFNLEVBQUU7VUFDTkMsY0FBYyxFQUFFO1FBQ2xCO01BQ0YsQ0FBQztNQUNEQyxPQUFPLEVBQUU7UUFBRUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtNQUFFO0lBQzdDLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDckIsQ0FBQyxDQUFDO0VBRUZSLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxNQUFNO0lBQzdFQyxNQUFNLENBQUMsSUFBQUMscUJBQWMsRUFDbkI7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLE1BQU0sRUFBRTtVQUNOQyxjQUFjLEVBQUU7UUFDbEI7TUFDRixDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUFFQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSTtNQUFFO0lBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDckIsQ0FBQyxDQUFDO0VBRUZSLEVBQUUsQ0FBQywrREFBK0QsRUFBRSxNQUFNO0lBQ3hFQyxNQUFNLENBQUMsSUFBQUMscUJBQWMsRUFDbkI7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLE1BQU0sRUFBRTtVQUNOQyxjQUFjLEVBQUU7UUFDbEI7TUFDRixDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUFFQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO01BQUU7SUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztFQUNyQixDQUFDLENBQUM7RUFFRlIsRUFBRSxDQUFDLCtEQUErRCxFQUFFLE1BQU07SUFDeEVDLE1BQU0sQ0FBQyxJQUFBQyxxQkFBYyxFQUNuQjtNQUNFQyxLQUFLLEVBQUU7UUFDTEMsTUFBTSxFQUFFO1VBQ05DLGNBQWMsRUFBRTtRQUNsQjtNQUNGLENBQUM7TUFDREMsT0FBTyxFQUFFO1FBQUVDLEtBQUssRUFBRTtNQUFHO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7RUFDdEIsQ0FBQyxDQUFDO0VBRUZSLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxNQUFNO0lBQy9FQyxNQUFNLENBQUMsSUFBQUMscUJBQWMsRUFDbkI7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLE1BQU0sRUFBRTtVQUNOQyxjQUFjLEVBQUU7UUFDbEI7TUFDRixDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUFFQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO01BQUU7SUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRlIsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLE1BQU07SUFDL0VDLE1BQU0sQ0FBQyxJQUFBQyxxQkFBYyxFQUNuQjtNQUNFQyxLQUFLLEVBQUU7UUFDTEMsTUFBTSxFQUFFO1VBQ05DLGNBQWMsRUFBRTtRQUNsQjtNQUNGLENBQUM7TUFDREMsT0FBTyxFQUFFO1FBQUVDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJO01BQUU7SUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztFQUN0QixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,133 +0,0 @@
1
- "use strict";
2
-
3
- var _ordering = require("../ordering");
4
- var _lodashEs = require("lodash-es");
5
- describe('ordering', () => {
6
- const toLabel = a => `${a[0]}->${a[1]}`;
7
- const choice = id => ({
8
- type: 'choice',
9
- id,
10
- draggable: true,
11
- droppable: false
12
- });
13
- const target = (id, index) => ({
14
- id,
15
- index,
16
- type: 'target',
17
- draggable: id !== undefined,
18
- empty: id === undefined
19
- });
20
- const buildArgs = choiceArg => {
21
- if (Array.isArray(choiceArg)) {
22
- return {
23
- choices: choiceArg,
24
- response: [],
25
- outcome: []
26
- };
27
- }
28
- return {
29
- response: [],
30
- outcome: [],
31
- ...choiceArg
32
- };
33
- };
34
- const buildEndState = (input, actions, action, opts) => {
35
- const {
36
- choices,
37
- response,
38
- outcome
39
- } = buildArgs(input);
40
- const choiceIds = choices.map(id => ({
41
- id
42
- }));
43
- const initialState = (0, _ordering.buildState)(choiceIds, response, outcome, opts);
44
- return (actions || []).reduce((state, [fromIndex, toIndex]) => {
45
- let tiles;
46
- if (!opts.includeTargets) {
47
- tiles = state.tiles.filter(tile => tile.type === 'choice');
48
- } else {
49
- tiles = state.tiles;
50
- }
51
- const from = tiles[fromIndex];
52
- const to = tiles[toIndex];
53
- return (0, _ordering.reducer)({
54
- ...action,
55
- from,
56
- to
57
- }, state);
58
- }, initialState);
59
- };
60
- describe('reducer', () => {
61
- const assertPushLabel = (i, actions, e) => `${i.tiles.map(t => t.id)} + ${actions.map(toLabel).join(', ')} = ${e}`;
62
- const assertMoveLabel = (i, actions, expected) => {
63
- const tiles = (0, _lodashEs.take)(i.tiles, 4).map(t => t.id);
64
- return `${tiles} + ${actions.map(toLabel)} = ${expected.choices.map(c => c || '_')}|${expected.targets.map(t => t || '_')}`;
65
- };
66
- const assertResponseLabel = (s, actions, expected) => `${actions.map(toLabel)} = response: ${expected.map(v => v || '_')}`;
67
- const allProps = {
68
- includeTargets: true,
69
- allowSameChoiceInTargets: true
70
- };
71
- const withoutTargets = {
72
- includeTargets: false
73
- };
74
- const uniqueChoiceInTargets = {
75
- includeTargets: true,
76
- allowSameChoiceInTargets: false
77
- };
78
- const moveAction = {
79
- type: 'move'
80
- };
81
- const simpleInput = [1, 2, 3, 4];
82
- const shortInput = [1, 2];
83
- const responseInput = {
84
- choices: [1, 2],
85
- response: [undefined, 1]
86
- };
87
- describe.each([[simpleInput, [[0, 1]], moveAction, withoutTargets, [2, 1, 3, 4]], [simpleInput, [[0, 1], [2, 1]], moveAction, withoutTargets, [2, 3, 1, 4]], [simpleInput, [[0, 4]], moveAction, uniqueChoiceInTargets, {
88
- choices: [undefined, 2, 3, 4],
89
- targets: [1, undefined, undefined, undefined]
90
- }], [simpleInput, [[0, 4]], moveAction, allProps, {
91
- choices: [1, 2, 3, 4],
92
- targets: [1, undefined, undefined, undefined]
93
- }], [simpleInput, [[0, 4], [2, 7]], moveAction, uniqueChoiceInTargets, {
94
- choices: [undefined, 2, undefined, 4],
95
- targets: [1, undefined, undefined, 3]
96
- }], [shortInput, [[0, 3]], moveAction, allProps, [choice(1), choice(2), target(undefined, 0), target(1, 1)]], [shortInput, [[0, 3]], moveAction, allProps, {
97
- response: [undefined, 1]
98
- }], [shortInput, [[0, 2]], moveAction, allProps, {
99
- response: [1, undefined]
100
- }], [responseInput, [[3, 0]], moveAction, allProps, {
101
- response: [undefined, undefined]
102
- }], [responseInput, [[3, 1]], moveAction, allProps, {
103
- response: [undefined, undefined]
104
- }], [responseInput, [[3, 2]], moveAction, allProps, {
105
- response: [1, undefined]
106
- }]])('$input => $expected', (input, actions, actionType, opts, expected) => {
107
- const state = buildEndState(input, actions, actionType, opts);
108
- if (!opts.includeTargets) {
109
- const label = assertPushLabel(state, actions, expected);
110
- it(label, () => {
111
- expect(state.tiles.map(t => t.id).filter((item, index, array) => array.indexOf(item) === index)).toEqual(expected);
112
- });
113
- } else if (expected.choices) {
114
- const label = assertMoveLabel(state, actions, expected);
115
- it(label, () => {
116
- let [choiceTiles, targetTiles] = (0, _lodashEs.chunk)(state.tiles, 4);
117
- expect(choiceTiles.map(t => t.id)).toEqual(expected.choices);
118
- expect(targetTiles.map(t => t.id)).toEqual(expected.targets);
119
- });
120
- } else if (expected.response) {
121
- const label = assertResponseLabel(state, actions, expected.response);
122
- it(label, () => {
123
- expect(state.response).toEqual(expected.response);
124
- });
125
- } else {
126
- it('works', () => {
127
- expect(state.tiles).toEqual(expected);
128
- });
129
- }
130
- });
131
- });
132
- });
133
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3JkZXJpbmciLCJyZXF1aXJlIiwiX2xvZGFzaEVzIiwiZGVzY3JpYmUiLCJ0b0xhYmVsIiwiYSIsImNob2ljZSIsImlkIiwidHlwZSIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsInRhcmdldCIsImluZGV4IiwidW5kZWZpbmVkIiwiZW1wdHkiLCJidWlsZEFyZ3MiLCJjaG9pY2VBcmciLCJBcnJheSIsImlzQXJyYXkiLCJjaG9pY2VzIiwicmVzcG9uc2UiLCJvdXRjb21lIiwiYnVpbGRFbmRTdGF0ZSIsImlucHV0IiwiYWN0aW9ucyIsImFjdGlvbiIsIm9wdHMiLCJjaG9pY2VJZHMiLCJtYXAiLCJpbml0aWFsU3RhdGUiLCJidWlsZFN0YXRlIiwicmVkdWNlIiwic3RhdGUiLCJmcm9tSW5kZXgiLCJ0b0luZGV4IiwidGlsZXMiLCJpbmNsdWRlVGFyZ2V0cyIsImZpbHRlciIsInRpbGUiLCJmcm9tIiwidG8iLCJyZWR1Y2VyIiwiYXNzZXJ0UHVzaExhYmVsIiwiaSIsImUiLCJ0Iiwiam9pbiIsImFzc2VydE1vdmVMYWJlbCIsImV4cGVjdGVkIiwidGFrZSIsImMiLCJ0YXJnZXRzIiwiYXNzZXJ0UmVzcG9uc2VMYWJlbCIsInMiLCJ2IiwiYWxsUHJvcHMiLCJhbGxvd1NhbWVDaG9pY2VJblRhcmdldHMiLCJ3aXRob3V0VGFyZ2V0cyIsInVuaXF1ZUNob2ljZUluVGFyZ2V0cyIsIm1vdmVBY3Rpb24iLCJzaW1wbGVJbnB1dCIsInNob3J0SW5wdXQiLCJyZXNwb25zZUlucHV0IiwiZWFjaCIsImFjdGlvblR5cGUiLCJsYWJlbCIsIml0IiwiZXhwZWN0IiwiaXRlbSIsImFycmF5IiwiaW5kZXhPZiIsInRvRXF1YWwiLCJjaG9pY2VUaWxlcyIsInRhcmdldFRpbGVzIiwiY2h1bmsiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL29yZGVyaW5nLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRTdGF0ZSwgcmVkdWNlciB9IGZyb20gJy4uL29yZGVyaW5nJztcbmltcG9ydCB7IGNodW5rLCB0YWtlIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZGVzY3JpYmUoJ29yZGVyaW5nJywgKCkgPT4ge1xuICBjb25zdCB0b0xhYmVsID0gKGEpID0+IGAke2FbMF19LT4ke2FbMV19YDtcblxuICBjb25zdCBjaG9pY2UgPSAoaWQpID0+ICh7XG4gICAgdHlwZTogJ2Nob2ljZScsXG4gICAgaWQsXG4gICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgIGRyb3BwYWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHRhcmdldCA9IChpZCwgaW5kZXgpID0+ICh7XG4gICAgaWQsXG4gICAgaW5kZXgsXG4gICAgdHlwZTogJ3RhcmdldCcsXG4gICAgZHJhZ2dhYmxlOiBpZCAhPT0gdW5kZWZpbmVkLFxuICAgIGVtcHR5OiBpZCA9PT0gdW5kZWZpbmVkLFxuICB9KTtcblxuICBjb25zdCBidWlsZEFyZ3MgPSAoY2hvaWNlQXJnKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hvaWNlQXJnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hvaWNlczogY2hvaWNlQXJnLFxuICAgICAgICByZXNwb25zZTogW10sXG4gICAgICAgIG91dGNvbWU6IFtdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogW10sIG91dGNvbWU6IFtdLCAuLi5jaG9pY2VBcmcgfTtcbiAgfTtcblxuICBjb25zdCBidWlsZEVuZFN0YXRlID0gKGlucHV0LCBhY3Rpb25zLCBhY3Rpb24sIG9wdHMpID0+IHtcbiAgICBjb25zdCB7IGNob2ljZXMsIHJlc3BvbnNlLCBvdXRjb21lIH0gPSBidWlsZEFyZ3MoaW5wdXQpO1xuICAgIGNvbnN0IGNob2ljZUlkcyA9IGNob2ljZXMubWFwKChpZCkgPT4gKHsgaWQgfSkpO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGJ1aWxkU3RhdGUoY2hvaWNlSWRzLCByZXNwb25zZSwgb3V0Y29tZSwgb3B0cyk7XG5cbiAgICByZXR1cm4gKGFjdGlvbnMgfHwgW10pLnJlZHVjZSgoc3RhdGUsIFtmcm9tSW5kZXgsIHRvSW5kZXhdKSA9PiB7XG4gICAgICBsZXQgdGlsZXM7XG5cbiAgICAgIGlmICghb3B0cy5pbmNsdWRlVGFyZ2V0cykge1xuICAgICAgICB0aWxlcyA9IHN0YXRlLnRpbGVzLmZpbHRlcigodGlsZSkgPT4gdGlsZS50eXBlID09PSAnY2hvaWNlJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aWxlcyA9IHN0YXRlLnRpbGVzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tID0gdGlsZXNbZnJvbUluZGV4XTtcbiAgICAgIGNvbnN0IHRvID0gdGlsZXNbdG9JbmRleF07XG5cbiAgICAgIHJldHVybiByZWR1Y2VyKHsgLi4uYWN0aW9uLCBmcm9tLCB0byB9LCBzdGF0ZSk7XG4gICAgfSwgaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVkdWNlcicsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRQdXNoTGFiZWwgPSAoaSwgYWN0aW9ucywgZSkgPT5cbiAgICAgIGAke2kudGlsZXMubWFwKCh0KSA9PiB0LmlkKX0gKyAke2FjdGlvbnMubWFwKHRvTGFiZWwpLmpvaW4oJywgJyl9ID0gJHtlfWA7XG5cbiAgICBjb25zdCBhc3NlcnRNb3ZlTGFiZWwgPSAoaSwgYWN0aW9ucywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGNvbnN0IHRpbGVzID0gdGFrZShpLnRpbGVzLCA0KS5tYXAoKHQpID0+IHQuaWQpO1xuXG4gICAgICByZXR1cm4gYCR7dGlsZXN9ICsgJHthY3Rpb25zLm1hcCh0b0xhYmVsKX0gPSAke2V4cGVjdGVkLmNob2ljZXMubWFwKChjKSA9PiBjIHx8ICdfJyl9fCR7ZXhwZWN0ZWQudGFyZ2V0cy5tYXAoXG4gICAgICAgICh0KSA9PiB0IHx8ICdfJyxcbiAgICAgICl9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgYXNzZXJ0UmVzcG9uc2VMYWJlbCA9IChzLCBhY3Rpb25zLCBleHBlY3RlZCkgPT5cbiAgICAgIGAke2FjdGlvbnMubWFwKHRvTGFiZWwpfSA9IHJlc3BvbnNlOiAke2V4cGVjdGVkLm1hcCgodikgPT4gdiB8fCAnXycpfWA7XG4gICAgY29uc3QgYWxsUHJvcHMgPSB7IGluY2x1ZGVUYXJnZXRzOiB0cnVlLCBhbGxvd1NhbWVDaG9pY2VJblRhcmdldHM6IHRydWUgfTtcbiAgICBjb25zdCB3aXRob3V0VGFyZ2V0cyA9IHsgaW5jbHVkZVRhcmdldHM6IGZhbHNlIH07XG4gICAgY29uc3QgdW5pcXVlQ2hvaWNlSW5UYXJnZXRzID0geyBpbmNsdWRlVGFyZ2V0czogdHJ1ZSwgYWxsb3dTYW1lQ2hvaWNlSW5UYXJnZXRzOiBmYWxzZSB9O1xuICAgIGNvbnN0IG1vdmVBY3Rpb24gPSB7IHR5cGU6ICdtb3ZlJyB9O1xuICAgIGNvbnN0IHNpbXBsZUlucHV0ID0gWzEsIDIsIDMsIDRdO1xuICAgIGNvbnN0IHNob3J0SW5wdXQgPSBbMSwgMl07XG4gICAgY29uc3QgcmVzcG9uc2VJbnB1dCA9IHsgY2hvaWNlczogWzEsIDJdLCByZXNwb25zZTogW3VuZGVmaW5lZCwgMV0gfTtcblxuICAgIGRlc2NyaWJlLmVhY2goW1xuICAgICAgW3NpbXBsZUlucHV0LCBbWzAsIDFdXSwgbW92ZUFjdGlvbiwgd2l0aG91dFRhcmdldHMsIFsyLCAxLCAzLCA0XV0sXG4gICAgICBbXG4gICAgICAgIHNpbXBsZUlucHV0LFxuICAgICAgICBbXG4gICAgICAgICAgWzAsIDFdLFxuICAgICAgICAgIFsyLCAxXSxcbiAgICAgICAgXSxcbiAgICAgICAgbW92ZUFjdGlvbixcbiAgICAgICAgd2l0aG91dFRhcmdldHMsXG4gICAgICAgIFsyLCAzLCAxLCA0XSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHNpbXBsZUlucHV0LFxuICAgICAgICBbWzAsIDRdXSxcbiAgICAgICAgbW92ZUFjdGlvbixcbiAgICAgICAgdW5pcXVlQ2hvaWNlSW5UYXJnZXRzLFxuICAgICAgICB7XG4gICAgICAgICAgY2hvaWNlczogW3VuZGVmaW5lZCwgMiwgMywgNF0sXG4gICAgICAgICAgdGFyZ2V0czogWzEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgc2ltcGxlSW5wdXQsXG4gICAgICAgIFtbMCwgNF1dLFxuICAgICAgICBtb3ZlQWN0aW9uLFxuICAgICAgICBhbGxQcm9wcyxcbiAgICAgICAge1xuICAgICAgICAgIGNob2ljZXM6IFsxLCAyLCAzLCA0XSxcbiAgICAgICAgICB0YXJnZXRzOiBbMSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBzaW1wbGVJbnB1dCxcbiAgICAgICAgW1xuICAgICAgICAgIFswLCA0XSxcbiAgICAgICAgICBbMiwgN10sXG4gICAgICAgIF0sXG4gICAgICAgIG1vdmVBY3Rpb24sXG4gICAgICAgIHVuaXF1ZUNob2ljZUluVGFyZ2V0cyxcbiAgICAgICAge1xuICAgICAgICAgIGNob2ljZXM6IFt1bmRlZmluZWQsIDIsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgdGFyZ2V0czogWzEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAzXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBbc2hvcnRJbnB1dCwgW1swLCAzXV0sIG1vdmVBY3Rpb24sIGFsbFByb3BzLCBbY2hvaWNlKDEpLCBjaG9pY2UoMiksIHRhcmdldCh1bmRlZmluZWQsIDApLCB0YXJnZXQoMSwgMSldXSxcbiAgICAgIFtzaG9ydElucHV0LCBbWzAsIDNdXSwgbW92ZUFjdGlvbiwgYWxsUHJvcHMsIHsgcmVzcG9uc2U6IFt1bmRlZmluZWQsIDFdIH1dLFxuICAgICAgW3Nob3J0SW5wdXQsIFtbMCwgMl1dLCBtb3ZlQWN0aW9uLCBhbGxQcm9wcywgeyByZXNwb25zZTogWzEsIHVuZGVmaW5lZF0gfV0sXG4gICAgICBbcmVzcG9uc2VJbnB1dCwgW1szLCAwXV0sIG1vdmVBY3Rpb24sIGFsbFByb3BzLCB7IHJlc3BvbnNlOiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdIH1dLFxuICAgICAgW3Jlc3BvbnNlSW5wdXQsIFtbMywgMV1dLCBtb3ZlQWN0aW9uLCBhbGxQcm9wcywgeyByZXNwb25zZTogW3VuZGVmaW5lZCwgdW5kZWZpbmVkXSB9XSxcbiAgICAgIFtyZXNwb25zZUlucHV0LCBbWzMsIDJdXSwgbW92ZUFjdGlvbiwgYWxsUHJvcHMsIHsgcmVzcG9uc2U6IFsxLCB1bmRlZmluZWRdIH1dLFxuICAgIF0pKCckaW5wdXQgPT4gJGV4cGVjdGVkJywgKGlucHV0LCBhY3Rpb25zLCBhY3Rpb25UeXBlLCBvcHRzLCBleHBlY3RlZCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBidWlsZEVuZFN0YXRlKGlucHV0LCBhY3Rpb25zLCBhY3Rpb25UeXBlLCBvcHRzKTtcblxuICAgICAgaWYgKCFvcHRzLmluY2x1ZGVUYXJnZXRzKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gYXNzZXJ0UHVzaExhYmVsKHN0YXRlLCBhY3Rpb25zLCBleHBlY3RlZCk7XG5cbiAgICAgICAgaXQobGFiZWwsICgpID0+IHtcbiAgICAgICAgICBleHBlY3Qoc3RhdGUudGlsZXMubWFwKCh0KSA9PiB0LmlkKS5maWx0ZXIoKGl0ZW0sIGluZGV4LCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihpdGVtKSA9PT0gaW5kZXgpKS50b0VxdWFsKFxuICAgICAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmNob2ljZXMpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBhc3NlcnRNb3ZlTGFiZWwoc3RhdGUsIGFjdGlvbnMsIGV4cGVjdGVkKTtcblxuICAgICAgICBpdChsYWJlbCwgKCkgPT4ge1xuICAgICAgICAgIGxldCBbY2hvaWNlVGlsZXMsIHRhcmdldFRpbGVzXSA9IGNodW5rKHN0YXRlLnRpbGVzLCA0KTtcblxuICAgICAgICAgIGV4cGVjdChjaG9pY2VUaWxlcy5tYXAoKHQpID0+IHQuaWQpKS50b0VxdWFsKGV4cGVjdGVkLmNob2ljZXMpO1xuICAgICAgICAgIGV4cGVjdCh0YXJnZXRUaWxlcy5tYXAoKHQpID0+IHQuaWQpKS50b0VxdWFsKGV4cGVjdGVkLnRhcmdldHMpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWQucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBhc3NlcnRSZXNwb25zZUxhYmVsKHN0YXRlLCBhY3Rpb25zLCBleHBlY3RlZC5yZXNwb25zZSk7XG5cbiAgICAgICAgaXQobGFiZWwsICgpID0+IHtcbiAgICAgICAgICBleHBlY3Qoc3RhdGUucmVzcG9uc2UpLnRvRXF1YWwoZXhwZWN0ZWQucmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0KCd3b3JrcycsICgpID0+IHtcbiAgICAgICAgICBleHBlY3Qoc3RhdGUudGlsZXMpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFFQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNO0VBQ3pCLE1BQU1DLE9BQU8sR0FBSUMsQ0FBQyxJQUFLLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBS0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBRXpDLE1BQU1DLE1BQU0sR0FBSUMsRUFBRSxLQUFNO0lBQ3RCQyxJQUFJLEVBQUUsUUFBUTtJQUNkRCxFQUFFO0lBQ0ZFLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLFNBQVMsRUFBRTtFQUNiLENBQUMsQ0FBQztFQUVGLE1BQU1DLE1BQU0sR0FBR0EsQ0FBQ0osRUFBRSxFQUFFSyxLQUFL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