@pie-lib/controller-utils 0.2.44 → 0.4.0-beta.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/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.4.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.4.0-beta.0) (2025-07-15)
7
+
8
+ **Note:** Version bump only for package @pie-lib/controller-utils
9
+
10
+
11
+
12
+
13
+
14
+ # [0.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.0) (2025-07-15)
15
+
16
+ **Note:** Version bump only for package @pie-lib/controller-utils
17
+
18
+
19
+
20
+
21
+
6
22
  ## [0.2.44](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.43...@pie-lib/controller-utils@0.2.44) (2023-06-24)
7
23
 
8
24
  **Note:** Version bump only for package @pie-lib/controller-utils
@@ -0,0 +1 @@
1
+ []
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var _partialScoring = require("../partial-scoring");
4
+
5
+ describe('enabled', function () {
6
+ var assertEnabled = function assertEnabled(config, env, expected) {
7
+ it("returns ".concat(expected, " for: config: ").concat(config.partialScoring, ", env:").concat(env.partialScoring), function () {
8
+ var result = (0, _partialScoring.enabled)(config, env);
9
+ expect(result).toEqual(expected);
10
+ });
11
+ };
12
+
13
+ var config = function config(v) {
14
+ return {
15
+ partialScoring: v
16
+ };
17
+ };
18
+
19
+ var env = function env(v) {
20
+ return {
21
+ partialScoring: v
22
+ };
23
+ };
24
+
25
+ assertEnabled(config(undefined), env(undefined), true);
26
+ assertEnabled(config(undefined), env(true), true);
27
+ assertEnabled(config(undefined), env(false), false);
28
+ assertEnabled(config(false), env(undefined), false);
29
+ assertEnabled(config(false), env(true), false);
30
+ assertEnabled(config(false), env(false), false);
31
+ assertEnabled(config(true), env(undefined), true);
32
+ assertEnabled(config(true), env(true), true);
33
+ assertEnabled(config(true), env(false), false);
34
+ });
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcGFydGlhbC1zY29yaW5nLnRlc3QuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhc3NlcnRFbmFibGVkIiwiY29uZmlnIiwiZW52IiwiZXhwZWN0ZWQiLCJpdCIsInBhcnRpYWxTY29yaW5nIiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsInYiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBRUFBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBTTtBQUN4QixNQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUNDLE1BQUQsRUFBU0MsR0FBVCxFQUFjQyxRQUFkLEVBQTJCO0FBQy9DQyxJQUFBQSxFQUFFLG1CQUFZRCxRQUFaLDJCQUFxQ0YsTUFBTSxDQUFDSSxjQUE1QyxtQkFBbUVILEdBQUcsQ0FBQ0csY0FBdkUsR0FBeUYsWUFBTTtBQUMvRixVQUFNQyxNQUFNLEdBQUcsNkJBQVFMLE1BQVIsRUFBZ0JDLEdBQWhCLENBQWY7QUFDQUssTUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkwsUUFBdkI7QUFDRCxLQUhDLENBQUY7QUFJRCxHQUxEOztBQU9BLE1BQU1GLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUNRLENBQUQ7QUFBQSxXQUFRO0FBQUVKLE1BQUFBLGNBQWMsRUFBRUk7QUFBbEIsS0FBUjtBQUFBLEdBQWY7O0FBQ0EsTUFBTVAsR0FBRyxHQUFHLFNBQU5BLEdBQU0sQ0FBQ08sQ0FBRDtBQUFBLFdBQVE7QUFBRUosTUFBQUEsY0FBYyxFQUFFSTtBQUFsQixLQUFSO0FBQUEsR0FBWjs7QUFFQVQsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUNTLFNBQUQsQ0FBUCxFQUFvQlIsR0FBRyxDQUFDUSxTQUFELENBQXZCLEVBQW9DLElBQXBDLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUNTLFNBQUQsQ0FBUCxFQUFvQlIsR0FBRyxDQUFDLElBQUQsQ0FBdkIsRUFBK0IsSUFBL0IsQ0FBYjtBQUNBRixFQUFBQSxhQUFhLENBQUNDLE1BQU0sQ0FBQ1MsU0FBRCxDQUFQLEVBQW9CUixHQUFHLENBQUMsS0FBRCxDQUF2QixFQUFnQyxLQUFoQyxDQUFiO0FBRUFGLEVBQUFBLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDLEtBQUQsQ0FBUCxFQUFnQkMsR0FBRyxDQUFDUSxTQUFELENBQW5CLEVBQWdDLEtBQWhDLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsS0FBRCxDQUFQLEVBQWdCQyxHQUFHLENBQUMsSUFBRCxDQUFuQixFQUEyQixLQUEzQixDQUFiO0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDLEtBQUQsQ0FBUCxFQUFnQkMsR0FBRyxDQUFDLEtBQUQsQ0FBbkIsRUFBNEIsS0FBNUIsQ0FBYjtBQUVBRixFQUFBQSxhQUFhLENBQUNDLE1BQU0sQ0FBQyxJQUFELENBQVAsRUFBZUMsR0FBRyxDQUFDUSxTQUFELENBQWxCLEVBQStCLElBQS9CLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsSUFBRCxDQUFQLEVBQWVDLEdBQUcsQ0FBQyxJQUFELENBQWxCLEVBQTBCLElBQTFCLENBQWI7QUFDQUYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsSUFBRCxDQUFQLEVBQWVDLEdBQUcsQ0FBQyxLQUFELENBQWxCLEVBQTJCLEtBQTNCLENBQWI7QUFDRCxDQXRCTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5hYmxlZCB9IGZyb20gJy4uL3BhcnRpYWwtc2NvcmluZyc7XG5cbmRlc2NyaWJlKCdlbmFibGVkJywgKCkgPT4ge1xuICBjb25zdCBhc3NlcnRFbmFibGVkID0gKGNvbmZpZywgZW52LCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGByZXR1cm5zICR7ZXhwZWN0ZWR9IGZvcjogY29uZmlnOiAke2NvbmZpZy5wYXJ0aWFsU2NvcmluZ30sIGVudjoke2Vudi5wYXJ0aWFsU2NvcmluZ31gLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBlbmFibGVkKGNvbmZpZywgZW52KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9ICh2KSA9PiAoeyBwYXJ0aWFsU2NvcmluZzogdiB9KTtcbiAgY29uc3QgZW52ID0gKHYpID0+ICh7IHBhcnRpYWxTY29yaW5nOiB2IH0pO1xuXG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKHVuZGVmaW5lZCksIGVudih1bmRlZmluZWQpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodW5kZWZpbmVkKSwgZW52KHRydWUpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodW5kZWZpbmVkKSwgZW52KGZhbHNlKSwgZmFsc2UpO1xuXG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKGZhbHNlKSwgZW52KHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcoZmFsc2UpLCBlbnYodHJ1ZSksIGZhbHNlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcoZmFsc2UpLCBlbnYoZmFsc2UpLCBmYWxzZSk7XG5cbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodHJ1ZSksIGVudih1bmRlZmluZWQpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodHJ1ZSksIGVudih0cnVlKSwgdHJ1ZSk7XG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKHRydWUpLCBlbnYoZmFsc2UpLCBmYWxzZSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
6
+
7
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
+
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+
13
+ var _persistence = require("../persistence");
14
+
15
+ var _templateObject, _templateObject2, _templateObject3;
16
+
17
+ 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; }
18
+
19
+ 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; }
20
+
21
+ describe('getShuffledChoices', function () {
22
+ var choices, session, updateSession, key;
23
+ beforeEach(function () {
24
+ updateSession = jest.fn().mockResolvedValue([]);
25
+ session = {
26
+ id: '1',
27
+ element: 'element'
28
+ };
29
+ choices = [{
30
+ value: 1
31
+ }, {
32
+ value: 2
33
+ }];
34
+ key = 'value';
35
+ });
36
+ describe('0 key', function () {
37
+ it('calls update session w/ 0 as a key', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
38
+ var result;
39
+ return _regenerator["default"].wrap(function _callee$(_context) {
40
+ while (1) {
41
+ switch (_context.prev = _context.next) {
42
+ case 0:
43
+ _context.next = 2;
44
+ return (0, _persistence.getShuffledChoices)([{
45
+ value: 0
46
+ }, {
47
+ value: 1
48
+ }], session, updateSession, 'value');
49
+
50
+ case 2:
51
+ result = _context.sent;
52
+ expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
53
+ shuffledValues: expect.arrayContaining([0, 1])
54
+ });
55
+
56
+ case 4:
57
+ case "end":
58
+ return _context.stop();
59
+ }
60
+ }
61
+ }, _callee);
62
+ })));
63
+ });
64
+ describe('handles null values in session', function () {
65
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
66
+ var result;
67
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
68
+ while (1) {
69
+ switch (_context2.prev = _context2.next) {
70
+ case 0:
71
+ _context2.next = 2;
72
+ return (0, _persistence.getShuffledChoices)(choices, _objectSpread(_objectSpread({}, session), {}, {
73
+ shuffledValues: [null]
74
+ }), updateSession, 'value');
75
+
76
+ case 2:
77
+ result = _context2.sent;
78
+
79
+ case 3:
80
+ case "end":
81
+ return _context2.stop();
82
+ }
83
+ }
84
+ }, _callee2);
85
+ })));
86
+ it('calls updateSession w/ new shuffle cos [null] is treated as empty', function () {
87
+ expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
88
+ shuffledValues: expect.arrayContaining([1, 2])
89
+ });
90
+ });
91
+ });
92
+ describe('bad shuffle generation does not call updateSession', function () {
93
+ beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
94
+ var result;
95
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
96
+ while (1) {
97
+ switch (_context3.prev = _context3.next) {
98
+ case 0:
99
+ _context3.next = 2;
100
+ return (0, _persistence.getShuffledChoices)(choices, {}, updateSession, 'foo');
101
+
102
+ case 2:
103
+ result = _context3.sent;
104
+
105
+ case 3:
106
+ case "end":
107
+ return _context3.stop();
108
+ }
109
+ }
110
+ }, _callee3);
111
+ })));
112
+ it('does not call update session', function () {
113
+ expect(updateSession).not.toHaveBeenCalled();
114
+ });
115
+ });
116
+ describe('session does not exist', function () {
117
+ it('returns undefined for empty session', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
118
+ var result;
119
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
120
+ while (1) {
121
+ switch (_context4.prev = _context4.next) {
122
+ case 0:
123
+ _context4.next = 2;
124
+ return (0, _persistence.getShuffledChoices)(choices, undefined, updateSession, key);
125
+
126
+ case 2:
127
+ result = _context4.sent;
128
+ expect(result).toEqual(undefined);
129
+
130
+ case 4:
131
+ case "end":
132
+ return _context4.stop();
133
+ }
134
+ }
135
+ }, _callee4);
136
+ })));
137
+ });
138
+ describe('session exists', function () {
139
+ it('returns compact choices if session has shuffledValues', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
140
+ var result;
141
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
142
+ while (1) {
143
+ switch (_context5.prev = _context5.next) {
144
+ case 0:
145
+ session = {
146
+ shuffledValues: [2, 1]
147
+ };
148
+ _context5.next = 3;
149
+ return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
150
+
151
+ case 3:
152
+ result = _context5.sent;
153
+ expect(result).toEqual(expect.arrayContaining(choices));
154
+
155
+ case 5:
156
+ case "end":
157
+ return _context5.stop();
158
+ }
159
+ }
160
+ }, _callee5);
161
+ })));
162
+ it('returns shuffled choices if updateSession is a function', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
163
+ var result;
164
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
165
+ while (1) {
166
+ switch (_context6.prev = _context6.next) {
167
+ case 0:
168
+ session = {};
169
+ updateSession = jest.fn().mockResolvedValue();
170
+ _context6.next = 4;
171
+ return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
172
+
173
+ case 4:
174
+ result = _context6.sent;
175
+ expect(result).toEqual(expect.arrayContaining(choices));
176
+
177
+ case 6:
178
+ case "end":
179
+ return _context6.stop();
180
+ }
181
+ }
182
+ }, _callee6);
183
+ })));
184
+ it('calls updateSession as expected if updateSession is a function', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
185
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
186
+ while (1) {
187
+ switch (_context7.prev = _context7.next) {
188
+ case 0:
189
+ session = {
190
+ id: '1',
191
+ element: 'pie-element'
192
+ };
193
+ _context7.next = 3;
194
+ return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
195
+
196
+ case 3:
197
+ expect(updateSession).toHaveBeenCalledWith('1', 'pie-element', {
198
+ shuffledValues: expect.arrayContaining([1, 2])
199
+ });
200
+
201
+ case 4:
202
+ case "end":
203
+ return _context7.stop();
204
+ }
205
+ }
206
+ }, _callee7);
207
+ })));
208
+ });
209
+ });
210
+ describe('lockChoices', function () {
211
+ var env = function env(lockChoiceOrder) {
212
+ var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
213
+ return {
214
+ '@pie-element': {
215
+ lockChoiceOrder: lockChoiceOrder
216
+ },
217
+ role: role
218
+ };
219
+ };
220
+
221
+ var session = function session(shuffledValues) {
222
+ return {
223
+ shuffledValues: shuffledValues
224
+ };
225
+ };
226
+
227
+ it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, false, session(), undefined, false, false, undefined, undefined, false, undefined, session(), env(false), false, undefined, session(), env(undefined), false, false, session(), env(false, 'instructor'), true, false, session([0, 1]), env(false, 'instructor'), true, false, undefined, env(false, 'instructor'), true)('1. model.lockChoiceOrder: $modelLock, $session, $env => $expected', function (_ref8) {
228
+ var modelLock = _ref8.modelLock,
229
+ session = _ref8.session,
230
+ env = _ref8.env,
231
+ expected = _ref8.expected;
232
+ var model = {
233
+ lockChoiceOrder: modelLock
234
+ };
235
+ var result = (0, _persistence.lockChoices)(model, session, env);
236
+ expect(result).toEqual(expected);
237
+ });
238
+ });
239
+ describe('lockChoices mod', function () {
240
+ var env = function env(lockChoiceOrder) {
241
+ var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
242
+ return {
243
+ '@pie-element': {
244
+ lockChoiceOrder: lockChoiceOrder
245
+ },
246
+ role: role
247
+ };
248
+ };
249
+
250
+ var session = function session() {
251
+ var answers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['foo', 'bar'];
252
+ return {
253
+ answers: answers
254
+ };
255
+ };
256
+
257
+ it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, undefined, session(), env(true), true, undefined, session(), env(undefined), false, undefined, session(), env(undefined, 'instructor'), true)('2. model.lockChoiceOrder: $modelLock, $session, $env => $expected', function (_ref9) {
258
+ var modelLock = _ref9.modelLock,
259
+ session = _ref9.session,
260
+ env = _ref9.env,
261
+ expected = _ref9.expected;
262
+ var model = {
263
+ lockChoiceOrder: modelLock
264
+ };
265
+ var result = (0, _persistence.lockChoices)(model, session, env);
266
+ expect(result).toEqual(expected);
267
+ });
268
+ });
269
+ describe('lockChoices', function () {
270
+ var env = function env(lockChoiceOrder) {
271
+ var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
272
+ return {
273
+ '@pie-element': {
274
+ lockChoiceOrder: lockChoiceOrder
275
+ },
276
+ role: role
277
+ };
278
+ };
279
+
280
+ var session = function session(shuffledValues) {
281
+ return {
282
+ shuffledValues: shuffledValues,
283
+ answers: ['foo', 'bar']
284
+ };
285
+ };
286
+
287
+ it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, undefined, session(), env(true), true, undefined, session(), env(undefined), false, undefined, session(), env(undefined, 'instructor'), true)('3. model.lockChoiceOrder: $modelLock, $env => $expected', function (_ref10) {
288
+ var modelLock = _ref10.modelLock,
289
+ session = _ref10.session,
290
+ env = _ref10.env,
291
+ expected = _ref10.expected;
292
+ var model = {
293
+ lockChoiceOrder: modelLock
294
+ };
295
+ var result = (0, _persistence.lockChoices)(model, session, env);
296
+ expect(result).toEqual(expected);
297
+ });
298
+ });
299
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcGVyc2lzdGVuY2UudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImNob2ljZXMiLCJzZXNzaW9uIiwidXBkYXRlU2Vzc2lvbiIsImtleSIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsImlkIiwiZWxlbWVudCIsInZhbHVlIiwiaXQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNodWZmbGVkVmFsdWVzIiwiYXJyYXlDb250YWluaW5nIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsInVuZGVmaW5lZCIsInRvRXF1YWwiLCJlbnYiLCJsb2NrQ2hvaWNlT3JkZXIiLCJyb2xlIiwiZWFjaCIsIm1vZGVsTG9jayIsImV4cGVjdGVkIiwibW9kZWwiLCJhbnN3ZXJzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDbkMsTUFBSUMsT0FBSixFQUFhQyxPQUFiLEVBQXNCQyxhQUF0QixFQUFxQ0MsR0FBckM7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZkYsSUFBQUEsYUFBYSxHQUFHRyxJQUFJLENBQUNDLEVBQUwsR0FBVUMsaUJBQVYsQ0FBNEIsRUFBNUIsQ0FBaEI7QUFDQU4sSUFBQUEsT0FBTyxHQUFHO0FBQ1JPLE1BQUFBLEVBQUUsRUFBRSxHQURJO0FBRVJDLE1BQUFBLE9BQU8sRUFBRTtBQUZELEtBQVY7QUFJQVQsSUFBQUEsT0FBTyxHQUFHLENBQ1I7QUFDRVUsTUFBQUEsS0FBSyxFQUFFO0FBRFQsS0FEUSxFQUlSO0FBQ0VBLE1BQUFBLEtBQUssRUFBRTtBQURULEtBSlEsQ0FBVjtBQVFBUCxJQUFBQSxHQUFHLEdBQUcsT0FBTjtBQUNELEdBZlMsQ0FBVjtBQWlCQUosRUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNO0FBQ3RCWSxJQUFBQSxF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QnBCLE9BQU8sRUFMMUIsRUFLa0NvQixHQUFHLENBQUMsS0FBRCxDQUxyQyxFQUtvRSxLQUxwRSxFQU1JRixTQU5KLEVBTW1CbEIsT0FBTyxFQU4xQixFQU1rQ29CLEdBQUcsQ0FBQyxJQUFELENBTnJDLEVBTW9FLElBTnBFLEVBT0lGLFNBUEosRUFPbUJsQixPQUFPLEVBUDFCLEVBT2tDb0IsR0FBRyxDQUFDRixTQUFELENBUHJDLEVBT29FLEtBUHBFLEVBUUlBLFNBUkosRUFRbUJsQixPQUFPLEVBUjFCLEVBUWtDb0IsR0FBRyxDQUFDRixTQUFELEVBQVksWUFBWixDQVJyQyxFQVFvRSxJQVJwRSxFQVNFLHlEQVRGLEVBUzZELGtCQUEyQztBQUFBLFFBQXhDTSxTQUF3QyxVQUF4Q0EsU0FBd0M7QUFBQSxRQUE3QnhCLE9BQTZCLFVBQTdCQSxPQUE2QjtBQUFBLFFBQXBCb0IsR0FBb0IsVUFBcEJBLEdBQW9CO0FBQUEsUUFBZkssUUFBZSxVQUFmQSxRQUFlO0FBQ3RHLFFBQU1DLEtBQUssR0FBRztBQUFFTCxNQUFBQSxlQUFlLEVBQUVHO0FBQW5CLEtBQWQ7QUFDQSxRQUFNYixNQUFNLEdBQUcsOEJBQVllLEtBQVosRUFBbUIxQixPQUFuQixFQUE0Qm9CLEdBQTVCLENBQWY7QUFDQVIsSUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZVEsT0FBZixDQUF1Qk0sUUFBdkI7QUFDRCxHQWJEO0FBY0QsQ0FwQk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNodWZmbGVkQ2hvaWNlcywgbG9ja0Nob2ljZXMgfSBmcm9tICcuLi9wZXJzaXN0ZW5jZSc7XG5cbmRlc2NyaWJlKCdnZXRTaHVmZmxlZENob2ljZXMnLCAoKSA9PiB7XG4gIGxldCBjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShbXSk7XG4gICAgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBlbGVtZW50OiAnZWxlbWVudCcsXG4gICAgfTtcbiAgICBjaG9pY2VzID0gW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGtleSA9ICd2YWx1ZSc7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcwIGtleScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgdXBkYXRlIHNlc3Npb24gdy8gMCBhcyBhIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNodWZmbGVkQ2hvaWNlcyhbeyB2YWx1ZTogMCB9LCB7IHZhbHVlOiAxIH1dLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCAndmFsdWUnKTtcbiAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHtcbiAgICAgICAgc2h1ZmZsZWRWYWx1ZXM6IGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoWzAsIDFdKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaGFuZGxlcyBudWxsIHZhbHVlcyBpbiBzZXNzaW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHsgLi4uc2Vzc2lvbiwgc2h1ZmZsZWRWYWx1ZXM6IFtudWxsXSB9LCB1cGRhdGVTZXNzaW9uLCAndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyB1cGRhdGVTZXNzaW9uIHcvIG5ldyBzaHVmZmxlIGNvcyBbbnVsbF0gaXMgdHJlYXRlZCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHtcbiAgICAgICAgc2h1ZmZsZWRWYWx1ZXM6IGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoWzEsIDJdKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2JhZCBzaHVmZmxlIGdlbmVyYXRpb24gZG9lcyBub3QgY2FsbCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHt9LCB1cGRhdGVTZXNzaW9uLCAnZm9vJyk7XG4gICAgfSk7XG4gICAgaXQoJ2RvZXMgbm90IGNhbGwgdXBkYXRlIHNlc3Npb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nlc3Npb24gZG9lcyBub3QgZXhpc3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBlbXB0eSBzZXNzaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHVuZGVmaW5lZCwgdXBkYXRlU2Vzc2lvbiwga2V5KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nlc3Npb24gZXhpc3RzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvbXBhY3QgY2hvaWNlcyBpZiBzZXNzaW9uIGhhcyBzaHVmZmxlZFZhbHVlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHNlc3Npb24gPSB7IHNodWZmbGVkVmFsdWVzOiBbMiwgMV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNodWZmbGVkQ2hvaWNlcyhjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKGNob2ljZXMpKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNodWZmbGVkIGNob2ljZXMgaWYgdXBkYXRlU2Vzc2lvbiBpcyBhIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoY2hvaWNlcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24gYXMgZXhwZWN0ZWQgaWYgdXBkYXRlU2Vzc2lvbiBpcyBhIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHsgaWQ6ICcxJywgZWxlbWVudDogJ3BpZS1lbGVtZW50JyB9O1xuICAgICAgYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSk7XG4gICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAncGllLWVsZW1lbnQnLCB7XG4gICAgICAgIHNodWZmbGVkVmFsdWVzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsxLCAyXSksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2xvY2tDaG9pY2VzJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKHNodWZmbGVkVmFsdWVzKSA9PiAoeyBzaHVmZmxlZFZhbHVlcyB9KTtcbiAgaXQuZWFjaGBcbiAgICBtb2RlbExvY2sgICAgfCBzZXNzaW9uICAgICAgICAgICAgfCBlbnYgICAgICAgICAgICAgICAgICAgICAgICAgfCBleHBlY3RlZFxuICAgICR7dHJ1ZX0gICAgICB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KHRydWUpfSAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gICAgICAgfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3VuZGVmaW5lZH0gICAgICAgfCAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9IHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHtlbnYodW5kZWZpbmVkKX0gICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3Nlc3Npb24oKX0gICAgICAgfCAke2VudihmYWxzZSwgJ2luc3RydWN0b3InKX0gfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKFswLCAxXSl9IHwgJHtlbnYoZmFsc2UsICdpbnN0cnVjdG9yJyl9IHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICB8ICR7ZW52KGZhbHNlLCAnaW5zdHJ1Y3RvcicpfSB8ICR7dHJ1ZX1cbiAgYCgnMS4gbW9kZWwubG9ja0Nob2ljZU9yZGVyOiAkbW9kZWxMb2NrLCAkc2Vzc2lvbiwgJGVudiA9PiAkZXhwZWN0ZWQnLCAoeyBtb2RlbExvY2ssIHNlc3Npb24sIGVudiwgZXhwZWN0ZWQgfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsID0geyBsb2NrQ2hvaWNlT3JkZXI6IG1vZGVsTG9jayB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGxvY2tDaG9pY2VzKG1vZGVsLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnbG9ja0Nob2ljZXMgbW9kJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKGFuc3dlcnMgPSBbJ2ZvbycsICdiYXInXSkgPT4gKHsgYW5zd2VycyB9KTtcbiAgaXQuZWFjaGBcbiAgICBtb2RlbExvY2sgICAgfCBzZXNzaW9uICAgICAgfCBlbnYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gfCAke2Vudih0cnVlKX0gICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7dHJ1ZX0gICAgICB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3Nlc3Npb24oKX0gfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih0cnVlKX0gICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHVuZGVmaW5lZCl9ICAgICAgICAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHVuZGVmaW5lZCwgJ2luc3RydWN0b3InKX0gfCAke3RydWV9XG4gIGAoJzIuIG1vZGVsLmxvY2tDaG9pY2VPcmRlcjogJG1vZGVsTG9jaywgJHNlc3Npb24sICRlbnYgPT4gJGV4cGVjdGVkJywgKHsgbW9kZWxMb2NrLCBzZXNzaW9uLCBlbnYsIGV4cGVjdGVkIH0pID0+IHtcbiAgICBjb25zdCBtb2RlbCA9IHsgbG9ja0Nob2ljZU9yZGVyOiBtb2RlbExvY2sgfTtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrQ2hvaWNlcyhtb2RlbCwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2xvY2tDaG9pY2VzJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKHNodWZmbGVkVmFsdWVzKSA9PiAoeyBzaHVmZmxlZFZhbHVlcywgYW5zd2VyczogWydmb28nLCAnYmFyJ10gfSk7XG4gIGl0LmVhY2hgXG4gICAgbW9kZWxMb2NrICAgIHwgc2Vzc2lvbiAgICAgIHwgZW52ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHt0cnVlfSAgICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHRydWUpfSAgICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYoZmFsc2UpfSAgICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9IHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih1bmRlZmluZWQpfSAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih1bmRlZmluZWQsICdpbnN0cnVjdG9yJyl9IHwgJHt0cnVlfVxuICBgKCczLiBtb2RlbC5sb2NrQ2hvaWNlT3JkZXI6ICRtb2RlbExvY2ssICRlbnYgPT4gJGV4cGVjdGVkJywgKHsgbW9kZWxMb2NrLCBzZXNzaW9uLCBlbnYsIGV4cGVjdGVkIH0pID0+IHtcbiAgICBjb25zdCBtb2RlbCA9IHsgbG9ja0Nob2ljZU9yZGVyOiBtb2RlbExvY2sgfTtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrQ2hvaWNlcyhtb2RlbCwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcbiJdfQ==
package/lib/index.js CHANGED
@@ -28,4 +28,4 @@ var _persistence = require("./persistence");
28
28
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
29
 
30
30
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
- //# sourceMappingURL=index.js.map
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUVBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGFydGlhbFNjb3JpbmcgZnJvbSAnLi9wYXJ0aWFsLXNjb3JpbmcnO1xuXG5leHBvcnQgeyBsb2NrQ2hvaWNlcywgZ2V0U2h1ZmZsZWRDaG9pY2VzIH0gZnJvbSAnLi9wZXJzaXN0ZW5jZSc7XG5leHBvcnQgeyBwYXJ0aWFsU2NvcmluZyB9O1xuIl19
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.enabled = void 0;
9
7
 
10
- var _lodash = _interopRequireDefault(require("lodash"));
11
-
12
8
  var enabled = function enabled(config, env, defaultValue) {
13
9
  // if model.partialScoring = false
14
10
  // - if env.partialScoring = false || env.partialScoring = true => use dichotomous scoring
@@ -26,8 +22,8 @@ var enabled = function enabled(config, env, defaultValue) {
26
22
  return false;
27
23
  }
28
24
 
29
- return _lodash["default"].isBoolean(defaultValue) ? defaultValue : true;
25
+ return typeof defaultValue === 'boolean' ? defaultValue : true;
30
26
  };
31
27
 
32
28
  exports.enabled = enabled;
33
- //# sourceMappingURL=partial-scoring.js.map
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLXNjb3JpbmcuanMiXSwibmFtZXMiOlsiZW5hYmxlZCIsImNvbmZpZyIsImVudiIsImRlZmF1bHRWYWx1ZSIsInBhcnRpYWxTY29yaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sSUFBTUEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsTUFBRCxFQUFTQyxHQUFULEVBQWNDLFlBQWQsRUFBK0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBRixFQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxFQUFuQjtBQUNBQyxFQUFBQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFiOztBQUVBLE1BQUlELE1BQU0sQ0FBQ0csY0FBUCxLQUEwQixLQUE5QixFQUFxQztBQUNuQyxXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJRixHQUFHLENBQUNFLGNBQUosS0FBdUIsS0FBM0IsRUFBa0M7QUFDaEMsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBTyxPQUFPRCxZQUFQLEtBQXdCLFNBQXhCLEdBQW9DQSxZQUFwQyxHQUFtRCxJQUExRDtBQUNELENBbEJNIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVuYWJsZWQgPSAoY29uZmlnLCBlbnYsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAvLyBpZiBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlXG4gIC8vICAtIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlIHx8IGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUgPT4gdXNlIGRpY2hvdG9tb3VzIHNjb3JpbmdcbiAgLy8gZWxzZSBpZiBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IHRydWUgfHwgdW5kZWZpbmVkXG4gIC8vICAtIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLCB1c2UgZGljaG90b21vdXMgc2NvcmluZ1xuICAvLyAgLSBlbHNlIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUsIHVzZSBwYXJ0aWFsIHNjb3JpbmdcbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICBlbnYgPSBlbnYgfHwge307XG5cbiAgaWYgKGNvbmZpZy5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZW52LnBhcnRpYWxTY29yaW5nID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicgPyBkZWZhdWx0VmFsdWUgOiB0cnVlO1xufTtcbiJdfQ==
@@ -15,10 +15,6 @@ var _shuffle = _interopRequireDefault(require("lodash/shuffle"));
15
15
 
16
16
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
17
17
 
18
- var _isNull = _interopRequireDefault(require("lodash/isNull"));
19
-
20
- var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
21
-
22
18
  // eslint-disable-next-line no-console
23
19
  var lg = function lg(n) {
24
20
  return console[n].bind(console, 'controller-utils:');
@@ -32,7 +28,7 @@ var error = lg('error');
32
28
  var compact = function compact(arr) {
33
29
  if (Array.isArray(arr)) {
34
30
  return arr.filter(function (v) {
35
- return !(0, _isNull["default"])(v) && !(0, _isUndefined["default"])(v);
31
+ return v !== null && v !== undefined;
36
32
  });
37
33
  }
38
34
 
@@ -43,16 +39,20 @@ exports.compact = compact;
43
39
 
44
40
  var getShuffledChoices = function getShuffledChoices(choices, session, updateSession, choiceKey) {
45
41
  return new Promise(function (resolve) {
42
+ var _session$data;
43
+
46
44
  log('updateSession type: ', (0, _typeof2["default"])(updateSession));
47
45
  log('session: ', session);
48
- var currentShuffled = compact((session || {}).shuffledValues);
46
+ var currentShuffled = compact((session === null || session === void 0 ? void 0 : (_session$data = session.data) === null || _session$data === void 0 ? void 0 : _session$data.shuffledValues) || (session === null || session === void 0 ? void 0 : session.shuffledValues) || []);
49
47
 
50
48
  if (!session) {
51
49
  // eslint-disable-next-line quotes
52
50
  warn("unable to save shuffled choices because there's no session.");
53
51
  resolve(undefined);
54
52
  } else if (!(0, _isEmpty["default"])(currentShuffled)) {
55
- debug('use shuffledValues to sort the choices...', session.shuffledValues);
53
+ var _session$data2;
54
+
55
+ debug('use shuffledValues to sort the choices...', (_session$data2 = session.data) === null || _session$data2 === void 0 ? void 0 : _session$data2.shuffledValues);
56
56
  resolve(compact(currentShuffled.map(function (v) {
57
57
  return choices.find(function (c) {
58
58
  return c[choiceKey] === v;
@@ -137,4 +137,4 @@ var lockChoices = function lockChoices(model, session, env) {
137
137
  };
138
138
 
139
139
  exports.lockChoices = lockChoices;
140
- //# sourceMappingURL=persistence.js.map
140
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6WyJsZyIsIm4iLCJjb25zb2xlIiwiYmluZCIsImRlYnVnIiwibG9nIiwid2FybiIsImVycm9yIiwiY29tcGFjdCIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsInYiLCJ1bmRlZmluZWQiLCJnZXRTaHVmZmxlZENob2ljZXMiLCJjaG9pY2VzIiwic2Vzc2lvbiIsInVwZGF0ZVNlc3Npb24iLCJjaG9pY2VLZXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImN1cnJlbnRTaHVmZmxlZCIsImRhdGEiLCJzaHVmZmxlZFZhbHVlcyIsIm1hcCIsImZpbmQiLCJjIiwic2h1ZmZsZWRDaG9pY2VzIiwiaWQiLCJlbGVtZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImUiLCJsb2NrQ2hvaWNlcyIsIm1vZGVsIiwiZW52IiwibG9ja0Nob2ljZU9yZGVyIiwicm9sZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTtBQUNBLElBQU1BLEVBQUUsR0FBRyxTQUFMQSxFQUFLLENBQUNDLENBQUQ7QUFBQSxTQUFPQyxPQUFPLENBQUNELENBQUQsQ0FBUCxDQUFXRSxJQUFYLENBQWdCRCxPQUFoQixFQUF5QixtQkFBekIsQ0FBUDtBQUFBLENBQVg7O0FBQ0EsSUFBTUUsS0FBSyxHQUFHSixFQUFFLENBQUMsT0FBRCxDQUFoQjtBQUNBLElBQU1LLEdBQUcsR0FBR0wsRUFBRSxDQUFDLEtBQUQsQ0FBZDtBQUNBLElBQU1NLElBQUksR0FBR04sRUFBRSxDQUFDLE1BQUQsQ0FBZjtBQUNBLElBQU1PLEtBQUssR0FBR1AsRUFBRSxDQUFDLE9BQUQsQ0FBaEI7O0FBRU8sSUFBTVEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsR0FBRCxFQUFTO0FBQzlCLE1BQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixHQUFkLENBQUosRUFBd0I7QUFDdEIsV0FBT0EsR0FBRyxDQUFDRyxNQUFK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O0FBQ0wzQixRQUFBQSxJQUFJLENBQUMsa0VBQUQsQ0FBSjtBQUNELE9BM0JJLENBNEJMOzs7QUFDQWUsTUFBQUEsT0FBTyxDQUFDTyxlQUFELENBQVA7QUFDRDtBQUNGLEdBNUNELENBRGdDO0FBQUEsQ0FBM0I7QUErQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTU0sV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsS0FBRCxFQUFRbEIsT0FBUixFQUFpQm1CLEdBQWpCLEVBQXlCO0FBQ2xELE1BQUlELEtBQUssQ0FBQ0UsZUFBVixFQUEyQjtBQUN6QixXQUFPLElBQVA7QUFDRDs7QUFFRGhDLEVBQUFBLEdBQUcsQ0FBQyxtQkFBRCxFQUFzQixxQkFBSStCLEdBQUosRUFBUyxDQUFDLGNBQUQsRUFBaUIsaUJBQWpCLENBQVQsRUFBOEMsS0FBOUMsQ0FBdEIsQ0FBSDs7QUFFQSxNQUFJLHFCQUFJQSxHQUFKLEVBQVMsQ0FBQyxjQUFELEVBQWlCLGlCQUFqQixDQUFULEVBQThDLEtBQTlDLENBQUosRUFBMEQ7QUFDeEQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBTUUsSUFBSSxHQUFHLHFCQUFJRixHQUFKLEVBQVMsTUFBVCxFQUFpQixTQUFqQixDQUFiOztBQUVBLE1BQUlFLElBQUksS0FBSyxZQUFiLEVBQTJCO0FBQ3pCOztBQUNBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFHSSxXQUFPLElBQVA7QUFDRCxHQXZCaUQsQ0F5QmxEOzs7QUFDQSxTQUFPLEtBQVA7QUFDRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgc2h1ZmZsZSBmcm9tICdsb2Rhc2gvc2h1ZmZsZSc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5jb25zdCBsZyA9IChuKSA9PiBjb25zb2xlW25dLmJpbmQoY29uc29sZSwgJ2NvbnRyb2xsZXItdXRpbHM6Jyk7XG5jb25zdCBkZWJ1ZyA9IGxnKCdkZWJ1ZycpO1xuY29uc3QgbG9nID0gbGcoJ2xvZycpO1xuY29uc3Qgd2FybiA9IGxnKCd3YXJuJyk7XG5jb25zdCBlcnJvciA9IGxnKCdlcnJvcicpO1xuXG5leHBvcnQgY29uc3QgY29tcGFjdCA9IChhcnIpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBhcnIuZmlsdGVyKCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaHVmZmxlZENob2ljZXMgPSAoY2hvaWNlcywgc2Vzc2lvbiwgdXBkYXRlU2Vzc2lvbiwgY2hvaWNlS2V5KSA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGxvZygndXBkYXRlU2Vzc2lvbiB0eXBlOiAnLCB0eXBlb2YgdXBkYXRlU2Vzc2lvbik7XG4gICAgbG9nKCdzZXNzaW9uOiAnLCBzZXNzaW9uKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9IGNvbXBhY3Qoc2Vzc2lvbj8uZGF0YT8uc2h1ZmZsZWRWYWx1ZXMgfHwgc2Vzc2lvbj8uc2h1ZmZsZWRWYWx1ZXMgfHwgW10pO1xuXG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcXVvdGVzXG4gICAgICB3YXJuKFwidW5hYmxlIHRvIHNhdmUgc2h1ZmZsZWQgY2hvaWNlcyBiZWNhdXNlIHRoZXJlJ3Mgbm8gc2Vzc2lvbi5cIik7XG4gICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICghaXNFbXB0eShjdXJyZW50U2h1ZmZsZWQpKSB7XG4gICAgICBkZWJ1ZygndXNlIHNodWZmbGVkVmFsdWVzIHRvIHNvcnQgdGhlIGNob2ljZXMuLi4nLCBzZXNzaW9uLmRhdGE/LnNodWZmbGVkVmFsdWVzKTtcbiAgICAgIHJlc29sdmUoY29tcGFjdChjdXJyZW50U2h1ZmZsZWQubWFwKCh2KSA9PiBjaG9pY2VzLmZpbmQoKGMpID0+IGNbY2hvaWNlS2V5XSA9PT0gdikpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNodWZmbGVkQ2hvaWNlcyA9IHNodWZmbGUoY2hvaWNlcyk7XG5cbiAgICAgIGlmICh1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy9Ob3RlOiBzZXNzaW9uLmlkIHJlZmVycyB0byB0aGUgaWQgb2YgdGhlIGVsZW1lbnQgd2l0aGluIGEgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IHNodWZmbGVkVmFsdWVzID0gY29tcGFjdChzaHVmZmxlZENob2ljZXMubWFwKChjKSA9PiBjW2Nob2ljZUtleV0pKTtcbiAgICAgICAgICBsb2coJ3RyeSB0byBzYXZlIHNodWZmbGVkVmFsdWVzIHRvIHNlc3Npb24uLi4nLCBzaHVmZmxlZFZhbHVlcyk7XG4gICAgICAgICAgbG9nKCdjYWxsIHVwZGF0ZVNlc3Npb24uLi4gJywgc2Vzc2lvbi5pZCwgc2Vzc2lvbi5lbGVtZW50KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eShzaHVmZmxlZFZhbHVlcykpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBgc2h1ZmZsZWRWYWx1ZXMgaXMgYW4gZW1wdHkgYXJyYXk/IC0gcmVmdXNpbmcgdG8gY2FsbCB1cGRhdGVTZXNzaW9uOiBzaHVmZmxlZENob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgc2h1ZmZsZWRDaG9pY2VzLFxuICAgICAgICAgICAgICApfSwga2V5OiAke2Nob2ljZUtleX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHsgc2h1ZmZsZWRWYWx1ZXMgfSkuY2F0Y2goKGUpID0+XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VwZGF0ZSBzZXNzaW9uIGZhaWxlZCBmb3I6ICcsIHNlc3Npb24uaWQsIGUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB3YXJuKCd1bmFibGUgdG8gc2F2ZSBzaHVmZmxlZCBvcmRlciBmb3IgY2hvaWNlcycpO1xuICAgICAgICAgIGVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKCd1bmFibGUgdG8gc2F2ZSBzaHVmZmxlZCBjaG9pY2VzLCBzaHVmZmxlIHdpbGwgaGFwcGVuIGV2ZXJ5IHRpbWUuJyk7XG4gICAgICB9XG4gICAgICAvL3NhdmUgdGhpcyBzaHVmZmxlIHRvIHRoZSBzZXNzaW9uIGZvciBsYXRlciByZXRyaWV2YWxcbiAgICAgIHJlc29sdmUoc2h1ZmZsZWRDaG9pY2VzKTtcbiAgICB9XG4gIH0pO1xuXG4vKipcbiAqIElmIHdlIHJldHVybjpcbiAqIC0gdHJ1ZSAtIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGNob2ljZXMgd2lsbCBiZSBvcmRpbmFsIChhcyBpcyBjcmVhdGVkIGluIHRoZSBjb25maWd1cmUgaXRlbSlcbiAqIC0gZmFsc2UgLSB0aGF0IG1lYW5zIHRoZSBnZXRTaHVmZmxlZENob2ljZXMgYWJvdmUgd2lsbCBiZSBjYWxsZWQgYW5kIHRoYXQgaW4gdHVybiBtZWFucyB0aGF0IHdlIGVpdGhlclxuICogcmV0dXJuIHRoZSBzaHVmZmxlZCB2YWx1ZXMgb24gdGhlIHNlc3Npb24gKGlmIGFueSBleGlzdHMpIG9yIHdlIHNodWZmbGUgdGhlIGNob2ljZXNcbiAqIEBwYXJhbSBtb2RlbCAtIG1vZGVsIHRvIGNoZWNrIGlmIHdlIHNob3VsZCBsb2NrIG9yZGVyXG4gKiBAcGFyYW0gc2Vzc2lvbiAtIHNlc3Npb24gdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvY2sgb3JkZXJcbiAqIEBwYXJhbSBlbnYgLSBlbnYgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvY2sgb3JkZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgbG9ja0Nob2ljZXMgPSAobW9kZWwsIHNlc3Npb24sIGVudikgPT4ge1xuICBpZiAobW9kZWwubG9ja0Nob2ljZU9yZGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsb2coJ2xvY2tDaG9pY2VPcmRlcjogJywgZ2V0KGVudiwgWydAcGllLWVsZW1lbnQnLCAnbG9ja0Nob2ljZU9yZGVyJ10sIGZhbHNlKSk7XG5cbiAgaWYgKGdldChlbnYsIFsnQHBpZS1lbGVtZW50JywgJ2xvY2tDaG9pY2VPcmRlciddLCBmYWxzZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHJvbGUgPSBnZXQoZW52LCAncm9sZScsICdzdHVkZW50Jyk7XG5cbiAgaWYgKHJvbGUgPT09ICdpbnN0cnVjdG9yJykge1xuICAgIC8vIFRPRE86IC4uIGluIHRoZSBmdXR1cmUgdGhlIGluc3RydWN0b3IgY2FuIHRvZ2dsZSBiZXR3ZWVuIG9yZGluYWwgYW5kIHNodWZmbGVkIGhlcmUsIHNvIGtlZXBpbmcgdGhpcyBjb2RlIHVudGlsIHRoZW5cbiAgICAvKmNvbnN0IGFscmVhZHlTaHVmZmxlZCA9IGhhc1NodWZmbGVkVmFsdWVzKHNlc3Npb24pO1xuXG4gICAgaWYgKGFscmVhZHlTaHVmZmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlOyovXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBoZXJlIGl0J3MgYSBzdHVkZW50LCBzbyBkb24ndCBsb2NrIGFuZCBpdCB3aWxsIHNodWZmbGUgaWYgbmVlZHMgYmVcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/controller-utils",
3
- "version": "0.2.44",
3
+ "version": "0.4.0-beta.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -14,5 +14,5 @@
14
14
  "scripts": {},
15
15
  "author": "",
16
16
  "license": "ISC",
17
- "gitHead": "4043c98430c000ce3a25357d92845175b076ea21"
17
+ "gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a"
18
18
  }
@@ -0,0 +1,25 @@
1
+ import { enabled } from '../partial-scoring';
2
+
3
+ describe('enabled', () => {
4
+ const assertEnabled = (config, env, expected) => {
5
+ it(`returns ${expected} for: config: ${config.partialScoring}, env:${env.partialScoring}`, () => {
6
+ const result = enabled(config, env);
7
+ expect(result).toEqual(expected);
8
+ });
9
+ };
10
+
11
+ const config = (v) => ({ partialScoring: v });
12
+ const env = (v) => ({ partialScoring: v });
13
+
14
+ assertEnabled(config(undefined), env(undefined), true);
15
+ assertEnabled(config(undefined), env(true), true);
16
+ assertEnabled(config(undefined), env(false), false);
17
+
18
+ assertEnabled(config(false), env(undefined), false);
19
+ assertEnabled(config(false), env(true), false);
20
+ assertEnabled(config(false), env(false), false);
21
+
22
+ assertEnabled(config(true), env(undefined), true);
23
+ assertEnabled(config(true), env(true), true);
24
+ assertEnabled(config(true), env(false), false);
25
+ });
@@ -0,0 +1,151 @@
1
+ import { getShuffledChoices, lockChoices } from '../persistence';
2
+
3
+ describe('getShuffledChoices', () => {
4
+ let choices, session, updateSession, key;
5
+
6
+ beforeEach(() => {
7
+ updateSession = jest.fn().mockResolvedValue([]);
8
+ session = {
9
+ id: '1',
10
+ element: 'element',
11
+ };
12
+ choices = [
13
+ {
14
+ value: 1,
15
+ },
16
+ {
17
+ value: 2,
18
+ },
19
+ ];
20
+ key = 'value';
21
+ });
22
+
23
+ describe('0 key', () => {
24
+ it('calls update session w/ 0 as a key', async () => {
25
+ const result = await getShuffledChoices([{ value: 0 }, { value: 1 }], session, updateSession, 'value');
26
+ expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
27
+ shuffledValues: expect.arrayContaining([0, 1]),
28
+ });
29
+ });
30
+ });
31
+
32
+ describe('handles null values in session', () => {
33
+ beforeEach(async () => {
34
+ const result = await getShuffledChoices(choices, { ...session, shuffledValues: [null] }, updateSession, 'value');
35
+ });
36
+
37
+ it('calls updateSession w/ new shuffle cos [null] is treated as empty', () => {
38
+ expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
39
+ shuffledValues: expect.arrayContaining([1, 2]),
40
+ });
41
+ });
42
+ });
43
+ describe('bad shuffle generation does not call updateSession', () => {
44
+ beforeEach(async () => {
45
+ const result = await getShuffledChoices(choices, {}, updateSession, 'foo');
46
+ });
47
+ it('does not call update session', () => {
48
+ expect(updateSession).not.toHaveBeenCalled();
49
+ });
50
+ });
51
+
52
+ describe('session does not exist', () => {
53
+ it('returns undefined for empty session', async () => {
54
+ const result = await getShuffledChoices(choices, undefined, updateSession, key);
55
+ expect(result).toEqual(undefined);
56
+ });
57
+ });
58
+
59
+ describe('session exists', () => {
60
+ it('returns compact choices if session has shuffledValues', async () => {
61
+ session = { shuffledValues: [2, 1] };
62
+ const result = await getShuffledChoices(choices, session, updateSession, key);
63
+ expect(result).toEqual(expect.arrayContaining(choices));
64
+ });
65
+
66
+ it('returns shuffled choices if updateSession is a function', async () => {
67
+ session = {};
68
+ updateSession = jest.fn().mockResolvedValue();
69
+ const result = await getShuffledChoices(choices, session, updateSession, key);
70
+ expect(result).toEqual(expect.arrayContaining(choices));
71
+ });
72
+
73
+ it('calls updateSession as expected if updateSession is a function', async () => {
74
+ session = { id: '1', element: 'pie-element' };
75
+ await getShuffledChoices(choices, session, updateSession, key);
76
+ expect(updateSession).toHaveBeenCalledWith('1', 'pie-element', {
77
+ shuffledValues: expect.arrayContaining([1, 2]),
78
+ });
79
+ });
80
+ });
81
+ });
82
+
83
+ describe('lockChoices', () => {
84
+ const env = (lockChoiceOrder, role = 'student') => ({
85
+ '@pie-element': { lockChoiceOrder },
86
+ role,
87
+ });
88
+ const session = (shuffledValues) => ({ shuffledValues });
89
+ it.each`
90
+ modelLock | session | env | expected
91
+ ${true} | ${session()} | ${env(true)} | ${true}
92
+ ${true} | ${session()} | ${env(false)} | ${true}
93
+ ${false} | ${session()} | ${env(true)} | ${true}
94
+ ${false} | ${session()} | ${env(false)} | ${false}
95
+ ${false} | ${session()} | ${undefined} | ${false}
96
+ ${false} | ${undefined} | ${undefined} | ${false}
97
+ ${undefined} | ${session()} | ${env(false)} | ${false}
98
+ ${undefined} | ${session()} | ${env(undefined)} | ${false}
99
+ ${false} | ${session()} | ${env(false, 'instructor')} | ${true}
100
+ ${false} | ${session([0, 1])} | ${env(false, 'instructor')} | ${true}
101
+ ${false} | ${undefined} | ${env(false, 'instructor')} | ${true}
102
+ `('1. model.lockChoiceOrder: $modelLock, $session, $env => $expected', ({ modelLock, session, env, expected }) => {
103
+ const model = { lockChoiceOrder: modelLock };
104
+ const result = lockChoices(model, session, env);
105
+ expect(result).toEqual(expected);
106
+ });
107
+ });
108
+
109
+ describe('lockChoices mod', () => {
110
+ const env = (lockChoiceOrder, role = 'student') => ({
111
+ '@pie-element': { lockChoiceOrder },
112
+ role,
113
+ });
114
+ const session = (answers = ['foo', 'bar']) => ({ answers });
115
+ it.each`
116
+ modelLock | session | env | expected
117
+ ${true} | ${session()} | ${env(true)} | ${true}
118
+ ${true} | ${session()} | ${env(false)} | ${true}
119
+ ${false} | ${session()} | ${env(true)} | ${true}
120
+ ${false} | ${session()} | ${env(false)} | ${false}
121
+ ${undefined} | ${session()} | ${env(true)} | ${true}
122
+ ${undefined} | ${session()} | ${env(undefined)} | ${false}
123
+ ${undefined} | ${session()} | ${env(undefined, 'instructor')} | ${true}
124
+ `('2. model.lockChoiceOrder: $modelLock, $session, $env => $expected', ({ modelLock, session, env, expected }) => {
125
+ const model = { lockChoiceOrder: modelLock };
126
+ const result = lockChoices(model, session, env);
127
+ expect(result).toEqual(expected);
128
+ });
129
+ });
130
+
131
+ describe('lockChoices', () => {
132
+ const env = (lockChoiceOrder, role = 'student') => ({
133
+ '@pie-element': { lockChoiceOrder },
134
+ role,
135
+ });
136
+ const session = (shuffledValues) => ({ shuffledValues, answers: ['foo', 'bar'] });
137
+ it.each`
138
+ modelLock | session | env | expected
139
+ ${true} | ${session()} | ${env(true)} | ${true}
140
+ ${true} | ${session()} | ${env(false)} | ${true}
141
+ ${false} | ${session()} | ${env(true)} | ${true}
142
+ ${false} | ${session()} | ${env(false)} | ${false}
143
+ ${undefined} | ${session()} | ${env(true)} | ${true}
144
+ ${undefined} | ${session()} | ${env(undefined)} | ${false}
145
+ ${undefined} | ${session()} | ${env(undefined, 'instructor')} | ${true}
146
+ `('3. model.lockChoiceOrder: $modelLock, $env => $expected', ({ modelLock, session, env, expected }) => {
147
+ const model = { lockChoiceOrder: modelLock };
148
+ const result = lockChoices(model, session, env);
149
+ expect(result).toEqual(expected);
150
+ });
151
+ });
package/src/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  import * as partialScoring from './partial-scoring';
2
+
2
3
  export { lockChoices, getShuffledChoices } from './persistence';
3
4
  export { partialScoring };
@@ -1,5 +1,3 @@
1
- import _ from 'lodash';
2
-
3
1
  export const enabled = (config, env, defaultValue) => {
4
2
  // if model.partialScoring = false
5
3
  // - if env.partialScoring = false || env.partialScoring = true => use dichotomous scoring
@@ -17,5 +15,5 @@ export const enabled = (config, env, defaultValue) => {
17
15
  return false;
18
16
  }
19
17
 
20
- return _.isBoolean(defaultValue) ? defaultValue : true;
18
+ return typeof defaultValue === 'boolean' ? defaultValue : true;
21
19
  };
@@ -1,8 +1,6 @@
1
1
  import get from 'lodash/get';
2
2
  import shuffle from 'lodash/shuffle';
3
3
  import isEmpty from 'lodash/isEmpty';
4
- import isNull from 'lodash/isNull';
5
- import isUndefined from 'lodash/isUndefined';
6
4
 
7
5
  // eslint-disable-next-line no-console
8
6
  const lg = (n) => console[n].bind(console, 'controller-utils:');
@@ -13,7 +11,7 @@ const error = lg('error');
13
11
 
14
12
  export const compact = (arr) => {
15
13
  if (Array.isArray(arr)) {
16
- return arr.filter((v) => !isNull(v) && !isUndefined(v));
14
+ return arr.filter((v) => v !== null && v !== undefined);
17
15
  }
18
16
  return arr;
19
17
  };
@@ -23,14 +21,14 @@ export const getShuffledChoices = (choices, session, updateSession, choiceKey) =
23
21
  log('updateSession type: ', typeof updateSession);
24
22
  log('session: ', session);
25
23
 
26
- const currentShuffled = compact((session || {}).shuffledValues);
24
+ const currentShuffled = compact(session?.data?.shuffledValues || session?.shuffledValues || []);
27
25
 
28
26
  if (!session) {
29
27
  // eslint-disable-next-line quotes
30
28
  warn("unable to save shuffled choices because there's no session.");
31
29
  resolve(undefined);
32
30
  } else if (!isEmpty(currentShuffled)) {
33
- debug('use shuffledValues to sort the choices...', session.shuffledValues);
31
+ debug('use shuffledValues to sort the choices...', session.data?.shuffledValues);
34
32
  resolve(compact(currentShuffled.map((v) => choices.find((c) => c[choiceKey] === v))));
35
33
  } else {
36
34
  const shuffledChoices = shuffle(choices);
package/README.md DELETED
@@ -1,5 +0,0 @@
1
- # controller utils
2
-
3
- Some utilities for pie controllers.
4
-
5
- > This package must be able to run server and client side. _Don't add any client specific libraries to this package_.
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;AACA","sourcesContent":["import * as partialScoring from './partial-scoring';\nexport { lockChoices, getShuffledChoices } from './persistence';\nexport { partialScoring };\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/partial-scoring.js"],"names":["enabled","config","env","defaultValue","partialScoring","_","isBoolean"],"mappings":";;;;;;;;;AAAA;;AAEO,IAAMA,OAAO,GAAG,SAAVA,OAAU,CAACC,MAAD,EAASC,GAAT,EAAcC,YAAd,EAA+B;AACpD;AACA;AACA;AACA;AACA;AACAF,EAAAA,MAAM,GAAGA,MAAM,IAAI,EAAnB;AACAC,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;AAEA,MAAID,MAAM,CAACG,cAAP,KAA0B,KAA9B,EAAqC;AACnC,WAAO,KAAP;AACD;;AAED,MAAIF,GAAG,CAACE,cAAJ,KAAuB,KAA3B,EAAkC;AAChC,WAAO,KAAP;AACD;;AAED,SAAOC,mBAAEC,SAAF,CAAYH,YAAZ,IAA4BA,YAA5B,GAA2C,IAAlD;AACD,CAlBM","sourcesContent":["import _ from 'lodash';\n\nexport const enabled = (config, env, defaultValue) => {\n // if model.partialScoring = false\n // - if env.partialScoring = false || env.partialScoring = true => use dichotomous scoring\n // else if model.partialScoring = true || undefined\n // - if env.partialScoring = false, use dichotomous scoring\n // - else if env.partialScoring = true, use partial scoring\n config = config || {};\n env = env || {};\n\n if (config.partialScoring === false) {\n return false;\n }\n\n if (env.partialScoring === false) {\n return false;\n }\n\n return _.isBoolean(defaultValue) ? defaultValue : true;\n};\n"],"file":"partial-scoring.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/persistence.js"],"names":["lg","n","console","bind","debug","log","warn","error","compact","arr","Array","isArray","filter","v","getShuffledChoices","choices","session","updateSession","choiceKey","Promise","resolve","currentShuffled","shuffledValues","undefined","map","find","c","shuffledChoices","id","element","JSON","stringify","e","lockChoices","model","env","lockChoiceOrder","role"],"mappings":"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","sourcesContent":["import get from 'lodash/get';\nimport shuffle from 'lodash/shuffle';\nimport isEmpty from 'lodash/isEmpty';\nimport isNull from 'lodash/isNull';\nimport isUndefined from 'lodash/isUndefined';\n\n// eslint-disable-next-line no-console\nconst lg = (n) => console[n].bind(console, 'controller-utils:');\nconst debug = lg('debug');\nconst log = lg('log');\nconst warn = lg('warn');\nconst error = lg('error');\n\nexport const compact = (arr) => {\n if (Array.isArray(arr)) {\n return arr.filter((v) => !isNull(v) && !isUndefined(v));\n }\n return arr;\n};\n\nexport const getShuffledChoices = (choices, session, updateSession, choiceKey) =>\n new Promise((resolve) => {\n log('updateSession type: ', typeof updateSession);\n log('session: ', session);\n\n const currentShuffled = compact((session || {}).shuffledValues);\n\n if (!session) {\n // eslint-disable-next-line quotes\n warn(\"unable to save shuffled choices because there's no session.\");\n resolve(undefined);\n } else if (!isEmpty(currentShuffled)) {\n debug('use shuffledValues to sort the choices...', session.shuffledValues);\n resolve(compact(currentShuffled.map((v) => choices.find((c) => c[choiceKey] === v))));\n } else {\n const shuffledChoices = shuffle(choices);\n\n if (updateSession && typeof updateSession === 'function') {\n try {\n //Note: session.id refers to the id of the element within a session\n const shuffledValues = compact(shuffledChoices.map((c) => c[choiceKey]));\n log('try to save shuffledValues to session...', shuffledValues);\n log('call updateSession... ', session.id, session.element);\n if (isEmpty(shuffledValues)) {\n error(\n `shuffledValues is an empty array? - refusing to call updateSession: shuffledChoices: ${JSON.stringify(\n shuffledChoices,\n )}, key: ${choiceKey}`,\n );\n } else {\n updateSession(session.id, session.element, { shuffledValues }).catch((e) =>\n // eslint-disable-next-line no-console\n console.error('update session failed for: ', session.id, e),\n );\n }\n } catch (e) {\n warn('unable to save shuffled order for choices');\n error(e);\n }\n } else {\n warn('unable to save shuffled choices, shuffle will happen every time.');\n }\n //save this shuffle to the session for later retrieval\n resolve(shuffledChoices);\n }\n });\n\n/**\n * If we return:\n * - true - that means that the order of the choices will be ordinal (as is created in the configure item)\n * - false - that means the getShuffledChoices above will be called and that in turn means that we either\n * return the shuffled values on the session (if any exists) or we shuffle the choices\n * @param model - model to check if we should lock order\n * @param session - session to check if we should lock order\n * @param env - env to check if we should lock order\n * @returns {boolean}\n */\nexport const lockChoices = (model, session, env) => {\n if (model.lockChoiceOrder) {\n return true;\n }\n\n log('lockChoiceOrder: ', get(env, ['@pie-element', 'lockChoiceOrder'], false));\n\n if (get(env, ['@pie-element', 'lockChoiceOrder'], false)) {\n return true;\n }\n\n const role = get(env, 'role', 'student');\n\n if (role === 'instructor') {\n // TODO: .. in the future the instructor can toggle between ordinal and shuffled here, so keeping this code until then\n /*const alreadyShuffled = hasShuffledValues(session);\n\n if (alreadyShuffled) {\n return false;\n }\n\n return true;*/\n return true;\n }\n\n // here it's a student, so don't lock and it will shuffle if needs be\n return false;\n};\n"],"file":"persistence.js"}