@pie-element/placement-ordering 14.3.1 → 14.3.2-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ {
2
+ "hash": "1095974880",
3
+ "info": [
4
+ {
5
+ "pie": "@pie-element/placement-ordering",
6
+ "version": {
7
+ "requested": "latest"
8
+ }
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,90 @@
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+IHtcbiAgICBleHBlY3QoaXNWYWxpZFNlc3Npb24oXG4gICAgICB7XG4gICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBpbmNsdWRlVGFyZ2V0czogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb246IHsgdmFsdWU6IFtudWxsLCAnYzInXSB9XG4gICAgICB9KSkudG9FcXVhbChmYWxzZSk7XG4gIH0pO1xufSlcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLE1BQU07RUFDL0JDLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxNQUFNO0lBQ3RFQyxNQUFNLENBQUMsSUFBQUMscUJBQWMsRUFDbkI7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLE1BQU0sRUFBRTtVQUNOQyxjQUFjLEVBQUU7UUFDbEI7TUFDRixDQUFDO01BQ0RDLE9BQU8sRUFBRTtRQUFFQyxLQUFLLEVBQUU7TUFBRztJQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ3JCLENBQUMsQ0FBQztFQUVGUixFQUFF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
@@ -0,0 +1,133 @@
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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