@pie-element/ebsr 9.2.0-next.1 → 9.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.
- package/LICENSE.md +5 -0
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/main.js +1 -1
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/utils.js +1 -1
- package/lib/index.js +1 -1
- package/lib/print.js +1 -1
- package/package.json +2 -2
- package/configure/lib/__tests__/index.test.js +0 -434
- package/controller/lib/__tests__/index.test.js +0 -732
- package/controller/lib/__tests__/utils.test.js +0 -52
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index.test.js +0 -147
- package/module/demo.js +0 -77
- package/module/element.js +0 -2294
- package/module/index.html +0 -21
- package/module/manifest.json +0 -10
- package/module/print-demo.js +0 -115
- package/module/print.html +0 -18
- package/module/print.js +0 -2299
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
6
|
-
|
|
7
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
-
|
|
9
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
-
|
|
11
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
-
|
|
13
|
-
var _react = _interopRequireDefault(require("react"));
|
|
14
|
-
|
|
15
|
-
var _enzyme = require("enzyme");
|
|
16
|
-
|
|
17
|
-
var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
|
|
18
|
-
|
|
19
|
-
var _configUi = require("@pie-lib/pie-toolbox/config-ui");
|
|
20
|
-
|
|
21
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
22
|
-
|
|
23
|
-
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
24
|
-
|
|
25
|
-
var _main = require("../main");
|
|
26
|
-
|
|
27
|
-
var _index = _interopRequireDefault(require("../index"));
|
|
28
|
-
|
|
29
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
30
|
-
|
|
31
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
|
-
|
|
33
|
-
jest.mock('react-dom', function () {
|
|
34
|
-
return {
|
|
35
|
-
render: jest.fn()
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
jest.mock('@pie-framework/pie-configure-events', function () {
|
|
39
|
-
return {
|
|
40
|
-
ModelUpdatedEvent: function ModelUpdatedEvent(update) {
|
|
41
|
-
return {
|
|
42
|
-
update: update,
|
|
43
|
-
preventDefault: jest.fn(),
|
|
44
|
-
stopImmediatePropagation: jest.fn()
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
});
|
|
49
|
-
jest.mock('@pie-lib/pie-toolbox/config-ui', function () {
|
|
50
|
-
return {
|
|
51
|
-
choiceUtils: {
|
|
52
|
-
firstAvailableIndex: jest.fn()
|
|
53
|
-
},
|
|
54
|
-
settings: {
|
|
55
|
-
Panel: function Panel(props) {
|
|
56
|
-
return /*#__PURE__*/_react["default"].createElement("div", props);
|
|
57
|
-
},
|
|
58
|
-
toggle: jest.fn(),
|
|
59
|
-
radio: jest.fn(),
|
|
60
|
-
dropdown: jest.fn()
|
|
61
|
-
},
|
|
62
|
-
layout: {
|
|
63
|
-
ConfigLayout: function ConfigLayout(props) {
|
|
64
|
-
return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
jest.mock('@pie-element/multiple-choice/configure/lib', function () {
|
|
70
|
-
return /*#__PURE__*/(0, _createClass2["default"])(function MockConfigure() {
|
|
71
|
-
(0, _classCallCheck2["default"])(this, MockConfigure);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
var PART_A = 'partA';
|
|
75
|
-
var PART_B = 'partB';
|
|
76
|
-
|
|
77
|
-
var createDefaultModel = function createDefaultModel(model) {
|
|
78
|
-
var newModel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
79
|
-
return _objectSpread(_objectSpread(_objectSpread({}, model), newModel), {}, {
|
|
80
|
-
partA: _objectSpread(_objectSpread({}, model.partA), newModel.partA),
|
|
81
|
-
partB: _objectSpread(_objectSpread({}, model.partB), newModel.partB)
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
var model = createDefaultModel(_defaults["default"].model, {
|
|
86
|
-
partA: {
|
|
87
|
-
choiceMode: 'radio',
|
|
88
|
-
choices: [{
|
|
89
|
-
value: 'yellow',
|
|
90
|
-
label: 'Yellow',
|
|
91
|
-
correct: true,
|
|
92
|
-
feedback: {
|
|
93
|
-
type: 'custom',
|
|
94
|
-
value: 'foo'
|
|
95
|
-
}
|
|
96
|
-
}, {
|
|
97
|
-
value: 'green',
|
|
98
|
-
label: 'Green',
|
|
99
|
-
feedback: {
|
|
100
|
-
type: 'default'
|
|
101
|
-
}
|
|
102
|
-
}],
|
|
103
|
-
choicePrefix: 'numbers',
|
|
104
|
-
prompt: "prompt ".concat(PART_A),
|
|
105
|
-
errors: {}
|
|
106
|
-
},
|
|
107
|
-
partB: {
|
|
108
|
-
choiceMode: 'radio',
|
|
109
|
-
choices: [{
|
|
110
|
-
value: 'orange',
|
|
111
|
-
label: 'Orange',
|
|
112
|
-
correct: true,
|
|
113
|
-
feedback: {
|
|
114
|
-
type: 'custom',
|
|
115
|
-
value: 'foo'
|
|
116
|
-
}
|
|
117
|
-
}, {
|
|
118
|
-
value: 'purple',
|
|
119
|
-
label: 'Purple',
|
|
120
|
-
feedback: {
|
|
121
|
-
type: 'default'
|
|
122
|
-
}
|
|
123
|
-
}],
|
|
124
|
-
choicePrefix: 'numbers',
|
|
125
|
-
prompt: "prompt ".concat(PART_B),
|
|
126
|
-
errors: {}
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
describe('index', function () {
|
|
130
|
-
var Def;
|
|
131
|
-
var el;
|
|
132
|
-
var onModelChanged = jest.fn();
|
|
133
|
-
var onConfigurationChanged = jest.fn();
|
|
134
|
-
var main;
|
|
135
|
-
beforeAll(function () {
|
|
136
|
-
Def = require('../index')["default"];
|
|
137
|
-
});
|
|
138
|
-
beforeEach(function () {
|
|
139
|
-
el = new Def();
|
|
140
|
-
el.model = model;
|
|
141
|
-
el.configuration = _defaults["default"].configuration;
|
|
142
|
-
el.onModelChanged = onModelChanged;
|
|
143
|
-
el.onConfigurationChanged = onConfigurationChanged;
|
|
144
|
-
el.connectedCallback();
|
|
145
|
-
el.dispatchEvent = el.onModelUpdated;
|
|
146
|
-
main = (0, _enzyme.mount)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
|
|
147
|
-
classes: {},
|
|
148
|
-
model: el._model,
|
|
149
|
-
configuration: _defaults["default"].configuration,
|
|
150
|
-
onConfigurationChanged: el.onConfigurationChanged,
|
|
151
|
-
onModelChanged: el.onModelChanged
|
|
152
|
-
})); // mock onModelChanged to dispatch a MODEL_UPDATED event (as multiple-choice does)
|
|
153
|
-
|
|
154
|
-
main.instance().partA.onModelChanged = function (m) {
|
|
155
|
-
var event = new _pieConfigureEvents.ModelUpdatedEvent(m, false);
|
|
156
|
-
el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
|
|
157
|
-
target: {
|
|
158
|
-
getAttribute: jest.fn().mockReturnValue('A')
|
|
159
|
-
}
|
|
160
|
-
}));
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
main.instance().partB.onModelChanged = function (m) {
|
|
164
|
-
var event = new _pieConfigureEvents.ModelUpdatedEvent(m, false);
|
|
165
|
-
el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
|
|
166
|
-
target: {
|
|
167
|
-
getAttribute: jest.fn().mockReturnValue('B')
|
|
168
|
-
}
|
|
169
|
-
}));
|
|
170
|
-
};
|
|
171
|
-
});
|
|
172
|
-
describe('createDefaultModel', function () {
|
|
173
|
-
it('default-snapshot', function () {
|
|
174
|
-
var m = _index["default"].createDefaultModel({});
|
|
175
|
-
|
|
176
|
-
expect(m).toMatchSnapshot();
|
|
177
|
-
});
|
|
178
|
-
it('with-overrides-snapshot', function () {
|
|
179
|
-
var m = _index["default"].createDefaultModel({
|
|
180
|
-
partA: {
|
|
181
|
-
rationale: 'foo',
|
|
182
|
-
teacherInstructions: 'ti'
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
expect(m).toMatchSnapshot();
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('set model', function () {
|
|
190
|
-
it('calls ReactDOM.render', function () {
|
|
191
|
-
el.model = model;
|
|
192
|
-
expect(el._model).toEqual(model);
|
|
193
|
-
expect(_reactDom["default"].render).toHaveBeenCalled();
|
|
194
|
-
});
|
|
195
|
-
it('should have set the model for partA and partB', function () {
|
|
196
|
-
expect(main.instance().partA._model).toEqual(model.partA);
|
|
197
|
-
expect(main.instance().partB._model).toEqual(model.partB);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
describe('set configuration', function () {
|
|
201
|
-
it('calls ReactDOM.render', function () {
|
|
202
|
-
el.configuration = _defaults["default"].configuration;
|
|
203
|
-
expect(_reactDom["default"].render).toHaveBeenCalled();
|
|
204
|
-
});
|
|
205
|
-
it('should have set the configuration for partA and partB', function () {
|
|
206
|
-
expect(main.instance().partA.configuration).toEqual(_objectSpread(_objectSpread({}, _defaults["default"].configuration.partA), {}, {
|
|
207
|
-
partLabels: _defaults["default"].configuration.partLabels,
|
|
208
|
-
settingsPanelDisabled: true
|
|
209
|
-
}));
|
|
210
|
-
expect(main.instance().partB.configuration).toEqual(_objectSpread(_objectSpread({}, _defaults["default"].configuration.partB), {}, {
|
|
211
|
-
partLabels: _defaults["default"].configuration.partLabels,
|
|
212
|
-
settingsPanelDisabled: true
|
|
213
|
-
}));
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
var assetOnModelUpdated = function assetOnModelUpdated(label, key, updatedPart, expected) {
|
|
218
|
-
it(label, function () {
|
|
219
|
-
var event = new _pieConfigureEvents.ModelUpdatedEvent(updatedPart, false);
|
|
220
|
-
el.dispatchEvent(_objectSpread(_objectSpread({}, event), {}, {
|
|
221
|
-
target: {
|
|
222
|
-
getAttribute: jest.fn().mockReturnValue(key)
|
|
223
|
-
}
|
|
224
|
-
}));
|
|
225
|
-
expect(_reactDom["default"].render).toBeCalled();
|
|
226
|
-
expect(el._model["part".concat(key)]).toEqual(expected);
|
|
227
|
-
});
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
describe('onModelUpdated', function () {
|
|
231
|
-
assetOnModelUpdated('dispatching MODEL_UPDATED updates model.partA', 'A', {
|
|
232
|
-
updatedA: true
|
|
233
|
-
}, {
|
|
234
|
-
updatedA: true
|
|
235
|
-
});
|
|
236
|
-
assetOnModelUpdated('dispatching MODEL_UPDATED updates model.partB', 'B', {
|
|
237
|
-
updatedB: true
|
|
238
|
-
}, {
|
|
239
|
-
updatedB: true
|
|
240
|
-
});
|
|
241
|
-
assetOnModelUpdated('dispatching MODEL_UPDATED with update undefined does not update model.partA', 'A', undefined, createDefaultModel(model).partA);
|
|
242
|
-
assetOnModelUpdated('dispatching MODEL_UPDATED with update undefined does not update model.partB', 'B', undefined, createDefaultModel(model).partB);
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
var assetPartUpdate = function assetPartUpdate(label, key, updatedModel) {
|
|
246
|
-
it("".concat(key, " - ").concat(label), function () {
|
|
247
|
-
main.instance()[key].onModelChanged(updatedModel);
|
|
248
|
-
expect(el._model[key]).toEqual(updatedModel);
|
|
249
|
-
expect(_reactDom["default"].render).toBeCalled();
|
|
250
|
-
});
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
describe('part update', function () {
|
|
254
|
-
assetPartUpdate('Dispatching Model Updated Event will update Teacher Instructions', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
255
|
-
teacherInstructions: 'Part A Teacher Instructions'
|
|
256
|
-
}));
|
|
257
|
-
assetPartUpdate('Dispatching Model Updated Event will update Teacher Instructions', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
|
|
258
|
-
teacherInstructions: 'Part B Teacher Instructions'
|
|
259
|
-
}));
|
|
260
|
-
assetPartUpdate('Dispatching Model Updated Event will update Prompt', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
261
|
-
prompt: 'Prompt A'
|
|
262
|
-
}));
|
|
263
|
-
assetPartUpdate('Dispatching Model Updated Event will update Prompt', 'partB', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
264
|
-
prompt: 'Prompt B'
|
|
265
|
-
}));
|
|
266
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - ADD CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
267
|
-
choices: [].concat((0, _toConsumableArray2["default"])(model.partA.choices), [{
|
|
268
|
-
label: 'label',
|
|
269
|
-
value: _configUi.choiceUtils.firstAvailableIndex(model.partA.choices.map(function (c) {
|
|
270
|
-
return c.value;
|
|
271
|
-
}), 0),
|
|
272
|
-
feedback: {
|
|
273
|
-
type: 'none'
|
|
274
|
-
}
|
|
275
|
-
}])
|
|
276
|
-
}));
|
|
277
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - ADD CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
|
|
278
|
-
choices: [].concat((0, _toConsumableArray2["default"])(model.partB.choices), [{
|
|
279
|
-
label: 'label',
|
|
280
|
-
value: _configUi.choiceUtils.firstAvailableIndex(model.partB.choices.map(function (c) {
|
|
281
|
-
return c.value;
|
|
282
|
-
}), 0),
|
|
283
|
-
feedback: {
|
|
284
|
-
type: 'none'
|
|
285
|
-
}
|
|
286
|
-
}])
|
|
287
|
-
}));
|
|
288
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - REMOVE CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
289
|
-
choices: model.partA.choices.splice(0, 2)
|
|
290
|
-
}));
|
|
291
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - REMOVE CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
|
|
292
|
-
choices: model.partB.choices.splice(0, 2)
|
|
293
|
-
}));
|
|
294
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - CHANGE CHOICE', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
295
|
-
choices: model.partA.choices.splice(1, 1, {
|
|
296
|
-
correct: true,
|
|
297
|
-
value: 'green',
|
|
298
|
-
label: function label(value) {
|
|
299
|
-
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
300
|
-
},
|
|
301
|
-
feedback: {
|
|
302
|
-
type: 'none',
|
|
303
|
-
value: ''
|
|
304
|
-
}
|
|
305
|
-
})
|
|
306
|
-
}));
|
|
307
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices - CHANGE CHOICE', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
|
|
308
|
-
choices: model.partB.choices.splice(1, 1, {
|
|
309
|
-
correct: true,
|
|
310
|
-
value: 'green',
|
|
311
|
-
label: function label(value) {
|
|
312
|
-
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
313
|
-
},
|
|
314
|
-
feedback: {
|
|
315
|
-
type: 'none',
|
|
316
|
-
value: ''
|
|
317
|
-
}
|
|
318
|
-
})
|
|
319
|
-
}));
|
|
320
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices', 'partA', _objectSpread(_objectSpread({}, model.partA), {}, {
|
|
321
|
-
choices: []
|
|
322
|
-
}));
|
|
323
|
-
assetPartUpdate('Dispatching Model Updated Event will update Choices', 'partB', _objectSpread(_objectSpread({}, model.partB), {}, {
|
|
324
|
-
choices: []
|
|
325
|
-
}));
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
describe('main', function () {
|
|
329
|
-
var Def;
|
|
330
|
-
var el;
|
|
331
|
-
var main;
|
|
332
|
-
beforeAll(function () {
|
|
333
|
-
Def = require('../index')["default"];
|
|
334
|
-
});
|
|
335
|
-
beforeEach(function () {
|
|
336
|
-
el = new Def();
|
|
337
|
-
el.model = model;
|
|
338
|
-
el.configuration = _defaults["default"].configuration;
|
|
339
|
-
el.dispatchEvent = el.onModelUpdated;
|
|
340
|
-
main = (0, _enzyme.mount)( /*#__PURE__*/_react["default"].createElement(_main.Main, {
|
|
341
|
-
classes: {},
|
|
342
|
-
model: el._model,
|
|
343
|
-
configuration: _defaults["default"].configuration,
|
|
344
|
-
onConfigurationChanged: el.onConfigurationChanged,
|
|
345
|
-
onModelChanged: el.onModelChanged
|
|
346
|
-
}));
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
var assertOnModelChanged = function assertOnModelChanged(label, updatedModel, expected) {
|
|
350
|
-
it(label, function () {
|
|
351
|
-
main.instance().props.onModelChanged(updatedModel);
|
|
352
|
-
expect(el._model).toEqual(createDefaultModel(model, expected));
|
|
353
|
-
});
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
describe('onModelChanged', function () {
|
|
357
|
-
assertOnModelChanged('does not change the model', {}, model);
|
|
358
|
-
assertOnModelChanged('changes partA - checkbox', {
|
|
359
|
-
partA: {
|
|
360
|
-
choiceMode: 'checkbox'
|
|
361
|
-
}
|
|
362
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
363
|
-
partA: {
|
|
364
|
-
choiceMode: 'checkbox'
|
|
365
|
-
}
|
|
366
|
-
}));
|
|
367
|
-
assertOnModelChanged('changes partA - choicePrefix', {
|
|
368
|
-
partA: {
|
|
369
|
-
choicePrefix: 'numbers'
|
|
370
|
-
}
|
|
371
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
372
|
-
partA: {
|
|
373
|
-
choicePrefix: 'numbers'
|
|
374
|
-
}
|
|
375
|
-
}));
|
|
376
|
-
assertOnModelChanged('changes partA - partialScoring', {
|
|
377
|
-
partialScoring: false
|
|
378
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
379
|
-
partialScoring: false
|
|
380
|
-
}));
|
|
381
|
-
assertOnModelChanged('changes partA - lockChoiceOrder', {
|
|
382
|
-
partA: {
|
|
383
|
-
lockChoiceOrder: true
|
|
384
|
-
}
|
|
385
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
386
|
-
partA: {
|
|
387
|
-
lockChoiceOrder: true
|
|
388
|
-
}
|
|
389
|
-
}));
|
|
390
|
-
assertOnModelChanged('changes partA - scoringType', {
|
|
391
|
-
scoringType: 'auto'
|
|
392
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
393
|
-
scoringType: 'auto'
|
|
394
|
-
}));
|
|
395
|
-
assertOnModelChanged('changes partB - checkbox', {
|
|
396
|
-
partB: {
|
|
397
|
-
choiceMode: 'checkbox'
|
|
398
|
-
}
|
|
399
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
400
|
-
partB: {
|
|
401
|
-
choiceMode: 'checkbox'
|
|
402
|
-
}
|
|
403
|
-
}));
|
|
404
|
-
assertOnModelChanged('changes partB - choicePrefix', {
|
|
405
|
-
partB: {
|
|
406
|
-
choicePrefix: 'numbers'
|
|
407
|
-
}
|
|
408
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
409
|
-
partB: {
|
|
410
|
-
choicePrefix: 'numbers'
|
|
411
|
-
}
|
|
412
|
-
}));
|
|
413
|
-
assertOnModelChanged('changes partB - partialScoring', {
|
|
414
|
-
partialScoring: false
|
|
415
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
416
|
-
partialScoring: false
|
|
417
|
-
}));
|
|
418
|
-
assertOnModelChanged('changes partB - lockChoiceOrder', {
|
|
419
|
-
partB: {
|
|
420
|
-
lockChoiceOrder: true
|
|
421
|
-
}
|
|
422
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
423
|
-
partB: {
|
|
424
|
-
lockChoiceOrder: true
|
|
425
|
-
}
|
|
426
|
-
}));
|
|
427
|
-
assertOnModelChanged('changes partB - scoringType', {
|
|
428
|
-
scoringType: 'auto'
|
|
429
|
-
}, _objectSpread(_objectSpread({}, model), {}, {
|
|
430
|
-
scoringType: 'auto'
|
|
431
|
-
}));
|
|
432
|
-
});
|
|
433
|
-
});
|
|
434
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsInJlbmRlciIsImZuIiwiTW9kZWxVcGRhdGVkRXZlbnQiLCJ1cGRhdGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsInNldHRpbmdzIiwiUGFuZWwiLCJwcm9wcyIsInRvZ2dsZSIsInJhZGlvIiwiZHJvcGRvd24iLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJjaGlsZHJlbiIsIlBBUlRfQSIsIlBBUlRfQiIsImNyZWF0ZURlZmF1bHRNb2RlbCIsIm1vZGVsIiwibmV3TW9kZWwiLCJwYXJ0QSIsInBhcnRCIiwiZGVmYXVsdHMiLCJjaG9pY2VNb2RlIiwiY2hvaWNlcyIsInZhbHVlIiwibGFiZWwiLCJjb3JyZWN0IiwiZmVlZGJhY2siLCJ0eXBlIiwiY2hvaWNlUHJlZml4IiwicHJvbXB0IiwiZXJyb3JzIiwiZGVzY3JpYmUiLCJEZWYiLCJlbCIsIm9uTW9kZWxDaGFuZ2VkIiwib25Db25maWd1cmF0aW9uQ2hhbmdlZCIsIm1haW4iLCJiZWZvcmVBbGwiLCJyZXF1aXJlIiwiYmVmb3JlRWFjaCIsImNvbmZpZ3VyYXRpb24iLCJjb25uZWN0ZWRDYWxsYmFjayIsImRpc3BhdGNoRXZlbnQiLCJvbk1vZGVsVXBkYXRlZCIsIl9tb2RlbCIsImluc3RhbmNlIiwibSIsImV2ZW50IiwidGFyZ2V0IiwiZ2V0QXR0cmlidXRlIiwibW9ja1JldHVyblZhbHVlIiwiaXQiLCJFYnNyQ29uZmlndXJlIiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwicmF0aW9uYWxlIiwidGVhY2hlckluc3RydWN0aW9ucyIsInRvRXF1YWwiLCJSZWFjdERPTSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJwYXJ0TGFiZWxzIiwic2V0dGluZ3NQYW5lbERpc2FibGVkIiwiYXNzZXRPbk1vZGVsVXBkYXRlZCIsImtleSIsInVwZGF0ZWRQYXJ0IiwiZXhwZWN0ZWQiLCJ0b0JlQ2FsbGVkIiwidXBkYXRlZEEiLCJ1cGRhdGVkQiIsInVuZGVmaW5lZCIsImFzc2V0UGFydFVwZGF0ZSIsInVwZGF0ZWRNb2RlbCIsInV0aWxzIiwibWFwIiwiYyIsInNwbGljZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJhc3NlcnRPbk1vZGVsQ2hhbmdlZCIsInBhcnRpYWxTY29yaW5nIiwibG9ja0Nob2ljZU9yZGVyIiwic2NvcmluZ1R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsV0FBVixFQUF1QjtBQUFBLFNBQU87QUFDNUJDLElBQUFBLE1BQU0sRUFBRUYsSUFBSSxDQUFDRyxFQUFMO0FBRG9CLEdBQVA7QUFBQSxDQUF2QjtBQUlBSCxJQUFJLENBQUNDLElBQUwsQ0FBVSxxQ0FBVixFQUFpRDtBQUFBLFNBQU87QUFDdERHLElBQUFBLGlCQUFpQixFQUFFLDJCQUFDQyxNQUFELEVBQVk7QUFDN0IsYUFBTztBQUNMQSxRQUFBQSxNQUFNLEVBQU5BLE1BREs7QUFFTEMsUUFBQUEsY0FBYyxFQUFFTixJQUFJLENBQUNHLEVBQUwsRUFGWDtBQUdMSSxRQUFBQSx3QkFBd0IsRUFBRVAsSUFBSSxDQUFDRyxFQUFMO0FBSHJCLE9BQVA7QUFLRDtBQVBxRCxHQUFQO0FBQUEsQ0FBakQ7QUFVQUgsSUFBSSxDQUFDQyxJQUFMLENBQVUsZ0NBQVYsRUFBNEM7QUFBQSxTQUFPO0FBQ2pETyxJQUFBQSxXQUFXLEVBQUU7QUFDWEMsTUFBQUEsbUJBQW1CLEVBQUVULElBQUksQ0FBQ0csRUFBTDtBQURWLEtBRG9DO0FBSWpETyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsS0FBSyxFQUFFLGVBQUNDLEtBQUQ7QUFBQSw0QkFBVyx1Q0FBU0EsS0FBVCxDQUFY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QVUsRUFBRTtBQURQO0FBVFMsT0FBcEI7QUFjQTBELElBQUFBLG9CQUFvQixDQUNsQiw4QkFEa0IsRUFFbEI7QUFDRTVELE1BQUFBLEtBQUssRUFBRTtBQUNMUyxRQUFBQSxZQUFZLEVBQUU7QUFEVDtBQURULEtBRmtCLGtDQVFiWixLQVJhO0FBU2hCRyxNQUFBQSxLQUFLLEVBQUU7QUFDTFMsUUFBQUEsWUFBWSxFQUFFO0FBRFQ7QUFUUyxPQUFwQjtBQWNBbUQsSUFBQUEsb0JBQW9CLENBQ2xCLGdDQURrQixFQUVsQjtBQUNFQyxNQUFBQSxjQUFjLEVBQUU7QUFEbEIsS0FGa0Isa0NBTWJoRSxLQU5hO0FBT2hCZ0UsTUFBQUEsY0FBYyxFQUFFO0FBUEEsT0FBcEI7QUFVQUQsSUFBQUEsb0JBQW9CLENBQ2xCLGlDQURrQixFQUVsQjtBQUNFNUQsTUFBQUEsS0FBSyxFQUFFO0FBQ0w4RCxRQUFBQSxlQUFlLEVBQUU7QUFEWjtBQURULEtBRmtCLGtDQVFiakUsS0FSYTtBQVNoQkcsTUFBQUEsS0FBSyxFQUFFO0FBQ0w4RCxRQUFBQSxlQUFlLEVBQUU7QUFEWjtBQVRTLE9BQXBCO0FBY0FGLElBQUFBLG9CQUFvQixDQUNsQiw2QkFEa0IsRUFFbEI7QUFDRUcsTUFBQUEsV0FBVyxFQUFFO0FBRGYsS0FGa0Isa0NBTWJsRSxLQU5hO0FBT2hCa0UsTUFBQUEsV0FBVyxFQUFFO0FBUEcsT0FBcEI7QUFVRCxHQTlITyxDQUFSO0FBK0hELENBaktPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbW91bnQgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IHsgTW9kZWxVcGRhdGVkRXZlbnQgfSBmcm9tICdAcGllLWZyYW1ld29yay9waWUtY29uZmlndXJlLWV2ZW50cyc7XG5pbXBvcnQgeyBjaG9pY2VVdGlscyBhcyB1dGlscyB9IGZyb20gJ0BwaWUtbGliL3BpZS10b29sYm94L2NvbmZpZy11aSc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBNYWluIH0gZnJvbSAnLi4vbWFpbic7XG5pbXBvcnQgRWJzckNvbmZpZ3VyZSBmcm9tICcuLi9pbmRleCc7XG5cbmplc3QubW9jaygncmVhY3QtZG9tJywgKCkgPT4gKHtcbiAgcmVuZGVyOiBqZXN0LmZuKCksXG59KSk7XG5cbmplc3QubW9jaygnQHBpZS1mcmFtZXdvcmsvcGllLWNvbmZpZ3VyZS1ldmVudHMnLCAoKSA9PiAoe1xuICBNb2RlbFVwZGF0ZWRFdmVudDogKHVwZGF0ZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGUsXG4gICAgICBwcmV2ZW50RGVmYXVsdDogamVzdC5mbigpLFxuICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBqZXN0LmZuKCksXG4gICAgfTtcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9waWUtdG9vbGJveC9jb25maWctdWknLCAoKSA9PiAoe1xuICBjaG9pY2VVdGlsczoge1xuICAgIGZpcnN0QXZhaWxhYmxlSW5kZXg6IGplc3QuZm4oKSxcbiAgfSxcbiAgc2V0dGluZ3M6IHtcbiAgICBQYW5lbDogKHByb3BzKSA9PiA8ZGl2IHsuLi5wcm9wc30gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgICBkcm9wZG93bjogamVzdC5mbigpLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtZWxlbWVudC9tdWx0aXBsZS1jaG9pY2UvY29uZmlndXJlL2xpYicsICgpID0+IGNsYXNzIE1vY2tDb25maWd1cmUge30pO1xuXG5jb25zdCBQQVJUX0EgPSAncGFydEEnO1xuY29uc3QgUEFSVF9CID0gJ3BhcnRCJztcblxuY29uc3QgY3JlYXRlRGVmYXVsdE1vZGVsID0gKG1vZGVsLCBuZXdNb2RlbCA9IHt9KSA9PiAoe1xuICAuLi5tb2RlbCxcbiAgLi4ubmV3TW9kZWwsXG4gIHBhcnRBOiB7XG4gICAgLi4ubW9kZWwucGFydEEsXG4gICAgLi4ubmV3TW9kZWwucGFydEEsXG4gIH0sXG4gIHBhcnRCOiB7XG4gICAgLi4ubW9kZWwucGFydEIsXG4gICAgLi4ubmV3TW9kZWwucGFydEIsXG4gIH0sXG59KTtcblxuY29uc3QgbW9kZWwgPSBjcmVhdGVEZWZhdWx0TW9kZWwoZGVmYXVsdHMubW9kZWwsIHtcbiAgcGFydEE6IHtcbiAgICBjaG9pY2VNb2RlOiAncmFkaW8nLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6ICd5ZWxsb3cnLFxuICAgICAgICBsYWJlbDogJ1llbGxvdycsXG4gICAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgdmFsdWU6ICdmb28nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6ICdncmVlbicsXG4gICAgICAgIGxhYmVsOiAnR3JlZW4nLFxuICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaG9pY2VQcmVmaXg6ICdudW1iZXJzJyxcbiAgICBwcm9tcHQ6IGBwcm9tcHQgJHtQQVJUX0F9YCxcbiAgICBlcnJvcnM6IHt9LFxuICB9LFxuICBwYXJ0Qjoge1xuICAgIGNob2ljZU1vZGU6ICdyYWRpbycsXG4gICAgY2hvaWNlczogW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogJ29yYW5nZScsXG4gICAgICAgIGxhYmVsOiAnT3JhbmdlJyxcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICB2YWx1ZTogJ2ZvbycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWx1ZTogJ3B1cnBsZScsXG4gICAgICAgIGxhYmVsOiAnUHVycGxlJyxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgcHJvbXB0OiBgcHJvbXB0ICR7UEFSVF9CfWAsXG4gICAgZXJyb3JzOiB7fSxcbiAgfSxcbn0pO1xuXG5kZXNjcmliZSgnaW5kZXgnLCAoKSA9PiB7XG4gIGxldCBEZWY7XG4gIGxldCBlbDtcbiAgbGV0IG9uTW9kZWxDaGFuZ2VkID0gamVzdC5mbigpO1xuICBsZXQgb25Db25maWd1cmF0aW9uQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgbGV0IG1haW47XG5cbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBEZWYgPSByZXF1aXJlKCcuLi9pbmRleCcpLmRlZmF1bHQ7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGVsID0gbmV3IERlZigpO1xuICAgIGVsLm1vZGVsID0gbW9kZWw7XG4gICAgZWwuY29uZmlndXJhdGlvbiA9IGRlZmF1bHRzLmNvbmZpZ3VyYXRpb247XG4gICAgZWwub25Nb2RlbENoYW5nZWQgPSBvbk1vZGVsQ2hhbmdlZDtcbiAgICBlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkID0gb25Db25maWd1cmF0aW9uQ2hhbmdlZDtcbiAgICBlbC5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQgPSBlbC5vbk1vZGVsVXBkYXRlZDtcblxuICAgIG1haW4gPSBtb3VudChcbiAgICAgIDxNYWluXG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBtb2RlbD17ZWwuX21vZGVsfVxuICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0cy5jb25maWd1cmF0aW9ufVxuICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkPXtlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICBvbk1vZGVsQ2hhbmdlZD17ZWwub25Nb2RlbENoYW5nZWR9XG4gICAgICAvPixcbiAgICApO1xuXG4gICAgLy8gbW9jayBvbk1vZGVsQ2hhbmdlZCB0byBkaXNwYXRjaCBhIE1PREVMX1VQREFURUQgZXZlbnQgKGFzIG11bHRpcGxlLWNob2ljZSBkb2VzKVxuICAgIG1haW4uaW5zdGFuY2UoKS5wYXJ0QS5vbk1vZGVsQ2hhbmdlZCA9IChtKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RlbFVwZGF0ZWRFdmVudChtLCBmYWxzZSk7XG5cbiAgICAgIGVsLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKCdBJyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9O1xuICAgIG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5vbk1vZGVsQ2hhbmdlZCA9IChtKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RlbFVwZGF0ZWRFdmVudChtLCBmYWxzZSk7XG5cbiAgICAgIGVsLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKCdCJyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9O1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlRGVmYXVsdE1vZGVsJywgKCkgPT4ge1xuICAgIGl0KCdkZWZhdWx0LXNuYXBzaG90JywgKCkgPT4ge1xuICAgICAgY29uc3QgbSA9IEVic3JDb25maWd1cmUuY3JlYXRlRGVmYXVsdE1vZGVsKHt9KTtcbiAgICAgIGV4cGVjdChtKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgICBpdCgnd2l0aC1vdmVycmlkZXMtc25hcHNob3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtID0gRWJzckNvbmZpZ3VyZS5jcmVhdGVEZWZhdWx0TW9kZWwoe1xuICAgICAgICBwYXJ0QTogeyByYXRpb25hbGU6ICdmb28nLCB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAndGknIH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChtKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldCBtb2RlbCcsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgUmVhY3RET00ucmVuZGVyJywgKCkgPT4ge1xuICAgICAgZWwubW9kZWwgPSBtb2RlbDtcblxuICAgICAgZXhwZWN0KGVsLl9tb2RlbCkudG9FcXVhbChtb2RlbCk7XG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgc2V0IHRoZSBtb2RlbCBmb3IgcGFydEEgYW5kIHBhcnRCJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0QS5fbW9kZWwpLnRvRXF1YWwobW9kZWwucGFydEEpO1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5fbW9kZWwpLnRvRXF1YWwobW9kZWwucGFydEIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2V0IGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NhbGxzIFJlYWN0RE9NLnJlbmRlcicsICgpID0+IHtcbiAgICAgIGVsLmNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0cy5jb25maWd1cmF0aW9uO1xuXG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgc2V0IHRoZSBjb25maWd1cmF0aW9uIGZvciBwYXJ0QSBhbmQgcGFydEInLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWFpbi5pbnN0YW5jZSgpLnBhcnRBLmNvbmZpZ3VyYXRpb24pLnRvRXF1YWwoe1xuICAgICAgICAuLi5kZWZhdWx0cy5jb25maWd1cmF0aW9uLnBhcnRBLFxuICAgICAgICBwYXJ0TGFiZWxzOiBkZWZhdWx0cy5jb25maWd1cmF0aW9uLnBhcnRMYWJlbHMsXG4gICAgICAgIHNldHRpbmdzUGFuZWxEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1haW4uaW5zdGFuY2UoKS5wYXJ0Qi5jb25maWd1cmF0aW9uKS50b0VxdWFsKHtcbiAgICAgICAgLi4uZGVmYXVsdHMuY29uZmlndXJhdGlvbi5wYXJ0QixcbiAgICAgICAgcGFydExhYmVsczogZGVmYXVsdHMuY29uZmlndXJhdGlvbi5wYXJ0TGFiZWxzLFxuICAgICAgICBzZXR0aW5nc1BhbmVsRGlzYWJsZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgYXNzZXRPbk1vZGVsVXBkYXRlZCA9IChsYWJlbCwga2V5LCB1cGRhdGVkUGFydCwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChsYWJlbCwgKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kZWxVcGRhdGVkRXZlbnQodXBkYXRlZFBhcnQsIGZhbHNlKTtcblxuICAgICAgZWwuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBnZXRBdHRyaWJ1dGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoa2V5KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoUmVhY3RET00ucmVuZGVyKS50b0JlQ2FsbGVkKCk7XG4gICAgICBleHBlY3QoZWwuX21vZGVsW2BwYXJ0JHtrZXl9YF0pLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdvbk1vZGVsVXBkYXRlZCcsICgpID0+IHtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKCdkaXNwYXRjaGluZyBNT0RFTF9VUERBVEVEIHVwZGF0ZXMgbW9kZWwucGFydEEnLCAnQScsIHsgdXBkYXRlZEE6IHRydWUgfSwgeyB1cGRhdGVkQTogdHJ1ZSB9KTtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKCdkaXNwYXRjaGluZyBNT0RFTF9VUERBVEVEIHVwZGF0ZXMgbW9kZWwucGFydEInLCAnQicsIHsgdXBkYXRlZEI6IHRydWUgfSwgeyB1cGRhdGVkQjogdHJ1ZSB9KTtcblxuICAgIGFzc2V0T25Nb2RlbFVwZGF0ZWQoXG4gICAgICAnZGlzcGF0Y2hpbmcgTU9ERUxfVVBEQVRFRCB3aXRoIHVwZGF0ZSB1bmRlZmluZWQgZG9lcyBub3QgdXBkYXRlIG1vZGVsLnBhcnRBJyxcbiAgICAgICdBJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0ZURlZmF1bHRNb2RlbChtb2RlbCkucGFydEEsXG4gICAgKTtcbiAgICBhc3NldE9uTW9kZWxVcGRhdGVkKFxuICAgICAgJ2Rpc3BhdGNoaW5nIE1PREVMX1VQREFURUQgd2l0aCB1cGRhdGUgdW5kZWZpbmVkIGRvZXMgbm90IHVwZGF0ZSBtb2RlbC5wYXJ0QicsXG4gICAgICAnQicsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjcmVhdGVEZWZhdWx0TW9kZWwobW9kZWwpLnBhcnRCLFxuICAgICk7XG4gIH0pO1xuXG4gIGNvbnN0IGFzc2V0UGFydFVwZGF0ZSA9IChsYWJlbCwga2V5LCB1cGRhdGVkTW9kZWwpID0+IHtcbiAgICBpdChgJHtrZXl9IC0gJHtsYWJlbH1gLCAoKSA9PiB7XG4gICAgICBtYWluLmluc3RhbmNlKClba2V5XS5vbk1vZGVsQ2hhbmdlZCh1cGRhdGVkTW9kZWwpO1xuXG4gICAgICBleHBlY3QoZWwuX21vZGVsW2tleV0pLnRvRXF1YWwodXBkYXRlZE1vZGVsKTtcbiAgICAgIGV4cGVjdChSZWFjdERPTS5yZW5kZXIpLnRvQmVDYWxsZWQoKTtcbiAgICB9KTtcbiAgfTtcblxuICBkZXNjcmliZSgncGFydCB1cGRhdGUnLCAoKSA9PiB7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJywgJ3BhcnRBJywge1xuICAgICAgLi4ubW9kZWwucGFydEEsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnUGFydCBBIFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgVGVhY2hlciBJbnN0cnVjdGlvbnMnLCAncGFydEInLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QixcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnM6ICdQYXJ0IEIgVGVhY2hlciBJbnN0cnVjdGlvbnMnLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBQcm9tcHQnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIHByb21wdDogJ1Byb21wdCBBJyxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgUHJvbXB0JywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEEsXG4gICAgICBwcm9tcHQ6ICdQcm9tcHQgQicsXG4gICAgfSk7XG5cbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcyAtIEFERCBDSE9JQ0UnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgLi4ubW9kZWwucGFydEEuY2hvaWNlcyxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgICAgICAgIHZhbHVlOiB1dGlscy5maXJzdEF2YWlsYWJsZUluZGV4KFxuICAgICAgICAgICAgbW9kZWwucGFydEEuY2hvaWNlcy5tYXAoKGMpID0+IGMudmFsdWUpLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIENob2ljZXMgLSBBREQgQ0hPSUNFJywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIC4uLm1vZGVsLnBhcnRCLmNob2ljZXMsXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICB2YWx1ZTogdXRpbHMuZmlyc3RBdmFpbGFibGVJbmRleChcbiAgICAgICAgICAgIG1vZGVsLnBhcnRCLmNob2ljZXMubWFwKChjKSA9PiBjLnZhbHVlKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmZWVkYmFjazoge1xuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzIC0gUkVNT1ZFIENIT0lDRScsICdwYXJ0QScsIHtcbiAgICAgIC4uLm1vZGVsLnBhcnRBLFxuICAgICAgY2hvaWNlczogbW9kZWwucGFydEEuY2hvaWNlcy5zcGxpY2UoMCwgMiksXG4gICAgfSk7XG4gICAgYXNzZXRQYXJ0VXBkYXRlKCdEaXNwYXRjaGluZyBNb2RlbCBVcGRhdGVkIEV2ZW50IHdpbGwgdXBkYXRlIENob2ljZXMgLSBSRU1PVkUgQ0hPSUNFJywgJ3BhcnRCJywge1xuICAgICAgLi4ubW9kZWwucGFydEIsXG4gICAgICBjaG9pY2VzOiBtb2RlbC5wYXJ0Qi5jaG9pY2VzLnNwbGljZSgwLCAyKSxcbiAgICB9KTtcbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcyAtIENIQU5HRSBDSE9JQ0UnLCAncGFydEEnLCB7XG4gICAgICAuLi5tb2RlbC5wYXJ0QSxcbiAgICAgIGNob2ljZXM6IG1vZGVsLnBhcnRBLmNob2ljZXMuc3BsaWNlKDEsIDEsIHtcbiAgICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6ICdncmVlbicsXG4gICAgICAgIGxhYmVsOiAodmFsdWUpID0+IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSksXG4gICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzIC0gQ0hBTkdFIENIT0lDRScsICdwYXJ0QicsIHtcbiAgICAgIC4uLm1vZGVsLnBhcnRCLFxuICAgICAgY2hvaWNlczogbW9kZWwucGFydEIuY2hvaWNlcy5zcGxpY2UoMSwgMSwge1xuICAgICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgICB2YWx1ZTogJ2dyZWVuJyxcbiAgICAgICAgbGFiZWw6ICh2YWx1ZSkgPT4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSxcbiAgICAgICAgZmVlZGJhY2s6IHtcbiAgICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBhc3NldFBhcnRVcGRhdGUoJ0Rpc3BhdGNoaW5nIE1vZGVsIFVwZGF0ZWQgRXZlbnQgd2lsbCB1cGRhdGUgQ2hvaWNlcycsICdwYXJ0QScsIHsgLi4ubW9kZWwucGFydEEsIGNob2ljZXM6IFtdIH0pO1xuICAgIGFzc2V0UGFydFVwZGF0ZSgnRGlzcGF0Y2hpbmcgTW9kZWwgVXBkYXRlZCBFdmVudCB3aWxsIHVwZGF0ZSBDaG9pY2VzJywgJ3BhcnRCJywgeyAuLi5tb2RlbC5wYXJ0QiwgY2hvaWNlczogW10gfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdtYWluJywgKCkgPT4ge1xuICBsZXQgRGVmO1xuICBsZXQgZWw7XG4gIGxldCBtYWluO1xuXG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgRGVmID0gcmVxdWlyZSgnLi4vaW5kZXgnKS5kZWZhdWx0O1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBlbCA9IG5ldyBEZWYoKTtcbiAgICBlbC5tb2RlbCA9IG1vZGVsO1xuICAgIGVsLmNvbmZpZ3VyYXRpb24gPSBkZWZhdWx0cy5jb25maWd1cmF0aW9uO1xuICAgIGVsLmRpc3BhdGNoRXZlbnQgPSBlbC5vbk1vZGVsVXBkYXRlZDtcblxuICAgIG1haW4gPSBtb3VudChcbiAgICAgIDxNYWluXG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBtb2RlbD17ZWwuX21vZGVsfVxuICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0cy5jb25maWd1cmF0aW9ufVxuICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkPXtlbC5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICBvbk1vZGVsQ2hhbmdlZD17ZWwub25Nb2RlbENoYW5nZWR9XG4gICAgICAvPixcbiAgICApO1xuICB9KTtcblxuICBjb25zdCBhc3NlcnRPbk1vZGVsQ2hhbmdlZCA9IChsYWJlbCwgdXBkYXRlZE1vZGVsLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGxhYmVsLCAoKSA9PiB7XG4gICAgICBtYWluLmluc3RhbmNlKCkucHJvcHMub25Nb2RlbENoYW5nZWQodXBkYXRlZE1vZGVsKTtcblxuICAgICAgZXhwZWN0KGVsLl9tb2RlbCkudG9FcXVhbChjcmVhdGVEZWZhdWx0TW9kZWwobW9kZWwsIGV4cGVjdGVkKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ29uTW9kZWxDaGFuZ2VkJywgKCkgPT4ge1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKCdkb2VzIG5vdCBjaGFuZ2UgdGhlIG1vZGVsJywge30sIG1vZGVsKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRBIC0gY2hlY2tib3gnLFxuICAgICAge1xuICAgICAgICBwYXJ0QToge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEEgLSBjaG9pY2VQcmVmaXgnLFxuICAgICAge1xuICAgICAgICBwYXJ0QToge1xuICAgICAgICAgIGNob2ljZVByZWZpeDogJ251bWJlcnMnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHBhcnRBOiB7XG4gICAgICAgICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QSAtIHBhcnRpYWxTY29yaW5nJyxcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRBIC0gbG9ja0Nob2ljZU9yZGVyJyxcbiAgICAgIHtcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEE6IHtcbiAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QSAtIHNjb3JpbmdUeXBlJyxcbiAgICAgIHtcbiAgICAgICAgc2NvcmluZ1R5cGU6ICdhdXRvJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBzY29yaW5nVHlwZTogJ2F1dG8nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEIgLSBjaGVja2JveCcsXG4gICAgICB7XG4gICAgICAgIHBhcnRCOiB7XG4gICAgICAgICAgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXNzZXJ0T25Nb2RlbENoYW5nZWQoXG4gICAgICAnY2hhbmdlcyBwYXJ0QiAtIGNob2ljZVByZWZpeCcsXG4gICAgICB7XG4gICAgICAgIHBhcnRCOiB7XG4gICAgICAgICAgY2hvaWNlUHJlZml4OiAnbnVtYmVycycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydEI6IHtcbiAgICAgICAgICBjaG9pY2VQcmVmaXg6ICdudW1iZXJzJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRCIC0gcGFydGlhbFNjb3JpbmcnLFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogZmFsc2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5tb2RlbCxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIGFzc2VydE9uTW9kZWxDaGFuZ2VkKFxuICAgICAgJ2NoYW5nZXMgcGFydEIgLSBsb2NrQ2hvaWNlT3JkZXInLFxuICAgICAge1xuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLm1vZGVsLFxuICAgICAgICBwYXJ0Qjoge1xuICAgICAgICAgIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBhc3NlcnRPbk1vZGVsQ2hhbmdlZChcbiAgICAgICdjaGFuZ2VzIHBhcnRCIC0gc2NvcmluZ1R5cGUnLFxuICAgICAge1xuICAgICAgICBzY29yaW5nVHlwZTogJ2F1dG8nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4ubW9kZWwsXG4gICAgICAgIHNjb3JpbmdUeXBlOiAnYXV0bycsXG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
|