@pie-element/select-text 8.1.0-next.1 → 8.1.1-next.12
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/defaultConfiguration.js +1 -1
- package/configure/lib/design.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/utils.js +1 -1
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/lib/index.js +1 -1
- package/lib/main.js +1 -1
- package/lib/print.js +1 -1
- package/lib/utils.js +1 -1
- package/module/configure.js +111773 -0
- package/module/controller.js +20105 -0
- package/module/element.js +14226 -3888
- package/module/manifest.json +1 -1
- package/module/print.js +14224 -3886
- package/package.json +2 -2
- package/configure/lib/__tests__/design.test.js +0 -219
- package/controller/lib/__tests__/index.test.js +0 -833
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index.test.js +0 -91
- package/lib/__tests__/main.test.js +0 -83
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "8.1.
|
|
7
|
+
"version": "8.1.1-next.12+d6e6b99aa",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"author": "",
|
|
18
18
|
"license": "ISC",
|
|
19
|
-
"gitHead": "
|
|
19
|
+
"gitHead": "d6e6b99aa4f47ea97a77e25492b6c4e0a5f4e9ad",
|
|
20
20
|
"scripts": {
|
|
21
21
|
"postpublish": "../../scripts/postpublish"
|
|
22
22
|
},
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
-
|
|
7
|
-
var _enzyme = require("enzyme");
|
|
8
|
-
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
|
|
11
|
-
var _design = require("../design");
|
|
12
|
-
|
|
13
|
-
var _defaultConfiguration = _interopRequireDefault(require("../defaultConfiguration"));
|
|
14
|
-
|
|
15
|
-
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; }
|
|
16
|
-
|
|
17
|
-
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; }
|
|
18
|
-
|
|
19
|
-
jest.mock('@pie-lib/pie-toolbox/config-ui', function () {
|
|
20
|
-
return {
|
|
21
|
-
layout: {
|
|
22
|
-
ConfigLayout: function ConfigLayout(props) {
|
|
23
|
-
return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
settings: {
|
|
27
|
-
Panel: function Panel(props) {
|
|
28
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
29
|
-
oChangeModel: props.onChange
|
|
30
|
-
});
|
|
31
|
-
},
|
|
32
|
-
toggle: jest.fn(),
|
|
33
|
-
radio: jest.fn()
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
jest.mock('lodash/debounce', function () {
|
|
38
|
-
return function (fn) {
|
|
39
|
-
return fn;
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
describe('design', function () {
|
|
43
|
-
var w;
|
|
44
|
-
var onChange;
|
|
45
|
-
var onPromptChanged;
|
|
46
|
-
var onRationaleChanged;
|
|
47
|
-
|
|
48
|
-
var getModel = function getModel() {
|
|
49
|
-
return {
|
|
50
|
-
tokens: []
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
beforeEach(function () {
|
|
55
|
-
onChange = jest.fn();
|
|
56
|
-
onPromptChanged = jest.fn();
|
|
57
|
-
onRationaleChanged = jest.fn();
|
|
58
|
-
w = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
59
|
-
model: getModel(),
|
|
60
|
-
configuration: _defaultConfiguration["default"].configuration,
|
|
61
|
-
classes: {},
|
|
62
|
-
className: 'foo',
|
|
63
|
-
onModelChanged: onChange,
|
|
64
|
-
onPromptChanged: onPromptChanged,
|
|
65
|
-
onRationaleChanged: onRationaleChanged
|
|
66
|
-
}));
|
|
67
|
-
});
|
|
68
|
-
describe('snapshot', function () {
|
|
69
|
-
it('renders all items with defaultProps', function () {
|
|
70
|
-
expect(w).toMatchSnapshot();
|
|
71
|
-
});
|
|
72
|
-
it('tokenizer renders with html entities', function () {
|
|
73
|
-
expect((0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
74
|
-
model: {
|
|
75
|
-
text: '<p>“Lucy?? Are you using your time wisely to plan your project?!!!” Mr. Wilson asked.</p><p>Lucy looked a little confused at first. Ã Then she grinned and proudly stated, “Why, yes I am! I plan to make a bird feeder for that tree out our window!”</p>',
|
|
76
|
-
tokens: []
|
|
77
|
-
},
|
|
78
|
-
configuration: _defaultConfiguration["default"].configuration,
|
|
79
|
-
classes: {},
|
|
80
|
-
className: 'foo',
|
|
81
|
-
onModelChanged: onChange,
|
|
82
|
-
onPromptChanged: onPromptChanged,
|
|
83
|
-
onRationaleChanged: onRationaleChanged
|
|
84
|
-
}))).toMatchSnapshot();
|
|
85
|
-
});
|
|
86
|
-
it('renders all items except feedback', function () {
|
|
87
|
-
var defaultConfiguration = _defaultConfiguration["default"].configuration;
|
|
88
|
-
defaultConfiguration.feedback.settings = false;
|
|
89
|
-
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
90
|
-
model: getModel(),
|
|
91
|
-
configuration: defaultConfiguration,
|
|
92
|
-
classes: {},
|
|
93
|
-
className: 'foo',
|
|
94
|
-
onModelChanged: onChange,
|
|
95
|
-
onPromptChanged: onPromptChanged,
|
|
96
|
-
onRationaleChanged: onRationaleChanged
|
|
97
|
-
}));
|
|
98
|
-
expect(wrapper).toMatchSnapshot();
|
|
99
|
-
});
|
|
100
|
-
it('renders all items except the content input', function () {
|
|
101
|
-
var defaultConfiguration = _defaultConfiguration["default"].configuration;
|
|
102
|
-
defaultConfiguration.text.settings = false;
|
|
103
|
-
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
104
|
-
model: getModel(),
|
|
105
|
-
configuration: defaultConfiguration,
|
|
106
|
-
classes: {},
|
|
107
|
-
className: 'foo',
|
|
108
|
-
onModelChanged: onChange,
|
|
109
|
-
onPromptChanged: onPromptChanged,
|
|
110
|
-
onRationaleChanged: onRationaleChanged
|
|
111
|
-
}));
|
|
112
|
-
expect(wrapper).toMatchSnapshot();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
describe('logic', function () {
|
|
116
|
-
var assert = function assert(fn, args, expected) {
|
|
117
|
-
var e = expected(getModel());
|
|
118
|
-
it("".concat(fn, " ").concat(JSON.stringify(args), " => ").concat(JSON.stringify(e)), function () {
|
|
119
|
-
var instance = w.instance();
|
|
120
|
-
instance[fn].apply(instance, args); //jest.runAllTimers();
|
|
121
|
-
|
|
122
|
-
expect(onChange).toBeCalledWith(e);
|
|
123
|
-
});
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
describe('changeText', function () {
|
|
127
|
-
assert('changeText', [{
|
|
128
|
-
target: {
|
|
129
|
-
value: 'foo'
|
|
130
|
-
}
|
|
131
|
-
}], function (m) {
|
|
132
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
133
|
-
text: 'foo'
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
describe('changeTokens', function () {
|
|
138
|
-
assert('changeTokens', [[{
|
|
139
|
-
start: 0,
|
|
140
|
-
end: 1,
|
|
141
|
-
text: 'f'
|
|
142
|
-
}], 'words'], function (m) {
|
|
143
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
144
|
-
maxSelections: 0,
|
|
145
|
-
tokens: [{
|
|
146
|
-
start: 0,
|
|
147
|
-
end: 1,
|
|
148
|
-
text: 'f'
|
|
149
|
-
}],
|
|
150
|
-
mode: 'words'
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
assert('changeTokens', [[{
|
|
154
|
-
start: 0,
|
|
155
|
-
end: 8,
|
|
156
|
-
text: 'Foo bar.',
|
|
157
|
-
correct: true
|
|
158
|
-
}], 'sentences'], function (m) {
|
|
159
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
160
|
-
maxSelections: 1,
|
|
161
|
-
tokens: [{
|
|
162
|
-
start: 0,
|
|
163
|
-
end: 8,
|
|
164
|
-
text: 'Foo bar.',
|
|
165
|
-
correct: true
|
|
166
|
-
}],
|
|
167
|
-
mode: 'sentences'
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('changeMaxSelections', function () {
|
|
172
|
-
assert('changeMaxSelections', [{}, 4], function (m) {
|
|
173
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
174
|
-
maxSelections: 4
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
describe('changeFeedback', function () {
|
|
179
|
-
assert('changeFeedback', [{
|
|
180
|
-
correctFeedbackType: 'none'
|
|
181
|
-
}], function (m) {
|
|
182
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
183
|
-
feedback: {
|
|
184
|
-
correctFeedbackType: 'none'
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('changePartialScoring', function () {
|
|
190
|
-
assert('changePartialScoring', [true], function (m) {
|
|
191
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
192
|
-
partialScoring: true
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
describe('changePrompt', function () {
|
|
197
|
-
assert('onPromptChanged', ['New Prompt'], function (m) {
|
|
198
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
199
|
-
prompt: 'New Prompt'
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
describe('changeTeacherInstructions', function () {
|
|
204
|
-
assert('onTeacherInstructionsChanged', ['New Teacher Instructions'], function (m) {
|
|
205
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
206
|
-
teacherInstructions: 'New Teacher Instructions'
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
describe('changeRationale', function () {
|
|
211
|
-
assert('onRationaleChanged', ['New Rationale'], function (m) {
|
|
212
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
213
|
-
rationale: 'New Rationale'
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZGVzaWduLnRlc3QuanN4Il0sIm5hbWVzIjpbImplc3QiLCJtb2NrIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwicHJvcHMiLCJjaGlsZHJlbiIsInNldHRpbmdzIiwiUGFuZWwiLCJvbkNoYW5nZSIsInRvZ2dsZSIsImZuIiwicmFkaW8iLCJkZXNjcmliZSIsInciLCJvblByb21wdENoYW5nZWQiLCJvblJhdGlvbmFsZUNoYW5nZWQiLCJnZXRNb2RlbCIsInRva2VucyIsImJlZm9yZUVhY2giLCJkZWZhdWx0VmFsdWVzIiwiY29uZmlndXJhdGlvbiIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidGV4dCIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwiZmVlZGJhY2siLCJ3cmFwcGVyIiwiYXNzZXJ0IiwiYXJncyIsImV4cGVjdGVkIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbnN0YW5jZSIsImFwcGx5IiwidG9CZUNhbGxlZFdpdGgiLCJ0YXJnZXQiLCJ2YWx1ZSIsIm0iLCJzdGFydCIsImVuZCIsIm1heFNlbGVjdGlvbnMiLCJtb2RlIiwiY29ycmVjdCIsImNvcnJlY3RGZWVkYmFja1R5cGUiLCJwYXJ0aWFsU2NvcmluZyIsInByb21wdCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsZ0NBQVYsRUFBNEM7QUFBQSxTQUFPO0FBQ2pEQyxJQUFBQSxNQUFNLEVBQUU7QUFDTkMsTUFBQUEsWUFBWSxFQUFFLHNCQUFDQyxLQUFEO0FBQUEsNEJBQVcsNkNBQU1BLEtBQUssQ0FBQ0MsUUFBWixDQUFYO0FBQUE7QUFEUixLQUR5QztBQUlqREMsSUFBQUEsUUFBUSxFQUFFO0FBQ1JDLE1BQUFBLEtBQUssRUFBRSxlQUFDSCxLQUFEO0FBQUEsNEJBQVc7QUFBSyxV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YyxFQUFFO0FBRnFCO0FBQUEsT0FBakMsQ0FBTjtBQUlELEtBTE8sQ0FBUjtBQU9BbEMsSUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBTTtBQUM3QmdCLE1BQUFBLE1BQU0sQ0FBQyxpQkFBRCxFQUFvQixDQUFDLFlBQUQsQ0FBcEIsRUFBb0MsVUFBQ1csQ0FBRDtBQUFBLCtDQUNyQ0EsQ0FEcUM7QUFFeENRLFVBQUFBLE1BQU0sRUFBRTtBQUZnQztBQUFBLE9BQXBDLENBQU47QUFJRCxLQUxPLENBQVI7QUFPQW5DLElBQUFBLFFBQVEsQ0FBQywyQkFBRCxFQUE4QixZQUFNO0FBQzFDZ0IsTUFBQUEsTUFBTSxDQUFDLDhCQUFELEVBQWlDLENBQUMsMEJBQUQsQ0FBakMsRUFBK0QsVUFBQ1csQ0FBRDtBQUFBLCtDQUNoRUEsQ0FEZ0U7QUFFbkVTLFVBQUFBLG1CQUFtQixFQUFFO0FBRjhDO0FBQUEsT0FBL0QsQ0FBTjtBQUlELEtBTE8sQ0FBUjtBQU9BcEMsSUFBQUEsUUFBUSxDQUFDLGlCQUFELEVBQW9CLFlBQU07QUFDaENnQixNQUFBQSxNQUFNLENBQUMsb0JBQUQsRUFBdUIsQ0FBQyxlQUFELENBQXZCLEVBQTBDLFVBQUNXLENBQUQ7QUFBQSwrQ0FDM0NBLENBRDJDO0FBRTlDVSxVQUFBQSxTQUFTLEVBQUU7QUFGbUM7QUFBQSxPQUExQyxDQUFOO0FBSUQsS0FMTyxDQUFSO0FBTUQsR0E3RU8sQ0FBUjtBQThFRCxDQXpLTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gJ2VuenltZSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGVzaWduIH0gZnJvbSAnLi4vZGVzaWduJztcbmltcG9ydCBkZWZhdWx0VmFsdWVzIGZyb20gJy4uL2RlZmF1bHRDb25maWd1cmF0aW9uJztcblxuamVzdC5tb2NrKCdAcGllLWxpYi9waWUtdG9vbGJveC9jb25maWctdWknLCAoKSA9PiAoe1xuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxuICBzZXR0aW5nczoge1xuICAgIFBhbmVsOiAocHJvcHMpID0+IDxkaXYgb0NoYW5nZU1vZGVsPXtwcm9wcy5vbkNoYW5nZX0gLz4sXG4gICAgdG9nZ2xlOiBqZXN0LmZuKCksXG4gICAgcmFkaW86IGplc3QuZm4oKSxcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdsb2Rhc2gvZGVib3VuY2UnLCAoKSA9PiAoZm4pID0+IGZuKTtcblxuZGVzY3JpYmUoJ2Rlc2lnbicsICgpID0+IHtcbiAgbGV0IHc7XG4gIGxldCBvbkNoYW5nZTtcbiAgbGV0IG9uUHJvbXB0Q2hhbmdlZDtcbiAgbGV0IG9uUmF0aW9uYWxlQ2hhbmdlZDtcblxuICBjb25zdCBnZXRNb2RlbCA9ICgpID0+ICh7XG4gICAgdG9rZW5zOiBbXSxcbiAgfSk7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgIG9uUHJvbXB0Q2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgICBvblJhdGlvbmFsZUNoYW5nZWQgPSBqZXN0LmZuKCk7XG4gICAgdyA9IHNoYWxsb3coXG4gICAgICA8RGVzaWduXG4gICAgICAgIG1vZGVsPXtnZXRNb2RlbCgpfVxuICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb259XG4gICAgICAgIGNsYXNzZXM9e3t9fVxuICAgICAgICBjbGFzc05hbWU9eydmb28nfVxuICAgICAgICBvbk1vZGVsQ2hhbmdlZD17b25DaGFuZ2V9XG4gICAgICAgIG9uUHJvbXB0Q2hhbmdlZD17b25Qcm9tcHRDaGFuZ2VkfVxuICAgICAgICBvblJhdGlvbmFsZUNoYW5nZWQ9e29uUmF0aW9uYWxlQ2hhbmdlZH1cbiAgICAgIC8+LFxuICAgICk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyBhbGwgaXRlbXMgd2l0aCBkZWZhdWx0UHJvcHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9rZW5pemVyIHJlbmRlcnMgd2l0aCBodG1sIGVudGl0aWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBzaGFsbG93KFxuICAgICAgICAgIDxEZXNpZ25cbiAgICAgICAgICAgIG1vZGVsPXt7XG4gICAgICAgICAgICAgIHRleHQ6ICc8cD4mIzgyMjA7THVjeT8mIzYzOyBBcmUgeW91IHVzaW5nIHlvdXIgdGltZSB3aXNlbHkgdG8gcGxhbiB5b3VyIHByb2plY3Q/JiMzMzsmIzMzOyYjMzM7JiM4MjIxOyBNci4gV2lsc29uIGFza2VkLjwvcD48cD5MdWN5IGxvb2tlZCBhIGxpdHRsZSBjb25mdXNlZCBhdCBmaXJzdC4gJiMxOTU7IFRoZW4gc2hlIGdyaW5uZWQgYW5kIHByb3VkbHkgc3RhdGVkLCAmIzgyMjA7V2h5LCB5ZXMgSSBhbSEgSSBwbGFuIHRvIG1ha2UgYSBiaXJkIGZlZWRlciBmb3IgdGhhdCB0cmVlIG91dCBvdXIgd2luZG93ISYjODIyMTs8L3A+JyxcbiAgICAgICAgICAgICAgdG9rZW5zOiBbXSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17J2Zvbyd9XG4gICAgICAgICAgICBvbk1vZGVsQ2hhbmdlZD17b25DaGFuZ2V9XG4gICAgICAgICAgICBvblByb21wdENoYW5nZWQ9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICAgIG9uUmF0aW9uYWxlQ2hhbmdlZD17b25SYXRpb25hbGVDaGFuZ2VkfVxuICAgICAgICAgIC8+LFxuICAgICAgICApLFxuICAgICAgKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFsbCBpdGVtcyBleGNlcHQgZmVlZGJhY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZmlndXJhdGlvbiA9IGRlZmF1bHRWYWx1ZXMuY29uZmlndXJhdGlvbjtcblxuICAgICAgZGVmYXVsdENvbmZpZ3VyYXRpb24uZmVlZGJhY2suc2V0dGluZ3MgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHNoYWxsb3coXG4gICAgICAgIDxEZXNpZ25cbiAgICAgICAgICBtb2RlbD17Z2V0TW9kZWwoKX1cbiAgICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0Q29uZmlndXJhdGlvbn1cbiAgICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgICBjbGFzc05hbWU9eydmb28nfVxuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkPXtvbkNoYW5nZX1cbiAgICAgICAgICBvblByb21wdENoYW5nZWQ9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICBvblJhdGlvbmFsZUNoYW5nZWQ9e29uUmF0aW9uYWxlQ2hhbmdlZH1cbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgaXRlbXMgZXhjZXB0IHRoZSBjb250ZW50IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLnRleHQuc2V0dGluZ3MgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHNoYWxsb3coXG4gICAgICAgIDxEZXNpZ25cbiAgICAgICAgICBtb2RlbD17Z2V0TW9kZWwoKX1cbiAgICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0Q29uZmlndXJhdGlvbn1cbiAgICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgICBjbGFzc05hbWU9eydmb28nfVxuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkPXtvbkNoYW5nZX1cbiAgICAgICAgICBvblByb21wdENoYW5nZWQ9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICBvblJhdGlvbmFsZUNoYW5nZWQ9e29uUmF0aW9uYWxlQ2hhbmdlZH1cbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsb2dpYycsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoZm4sIGFyZ3MsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBjb25zdCBlID0gZXhwZWN0ZWQoZ2V0TW9kZWwoKSk7XG5cbiAgICAgIGl0KGAke2ZufSAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfSA9PiAke0pTT04uc3RyaW5naWZ5KGUpfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB3Lmluc3RhbmNlKCk7XG4gICAgICAgIGluc3RhbmNlW2ZuXS5hcHBseShpbnN0YW5jZSwgYXJncyk7XG5cbiAgICAgICAgLy9qZXN0LnJ1bkFsbFRpbWVycygpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoZSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZGVzY3JpYmUoJ2NoYW5nZVRleHQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ2NoYW5nZVRleHQnLCBbeyB0YXJnZXQ6IHsgdmFsdWU6ICdmb28nIH0gfV0sIChtKSA9PiAoe1xuICAgICAgICAuLi5tLFxuICAgICAgICB0ZXh0OiAnZm9vJyxcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VUb2tlbnMnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ2NoYW5nZVRva2VucycsIFtbeyBzdGFydDogMCwgZW5kOiAxLCB0ZXh0OiAnZicgfV0sICd3b3JkcyddLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgbWF4U2VsZWN0aW9uczogMCxcbiAgICAgICAgdG9rZW5zOiBbeyBzdGFydDogMCwgZW5kOiAxLCB0ZXh0OiAnZicgfV0sXG4gICAgICAgIG1vZGU6ICd3b3JkcycsXG4gICAgICB9KSk7XG4gICAgICBhc3NlcnQoJ2NoYW5nZVRva2VucycsIFtbeyBzdGFydDogMCwgZW5kOiA4LCB0ZXh0OiAnRm9vIGJhci4nLCBjb3JyZWN0OiB0cnVlIH1dLCAnc2VudGVuY2VzJ10sIChtKSA9PiAoe1xuICAgICAgICAuLi5tLFxuICAgICAgICBtYXhTZWxlY3Rpb25zOiAxLFxuICAgICAgICB0b2tlbnM6IFt7IHN0YXJ0OiAwLCBlbmQ6IDgsIHRleHQ6ICdGb28gYmFyLicsIGNvcnJlY3Q6IHRydWUgfV0sXG4gICAgICAgIG1vZGU6ICdzZW50ZW5jZXMnLFxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoYW5nZU1heFNlbGVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ2NoYW5nZU1heFNlbGVjdGlvbnMnLCBbe30sIDRdLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgbWF4U2VsZWN0aW9uczogNCxcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VGZWVkYmFjaycsICgpID0+IHtcbiAgICAgIGFzc2VydCgnY2hhbmdlRmVlZGJhY2snLCBbeyBjb3JyZWN0RmVlZGJhY2tUeXBlOiAnbm9uZScgfV0sIChtKSA9PiAoe1xuICAgICAgICAuLi5tLFxuICAgICAgICBmZWVkYmFjazogeyBjb3JyZWN0RmVlZGJhY2tUeXBlOiAnbm9uZScgfSxcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VQYXJ0aWFsU2NvcmluZycsICgpID0+IHtcbiAgICAgIGFzc2VydCgnY2hhbmdlUGFydGlhbFNjb3JpbmcnLCBbdHJ1ZV0sIChtKSA9PiAoe1xuICAgICAgICAuLi5tLFxuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VQcm9tcHQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ29uUHJvbXB0Q2hhbmdlZCcsIFsnTmV3IFByb21wdCddLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgcHJvbXB0OiAnTmV3IFByb21wdCcsXG4gICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlVGVhY2hlckluc3RydWN0aW9ucycsICgpID0+IHtcbiAgICAgIGFzc2VydCgnb25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlZCcsIFsnTmV3IFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJ10sIChtKSA9PiAoe1xuICAgICAgICAuLi5tLFxuICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnTmV3IFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VSYXRpb25hbGUnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ29uUmF0aW9uYWxlQ2hhbmdlZCcsIFsnTmV3IFJhdGlvbmFsZSddLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgcmF0aW9uYWxlOiAnTmV3IFJhdGlvbmFsZScsXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|