@pie-element/math-inline 6.5.0 → 6.5.1-beta.1
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/configure/package.json +5 -5
- package/controller/package.json +3 -3
- package/package.json +7 -6
- package/configure/lib/configure.js +0 -249
- package/configure/lib/configure.js.map +0 -1
- package/configure/lib/defaults.js +0 -117
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/general-config-block.js +0 -631
- package/configure/lib/general-config-block.js.map +0 -1
- package/configure/lib/index.js +0 -166
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/response.js +0 -449
- package/configure/lib/response.js.map +0 -1
- package/configure/lib/utils.js +0 -29
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js +0 -35
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -398
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/utils.js +0 -12
- package/controller/lib/utils.js.map +0 -1
- package/lib/index.js +0 -127
- package/lib/index.js.map +0 -1
- package/lib/main.js +0 -830
- package/lib/main.js.map +0 -1
- package/lib/print.js +0 -133
- package/lib/print.js.map +0 -1
- package/lib/simple-question-block.js +0 -195
- package/lib/simple-question-block.js.map +0 -1
- package/lib/utils.js +0 -12
- package/lib/utils.js.map +0 -1
package/controller/lib/index.js
DELETED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports.createCorrectResponseSession = void 0;
|
|
11
|
-
exports.createDefaultModel = createDefaultModel;
|
|
12
|
-
exports.model = model;
|
|
13
|
-
exports.validate = exports.outcome = exports.normalize = void 0;
|
|
14
|
-
|
|
15
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
16
|
-
|
|
17
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
18
|
-
|
|
19
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
20
|
-
|
|
21
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
22
|
-
|
|
23
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
24
|
-
|
|
25
|
-
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
26
|
-
|
|
27
|
-
var _feedback = require("@pie-lib/feedback");
|
|
28
|
-
|
|
29
|
-
var _utils = require("./utils");
|
|
30
|
-
|
|
31
|
-
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
32
|
-
|
|
33
|
-
var mv = _interopRequireWildcard(require("@pie-framework/math-validation"));
|
|
34
|
-
|
|
35
|
-
var _excluded = ["responses"];
|
|
36
|
-
|
|
37
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
38
|
-
|
|
39
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
40
|
-
|
|
41
|
-
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; }
|
|
42
|
-
|
|
43
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
44
|
-
|
|
45
|
-
var log = (0, _debug["default"])('@pie-element:math-inline:controller');
|
|
46
|
-
|
|
47
|
-
var getResponseCorrectness = function getResponseCorrectness(model, answerItem, isOutcome) {
|
|
48
|
-
var correctResponses = model.responses;
|
|
49
|
-
var isAdvanced = model.responseType === _utils.ResponseTypes.advanced;
|
|
50
|
-
|
|
51
|
-
if (!answerItem) {
|
|
52
|
-
return {
|
|
53
|
-
correctness: 'unanswered',
|
|
54
|
-
score: isOutcome ? 0 : '0%',
|
|
55
|
-
correct: false
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
var isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);
|
|
60
|
-
var correctnessObject = {
|
|
61
|
-
correctness: 'incorrect',
|
|
62
|
-
score: isOutcome ? 0 : '0%',
|
|
63
|
-
correct: false
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
if (isAnswerCorrect) {
|
|
67
|
-
correctnessObject.correctness = 'correct';
|
|
68
|
-
correctnessObject.score = isOutcome ? 1 : '100%';
|
|
69
|
-
correctnessObject.correct = true;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return correctnessObject;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
function getIsAnswerCorrect(correctResponseItem, answerItem) {
|
|
76
|
-
var answerCorrect = false;
|
|
77
|
-
(correctResponseItem || []).forEach(function (correctResponse) {
|
|
78
|
-
var opts = {
|
|
79
|
-
mode: correctResponse.validation || _defaults["default"].validationDefault
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
if (opts.mode == 'literal') {
|
|
83
|
-
opts.literal = {
|
|
84
|
-
allowTrailingZeros: correctResponse.allowTrailingZeros || false,
|
|
85
|
-
ignoreOrder: correctResponse.ignoreOrder || false
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (!answerCorrect) {
|
|
90
|
-
var acceptedValues = [correctResponse.answer].concat(Object.keys(correctResponse.alternates || {}).map(function (alternateId) {
|
|
91
|
-
return correctResponse.alternates[alternateId];
|
|
92
|
-
})) || [];
|
|
93
|
-
|
|
94
|
-
try {
|
|
95
|
-
for (var i = 0; i < acceptedValues.length; i++) {
|
|
96
|
-
answerCorrect = mv.latexEqual(answerItem, acceptedValues[i], opts);
|
|
97
|
-
|
|
98
|
-
if (answerCorrect) {
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} catch (e) {
|
|
103
|
-
log('Parse failure when evaluating math', e, correctResponse, answerItem);
|
|
104
|
-
answerCorrect = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
return answerCorrect;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
var getCorrectness = function getCorrectness(question, env, session, isOutcome) {
|
|
112
|
-
if (env.mode === 'evaluate') {
|
|
113
|
-
return getResponseCorrectness(question, question.responseType === _utils.ResponseTypes.advanced ? session && session.completeAnswer || '' : session && session.response, isOutcome);
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
function createDefaultModel() {
|
|
118
|
-
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
119
|
-
return new Promise(function (resolve) {
|
|
120
|
-
resolve({
|
|
121
|
-
config: _objectSpread(_objectSpread({}, _defaults["default"]), model)
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
var outcome = function outcome(question, session, env) {
|
|
127
|
-
return new Promise(function (resolve) {
|
|
128
|
-
if (env.mode !== 'evaluate') {
|
|
129
|
-
resolve({
|
|
130
|
-
score: undefined,
|
|
131
|
-
completed: undefined
|
|
132
|
-
});
|
|
133
|
-
} else {
|
|
134
|
-
if (!session || (0, _isEmpty["default"])(session)) {
|
|
135
|
-
resolve({
|
|
136
|
-
score: 0,
|
|
137
|
-
empty: true
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
var correctness = getCorrectness(question, env, session, true);
|
|
141
|
-
resolve({
|
|
142
|
-
score: correctness.score
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
exports.outcome = outcome;
|
|
150
|
-
|
|
151
|
-
var normalize = function normalize(question) {
|
|
152
|
-
// making sure that defaults are set
|
|
153
|
-
if (!(0, _isEmpty["default"])(question.responses)) {
|
|
154
|
-
question.responses = question.responses.map(function (correctResponse) {
|
|
155
|
-
return _objectSpread(_objectSpread({}, correctResponse), {}, {
|
|
156
|
-
validation: correctResponse.validation || question.validationDefault,
|
|
157
|
-
allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,
|
|
158
|
-
ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return _objectSpread(_objectSpread({}, _defaults["default"]), {}, {
|
|
164
|
-
feedbackEnabled: true,
|
|
165
|
-
promptEnabled: true,
|
|
166
|
-
rationaleEnabled: true,
|
|
167
|
-
teacherInstructionsEnabled: true,
|
|
168
|
-
studentInstructionsEnabled: true
|
|
169
|
-
}, question);
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
exports.normalize = normalize;
|
|
173
|
-
|
|
174
|
-
function model(question, session, env) {
|
|
175
|
-
return new Promise(function (resolve) {
|
|
176
|
-
var normalizedQuestion = normalize(question);
|
|
177
|
-
var correctness = getCorrectness(normalizedQuestion, env, session);
|
|
178
|
-
var responses = normalizedQuestion.responses,
|
|
179
|
-
config = (0, _objectWithoutProperties2["default"])(normalizedQuestion, _excluded);
|
|
180
|
-
|
|
181
|
-
if (config.responseType === _utils.ResponseTypes.simple) {
|
|
182
|
-
config.responses = responses.slice(0, 1);
|
|
183
|
-
} else {
|
|
184
|
-
config.responses = responses;
|
|
185
|
-
config.customKeys = [];
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
var fb = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? (0, _feedback.getFeedbackForCorrectness)(correctness, normalizedQuestion.feedback) : Promise.resolve(undefined);
|
|
189
|
-
fb.then(function (feedback) {
|
|
190
|
-
var base = {
|
|
191
|
-
config: config,
|
|
192
|
-
correctness: correctness,
|
|
193
|
-
feedback: feedback,
|
|
194
|
-
disabled: env.mode !== 'gather',
|
|
195
|
-
view: env.mode === 'view'
|
|
196
|
-
};
|
|
197
|
-
var out = base;
|
|
198
|
-
var showNote = false;
|
|
199
|
-
(config && config.responses || []).forEach(function (response) {
|
|
200
|
-
if (response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0) {
|
|
201
|
-
showNote = true;
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
if (env.mode === 'evaluate') {
|
|
207
|
-
out.correctResponse = {};
|
|
208
|
-
out.config.showNote = showNote;
|
|
209
|
-
} else {
|
|
210
|
-
out.config.responses = [];
|
|
211
|
-
out.config.showNote = false;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
|
|
215
|
-
out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
|
|
216
|
-
out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
|
|
217
|
-
} else {
|
|
218
|
-
out.rationale = null;
|
|
219
|
-
out.teacherInstructions = null;
|
|
220
|
-
out.config.rationale = null;
|
|
221
|
-
out.config.teacherInstructions = null;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
out.config.env = env;
|
|
225
|
-
out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;
|
|
226
|
-
log('out: ', out);
|
|
227
|
-
resolve(out);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
var escape = function escape(string) {
|
|
233
|
-
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
234
|
-
}; // $& means the whole matched string
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var simpleSessionResponse = function simpleSessionResponse(question) {
|
|
238
|
-
return new Promise(function (resolve) {
|
|
239
|
-
var responses = question.responses,
|
|
240
|
-
id = question.id;
|
|
241
|
-
|
|
242
|
-
var _ref = responses && responses.length ? responses[0] : {},
|
|
243
|
-
answer = _ref.answer;
|
|
244
|
-
|
|
245
|
-
resolve({
|
|
246
|
-
id: id,
|
|
247
|
-
response: answer || '',
|
|
248
|
-
completeAnswer: answer || ''
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
var advancedSessionResponse = function advancedSessionResponse(question) {
|
|
254
|
-
return new Promise(function (resolve, reject) {
|
|
255
|
-
var responses = question.responses,
|
|
256
|
-
id = question.id;
|
|
257
|
-
|
|
258
|
-
var _ref2 = responses && responses.length ? responses[0] : {},
|
|
259
|
-
answer = _ref2.answer;
|
|
260
|
-
|
|
261
|
-
if (!answer) {
|
|
262
|
-
resolve({
|
|
263
|
-
id: id,
|
|
264
|
-
answers: {},
|
|
265
|
-
completeAnswer: ''
|
|
266
|
-
});
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
try {
|
|
271
|
-
var e = question.expression;
|
|
272
|
-
var RESPONSE_TOKEN = /\\{\\{\s*response\s*\\}\\}/g;
|
|
273
|
-
var o = escape(e).split(RESPONSE_TOKEN);
|
|
274
|
-
var to = o.map(function (t) {
|
|
275
|
-
return t === '' ? t : t.replace(/\s+/g, function () {
|
|
276
|
-
return '\\s*';
|
|
277
|
-
});
|
|
278
|
-
});
|
|
279
|
-
var tt = to.join('(.*)');
|
|
280
|
-
var m = answer.match(new RegExp(tt));
|
|
281
|
-
var count = o.length - 1;
|
|
282
|
-
|
|
283
|
-
if (!m) {
|
|
284
|
-
resolve({
|
|
285
|
-
id: id,
|
|
286
|
-
answers: {},
|
|
287
|
-
completeAnswer: answer
|
|
288
|
-
});
|
|
289
|
-
console.log("can not find match: ".concat(o, " in ").concat(answer));
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
m.shift();
|
|
294
|
-
var answers = {};
|
|
295
|
-
|
|
296
|
-
for (var i = 0; i < count; i++) {
|
|
297
|
-
answers["r".concat(i + 1)] = {
|
|
298
|
-
value: m[i].trim()
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
resolve({
|
|
303
|
-
id: id,
|
|
304
|
-
answers: answers,
|
|
305
|
-
completeAnswer: answer
|
|
306
|
-
});
|
|
307
|
-
} catch (e) {
|
|
308
|
-
resolve({
|
|
309
|
-
id: id,
|
|
310
|
-
answers: {},
|
|
311
|
-
completeAnswer: answer
|
|
312
|
-
});
|
|
313
|
-
console.error(e.toString());
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
|
|
319
|
-
if (env.mode === 'evaluate' || env.role !== 'instructor') {
|
|
320
|
-
// eslint-disable-next-line no-console
|
|
321
|
-
console.error('can not create correct response session if mode is evaluate or role is not instructor');
|
|
322
|
-
return Promise.resolve(null);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
if ((question.responseType || '').toLowerCase() === 'simple') {
|
|
326
|
-
return simpleSessionResponse(question, env);
|
|
327
|
-
} else {
|
|
328
|
-
return advancedSessionResponse(question, env);
|
|
329
|
-
}
|
|
330
|
-
};
|
|
331
|
-
|
|
332
|
-
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
333
|
-
|
|
334
|
-
var validate = function validate() {
|
|
335
|
-
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
336
|
-
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
337
|
-
var _model$expression = model.expression,
|
|
338
|
-
expression = _model$expression === void 0 ? '' : _model$expression,
|
|
339
|
-
responses = model.responses,
|
|
340
|
-
responseType = model.responseType;
|
|
341
|
-
var maxResponseAreas = config.maxResponseAreas;
|
|
342
|
-
var responsesErrors = {};
|
|
343
|
-
(responses || []).forEach(function (response, index) {
|
|
344
|
-
var answer = response.answer;
|
|
345
|
-
var reversedAlternates = (0, _toConsumableArray2["default"])(Object.entries(response.alternates || {})).reverse();
|
|
346
|
-
var alternatesErrors = {};
|
|
347
|
-
var responseError = {};
|
|
348
|
-
|
|
349
|
-
if (answer === '') {
|
|
350
|
-
responseError.answer = 'Content should not be empty.';
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
reversedAlternates.forEach(function (_ref3, index) {
|
|
354
|
-
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
|
|
355
|
-
key = _ref4[0],
|
|
356
|
-
value = _ref4[1];
|
|
357
|
-
|
|
358
|
-
if (value === '') {
|
|
359
|
-
alternatesErrors[key] = 'Content should not be empty.';
|
|
360
|
-
} else {
|
|
361
|
-
var identicalAnswer = answer === value || reversedAlternates.slice(index + 1).some(function (_ref5) {
|
|
362
|
-
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2),
|
|
363
|
-
val = _ref6[1];
|
|
364
|
-
|
|
365
|
-
return val === value;
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
if (identicalAnswer) {
|
|
369
|
-
alternatesErrors[key] = 'Content should be unique.';
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
if (!(0, _isEmpty["default"])(responseError) || !(0, _isEmpty["default"])(alternatesErrors)) {
|
|
375
|
-
responsesErrors[index] = _objectSpread(_objectSpread({}, responseError), alternatesErrors);
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
var errors = {};
|
|
379
|
-
|
|
380
|
-
if (responseType === 'Advanced Multi') {
|
|
381
|
-
var nbOfResponseAreas = (expression.match(/\{\{response\}\}/g) || []).length;
|
|
382
|
-
|
|
383
|
-
if (nbOfResponseAreas > maxResponseAreas) {
|
|
384
|
-
errors.responseAreasError = "No more than ".concat(maxResponseAreas, " response areas should be defined.");
|
|
385
|
-
} else if (nbOfResponseAreas < 1) {
|
|
386
|
-
errors.responseAreasError = 'There should be at least 1 response area defined.';
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
if (!(0, _isEmpty["default"])(responsesErrors)) {
|
|
391
|
-
errors.responsesErrors = responsesErrors;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
return errors;
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
exports.validate = validate;
|
|
398
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answerItem","isOutcome","correctResponses","responses","isAdvanced","responseType","ResponseTypes","advanced","correctness","score","correct","isAnswerCorrect","getIsAnswerCorrect","slice","correctnessObject","correctResponseItem","answerCorrect","forEach","correctResponse","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","concat","Object","keys","alternates","map","alternateId","i","length","mv","latexEqual","e","getCorrectness","question","env","session","completeAnswer","response","createDefaultModel","Promise","resolve","config","outcome","undefined","completed","empty","normalize","allowTrailingZerosDefault","ignoreOrderDefault","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","simple","customKeys","fb","feedback","then","base","disabled","view","out","showNote","role","rationale","teacherInstructions","prompt","escape","string","replace","simpleSessionResponse","id","advancedSessionResponse","reject","answers","expression","RESPONSE_TOKEN","o","split","to","t","tt","join","m","match","RegExp","count","console","shift","value","trim","error","toString","createCorrectResponseSession","toLowerCase","validate","maxResponseAreas","responsesErrors","index","reversedAlternates","entries","reverse","alternatesErrors","responseError","key","identicalAnswer","some","val","errors","nbOfResponseAreas","responseAreasError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { ResponseTypes } from './utils';\n\nimport defaults from './defaults';\n\nimport * as mv from '@pie-framework/math-validation';\n\nconst log = debug('@pie-element:math-inline:controller');\n\nconst getResponseCorrectness = (model, answerItem, isOutcome) => {\n const correctResponses = model.responses;\n const isAdvanced = model.responseType === ResponseTypes.advanced;\n\n if (!answerItem) {\n return {\n correctness: 'unanswered',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n }\n\n const isAnswerCorrect = getIsAnswerCorrect(isAdvanced ? correctResponses : correctResponses.slice(0, 1), answerItem);\n\n const correctnessObject = {\n correctness: 'incorrect',\n score: isOutcome ? 0 : '0%',\n correct: false,\n };\n\n if (isAnswerCorrect) {\n correctnessObject.correctness = 'correct';\n correctnessObject.score = isOutcome ? 1 : '100%';\n correctnessObject.correct = true;\n }\n\n return correctnessObject;\n};\n\nfunction getIsAnswerCorrect(correctResponseItem, answerItem) {\n let answerCorrect = false;\n\n (correctResponseItem || []).forEach((correctResponse) => {\n let opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n };\n\n if (opts.mode == 'literal') {\n opts.literal = {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n };\n }\n\n if (!answerCorrect) {\n const acceptedValues =\n [correctResponse.answer].concat(\n Object.keys(correctResponse.alternates || {}).map((alternateId) => correctResponse.alternates[alternateId]),\n ) || [];\n\n try {\n for (let i = 0; i < acceptedValues.length; i++) {\n answerCorrect = mv.latexEqual(answerItem, acceptedValues[i], opts);\n\n if (answerCorrect) {\n break;\n }\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n\n answerCorrect = false;\n }\n }\n });\n\n return answerCorrect;\n}\n\nconst getCorrectness = (question, env, session, isOutcome) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n question.responseType === ResponseTypes.advanced\n ? (session && session.completeAnswer) || ''\n : session && session.response,\n isOutcome,\n );\n }\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n config: {\n ...defaults,\n ...model,\n },\n });\n });\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 correctness = getCorrectness(question, env, session, true);\n\n resolve({ score: correctness.score });\n }\n }\n });\n};\n\nexport const normalize = (question) => {\n // making sure that defaults are set\n if (!isEmpty(question.responses)) {\n question.responses = question.responses.map((correctResponse) => ({\n ...correctResponse,\n validation: correctResponse.validation || question.validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || question.allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || question.ignoreOrderDefault,\n }));\n }\n\n return {\n ...defaults,\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n };\n};\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, ...config } = normalizedQuestion;\n\n if (config.responseType === ResponseTypes.simple) {\n config.responses = responses.slice(0, 1);\n } else {\n config.responses = responses;\n config.customKeys = [];\n }\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const base = {\n config,\n correctness,\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n const out = base;\n let showNote = false;\n\n ((config && config.responses) || []).forEach((response) => {\n if (response.validation === 'symbolic' || Object.keys(response.alternates || {}).length > 0) {\n showNote = true;\n return;\n }\n });\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.config.showNote = showNote;\n } else {\n out.config.responses = [];\n out.config.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n out.config.env = env;\n out.config.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nconst escape = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n\nconst simpleSessionResponse = (question) =>\n new Promise((resolve) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n resolve({\n id,\n response: answer || '',\n completeAnswer: answer || '',\n });\n });\n\nconst advancedSessionResponse = (question) =>\n new Promise((resolve, reject) => {\n const { responses, id } = question;\n const { answer } = responses && responses.length ? responses[0] : {};\n\n if (!answer) {\n resolve({\n id,\n answers: {},\n completeAnswer: '',\n });\n\n return;\n }\n\n try {\n const e = question.expression;\n const RESPONSE_TOKEN = /\\\\{\\\\{\\s*response\\s*\\\\}\\\\}/g;\n\n const o = escape(e).split(RESPONSE_TOKEN);\n const to = o.map((t) => (t === '' ? t : t.replace(/\\s+/g, () => '\\\\s*')));\n const tt = to.join('(.*)');\n\n const m = answer.match(new RegExp(tt));\n\n const count = o.length - 1;\n\n if (!m) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n console.log(`can not find match: ${o} in ${answer}`);\n\n return;\n }\n\n m.shift();\n\n const answers = {};\n\n for (var i = 0; i < count; i++) {\n answers[`r${i + 1}`] = { value: m[i].trim() };\n }\n\n resolve({\n id,\n answers,\n completeAnswer: answer,\n });\n } catch (e) {\n resolve({\n id,\n answers: {},\n completeAnswer: answer,\n });\n\n console.error(e.toString());\n }\n });\n\nexport const createCorrectResponseSession = (question, env) => {\n if (env.mode === 'evaluate' || env.role !== 'instructor') {\n // eslint-disable-next-line no-console\n console.error('can not create correct response session if mode is evaluate or role is not instructor');\n\n return Promise.resolve(null);\n }\n\n if ((question.responseType || '').toLowerCase() === 'simple') {\n return simpleSessionResponse(question, env);\n } else {\n return advancedSessionResponse(question, env);\n }\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { expression = '', responses, responseType } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n\n (responses || []).forEach((response, index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const errors = {};\n\n if (responseType === 'Advanced Multi') {\n const nbOfResponseAreas = (expression.match(/\\{\\{response\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responsesErrors = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/lib/utils.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.ResponseTypes = void 0;
|
|
7
|
-
var ResponseTypes = {
|
|
8
|
-
advanced: 'Advanced Multi',
|
|
9
|
-
simple: 'Simple'
|
|
10
|
-
};
|
|
11
|
-
exports.ResponseTypes = ResponseTypes;
|
|
12
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["ResponseTypes","advanced","simple"],"mappings":";;;;;;AAAO,IAAMA,aAAa,GAAG;AAC3BC,EAAAA,QAAQ,EAAE,gBADiB;AAE3BC,EAAAA,MAAM,EAAE;AAFmB,CAAtB","sourcesContent":["export const ResponseTypes = {\n advanced: 'Advanced Multi',\n simple: 'Simple',\n};\n"],"file":"utils.js"}
|
package/lib/index.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
Object.defineProperty(exports, "Component", {
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function get() {
|
|
11
|
-
return _main["default"];
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
exports["default"] = void 0;
|
|
15
|
-
|
|
16
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
26
|
-
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
27
|
-
|
|
28
|
-
var _react = _interopRequireDefault(require("react"));
|
|
29
|
-
|
|
30
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
31
|
-
|
|
32
|
-
var _main = _interopRequireDefault(require("./main"));
|
|
33
|
-
|
|
34
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
35
|
-
|
|
36
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
37
|
-
|
|
38
|
-
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
39
|
-
|
|
40
|
-
var _defaults = _interopRequireDefault(require("../configure/lib/defaults"));
|
|
41
|
-
|
|
42
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
43
|
-
|
|
44
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
45
|
-
|
|
46
|
-
var log = (0, _debug["default"])('pie-ui:math-inline');
|
|
47
|
-
|
|
48
|
-
var MathInline = /*#__PURE__*/function (_HTMLElement) {
|
|
49
|
-
(0, _inherits2["default"])(MathInline, _HTMLElement);
|
|
50
|
-
|
|
51
|
-
var _super = _createSuper(MathInline);
|
|
52
|
-
|
|
53
|
-
function MathInline() {
|
|
54
|
-
var _this;
|
|
55
|
-
|
|
56
|
-
(0, _classCallCheck2["default"])(this, MathInline);
|
|
57
|
-
_this = _super.call(this);
|
|
58
|
-
_this._configuration = _defaults["default"].configuration;
|
|
59
|
-
_this.sessionChangedEventCaller = _lodash["default"].debounce(function () {
|
|
60
|
-
_this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(_this.tagName.toLowerCase(), true));
|
|
61
|
-
}, 1000);
|
|
62
|
-
return _this;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
(0, _createClass2["default"])(MathInline, [{
|
|
66
|
-
key: "model",
|
|
67
|
-
set: function set(m) {
|
|
68
|
-
this._model = m;
|
|
69
|
-
this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this._model, true, !!this._model));
|
|
70
|
-
|
|
71
|
-
this._render();
|
|
72
|
-
}
|
|
73
|
-
}, {
|
|
74
|
-
key: "session",
|
|
75
|
-
get: function get() {
|
|
76
|
-
return this._session;
|
|
77
|
-
},
|
|
78
|
-
set: function set(s) {
|
|
79
|
-
this._session = s;
|
|
80
|
-
|
|
81
|
-
this._render();
|
|
82
|
-
}
|
|
83
|
-
}, {
|
|
84
|
-
key: "configuration",
|
|
85
|
-
set: function set(c) {
|
|
86
|
-
this._configuration = c;
|
|
87
|
-
|
|
88
|
-
this._render();
|
|
89
|
-
}
|
|
90
|
-
}, {
|
|
91
|
-
key: "sessionChanged",
|
|
92
|
-
value: function sessionChanged(s) {
|
|
93
|
-
var _this2 = this;
|
|
94
|
-
|
|
95
|
-
Object.keys(s).map(function (key) {
|
|
96
|
-
_this2._session[key] = s[key];
|
|
97
|
-
});
|
|
98
|
-
this.sessionChangedEventCaller();
|
|
99
|
-
log('session: ', this._session);
|
|
100
|
-
}
|
|
101
|
-
}, {
|
|
102
|
-
key: "connectedCallback",
|
|
103
|
-
value: function connectedCallback() {
|
|
104
|
-
this._render();
|
|
105
|
-
}
|
|
106
|
-
}, {
|
|
107
|
-
key: "_render",
|
|
108
|
-
value: function _render() {
|
|
109
|
-
if (!this._model || !this._session) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
var el = /*#__PURE__*/_react["default"].createElement(_main["default"], {
|
|
114
|
-
model: this._model,
|
|
115
|
-
session: this._session,
|
|
116
|
-
configuration: this._configuration,
|
|
117
|
-
onSessionChange: this.sessionChanged.bind(this)
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
_reactDom["default"].render(el, this);
|
|
121
|
-
}
|
|
122
|
-
}]);
|
|
123
|
-
return MathInline;
|
|
124
|
-
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
125
|
-
|
|
126
|
-
exports["default"] = MathInline;
|
|
127
|
-
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","MathInline","_configuration","defaults","configuration","sessionChangedEventCaller","_","debounce","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","m","_model","ModelSetEvent","_render","_session","s","c","Object","keys","map","key","el","React","createElement","Main","model","session","onSessionChange","sessionChanged","bind","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,oBAAN,CAAZ;;IAIqBC,U;;;;;AACnB,wBAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,cAAL,GAAsBC,qBAASC,aAA/B;AACA,UAAKC,yBAAL,GAAiCC,mBAAEC,QAAF,CAAW,YAAM;AAChD,YAAKC,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,IAApD,CAAnB;AACD,KAFgC,EAE9B,IAF8B,CAAjC;AAHY;AAMb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;AACA,WAAKJ,aAAL,CAAmB,IAAIM,8BAAJ,CAAkB,KAAKD,MAAvB,EAA+B,IAA/B,EAAqC,CAAC,CAAC,KAAKA,MAA5C,CAAnB;;AACA,WAAKE,OAAL;AACD;;;SAOD,eAAc;AACZ,aAAO,KAAKC,QAAZ;AACD,K;SAPD,aAAYC,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;;AACA,WAAKF,OAAL;AACD;;;SAMD,aAAkBG,CAAlB,EAAqB;AACnB,WAAKhB,cAAL,GAAsBgB,CAAtB;;AACA,WAAKH,OAAL;AACD;;;WAED,wBAAeE,CAAf,EAAkB;AAAA;;AAChBE,MAAAA,MAAM,CAACC,IAAP,CAAYH,CAAZ,EAAeI,GAAf,CAAmB,UAACC,GAAD,EAAS;AAC1B,QAAA,MAAI,CAACN,QAAL,CAAcM,GAAd,IAAqBL,CAAC,CAACK,GAAD,CAAtB;AACD,OAFD;AAIA,WAAKjB,yBAAL;AACAL,MAAAA,GAAG,CAAC,WAAD,EAAc,KAAKgB,QAAnB,CAAH;AACD;;;WAED,6BAAoB;AAClB,WAAKD,OAAL;AACD;;;WAED,mBAAU;AACR,UAAI,CAAC,KAAKF,MAAN,IAAgB,CAAC,KAAKG,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMO,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnCC,QAAAA,KAAK,EAAE,KAAKd,MADuB;AAEnCe,QAAAA,OAAO,EAAE,KAAKZ,QAFqB;AAGnCZ,QAAAA,aAAa,EAAE,KAAKF,cAHe;AAInC2B,QAAAA,eAAe,EAAE,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB;AAJkB,OAA1B,CAAX;;AAOAC,2BAASC,MAAT,CAAgBV,EAAhB,EAAoB,IAApB;AACD;;;kDAvDqCW,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './main';\nimport debug from 'debug';\nimport _ from 'lodash';\n\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport defaults from '../configure/lib/defaults';\n\nconst log = debug('pie-ui:math-inline');\n\nexport { Main as Component };\n\nexport default class MathInline extends HTMLElement {\n constructor() {\n super();\n this._configuration = defaults.configuration;\n this.sessionChangedEventCaller = _.debounce(() => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), true));\n }, 1000);\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(new ModelSetEvent(this._model, true, !!this._model));\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n sessionChanged(s) {\n Object.keys(s).map((key) => {\n this._session[key] = s[key];\n });\n\n this.sessionChangedEventCaller();\n log('session: ', this._session);\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n configuration: this._configuration,\n onSessionChange: this.sessionChanged.bind(this),\n });\n\n ReactDOM.render(el, this);\n }\n}\n"],"file":"index.js"}
|