@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 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
- //# sourceMappingURL=index.js.map
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0cyIsImNvcnJlY3QiLCJ0eXBlIiwiY3VzdG9tIiwiaW5jb3JyZWN0IiwicGFydGlhbCIsInVuYW5zd2VyZWQiLCJub3JtYWxpemVDb3JyZWN0bmVzcyIsImMiLCJnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzIiwiY29ycmVjdG5lc3MiLCJmZWVkYmFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwiZmIiLCJkIiwiZ2V0RmVlZGJhY2siLCJ0aGVuIiwicmVzdWx0IiwiZmFsbGJhY2siLCJ1bmRlZmluZWQiLCJvdXQiLCJnZXRBY3R1YWxGZWVkYmFja0ZvckNvcnJlY3RuZXNzIiwiZGVmYXVsdEZlZWRiYWNrIiwiZ2V0QWN0dWFsRmVlZGJhY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFPLElBQU1BLFFBQVEsR0FBRztBQUN0QkMsRUFBQUEsT0FBTyxFQUFFO0FBQUVDLElBQUFBLElBQUksRUFBRSxTQUFSO0FBQW1CLGVBQVMsU0FBNUI7QUFBdUNDLElBQUFBLE1BQU0sRUFBRTtBQUEvQyxHQURhO0FBRXRCQyxFQUFBQSxTQUFTLEVBQUU7QUFBRUYsSUFBQUEsSUFBSSxFQUFFLFNBQVI7QUFBbUIsZUFBUyxXQUE1QjtBQUF5Q0MsSUFBQUEsTUFBTSxFQUFFO0FBQWpELEdBRlc7QUFHdEJFLEVBQUFBLE9BQU8sRUFBRTtBQUFFSCxJQUFBQSxJQUFJLEVBQUUsU0FBUjtBQUFtQixlQUFTLFFBQTVCO0FBQXNDQyxJQUFBQSxNQUFNLEVBQUU7QUFBOUMsR0FIYTtBQUl0QkcsRUFBQUEsVUFBVSxFQUFFO0FBQ1ZKLElBQUFBLElBQUksRUFBRSxTQURJO0FBRVYsZUFBUyxpQ0FGQztBQUdWQyxJQUFBQSxNQUFNLEVBQUU7QUFIRTtBQUpVLENBQWpCO0FBV1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUVBLElBQU1JLG9CQUFvQixHQUFH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PSB7XG4gIGNvcnJlY3Q6IHsgdHlwZTogJ2RlZmF1bHQnLCBkZWZhdWx0OiAnQ29ycmVjdCcsIGN1c3RvbTogJ0NvcnJlY3QnIH0sXG4gIGluY29ycmVjdDogeyB0eXBlOiAnZGVmYXVsdCcsIGRlZmF1bHQ6ICdJbmNvcnJlY3QnLCBjdXN0b206ICdJbmNvcnJlY3QnIH0sXG4gIHBhcnRpYWw6IHsgdHlwZTogJ2RlZmF1bHQnLCBkZWZhdWx0OiAnTmVhcmx5JywgY3VzdG9tOiAnTmVhcmx5JyB9LFxuICB1bmFuc3dlcmVkOiB7XG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIGRlZmF1bHQ6ICdZb3UgaGF2ZSBub3QgZW50ZXJlZCBhIHJlc3BvbnNlJyxcbiAgICBjdXN0b206ICdZb3UgaGF2ZSBub3QgZW50ZXJlZCBhIHJlc3BvbnNlJyxcbiAgfSxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRmVlZGJhY2tDb25maWdcbiAqIEBwcm9wZXJ0eSB7J2RlZmF1bHQnfCdub25lJ3wnY3VzdG9tJ30gdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjdXN0b21cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWVkYmFja1xuICogIEBwcm9wZXJ0eSB7RmVlZGJhY2tDb25maWd9IGNvcnJlY3RcbiAqICBAcHJvcGVydHkge0ZlZWRiYWNrQ29uZmlnfSBpbmNvcnJlY3RcbiAqICBAcHJvcGVydHkge0ZlZWRiYWNrQ29uZmlnfSBwYXJ0aWFsXG4gKi9cblxuY29uc3Qgbm9ybWFsaXplQ29ycmVjdG5lc3MgPSAoYykgPT4ge1xuICBpZiAoYyA9PT0gJ3BhcnRpYWxseS1jb3JyZWN0Jykge1xuICAgIHJldHVybiAncGFydGlhbCc7XG4gIH1cbiAgcmV0dXJuIGM7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgZmVlZGJhY2sgZm9yIHRoZSBjb3JyZWN0bmVzc1xuICpcbiAqIEBwYXJhbSB7J2NvcnJlY3QnfCdpbmNvcnJlY3QnfCdwYXJ0aWFsJ30gY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7RmVlZGJhY2t9IGZlZWRiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzID0gKGNvcnJlY3RuZXNzLCBmZWVkYmFjaykgPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBmZWVkYmFjayA9IHsgLi4uZGVmYXVsdHMsIC4uLmZlZWRiYWNrIH07XG4gICAgY29ycmVjdG5lc3MgPSBub3JtYWxpemVDb3JyZWN0bmVzcyhjb3JyZWN0bmVzcyk7XG4gICAgY29uc3QgZmIgPSBmZWVkYmFja1tjb3JyZWN0bmVzc10gfHwgZGVmYXVsdHNbY29ycmVjdG5lc3NdIHx8IHt9O1xuICAgIGNvbnN0IGQgPSBkZWZhdWx0c1tjb3JyZWN0bmVzc10gfHwge307XG4gICAgZ2V0RmVlZGJhY2soZmIsIGRbZmIudHlwZSB8fCAnZGVmYXVsdCddKS50aGVuKChyZXN1bHQpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gIH0pO1xuXG4vKipcbiAqIEdldCB0aGUgZmVlZGJhY2sgZnJvbSBhIHtGZWVkYmFja0NvbmZpZ31cbiAqXG4gKiBAcGFyYW0ge0ZlZWRiYWNrQ29uZmlnfSBmZWVkYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGZhbGxiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGZWVkYmFjayA9IChmZWVkYmFjaywgZmFsbGJhY2spID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFmZWVkYmFjayB8fCBmZWVkYmFjay50eXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmVlZGJhY2sgPSBmZWVkYmFjayB8fCB7fTtcbiAgICBjb25zdCBvdXQgPSBmZWVkYmFja1tmZWVkYmFjay50eXBlXSB8fCBmYWxsYmFjaztcbiAgICByZXNvbHZlKG91dCk7XG4gIH0pO1xuXG4vLyBUT0RPOiBzaG91bGQgcmVwbGFjZSBnZXRGZWVkYmFja0ZvckNvcnJlY3RuZXNzXG4vKipcbiAqIEdldCBmZWVkYmFjayBmb3IgY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7J2NvcnJlY3QnfCdpbmNvcnJlY3QnfCdwYXJ0aWFsJ30gY29ycmVjdG5lc3NcbiAqIEBwYXJhbSB7RmVlZGJhY2t9IGZlZWRiYWNrXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBY3R1YWxGZWVkYmFja0ZvckNvcnJlY3RuZXNzID0gKGNvcnJlY3RuZXNzLCBmZWVkYmFjaykgPT4ge1xuICBmZWVkYmFjayA9IHsgLi4uZGVmYXVsdHMsIC4uLmZlZWRiYWNrIH07XG5cbiAgLy8gbm9ybWFsaXplIGNvcnJlY3RuZXNzXG4gIGNvcnJlY3RuZXNzID0gY29ycmVjdG5lc3MgPT09ICdwYXJ0aWFsbHktY29ycmVjdCcgPyAncGFydGlhbCcgOiBjb3JyZWN0bmVzcztcblxuICBjb25zdCBkZWZhdWx0RmVlZGJhY2sgPSBkZWZhdWx0c1tjb3JyZWN0bmVzc10gfHwge307XG4gIGNvbnN0IGZiID0gZmVlZGJhY2tbY29ycmVjdG5lc3NdIHx8IGRlZmF1bHRGZWVkYmFjaztcblxuICByZXR1cm4gZ2V0QWN0dWFsRmVlZGJhY2soZmIsIGRlZmF1bHRGZWVkYmFja1tmYi50eXBlIHx8ICdkZWZhdWx0J10pO1xufTtcblxuLy8gVE9ETzogc2hvdWxkIHJlcGxhY2UgZ2V0RmVlZGJhY2tcbi8qKlxuICogR2V0IHRoZSBmZWVkYmFjayBmcm9tIGEge0ZlZWRiYWNrQ29uZmlnfVxuICogQHBhcmFtIHtGZWVkYmFja0NvbmZpZ30gZmVlZGJhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBmYWxsYmFja1xuICovXG5leHBvcnQgY29uc3QgZ2V0QWN0dWFsRmVlZGJhY2sgPSAoZmVlZGJhY2ssIGZhbGxiYWNrKSA9PiB7XG4gIGlmICghZmVlZGJhY2sgfHwgZmVlZGJhY2sudHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmZWVkYmFja1tmZWVkYmFjay50eXBlXSB8fCBmYWxsYmFjaztcbn07XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/feedback",
3
- "version": "0.4.43",
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": "4043c98430c000ce3a25357d92845175b076ea21"
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
@@ -1,7 +0,0 @@
1
- language: node_js
2
- node_js:
3
- - "6"
4
- branches:
5
- only:
6
- - master
7
- - develop
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"}