@pie-element/match-list 5.0.1 → 11.0.3-esm.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-list-controller",
3
3
  "private": true,
4
- "version": "4.0.2",
4
+ "version": "11.0.3-esm.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -9,8 +9,8 @@
9
9
  "test": "./node_modules/.bin/jest"
10
10
  },
11
11
  "dependencies": {
12
- "@pie-lib/controller-utils": "^0.19.0",
13
- "@pie-lib/feedback": "^0.21.0",
12
+ "@pie-lib/controller-utils": "^0.19.2",
13
+ "@pie-lib/feedback": "^0.21.2",
14
14
  "debug": "^3.1.0",
15
15
  "lodash": "^4.17.15"
16
16
  },
package/esm/controller.js CHANGED
@@ -3,55 +3,22 @@ import { getFeedbackForCorrectness } from '@pie-lib/feedback';
3
3
  import { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';
4
4
  import debug from 'debug';
5
5
 
6
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
7
- try {
8
- var info = gen[key](arg);
9
- var value = info.value;
10
- } catch (error) {
11
- reject(error);
12
- return;
13
- }
14
-
15
- if (info.done) {
16
- resolve(value);
17
- } else {
18
- Promise.resolve(value).then(_next, _throw);
19
- }
20
- }
21
-
22
- function _asyncToGenerator(fn) {
23
- return function () {
24
- var self = this,
25
- args = arguments;
26
- return new Promise(function (resolve, reject) {
27
- var gen = fn.apply(self, args);
28
-
29
- function _next(value) {
30
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
31
- }
32
-
33
- function _throw(err) {
34
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
6
+ function _extends() {
7
+ _extends = Object.assign || function (target) {
8
+ for (var i = 1; i < arguments.length; i++) {
9
+ var source = arguments[i];
10
+
11
+ for (var key in source) {
12
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
13
+ target[key] = source[key];
14
+ }
35
15
  }
16
+ }
36
17
 
37
- _next(undefined);
38
- });
18
+ return target;
39
19
  };
40
- }
41
20
 
42
- function _defineProperty(obj, key, value) {
43
- if (key in obj) {
44
- Object.defineProperty(obj, key, {
45
- value: value,
46
- enumerable: true,
47
- configurable: true,
48
- writable: true
49
- });
50
- } else {
51
- obj[key] = value;
52
- }
53
-
54
- return obj;
21
+ return _extends.apply(this, arguments);
55
22
  }
56
23
 
57
24
  var defaults = {
@@ -63,21 +30,18 @@ var defaults = {
63
30
  }
64
31
  };
65
32
 
66
- 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; }
67
-
68
- 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) { _defineProperty(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; }
69
- var log = debug('@pie-element:match-list:controller');
33
+ const log = debug('@pie-element:match-list:controller');
70
34
 
71
- var getResponseCorrectness = (model, answers, env) => {
72
- var isPartialScoring = partialScoring.enabled(model, env);
73
- var prompts = model.prompts;
35
+ const getResponseCorrectness = (model, answers, env) => {
36
+ const isPartialScoring = partialScoring.enabled(model, env);
37
+ const prompts = model.prompts;
74
38
 
75
39
  if (!answers || Object.keys(answers).length === 0) {
76
40
  return 'unanswered';
77
41
  }
78
42
 
79
- var totalCorrectAnswers = getTotalCorrect(model);
80
- var correctAnswers = getCorrectSelected(prompts, answers);
43
+ const totalCorrectAnswers = getTotalCorrect(model);
44
+ const correctAnswers = getCorrectSelected(prompts, answers);
81
45
 
82
46
  if (totalCorrectAnswers === correctAnswers) {
83
47
  return 'correct';
@@ -90,16 +54,14 @@ var getResponseCorrectness = (model, answers, env) => {
90
54
  return 'incorrect';
91
55
  };
92
56
 
93
- var getCorrectness = (question, env, answers) => {
57
+ const getCorrectness = (question, env, answers) => {
94
58
  if (env.mode === 'evaluate') {
95
59
  return getResponseCorrectness(question, answers, env);
96
60
  }
97
61
  };
98
62
 
99
- var getCorrectSelected = function getCorrectSelected() {
100
- var prompts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
101
- var answers = arguments.length > 1 ? arguments[1] : undefined;
102
- var correctAnswers = 0;
63
+ const getCorrectSelected = (prompts = [], answers) => {
64
+ let correctAnswers = 0;
103
65
  prompts.forEach(p => {
104
66
  if (p.relatedAnswer === answers[p.id]) {
105
67
  correctAnswers += 1;
@@ -108,22 +70,22 @@ var getCorrectSelected = function getCorrectSelected() {
108
70
  return correctAnswers;
109
71
  };
110
72
 
111
- var getTotalCorrect = question => {
73
+ const getTotalCorrect = question => {
112
74
  return question && question.prompts ? question.prompts.length : 0;
113
75
  };
114
76
 
115
- var getPartialScore = (question, answers) => {
116
- var count = getCorrectSelected(question && question.prompts, answers);
117
- var totalCorrect = getTotalCorrect(question);
77
+ const getPartialScore = (question, answers) => {
78
+ const count = getCorrectSelected(question && question.prompts, answers);
79
+ const totalCorrect = getTotalCorrect(question);
118
80
  return parseFloat((count / totalCorrect).toFixed(2));
119
81
  };
120
82
 
121
- var getOutComeScore = (question, env, answers) => {
122
- var correctness = getCorrectness(question, env, answers);
83
+ const getOutComeScore = (question, env, answers) => {
84
+ const correctness = getCorrectness(question, env, answers);
123
85
  return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;
124
86
  };
125
87
 
126
- var outcome = (question, session, env) => {
88
+ const outcome = (question, session, env) => {
127
89
  return new Promise(resolve => {
128
90
  if (env.mode !== 'evaluate') {
129
91
  resolve({
@@ -137,7 +99,7 @@ var outcome = (question, session, env) => {
137
99
  empty: true
138
100
  });
139
101
  } else {
140
- var out = {
102
+ const out = {
141
103
  score: getOutComeScore(question, env, session.value)
142
104
  };
143
105
  resolve(out);
@@ -145,13 +107,12 @@ var outcome = (question, session, env) => {
145
107
  }
146
108
  });
147
109
  };
148
- function createDefaultModel() {
149
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
110
+ function createDefaultModel(model = {}) {
150
111
  return new Promise(resolve => {
151
- resolve(_objectSpread(_objectSpread({}, defaults), model));
112
+ resolve(_extends({}, defaults, model));
152
113
  });
153
114
  }
154
- var normalize = model => _objectSpread(_objectSpread({}, defaults), model);
115
+ const normalize = model => _extends({}, defaults, model);
155
116
  /**
156
117
  *
157
118
  * @param {*} question
@@ -161,94 +122,88 @@ var normalize = model => _objectSpread(_objectSpread({}, defaults), model);
161
122
  */
162
123
 
163
124
  function model(question, session, env, updateSession) {
164
- return new Promise( /*#__PURE__*/function () {
165
- var _ref = _asyncToGenerator(function* (resolve) {
166
- question = normalize(question);
167
- var correctness = getCorrectness(question, env, session && session.value);
168
- var correctResponse = {};
169
- var score = "".concat(getOutComeScore(question, env, session && session.value) * 100, "%");
170
- var correctInfo = {
171
- score,
172
- correctness
173
- };
174
- var shuffledValues = {};
175
- var prompts = question.prompts;
176
- var answers = question.answers;
177
-
178
- var us = part => (id, element, update) => {
179
- return new Promise(resolve => {
180
- shuffledValues[part] = update.shuffledValues;
181
- resolve();
182
- });
183
- };
184
-
185
- var lockChoiceOrder = lockChoices(question, session, env);
125
+ return new Promise(async resolve => {
126
+ question = normalize(question);
127
+ const correctness = getCorrectness(question, env, session && session.value);
128
+ const correctResponse = {};
129
+ const score = `${getOutComeScore(question, env, session && session.value) * 100}%`;
130
+ const correctInfo = {
131
+ score,
132
+ correctness
133
+ };
134
+ const shuffledValues = {};
135
+ let prompts = question.prompts;
136
+ let answers = question.answers;
137
+
138
+ const us = part => (id, element, update) => {
139
+ return new Promise(resolve => {
140
+ shuffledValues[part] = update.shuffledValues;
141
+ resolve();
142
+ });
143
+ };
186
144
 
187
- if (!lockChoiceOrder) {
188
- prompts = yield getShuffledChoices(prompts, {
189
- shuffledValues: (session && session.shuffledValues || {}).prompts
190
- }, us('prompts'), 'id');
191
- answers = yield getShuffledChoices(answers, {
192
- shuffledValues: (session && session.shuffledValues || {}).answers
193
- }, us('answers'), 'id');
194
- }
145
+ const lockChoiceOrder = lockChoices(question, session, env);
195
146
 
196
- if (!isEmpty(shuffledValues)) {
197
- if (updateSession && typeof updateSession === 'function') {
198
- updateSession(session.id, session.element, {
199
- shuffledValues
200
- }).catch(e => {
201
- // eslint-disable-next-line no-console
202
- console.error('update session failed', e);
203
- });
204
- }
205
- }
147
+ if (!lockChoiceOrder) {
148
+ prompts = await getShuffledChoices(prompts, {
149
+ shuffledValues: (session && session.shuffledValues || {}).prompts
150
+ }, us('prompts'), 'id');
151
+ answers = await getShuffledChoices(answers, {
152
+ shuffledValues: (session && session.shuffledValues || {}).answers
153
+ }, us('answers'), 'id');
154
+ }
206
155
 
207
- if (question && prompts) {
208
- prompts.forEach(prompt => {
209
- correctResponse[prompt.id] = prompt.relatedAnswer;
156
+ if (!isEmpty(shuffledValues)) {
157
+ if (updateSession && typeof updateSession === 'function') {
158
+ updateSession(session.id, session.element, {
159
+ shuffledValues
160
+ }).catch(e => {
161
+ // eslint-disable-next-line no-console
162
+ console.error('update session failed', e);
210
163
  });
211
164
  }
165
+ }
212
166
 
213
- var fb = env.mode === 'evaluate' ? getFeedbackForCorrectness(correctInfo.correctness, question.feedback) : Promise.resolve(undefined);
214
- fb.then(feedback => {
215
- var base = {
216
- config: _objectSpread(_objectSpread({}, question), {}, {
217
- prompts,
218
- answers
219
- }),
220
- correctness: correctInfo,
221
- feedback,
222
- mode: env.mode
223
- };
167
+ if (question && prompts) {
168
+ prompts.forEach(prompt => {
169
+ correctResponse[prompt.id] = prompt.relatedAnswer;
170
+ });
171
+ }
224
172
 
225
- if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
226
- base.rationale = question.rationale;
227
- } else {
228
- base.rationale = null;
229
- }
173
+ const fb = env.mode === 'evaluate' ? getFeedbackForCorrectness(correctInfo.correctness, question.feedback) : Promise.resolve(undefined);
174
+ fb.then(feedback => {
175
+ const base = {
176
+ config: _extends({}, question, {
177
+ prompts,
178
+ answers
179
+ }),
180
+ correctness: correctInfo,
181
+ feedback,
182
+ mode: env.mode
183
+ };
230
184
 
231
- var out = Object.assign(base, {
232
- correctResponse
233
- });
234
- log('out: ', out);
235
- resolve(out);
185
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
186
+ base.rationale = question.rationale;
187
+ } else {
188
+ base.rationale = null;
189
+ }
190
+
191
+ const out = Object.assign(base, {
192
+ correctResponse
236
193
  });
194
+ log('out: ', out);
195
+ resolve(out);
237
196
  });
238
-
239
- return function (_x) {
240
- return _ref.apply(this, arguments);
241
- };
242
- }());
197
+ });
243
198
  }
244
- var createCorrectResponseSession = (question, env) => {
199
+ const createCorrectResponseSession = (question, env) => {
245
200
  return new Promise(resolve => {
246
201
  if (env.mode !== 'evaluate' && env.role === 'instructor') {
247
- var {
202
+ const {
248
203
  prompts,
249
204
  answers
250
205
  } = question;
251
- var value = {};
206
+ const value = {};
252
207
  prompts.forEach(p => {
253
208
  if (answers.filter(a => a.id === p.relatedAnswer).length) {
254
209
  value[p.id] = p.relatedAnswer;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../controller/src/defaults.js","../controller/src/index.js"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default {\n config: {\n answers: [],\n prompt: '',\n prompts: [],\n shuffled: false,\n },\n};\n","import isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match-list:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const prompts = model.prompts;\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = getTotalCorrect(model);\n const correctAnswers = getCorrectSelected(prompts, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCorrectSelected = (prompts = [], answers) => {\n let correctAnswers = 0;\n\n prompts.forEach((p) => {\n if (p.relatedAnswer === answers[p.id]) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n return question && question.prompts ? question.prompts.length : 0;\n};\n\nconst getPartialScore = (question, answers) => {\n const count = getCorrectSelected(question && question.prompts, answers);\n const totalCorrect = getTotalCorrect(question);\n\n return parseFloat((count / totalCorrect).toFixed(2));\n};\n\nconst getOutComeScore = (question, env, answers) => {\n const correctness = getCorrectness(question, env, answers);\n\n return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const out = {\n score: getOutComeScore(question, env, session.value),\n };\n\n resolve(out);\n }\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (model) => ({ ...defaults, ...model });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n question = normalize(question);\n const correctness = getCorrectness(question, env, session && session.value);\n const correctResponse = {};\n const score = `${getOutComeScore(question, env, session && session.value) * 100}%`;\n const correctInfo = {\n score,\n correctness,\n };\n\n const shuffledValues = {};\n let prompts = question.prompts;\n let answers = question.answers;\n\n const us = (part) => (id, element, update) => {\n return new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n };\n\n const lockChoiceOrder = lockChoices(question, session, env);\n\n if (!lockChoiceOrder) {\n prompts = await getShuffledChoices(\n prompts,\n { shuffledValues: ((session && session.shuffledValues) || {}).prompts },\n us('prompts'),\n 'id',\n );\n answers = await getShuffledChoices(\n answers,\n { shuffledValues: ((session && session.shuffledValues) || {}).answers },\n us('answers'),\n 'id',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (question && prompts) {\n prompts.forEach((prompt) => {\n correctResponse[prompt.id] = prompt.relatedAnswer;\n });\n }\n\n const fb =\n env.mode === 'evaluate'\n ? getFeedbackForCorrectness(correctInfo.correctness, question.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const base = {\n config: {\n ...question,\n prompts,\n answers,\n },\n correctness: correctInfo,\n feedback,\n mode: env.mode,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = question.rationale;\n } else {\n base.rationale = null;\n }\n\n const out = Object.assign(base, {\n correctResponse,\n });\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { prompts, answers } = question;\n const value = {};\n\n prompts.forEach((p) => {\n if (answers.filter((a) => a.id === p.relatedAnswer).length) {\n value[p.id] = p.relatedAnswer;\n }\n });\n\n resolve({\n value,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"names":["config","answers","prompt","prompts","shuffled","log","debug","getResponseCorrectness","model","env","isPartialScoring","partialScoring","enabled","Object","keys","length","totalCorrectAnswers","getTotalCorrect","correctAnswers","getCorrectSelected","getCorrectness","question","mode","forEach","p","relatedAnswer","id","getPartialScore","count","totalCorrect","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","score","undefined","completed","isEmpty","empty","out","value","createDefaultModel","defaults","normalize","updateSession","correctResponse","correctInfo","shuffledValues","us","part","element","update","lockChoiceOrder","lockChoices","getShuffledChoices","catch","e","console","error","fb","getFeedbackForCorrectness","feedback","then","base","role","rationale","assign","createCorrectResponseSession","filter","a"],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sources":["../controller/src/defaults.js","../controller/src/index.js"],"sourcesContent":["export default {\n config: {\n answers: [],\n prompt: '',\n prompts: [],\n shuffled: false,\n },\n};\n","import isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match-list:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const prompts = model.prompts;\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = getTotalCorrect(model);\n const correctAnswers = getCorrectSelected(prompts, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCorrectSelected = (prompts = [], answers) => {\n let correctAnswers = 0;\n\n prompts.forEach((p) => {\n if (p.relatedAnswer === answers[p.id]) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n return question && question.prompts ? question.prompts.length : 0;\n};\n\nconst getPartialScore = (question, answers) => {\n const count = getCorrectSelected(question && question.prompts, answers);\n const totalCorrect = getTotalCorrect(question);\n\n return parseFloat((count / totalCorrect).toFixed(2));\n};\n\nconst getOutComeScore = (question, env, answers) => {\n const correctness = getCorrectness(question, env, answers);\n\n return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const out = {\n score: getOutComeScore(question, env, session.value),\n };\n\n resolve(out);\n }\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (model) => ({ ...defaults, ...model });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n question = normalize(question);\n const correctness = getCorrectness(question, env, session && session.value);\n const correctResponse = {};\n const score = `${getOutComeScore(question, env, session && session.value) * 100}%`;\n const correctInfo = {\n score,\n correctness,\n };\n\n const shuffledValues = {};\n let prompts = question.prompts;\n let answers = question.answers;\n\n const us = (part) => (id, element, update) => {\n return new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n };\n\n const lockChoiceOrder = lockChoices(question, session, env);\n\n if (!lockChoiceOrder) {\n prompts = await getShuffledChoices(\n prompts,\n { shuffledValues: ((session && session.shuffledValues) || {}).prompts },\n us('prompts'),\n 'id',\n );\n answers = await getShuffledChoices(\n answers,\n { shuffledValues: ((session && session.shuffledValues) || {}).answers },\n us('answers'),\n 'id',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (question && prompts) {\n prompts.forEach((prompt) => {\n correctResponse[prompt.id] = prompt.relatedAnswer;\n });\n }\n\n const fb =\n env.mode === 'evaluate'\n ? getFeedbackForCorrectness(correctInfo.correctness, question.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const base = {\n config: {\n ...question,\n prompts,\n answers,\n },\n correctness: correctInfo,\n feedback,\n mode: env.mode,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = question.rationale;\n } else {\n base.rationale = null;\n }\n\n const out = Object.assign(base, {\n correctResponse,\n });\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { prompts, answers } = question;\n const value = {};\n\n prompts.forEach((p) => {\n if (answers.filter((a) => a.id === p.relatedAnswer).length) {\n value[p.id] = p.relatedAnswer;\n }\n });\n\n resolve({\n value,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"names":["config","answers","prompt","prompts","shuffled","log","debug","getResponseCorrectness","model","env","isPartialScoring","partialScoring","enabled","Object","keys","length","totalCorrectAnswers","getTotalCorrect","correctAnswers","getCorrectSelected","getCorrectness","question","mode","forEach","p","relatedAnswer","id","getPartialScore","count","totalCorrect","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","score","undefined","completed","isEmpty","empty","out","value","createDefaultModel","defaults","normalize","updateSession","correctResponse","correctInfo","shuffledValues","us","part","element","update","lockChoiceOrder","lockChoices","getShuffledChoices","catch","e","console","error","fb","getFeedbackForCorrectness","feedback","then","base","role","rationale","assign","createCorrectResponseSession","filter","a"],"mappings":"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"}