@pie-element/match-list 4.0.0 → 5.0.1-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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,27 @@
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
+ # [5.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-list@3.3.0...@pie-element/match-list@5.0.0) (2025-10-02)
7
+
8
+
9
+ ### Features
10
+
11
+ * publish majors to adopt pie-toolbox split without breaking legacy bundles PD-5242 ([50ede62](https://github.com/pie-framework/pie-elements/commit/50ede624eff05e2bc52fa80e453d561c505ab38d))
12
+
13
+
14
+ ### Performance Improvements
15
+
16
+ * **multiple-choice:** adopt pie-toolbox split ([b4b8f45](https://github.com/pie-framework/pie-elements/commit/b4b8f45b68b71622b314c3d80fdc180832a640e1))
17
+
18
+
19
+ ### BREAKING CHANGES
20
+
21
+ * **multiple-choice:** publish majors to carry the pie-toolbox split without breaking legacy bundles
22
+
23
+
24
+
25
+
26
+
6
27
  # [4.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-list@3.3.0...@pie-element/match-list@4.0.0) (2025-10-01)
7
28
 
8
29
 
@@ -3,6 +3,14 @@
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
+ ## [4.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-list-controller@3.3.0...@pie-element/match-list-controller@4.0.1) (2025-10-02)
7
+
8
+ **Note:** Version bump only for package @pie-element/match-list-controller
9
+
10
+
11
+
12
+
13
+
6
14
  # [4.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-list-controller@3.3.0...@pie-element/match-list-controller@4.0.0) (2025-10-01)
7
15
 
8
16
  **Note:** Version bump only for package @pie-element/match-list-controller
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-list-controller",
3
3
  "private": true,
4
- "version": "4.0.0",
4
+ "version": "4.0.2-esm.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -0,0 +1,268 @@
1
+ import isEmpty from 'lodash/isEmpty';
2
+ import { getFeedbackForCorrectness } from '@pie-lib/feedback';
3
+ import { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';
4
+ import debug from 'debug';
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);
35
+ }
36
+
37
+ _next(undefined);
38
+ });
39
+ };
40
+ }
41
+
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;
55
+ }
56
+
57
+ var defaults = {
58
+ config: {
59
+ answers: [],
60
+ prompt: '',
61
+ prompts: [],
62
+ shuffled: false
63
+ }
64
+ };
65
+
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');
70
+
71
+ var getResponseCorrectness = (model, answers, env) => {
72
+ var isPartialScoring = partialScoring.enabled(model, env);
73
+ var prompts = model.prompts;
74
+
75
+ if (!answers || Object.keys(answers).length === 0) {
76
+ return 'unanswered';
77
+ }
78
+
79
+ var totalCorrectAnswers = getTotalCorrect(model);
80
+ var correctAnswers = getCorrectSelected(prompts, answers);
81
+
82
+ if (totalCorrectAnswers === correctAnswers) {
83
+ return 'correct';
84
+ } else if (correctAnswers === 0) {
85
+ return 'incorrect';
86
+ } else if (isPartialScoring) {
87
+ return 'partial';
88
+ }
89
+
90
+ return 'incorrect';
91
+ };
92
+
93
+ var getCorrectness = (question, env, answers) => {
94
+ if (env.mode === 'evaluate') {
95
+ return getResponseCorrectness(question, answers, env);
96
+ }
97
+ };
98
+
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;
103
+ prompts.forEach(p => {
104
+ if (p.relatedAnswer === answers[p.id]) {
105
+ correctAnswers += 1;
106
+ }
107
+ });
108
+ return correctAnswers;
109
+ };
110
+
111
+ var getTotalCorrect = question => {
112
+ return question && question.prompts ? question.prompts.length : 0;
113
+ };
114
+
115
+ var getPartialScore = (question, answers) => {
116
+ var count = getCorrectSelected(question && question.prompts, answers);
117
+ var totalCorrect = getTotalCorrect(question);
118
+ return parseFloat((count / totalCorrect).toFixed(2));
119
+ };
120
+
121
+ var getOutComeScore = (question, env, answers) => {
122
+ var correctness = getCorrectness(question, env, answers);
123
+ return correctness === 'correct' ? 1 : correctness === 'partial' && true ? getPartialScore(question, answers) : 0;
124
+ };
125
+
126
+ var outcome = (question, session, env) => {
127
+ return new Promise(resolve => {
128
+ if (env.mode !== 'evaluate') {
129
+ resolve({
130
+ score: undefined,
131
+ completed: undefined
132
+ });
133
+ } else {
134
+ if (!session || isEmpty(session)) {
135
+ resolve({
136
+ score: 0,
137
+ empty: true
138
+ });
139
+ } else {
140
+ var out = {
141
+ score: getOutComeScore(question, env, session.value)
142
+ };
143
+ resolve(out);
144
+ }
145
+ }
146
+ });
147
+ };
148
+ function createDefaultModel() {
149
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
150
+ return new Promise(resolve => {
151
+ resolve(_objectSpread(_objectSpread({}, defaults), model));
152
+ });
153
+ }
154
+ var normalize = model => _objectSpread(_objectSpread({}, defaults), model);
155
+ /**
156
+ *
157
+ * @param {*} question
158
+ * @param {*} session
159
+ * @param {*} env
160
+ * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.
161
+ */
162
+
163
+ 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);
186
+
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
+ }
195
+
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
+ }
206
+
207
+ if (question && prompts) {
208
+ prompts.forEach(prompt => {
209
+ correctResponse[prompt.id] = prompt.relatedAnswer;
210
+ });
211
+ }
212
+
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
+ };
224
+
225
+ if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
226
+ base.rationale = question.rationale;
227
+ } else {
228
+ base.rationale = null;
229
+ }
230
+
231
+ var out = Object.assign(base, {
232
+ correctResponse
233
+ });
234
+ log('out: ', out);
235
+ resolve(out);
236
+ });
237
+ });
238
+
239
+ return function (_x) {
240
+ return _ref.apply(this, arguments);
241
+ };
242
+ }());
243
+ }
244
+ var createCorrectResponseSession = (question, env) => {
245
+ return new Promise(resolve => {
246
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
247
+ var {
248
+ prompts,
249
+ answers
250
+ } = question;
251
+ var value = {};
252
+ prompts.forEach(p => {
253
+ if (answers.filter(a => a.id === p.relatedAnswer).length) {
254
+ value[p.id] = p.relatedAnswer;
255
+ }
256
+ });
257
+ resolve({
258
+ value,
259
+ id: '1'
260
+ });
261
+ } else {
262
+ resolve(null);
263
+ }
264
+ });
265
+ };
266
+
267
+ export { createCorrectResponseSession, createDefaultModel, model, normalize, outcome };
268
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +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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"}