@pie-lib/feedback 0.4.43 → 0.6.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 +16 -0
- package/NEXT.CHANGELOG.json +1 -0
- package/lib/__tests__/index.test.js +161 -0
- package/lib/index.js +38 -3
- package/package.json +2 -2
- package/src/__tests__/index.test.js +61 -0
- package/src/index.js +32 -0
- package/.travis.yml +0 -7
- package/README.md +0 -1
- package/lib/index.js.map +0 -1
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.6.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/feedback@0.4.43...@pie-lib/feedback@0.6.0-beta.0) (2025-07-15)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-lib/feedback
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [0.5.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/feedback@0.4.43...@pie-lib/feedback@0.5.0-beta.0) (2025-07-15)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-lib/feedback
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
## [0.4.43](https://github.com/pie-framework/pie-lib/compare/@pie-lib/feedback@0.4.42...@pie-lib/feedback@0.4.43) (2023-06-24)
|
|
7
23
|
|
|
8
24
|
**Note:** Version bump only for package @pie-lib/feedback
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
+
|
|
7
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
+
|
|
9
|
+
var _index = require("../index");
|
|
10
|
+
|
|
11
|
+
describe('feedback', function () {
|
|
12
|
+
describe('getFeedback', function () {
|
|
13
|
+
var assert = function assert(config, fallback, expected) {
|
|
14
|
+
it("".concat(JSON.stringify(config), " -> ").concat(expected), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
15
|
+
var result;
|
|
16
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
17
|
+
while (1) {
|
|
18
|
+
switch (_context.prev = _context.next) {
|
|
19
|
+
case 0:
|
|
20
|
+
_context.next = 2;
|
|
21
|
+
return (0, _index.getFeedback)(config, fallback);
|
|
22
|
+
|
|
23
|
+
case 2:
|
|
24
|
+
result = _context.sent;
|
|
25
|
+
expect(result).toEqual(expected);
|
|
26
|
+
|
|
27
|
+
case 4:
|
|
28
|
+
case "end":
|
|
29
|
+
return _context.stop();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}, _callee);
|
|
33
|
+
})));
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
assert({
|
|
37
|
+
type: 'none'
|
|
38
|
+
}, 'foo', undefined);
|
|
39
|
+
assert({
|
|
40
|
+
type: 'default'
|
|
41
|
+
}, 'foo', 'foo');
|
|
42
|
+
assert({
|
|
43
|
+
type: 'default',
|
|
44
|
+
"default": 'bar'
|
|
45
|
+
}, 'foo', 'bar');
|
|
46
|
+
});
|
|
47
|
+
describe('getFeedbackForCorrectness', function () {
|
|
48
|
+
var assert = function assert(correctness, config, expected) {
|
|
49
|
+
it("".concat(correctness, " + ").concat(JSON.stringify(config), " -> ").concat(expected), /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
50
|
+
var result;
|
|
51
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
52
|
+
while (1) {
|
|
53
|
+
switch (_context2.prev = _context2.next) {
|
|
54
|
+
case 0:
|
|
55
|
+
_context2.next = 2;
|
|
56
|
+
return (0, _index.getFeedbackForCorrectness)(correctness, config);
|
|
57
|
+
|
|
58
|
+
case 2:
|
|
59
|
+
result = _context2.sent;
|
|
60
|
+
expect(result).toEqual(expected);
|
|
61
|
+
|
|
62
|
+
case 4:
|
|
63
|
+
case "end":
|
|
64
|
+
return _context2.stop();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, _callee2);
|
|
68
|
+
})));
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
describe('correct', function () {
|
|
72
|
+
assert('correct', null, 'Correct');
|
|
73
|
+
assert('correct', {}, 'Correct');
|
|
74
|
+
assert('correct', {
|
|
75
|
+
correct: {
|
|
76
|
+
type: 'default'
|
|
77
|
+
}
|
|
78
|
+
}, 'Correct');
|
|
79
|
+
assert('correct', {
|
|
80
|
+
correct: {
|
|
81
|
+
type: 'default',
|
|
82
|
+
"default": 'C'
|
|
83
|
+
}
|
|
84
|
+
}, 'C');
|
|
85
|
+
assert('correct', {
|
|
86
|
+
correct: {
|
|
87
|
+
type: 'none',
|
|
88
|
+
"default": 'C'
|
|
89
|
+
}
|
|
90
|
+
}, undefined);
|
|
91
|
+
assert('correct', {
|
|
92
|
+
correct: {
|
|
93
|
+
type: 'custom',
|
|
94
|
+
custom: 'Custom'
|
|
95
|
+
}
|
|
96
|
+
}, 'Custom');
|
|
97
|
+
});
|
|
98
|
+
describe('incorrect', function () {
|
|
99
|
+
assert('incorrect', {}, 'Incorrect');
|
|
100
|
+
assert('incorrect', {
|
|
101
|
+
incorrect: {
|
|
102
|
+
type: 'default'
|
|
103
|
+
}
|
|
104
|
+
}, 'Incorrect');
|
|
105
|
+
assert('incorrect', {
|
|
106
|
+
incorrect: {
|
|
107
|
+
type: 'default',
|
|
108
|
+
"default": 'I'
|
|
109
|
+
}
|
|
110
|
+
}, 'I');
|
|
111
|
+
assert('incorrect', {
|
|
112
|
+
incorrect: {
|
|
113
|
+
type: 'none',
|
|
114
|
+
"default": 'C'
|
|
115
|
+
}
|
|
116
|
+
}, undefined);
|
|
117
|
+
assert('incorrect', {
|
|
118
|
+
incorrect: {
|
|
119
|
+
type: 'custom',
|
|
120
|
+
custom: 'Custom'
|
|
121
|
+
}
|
|
122
|
+
}, 'Custom');
|
|
123
|
+
});
|
|
124
|
+
describe('unanswered', function () {
|
|
125
|
+
assert('unanswered', {}, _index.defaults.unanswered["default"]);
|
|
126
|
+
});
|
|
127
|
+
describe('unknown', function () {
|
|
128
|
+
assert('unknown', {}, undefined);
|
|
129
|
+
});
|
|
130
|
+
describe('partially-correct', function () {
|
|
131
|
+
assert('partially-correct', {}, 'Nearly');
|
|
132
|
+
});
|
|
133
|
+
describe('partial', function () {
|
|
134
|
+
assert('partial', {}, 'Nearly');
|
|
135
|
+
assert('partial', {
|
|
136
|
+
partial: {
|
|
137
|
+
type: 'default'
|
|
138
|
+
}
|
|
139
|
+
}, 'Nearly');
|
|
140
|
+
assert('partial', {
|
|
141
|
+
partial: {
|
|
142
|
+
type: 'default',
|
|
143
|
+
"default": 'I'
|
|
144
|
+
}
|
|
145
|
+
}, 'I');
|
|
146
|
+
assert('partial', {
|
|
147
|
+
partial: {
|
|
148
|
+
type: 'none',
|
|
149
|
+
"default": 'C'
|
|
150
|
+
}
|
|
151
|
+
}, undefined);
|
|
152
|
+
assert('partial', {
|
|
153
|
+
partial: {
|
|
154
|
+
type: 'custom',
|
|
155
|
+
custom: 'Custom'
|
|
156
|
+
}
|
|
157
|
+
}, 'Custom');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImFzc2VydCIsImNvbmZpZyIsImZhbGxiYWNrIiwiZXhwZWN0ZWQiLCJpdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0VxdWFsIiwidHlwZSIsInVuZGVmaW5lZCIsImNvcnJlY3RuZXNzIiwiY29ycmVjdCIsImN1c3RvbSIsImluY29ycmVjdCIsImRlZmF1bHRzIiwidW5hbnN3ZXJlZCIsInBhcnRpYWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0FBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QkEsRUFBQUEsUUFBUSxDQUFDLGFBQUQsRUFBZ0IsWUFBTTtBQUM1QixRQUFNQyxNQUFNLEdBQUcsU0FBVEEsTUFBUyxDQUFDQyxNQUFELEVBQVNDLFFBQVQsRUFBbUJDLFFBQW5CLEVBQWdDO0FBQzdDQyxNQUFBQSxFQUFFLFdBQUlDLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxNQUFmLENBQUosaUJBQWlDRSxRQUFqQyw4RkFBNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFDeEIsd0JBQVlGLE1BQVosRUFBb0JDLFFBQXBCLENBRHdCOztBQUFBO0FBQ3ZDSyxnQkFBQUEsTUFEdUM7QUFFN0NDLGdCQUFBQSxNQUFNLENBQUNELE1BQUQsQ0FBTixDQUFlRSxPQUFmLENBQXVCTixRQUF2Qjs7QUFGNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsT0FBN0MsR0FBRjtBQUlELEtBTEQ7O0FBT0FILElBQUFBLE1BQU0sQ0FBQztBQUFFVSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUFELEVBQW1CLEtBQW5CLEVBQTBCQyxTQUExQixDQUFOO0FBQ0FYLElBQUFBLE1BQU0sQ0FBQztBQUFFVSxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUFELEVBQXNCLEtBQXRCLEVBQTZCLEtBQTdCLENB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QUFNLEVBQUU7QUFBMUI7QUFBWCxPQUFaLEVBQStELFFBQS9ELENBQU47QUFDRCxLQU5PLENBQVI7QUFPRCxHQTVDTyxDQUFSO0FBNkNELENBM0RPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzLCBnZXRGZWVkYmFjaywgZGVmYXVsdHMgfSBmcm9tICcuLi9pbmRleCc7XG5kZXNjcmliZSgnZmVlZGJhY2snLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdnZXRGZWVkYmFjaycsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoY29uZmlnLCBmYWxsYmFjaywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9IC0+ICR7ZXhwZWN0ZWR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRGZWVkYmFjayhjb25maWcsIGZhbGxiYWNrKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0KHsgdHlwZTogJ25vbmUnIH0sICdmb28nLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydCh7IHR5cGU6ICdkZWZhdWx0JyB9LCAnZm9vJywgJ2ZvbycpO1xuICAgIGFzc2VydCh7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ2JhcicgfSwgJ2ZvbycsICdiYXInKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGNvcnJlY3RuZXNzLCBjb25maWcsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBpdChgJHtjb3JyZWN0bmVzc30gKyAke0pTT04uc3RyaW5naWZ5KGNvbmZpZyl9IC0+ICR7ZXhwZWN0ZWR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzKGNvcnJlY3RuZXNzLCBjb25maWcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydCgnY29ycmVjdCcsIG51bGwsICdDb3JyZWN0Jyk7XG4gICAgICBhc3NlcnQoJ2NvcnJlY3QnLCB7fSwgJ0NvcnJlY3QnKTtcbiAgICAgIGFzc2VydCgnY29ycmVjdCcsIHsgY29ycmVjdDogeyB0eXBlOiAnZGVmYXVsdCcgfSB9LCAnQ29ycmVjdCcpO1xuICAgICAgYXNzZXJ0KCdjb3JyZWN0JywgeyBjb3JyZWN0OiB7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ0MnIH0gfSwgJ0MnKTtcbiAgICAgIGFzc2VydCgnY29ycmVjdCcsIHsgY29ycmVjdDogeyB0eXBlOiAnbm9uZScsIGRlZmF1bHQ6ICdDJyB9IH0sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQoJ2NvcnJlY3QnLCB7IGNvcnJlY3Q6IHsgdHlwZTogJ2N1c3RvbScsIGN1c3RvbTogJ0N1c3RvbScgfSB9LCAnQ3VzdG9tJyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCdpbmNvcnJlY3QnLCB7fSwgJ0luY29ycmVjdCcpO1xuICAgICAgYXNzZXJ0KCdpbmNvcnJlY3QnLCB7IGluY29ycmVjdDogeyB0eXBlOiAnZGVmYXVsdCcgfSB9LCAnSW5jb3JyZWN0Jyk7XG4gICAgICBhc3NlcnQoJ2luY29ycmVjdCcsIHsgaW5jb3JyZWN0OiB7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ0knIH0gfSwgJ0knKTtcbiAgICAgIGFzc2VydCgnaW5jb3JyZWN0JywgeyBpbmNvcnJlY3Q6IHsgdHlwZTogJ25vbmUnLCBkZWZhdWx0OiAnQycgfSB9LCB1bmRlZmluZWQpO1xuICAgICAgYXNzZXJ0KCdpbmNvcnJlY3QnLCB7IGluY29ycmVjdDogeyB0eXBlOiAnY3VzdG9tJywgY3VzdG9tOiAnQ3VzdG9tJyB9IH0sICdDdXN0b20nKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd1bmFuc3dlcmVkJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCd1bmFuc3dlcmVkJywge30sIGRlZmF1bHRzLnVuYW5zd2VyZWQuZGVmYXVsdCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndW5rbm93bicsICgpID0+IHtcbiAgICAgIGFzc2VydCgndW5rbm93bicsIHt9LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcnRpYWxseS1jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCdwYXJ0aWFsbHktY29ycmVjdCcsIHt9LCAnTmVhcmx5Jyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncGFydGlhbCcsICgpID0+IHtcbiAgICAgIGFzc2VydCgncGFydGlhbCcsIHt9LCAnTmVhcmx5Jyk7XG4gICAgICBhc3NlcnQoJ3BhcnRpYWwnLCB7IHBhcnRpYWw6IHsgdHlwZTogJ2RlZmF1bHQnIH0gfSwgJ05lYXJseScpO1xuICAgICAgYXNzZXJ0KCdwYXJ0aWFsJywgeyBwYXJ0aWFsOiB7IHR5cGU6ICdkZWZhdWx0JywgZGVmYXVsdDogJ0knIH0gfSwgJ0knKTtcbiAgICAgIGFzc2VydCgncGFydGlhbCcsIHsgcGFydGlhbDogeyB0eXBlOiAnbm9uZScsIGRlZmF1bHQ6ICdDJyB9IH0sIHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQoJ3BhcnRpYWwnLCB7IHBhcnRpYWw6IHsgdHlwZTogJ2N1c3RvbScsIGN1c3RvbTogJ0N1c3RvbScgfSB9LCAnQ3VzdG9tJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/lib/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.getFeedbackForCorrectness = exports.getFeedback = exports.defaults = void 0;
|
|
8
|
+
exports.getFeedbackForCorrectness = exports.getFeedback = exports.getActualFeedbackForCorrectness = exports.getActualFeedback = exports.defaults = void 0;
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
@@ -96,7 +96,42 @@ var getFeedback = function getFeedback(feedback, fallback) {
|
|
|
96
96
|
var out = feedback[feedback.type] || fallback;
|
|
97
97
|
resolve(out);
|
|
98
98
|
});
|
|
99
|
-
};
|
|
99
|
+
}; // TODO: should replace getFeedbackForCorrectness
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Get feedback for correctness
|
|
103
|
+
* @param {'correct'|'incorrect'|'partial'} correctness
|
|
104
|
+
* @param {Feedback} feedback
|
|
105
|
+
*/
|
|
106
|
+
|
|
100
107
|
|
|
101
108
|
exports.getFeedback = getFeedback;
|
|
102
|
-
|
|
109
|
+
|
|
110
|
+
var getActualFeedbackForCorrectness = function getActualFeedbackForCorrectness(correctness, feedback) {
|
|
111
|
+
feedback = _objectSpread(_objectSpread({}, defaults), feedback); // normalize correctness
|
|
112
|
+
|
|
113
|
+
correctness = correctness === 'partially-correct' ? 'partial' : correctness;
|
|
114
|
+
var defaultFeedback = defaults[correctness] || {};
|
|
115
|
+
var fb = feedback[correctness] || defaultFeedback;
|
|
116
|
+
return getActualFeedback(fb, defaultFeedback[fb.type || 'default']);
|
|
117
|
+
}; // TODO: should replace getFeedback
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Get the feedback from a {FeedbackConfig}
|
|
121
|
+
* @param {FeedbackConfig} feedback
|
|
122
|
+
* @param {string} fallback
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
exports.getActualFeedbackForCorrectness = getActualFeedbackForCorrectness;
|
|
127
|
+
|
|
128
|
+
var getActualFeedback = function getActualFeedback(feedback, fallback) {
|
|
129
|
+
if (!feedback || feedback.type === 'none') {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return feedback[feedback.type] || fallback;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
exports.getActualFeedback = getActualFeedback;
|
|
137
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0cyIsImNvcnJlY3QiLCJ0eXBlIiwiY3VzdG9tIiwiaW5jb3JyZWN0IiwicGFydGlhbCIsInVuYW5zd2VyZWQiLCJub3JtYWxpemVDb3JyZWN0bmVzcyIsImMiLCJnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzIiwiY29ycmVjdG5lc3MiLCJmZWVkYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwiZmIiLCJkIiwiZ2V0RmVlZGJhY2siLCJ0aGVuIiwicmVzdWx0IiwiZmFsbGJhY2siLCJ1bmRlZmluZWQiLCJvdXQiLCJnZXRBY3R1YWxGZWVkYmFja0ZvckNvcnJlY3RuZXNzIiwiZGVmYXVsdEZlZWRiYWNrIiwiZ2V0QWN0dWFsRmVlZGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLFFBQVEsR0FBRztBQUN0QkMsRUFBQUEsT0FBTyxFQUFFO0FBQUVDLElBQUFBLElBQUksRUFBRSxTQUFSO0FBQW1CLGVBQVMsU0FBNUI7QUFBdUNDLElBQUFBLE1BQU0sRUFBRTtBQUEvQyxHQURhO0FBRXRCQyxFQUFBQSxTQUFTLEVBQUU7QUFBRUYsSUFBQUEsSUFBSSxFQUFFLFNBQVI7QUFBbUIsZUFBUyxXQUE1QjtBQUF5Q0MsSUFBQUEsTUFBTSxFQUFFO0FBQWpELEdBRlc7QUFHdEJFLEVBQUFBLE9BQU8sRUFBRTtBQUFFSCxJQUFBQSxJQUFJLEVBQUUsU0FBUjtBQUFtQixlQUFTLFFBQTVCO0FBQXNDQyxJQUFBQSxNQUFNLEVBQUU7QUFBOUMsR0FIYTtBQUl0QkcsRUFBQUEsVUFBVSxFQUFFO0FBQ1ZKLElBQUFBLElBQUksRUFBRSxTQURJO0FBRVYsZUFBUyxpQ0FGQztBQUdWQyxJQUFBQSxNQUFNLEVBQUU7QUFIRTtBQUpVLENBQWpCO0FBV1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUVBLElBQU1JLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBdUIsQ0FBQ0MsQ0FBRCxFQUFPO0FBQ2xDLE1BQUlBLENBQUMsS0FBSyxtQkFBVixFQUErQjtBQUM3QixXQUFPLFNBQVA7QUFDRDs7QUFDRCxTQUFPQSxDQUFQO0FBQ0QsQ0FMRDtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sSUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDQyxXQUFELEVBQWNDLFFBQWQ7QUFBQSxTQUN2QyxJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFhO0FBQ3ZCRixJQUFBQSxRQUFRLG1DQUFRWCxRQUFSLEdBQXFCVyxRQUFyQixDQUFSO0FBQ0FELElBQUFBLFdBQVcsR0FBR0gsb0JBQW9CLENBQUNHLFdBQUQsQ0FBbEM7QUFDQSxRQUFNSSxFQUFFLEdBQUdILFFBQVEsQ0FBQ0QsV0FBRCxDQUFSLElBQXlCVixRQUFRLENBQUNVLFdBQUQsQ0FBakMsSUFBa0QsRUFBN0Q7QUFDQSxRQUFNSyxDQUFDLEdBQUdmLFFBQVEsQ0FBQ1UsV0FBRCxDQUFSLElBQXlCLEVBQW5DO0FBQ0FNLElBQUFBLFdBQVcsQ0FBQ0YsRUFBRCxFQUFLQyxDQUFDLENBQUNELEVBQUUsQ0FBQ1osSUFBSCxJQUFXLFNBQVosQ0FBTixDQUFYLENBQXlDZSxJQUF6QyxDQUE4QyxVQUFDQyxNQUFEO0FBQUEsYUFBWUwsT0FBTyxDQUFDSyxNQUFELENBQW5CO0FBQUEsS0FBOUM7QUFDRCxHQU5ELENBRHVDO0FBQUEsQ0FBbEM7QUFTUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUYsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0wsUUFBRCxFQUFXUSxRQUFYO0FBQUEsU0FDekIsSUFBSVAsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUN2QixRQUFJLENBQUNGLFFBQUQsSUFBYUEsUUFBUSxDQUFDVCxJQUFULEtBQWtCLE1BQW5DLEVBQTJDO0FBQ3pDVyxNQUFBQSxPQUFPLENBQUNPLFNBQUQsQ0FBUDtBQUNBO0FBQ0Q7O0FBQ0RULElBQUFBLFFBQVEsR0FBR0EsUUFBUSxJQUFJLEVBQXZCO0FBQ0EsUUFBTVUsR0FBRyxHQUFHVixRQUFRLENBQUNBLFFBQVEsQ0FBQ1QsSUFBVixDQUFSLElBQTJCaUIsUUFBdkM7QUFDQU4sSUFBQUEsT0FBTyxDQUFDUSxHQUFELENBQVA7QUFDRCxHQVJELENBRHlCO0FBQUEsQ0FBcEIsQyxDQVdQOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUMsK0JBQStCLEdBQUcsU0FBbENBLCtCQUFrQyxDQUFDWixXQUFELEVBQWNDLFFBQWQsRUFBMkI7QUFDeEVBLEVBQUFBLFFBQVEsbUNBQVFYLFFBQVIsR0FBcUJXLFFBQXJCLENBQVIsQ0FEd0UsQ0FHeEU7O0FBQ0FELEVBQUFBLFdBQVcsR0FBR0EsV0FBVyxLQUFLLG1CQUFoQixHQUFzQyxTQUF0QyxHQUFrREEsV0FBaEU7QUFFQSxNQUFNYSxlQUFlLEdBQUd2QixRQUFRLENBQUNVLFdBQUQsQ0FBUixJQUF5QixFQUFqRDtBQUNBLE1BQU1JLEVBQUUsR0FBR0gsUUFBUSxDQUFDRCxXQUFELENBQVIsSUFBeUJhLGVBQXBDO0FBRUEsU0FBT0MsaUJBQWlCLENBQUNWLEVBQUQsRUFBS1MsZUFBZSxDQUFDVCxFQUFFLENBQUNaLElBQUgsSUFBVyxTQUFaLENBQXBCLENBQXhCO0FBQ0QsQ0FWTSxDLENBWVA7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxJQUFNc0IsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDYixRQUFELEVBQVdRLFFBQVgsRUFBd0I7QUFDdkQsTUFBSSxDQUFDUixRQUFELElBQWFBLFFBQVEsQ0FBQ1QsSUFBVCxLQUFrQixNQUFuQyxFQUEyQztBQUN6QyxXQUFPa0IsU0FBUDtBQUNEOztBQUVELFNBQU9ULFFBQVEsQ0FBQ0EsUUFBUSxDQUFDVCxJQUFWLENBQVIsSUFBMkJpQixRQUFsQztBQUNELENBTk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZGVmYXVsdHMgPSB7XG4gIGNvcnJlY3Q6IHsgdHlwZTogJ2RlZmF1bHQnLCBkZWZhdWx0OiAnQ29ycmVjdCcsIGN1c3RvbTogJ0NvcnJlY3QnIH0sXG4gIGluY29ycmVjdDogeyB0eXBlOiAnZGVmYXVsdCcsIGRlZmF1bHQ6ICdJbmNvcnJlY3QnLCBjdXN0b206ICdJbmNvcnJlY3QnIH0sXG4gIHBhcnRpYWw6IHsgdHlwZTogJ2RlZmF1bHQnLCBkZWZhdWx0OiAnTmVhcmx5JywgY3VzdG9tOiAnTmVhcmx5JyB9LFxuICB1bmFuc3dlcmVkOiB7XG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIGRlZmF1bHQ6ICdZb3UgaGF2ZSBub3QgZW50ZXJlZCBhIHJlc3BvbnNlJyxcbiAgICBjdXN0b206ICdZb3UgaGF2ZSBub3QgZW50ZXJlZCBhIHJlc3BvbnNlJyxcbiAgfSxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRmVlZGJhY2tDb25maWdcbiAqIEBwcm9wZXJ0eSB7J2RlZmF1bHQnfCdub25lJ3wnY3VzdG9tJ30gdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjdXN0b21cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWVkYmFja1xuICogIEBwcm9wZXJ0eSB7RmVlZGJhY2tDb25maWd9IGNvcnJlY3RcbiAqICBAcHJvcGVydHkge0ZlZWRiYWNrQ29uZmlnfSBpbmNvcnJlY3RcbiAqICBAcHJvcGVydHkge0ZlZWRiYWNrQ29uZmlnfSBwYXJ0aWFsXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplQ29ycmVjdG5lc3MgPSAoYykgPT4ge1xuICBpZiAoYyA9PT0gJ3BhcnRpYWxseS1jb3JyZWN0Jykge1xuICAgIHJldHVybiAncGFydGlhbCc7XG4gIH1cbiAgcmV0dXJuIGM7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgZmVlZGJhY2sgZm9yIHRoZSBjb3JyZWN0bmVzc1xuICpcbiAqIEBwYXJhbSB7J2NvcnJlY3QnfCdpbmNvcnJlY3QnfCdwYXJ0aWFsJ30gY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7RmVlZGJhY2t9IGZlZWRiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzID0gKGNvcnJlY3RuZXNzLCBmZWVkYmFjaykgPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBmZWVkYmFjayA9IHsgLi4uZGVmYXVsdHMsIC4uLmZlZWRiYWNrIH07XG4gICAgY29ycmVjdG5lc3MgPSBub3JtYWxpemVDb3JyZWN0bmVzcyhjb3JyZWN0bmVzcyk7XG4gICAgY29uc3QgZmIgPSBmZWVkYmFja1tjb3JyZWN0bmVzc10gfHwgZGVmYXVsdHNbY29ycmVjdG5lc3NdIHx8IHt9O1xuICAgIGNvbnN0IGQgPSBkZWZhdWx0c1tjb3JyZWN0bmVzc10gfHwge307XG4gICAgZ2V0RmVlZGJhY2soZmIsIGRbZmIudHlwZSB8fCAnZGVmYXVsdCddKS50aGVuKChyZXN1bHQpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gIH0pO1xuXG4vKipcbiAqIEdldCB0aGUgZmVlZGJhY2sgZnJvbSBhIHtGZWVkYmFja0NvbmZpZ31cbiAqXG4gKiBAcGFyYW0ge0ZlZWRiYWNrQ29uZmlnfSBmZWVkYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGZhbGxiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGZWVkYmFjayA9IChmZWVkYmFjaywgZmFsbGJhY2spID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFmZWVkYmFjayB8fCBmZWVkYmFjay50eXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmVlZGJhY2sgPSBmZWVkYmFjayB8fCB7fTtcbiAgICBjb25zdCBvdXQgPSBmZWVkYmFja1tmZWVkYmFjay50eXBlXSB8fCBmYWxsYmFjaztcbiAgICByZXNvbHZlKG91dCk7XG4gIH0pO1xuXG4vLyBUT0RPOiBzaG91bGQgcmVwbGFjZSBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzXG4vKipcbiAqIEdldCBmZWVkYmFjayBmb3IgY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7J2NvcnJlY3QnfCdpbmNvcnJlY3QnfCdwYXJ0aWFsJ30gY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7RmVlZGJhY2t9IGZlZWRiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBY3R1YWxGZWVkYmFja0ZvckNvcnJlY3RuZXNzID0gKGNvcnJlY3RuZXNzLCBmZWVkYmFjaykgPT4ge1xuICBmZWVkYmFjayA9IHsgLi4uZGVmYXVsdHMsIC4uLmZlZWRiYWNrIH07XG5cbiAgLy8gbm9ybWFsaXplIGNvcnJlY3RuZXNzXG4gIGNvcnJlY3RuZXNzID0gY29ycmVjdG5lc3MgPT09ICdwYXJ0aWFsbHktY29ycmVjdCcgPyAncGFydGlhbCcgOiBjb3JyZWN0bmVzcztcblxuICBjb25zdCBkZWZhdWx0RmVlZGJhY2sgPSBkZWZhdWx0c1tjb3JyZWN0bmVzc10gfHwge307XG4gIGNvbnN0IGZiID0gZmVlZGJhY2tbY29ycmVjdG5lc3NdIHx8IGRlZmF1bHRGZWVkYmFjaztcblxuICByZXR1cm4gZ2V0QWN0dWFsRmVlZGJhY2soZmIsIGRlZmF1bHRGZWVkYmFja1tmYi50eXBlIHx8ICdkZWZhdWx0J10pO1xufTtcblxuLy8gVE9ETzogc2hvdWxkIHJlcGxhY2UgZ2V0RmVlZGJhY2tcbi8qKlxuICogR2V0IHRoZSBmZWVkYmFjayBmcm9tIGEge0ZlZWRiYWNrQ29uZmlnfVxuICogQHBhcmFtIHtGZWVkYmFja0NvbmZpZ30gZmVlZGJhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBmYWxsYmFja1xuICovXG5leHBvcnQgY29uc3QgZ2V0QWN0dWFsRmVlZGJhY2sgPSAoZmVlZGJhY2ssIGZhbGxiYWNrKSA9PiB7XG4gIGlmICghZmVlZGJhY2sgfHwgZmVlZGJhY2sudHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmZWVkYmFja1tmZWVkYmFjay50eXBlXSB8fCBmYWxsYmFjaztcbn07XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/feedback",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-beta.0",
|
|
4
4
|
"description": "Feedback utilities",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
"scripts": {},
|
|
11
11
|
"author": "",
|
|
12
12
|
"license": "ISC",
|
|
13
|
-
"gitHead": "
|
|
13
|
+
"gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a"
|
|
14
14
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { getFeedbackForCorrectness, getFeedback, defaults } from '../index';
|
|
2
|
+
describe('feedback', () => {
|
|
3
|
+
describe('getFeedback', () => {
|
|
4
|
+
const assert = (config, fallback, expected) => {
|
|
5
|
+
it(`${JSON.stringify(config)} -> ${expected}`, async () => {
|
|
6
|
+
const result = await getFeedback(config, fallback);
|
|
7
|
+
expect(result).toEqual(expected);
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
assert({ type: 'none' }, 'foo', undefined);
|
|
12
|
+
assert({ type: 'default' }, 'foo', 'foo');
|
|
13
|
+
assert({ type: 'default', default: 'bar' }, 'foo', 'bar');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
describe('getFeedbackForCorrectness', () => {
|
|
17
|
+
const assert = (correctness, config, expected) => {
|
|
18
|
+
it(`${correctness} + ${JSON.stringify(config)} -> ${expected}`, async () => {
|
|
19
|
+
const result = await getFeedbackForCorrectness(correctness, config);
|
|
20
|
+
expect(result).toEqual(expected);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
describe('correct', () => {
|
|
25
|
+
assert('correct', null, 'Correct');
|
|
26
|
+
assert('correct', {}, 'Correct');
|
|
27
|
+
assert('correct', { correct: { type: 'default' } }, 'Correct');
|
|
28
|
+
assert('correct', { correct: { type: 'default', default: 'C' } }, 'C');
|
|
29
|
+
assert('correct', { correct: { type: 'none', default: 'C' } }, undefined);
|
|
30
|
+
assert('correct', { correct: { type: 'custom', custom: 'Custom' } }, 'Custom');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe('incorrect', () => {
|
|
34
|
+
assert('incorrect', {}, 'Incorrect');
|
|
35
|
+
assert('incorrect', { incorrect: { type: 'default' } }, 'Incorrect');
|
|
36
|
+
assert('incorrect', { incorrect: { type: 'default', default: 'I' } }, 'I');
|
|
37
|
+
assert('incorrect', { incorrect: { type: 'none', default: 'C' } }, undefined);
|
|
38
|
+
assert('incorrect', { incorrect: { type: 'custom', custom: 'Custom' } }, 'Custom');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('unanswered', () => {
|
|
42
|
+
assert('unanswered', {}, defaults.unanswered.default);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('unknown', () => {
|
|
46
|
+
assert('unknown', {}, undefined);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('partially-correct', () => {
|
|
50
|
+
assert('partially-correct', {}, 'Nearly');
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
describe('partial', () => {
|
|
54
|
+
assert('partial', {}, 'Nearly');
|
|
55
|
+
assert('partial', { partial: { type: 'default' } }, 'Nearly');
|
|
56
|
+
assert('partial', { partial: { type: 'default', default: 'I' } }, 'I');
|
|
57
|
+
assert('partial', { partial: { type: 'none', default: 'C' } }, undefined);
|
|
58
|
+
assert('partial', { partial: { type: 'custom', custom: 'Custom' } }, 'Custom');
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
package/src/index.js
CHANGED
|
@@ -59,3 +59,35 @@ export const getFeedback = (feedback, fallback) =>
|
|
|
59
59
|
const out = feedback[feedback.type] || fallback;
|
|
60
60
|
resolve(out);
|
|
61
61
|
});
|
|
62
|
+
|
|
63
|
+
// TODO: should replace getFeedbackForCorrectness
|
|
64
|
+
/**
|
|
65
|
+
* Get feedback for correctness
|
|
66
|
+
* @param {'correct'|'incorrect'|'partial'} correctness
|
|
67
|
+
* @param {Feedback} feedback
|
|
68
|
+
*/
|
|
69
|
+
export const getActualFeedbackForCorrectness = (correctness, feedback) => {
|
|
70
|
+
feedback = { ...defaults, ...feedback };
|
|
71
|
+
|
|
72
|
+
// normalize correctness
|
|
73
|
+
correctness = correctness === 'partially-correct' ? 'partial' : correctness;
|
|
74
|
+
|
|
75
|
+
const defaultFeedback = defaults[correctness] || {};
|
|
76
|
+
const fb = feedback[correctness] || defaultFeedback;
|
|
77
|
+
|
|
78
|
+
return getActualFeedback(fb, defaultFeedback[fb.type || 'default']);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// TODO: should replace getFeedback
|
|
82
|
+
/**
|
|
83
|
+
* Get the feedback from a {FeedbackConfig}
|
|
84
|
+
* @param {FeedbackConfig} feedback
|
|
85
|
+
* @param {string} fallback
|
|
86
|
+
*/
|
|
87
|
+
export const getActualFeedback = (feedback, fallback) => {
|
|
88
|
+
if (!feedback || feedback.type === 'none') {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return feedback[feedback.type] || fallback;
|
|
93
|
+
};
|
package/.travis.yml
DELETED
package/README.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# feedback
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["defaults","correct","type","custom","incorrect","partial","unanswered","normalizeCorrectness","c","getFeedbackForCorrectness","correctness","feedback","Promise","resolve","fb","d","getFeedback","then","result","fallback","undefined","out"],"mappings":";;;;;;;;;;;;;;;AAAO,IAAMA,QAAQ,GAAG;AACtBC,EAAAA,OAAO,EAAE;AAAEC,IAAAA,IAAI,EAAE,SAAR;AAAmB,eAAS,SAA5B;AAAuCC,IAAAA,MAAM,EAAE;AAA/C,GADa;AAEtBC,EAAAA,SAAS,EAAE;AAAEF,IAAAA,IAAI,EAAE,SAAR;AAAmB,eAAS,WAA5B;AAAyCC,IAAAA,MAAM,EAAE;AAAjD,GAFW;AAGtBE,EAAAA,OAAO,EAAE;AAAEH,IAAAA,IAAI,EAAE,SAAR;AAAmB,eAAS,QAA5B;AAAsCC,IAAAA,MAAM,EAAE;AAA9C,GAHa;AAItBG,EAAAA,UAAU,EAAE;AACVJ,IAAAA,IAAI,EAAE,SADI;AAEV,eAAS,iCAFC;AAGVC,IAAAA,MAAM,EAAE;AAHE;AAJU,CAAjB;AAWP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA,IAAMI,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,CAAD,EAAO;AAClC,MAAIA,CAAC,KAAK,mBAAV,EAA+B;AAC7B,WAAO,SAAP;AACD;;AACD,SAAOA,CAAP;AACD,CALD;AAOA;AACA;AACA;AACA;AACA;AACA;;;AACO,IAAMC,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,WAAD,EAAcC,QAAd;AAAA,SACvC,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvBF,IAAAA,QAAQ,mCAAQX,QAAR,GAAqBW,QAArB,CAAR;AACAD,IAAAA,WAAW,GAAGH,oBAAoB,CAACG,WAAD,CAAlC;AACA,QAAMI,EAAE,GAAGH,QAAQ,CAACD,WAAD,CAAR,IAAyBV,QAAQ,CAACU,WAAD,CAAjC,IAAkD,EAA7D;AACA,QAAMK,CAAC,GAAGf,QAAQ,CAACU,WAAD,CAAR,IAAyB,EAAnC;AACAM,IAAAA,WAAW,CAACF,EAAD,EAAKC,CAAC,CAACD,EAAE,CAACZ,IAAH,IAAW,SAAZ,CAAN,CAAX,CAAyCe,IAAzC,CAA8C,UAACC,MAAD;AAAA,aAAYL,OAAO,CAACK,MAAD,CAAnB;AAAA,KAA9C;AACD,GAND,CADuC;AAAA,CAAlC;AASP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,IAAMF,WAAW,GAAG,SAAdA,WAAc,CAACL,QAAD,EAAWQ,QAAX;AAAA,SACzB,IAAIP,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvB,QAAI,CAACF,QAAD,IAAaA,QAAQ,CAACT,IAAT,KAAkB,MAAnC,EAA2C;AACzCW,MAAAA,OAAO,CAACO,SAAD,CAAP;AACA;AACD;;AACDT,IAAAA,QAAQ,GAAGA,QAAQ,IAAI,EAAvB;AACA,QAAMU,GAAG,GAAGV,QAAQ,CAACA,QAAQ,CAACT,IAAV,CAAR,IAA2BiB,QAAvC;AACAN,IAAAA,OAAO,CAACQ,GAAD,CAAP;AACD,GARD,CADyB;AAAA,CAApB","sourcesContent":["export const defaults = {\n correct: { type: 'default', default: 'Correct', custom: 'Correct' },\n incorrect: { type: 'default', default: 'Incorrect', custom: 'Incorrect' },\n partial: { type: 'default', default: 'Nearly', custom: 'Nearly' },\n unanswered: {\n type: 'default',\n default: 'You have not entered a response',\n custom: 'You have not entered a response',\n },\n};\n\n/**\n * @typedef {Object} FeedbackConfig\n * @property {'default'|'none'|'custom'} type\n * @property {string} default\n * @property {string} custom\n *\n * @typedef {Object} Feedback\n * @property {FeedbackConfig} correct\n * @property {FeedbackConfig} incorrect\n * @property {FeedbackConfig} partial\n */\n\nconst normalizeCorrectness = (c) => {\n if (c === 'partially-correct') {\n return 'partial';\n }\n return c;\n};\n\n/**\n * Get the feedback for the correctness\n *\n * @param {'correct'|'incorrect'|'partial'} correctness\n * @param {Feedback} feedback\n */\nexport const getFeedbackForCorrectness = (correctness, feedback) =>\n new Promise((resolve) => {\n feedback = { ...defaults, ...feedback };\n correctness = normalizeCorrectness(correctness);\n const fb = feedback[correctness] || defaults[correctness] || {};\n const d = defaults[correctness] || {};\n getFeedback(fb, d[fb.type || 'default']).then((result) => resolve(result));\n });\n\n/**\n * Get the feedback from a {FeedbackConfig}\n *\n * @param {FeedbackConfig} feedback\n * @param {string} fallback\n */\nexport const getFeedback = (feedback, fallback) =>\n new Promise((resolve) => {\n if (!feedback || feedback.type === 'none') {\n resolve(undefined);\n return;\n }\n feedback = feedback || {};\n const out = feedback[feedback.type] || fallback;\n resolve(out);\n });\n"],"file":"index.js"}
|