@pie-element/multiple-choice 13.3.5 → 13.4.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 +11 -41
- package/configure/CHANGELOG.md +7 -36
- package/configure/lib/__tests__/root.test.js +279 -0
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/main.js +1 -1
- package/configure/lib/utils.js +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -9
- package/controller/lib/__tests__/index.test.js +561 -0
- package/controller/lib/__tests__/utils.test.js +8 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/choice-input-test.js +49 -0
- package/lib/__tests__/choice-input.test.js +49 -0
- package/lib/__tests__/index-test.js +206 -0
- package/lib/__tests__/index.test.js +221 -0
- package/lib/__tests__/key-events-test.js +95 -0
- package/lib/__tests__/key-events.test.js +107 -0
- package/lib/__tests__/multiple-choice-test.js +101 -0
- package/lib/__tests__/multiple-choice.test.js +256 -0
- package/lib/__tests__/session-updater-test.js +70 -0
- package/lib/__tests__/session-updater.test.js +70 -0
- package/lib/choice-input.js +1 -1
- package/lib/choice.js +1 -1
- package/lib/feedback-tick.js +1 -1
- package/lib/index.js +1 -1
- package/lib/main.js +1 -1
- package/lib/multiple-choice.js +1 -1
- package/lib/print.js +1 -1
- package/lib/session-updater.js +1 -1
- package/lib/utils.js +1 -1
- package/module/configure.js +1 -1
- package/module/controller.js +15 -12
- package/module/element.js +1 -1
- package/module/index.html +1 -1
- package/module/manifest.json +3 -3
- package/module/print.html +1 -1
- package/module/print.js +1 -1
- package/package.json +2 -2
|
@@ -30,4 +30,4 @@ var _default = exports.default = {
|
|
|
30
30
|
hoverAnswerStrokeWidth: 'initial',
|
|
31
31
|
keyboardEventsEnabled: false
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=
|
|
33
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaG9pY2VNb2RlIiwiY2hvaWNlUHJlZml4IiwiY2hvaWNlcyIsImNob2ljZXNMYXlvdXQiLCJmZWVkYmFja0VuYWJsZWQiLCJncmlkQ29sdW1ucyIsImxvY2tDaG9pY2VPcmRlciIsInBhcnRpYWxTY29yaW5nIiwicHJvbXB0IiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZSIsInJhdGlvbmFsZUVuYWJsZWQiLCJzY29yaW5nVHlwZSIsInN0dWRlbnRJbnN0cnVjdGlvbnNFbmFibGVkIiwidGVhY2hlckluc3RydWN0aW9ucyIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwidG9vbGJhckVkaXRvclBvc2l0aW9uIiwic2VsZWN0ZWRBbnN3ZXJCYWNrZ3JvdW5kQ29sb3IiLCJzZWxlY3RlZEFuc3dlclN0cm9rZUNvbG9yIiwic2VsZWN0ZWRBbnN3ZXJTdHJva2VXaWR0aCIsImhvdmVyQW5zd2VyQmFja2dyb3VuZENvbG9yIiwiaG92ZXJBbnN3ZXJTdHJva2VDb2xvciIsImhvdmVyQW5zd2VyU3Ryb2tlV2lkdGgiLCJrZXlib2FyZEV2ZW50c0VuYWJsZWQiXSwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBjaG9pY2VNb2RlOiAnY2hlY2tib3gnLFxuICBjaG9pY2VQcmVmaXg6ICdsZXR0ZXJzJyxcbiAgY2hvaWNlczogW10sXG4gIGNob2ljZXNMYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gIGdyaWRDb2x1bW5zOiAyLFxuICBsb2NrQ2hvaWNlT3JkZXI6IHRydWUsXG4gIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICBwcm9tcHQ6ICcnLFxuICBwcm9tcHRFbmFibGVkOiB0cnVlLFxuICByYXRpb25hbGU6ICcnLFxuICByYXRpb25hbGVFbmFibGVkOiB0cnVlLFxuICBzY29yaW5nVHlwZTogJ2F1dG8nLFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICB0b29sYmFyRWRpdG9yUG9zaXRpb246ICdib3R0b20nLFxuICBzZWxlY3RlZEFuc3dlckJhY2tncm91bmRDb2xvcjogJ2luaXRpYWwnLFxuICBzZWxlY3RlZEFuc3dlclN0cm9rZUNvbG9yOiAnaW5pdGlhbCcsXG4gIHNlbGVjdGVkQW5zd2VyU3Ryb2tlV2lkdGg6ICdpbml0aWFsJyxcbiAgaG92ZXJBbnN3ZXJCYWNrZ3JvdW5kQ29sb3I6ICdpbml0aWFsJyxcbiAgaG92ZXJBbnN3ZXJTdHJva2VDb2xvcjogJ2luaXRpYWwnLFxuICBob3ZlckFuc3dlclN0cm9rZVdpZHRoOiAnaW5pdGlhbCcsXG4gIGtleWJvYXJkRXZlbnRzRW5hYmxlZDogZmFsc2UsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7aUNBQWU7RUFDYkEsVUFBVSxFQUFFLFVBQVU7RUFDdEJDLFlBQVksRUFBRSxTQUFTO0VBQ3ZCQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxhQUFhLEVBQUUsVUFBVTtFQUN6QkMsZUFBZSxFQUFFLEtBQUs7RUFDdEJDLFdBQVcsRUFBRSxDQUFDO0VBQ2RDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxjQUFjLEVBQUUsSUFBSTtFQUNwQkMsTUFBTSxFQUFFLEVBQUU7RUFDVkMsYUFBYSxFQUFFLElBQUk7RUFDbkJDLFNBQVMsRUFBRSxFQUFFO0VBQ2JDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLFdBQVcsRUFBRSxNQUFNO0VBQ25CQywwQkFBMEIsRUFBRSxJQUFJO0VBQ2hDQyxtQkFBbUIsRUFBRSxFQUFFO0VBQ3ZCQywwQkFBMEIsRUFBRSxJQUFJO0VBQ2hDQyxxQkFBcUIsRUFBRSxRQUFRO0VBQy9CQyw2QkFBNkIsRUFBRSxTQUFTO0VBQ3hDQyx5QkFBeUIsRUFBRSxTQUFTO0VBQ3BDQyx5QkFBeUIsRUFBRSxTQUFTO0VBQ3BDQywwQkFBMEIsRUFBRSxTQUFTO0VBQ3JDQyxzQkFBc0IsRUFBRSxTQUFTO0VBQ2pDQyxzQkFBc0IsRUFBRSxTQUFTO0VBQ2pDQyxxQkFBcUIsRUFBRTtBQUN6QixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/controller/lib/index.js
CHANGED
|
@@ -295,4 +295,4 @@ const validate = (model = {}, config = {}) => {
|
|
|
295
295
|
return errors;
|
|
296
296
|
};
|
|
297
297
|
exports.validate = validate;
|
|
298
|
-
//# sourceMappingURL=index.js.map
|
|
298
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiX3V0aWxzIiwiX2RlZmF1bHRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb250cm9sbGVyVXRpbHMiLCJwcmVwYXJlQ2hvaWNlIiwibW9kZWwiLCJlbnYiLCJkZWZhdWx0RmVlZGJhY2siLCJjaG9pY2UiLCJyb2xlIiwibW9kZSIsIm91dCIsImxhYmVsIiwidmFsdWUiLCJyYXRpb25hbGUiLCJyYXRpb25hbGVFbmFibGVkIiwiY29ycmVjdCIsImZlZWRiYWNrRW5hYmxlZCIsImZlZWRiYWNrVHlwZSIsImZlZWRiYWNrIiwidHlwZSIsImNyZWF0ZURlZmF1bHRNb2RlbCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZGVmYXVsdHMiLCJub3JtYWxpemUiLCJxdWVzdGlvbiIsInZlcnRpY2FsTW9kZSIsImNob2ljZXNMYXlvdXQiLCJxdWVzdGlvblByb3BzIiwiZXhwb3J0cyIsInNlc3Npb24iLCJ1cGRhdGVTZXNzaW9uIiwibm9ybWFsaXplZFF1ZXN0aW9uIiwiT2JqZWN0IiwiYXNzaWduIiwiaW5jb3JyZWN0IiwiY2hvaWNlcyIsIm1hcCIsImxvY2tDaG9pY2VPcmRlciIsImxvY2tDaG9pY2VzIiwiZ2V0U2h1ZmZsZWRDaG9pY2VzIiwiZGlzYWJsZWQiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiZ3JpZENvbHVtbnMiLCJjaG9pY2VNb2RlIiwia2V5TW9kZSIsImNob2ljZVByZWZpeCIsInJlc3BvbnNlQ29ycmVjdCIsImlzUmVzcG9uc2VDb3JyZWN0IiwidW5kZWZpbmVkIiwibGFuZ3VhZ2UiLCJleHRyYUNTU1J1bGVzIiwiZm9udFNpemVGYWN0b3IiLCJpc1NlbGVjdGlvbkJ1dHRvbkJlbG93Iiwic2VsZWN0ZWRBbnN3ZXJCYWNrZ3JvdW5kQ29sb3IiLCJzZWxlY3RlZEFuc3dlclN0cm9rZUNvbG9yIiwic2VsZWN0ZWRBbnN3ZXJTdHJva2VXaWR0aCIsImhvdmVyQW5zd2VyQmFja2dyb3VuZENvbG9yIiwiaG92ZXJBbnN3ZXJTdHJva2VDb2xvciIsImhvdmVyQW5zd2VyU3Ryb2tlV2lkdGgiLCJtaW5TZWxlY3Rpb25zIiwibWF4U2VsZWN0aW9ucyIsImtleWJvYXJkRXZlbnRzRW5hYmxlZCIsImF1dG9wbGF5QXVkaW9FbmFibGVkIiwiY29tcGxldGVBdWRpb0VuYWJsZWQiLCJjdXN0b21BdWRpb0J1dHRvbiIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsImdldFNjb3JlIiwiY29uZmlnIiwiaXNFbXB0eSIsInNlbGVjdGVkQ2hvaWNlcyIsImNvcnJlY3RDaG9pY2VzIiwiZmlsdGVyIiwiY2giLCJzY29yZSIsInJlZHVjZSIsImFjYyIsInNlbGVjdGVkQ2hvaWNlIiwiZmluZCIsImxlbmd0aCIsInN0ciIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiZ2V0TG9nVHJhY2UiLCJ0cmFjZUxvZyIsInNlbGVjdGVkIiwicXVlc3Rpb25UeXBlIiwicHVzaCIsImpvaW4iLCJjIiwiY29ycmVjdFZhbHVlcyIsImNvcnJlY3RTZWxlY3RlZCIsInYiLCJpbmNsdWRlcyIsImluY29ycmVjdFNlbGVjdGVkIiwicGFydGlhbFNjb3JpbmdFbmFibGVkIiwicGFydGlhbFNjb3JpbmciLCJlbmFibGVkIiwic2NvcmluZ01ldGhvZCIsIm91dGNvbWUiLCJlbXB0eSIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJpZCIsImdldElubmVyVGV4dCIsImh0bWwiLCJyZXBsYWNlQWxsIiwiZ2V0Q29udGVudCIsInJlcGxhY2UiLCJ2YWxpZGF0ZSIsIm1pbkFuc3dlckNob2ljZXMiLCJtYXhBbnN3ZXJDaG9pY2VzIiwicmV2ZXJzZWRDaG9pY2VzIiwicmV2ZXJzZSIsImNob2ljZXNFcnJvcnMiLCJyYXRpb25hbGVFcnJvcnMiLCJlcnJvcnMiLCJmb3JFYWNoIiwiZmllbGQiLCJyZXF1aXJlZCIsImhhc0NvcnJlY3RSZXNwb25zZSIsImNvcnJlY3RDb3VudCIsImluZGV4IiwiaWRlbnRpY2FsQW5zd2VyIiwic2xpY2UiLCJzb21lIiwibmJPZkNob2ljZXMiLCJhbnN3ZXJDaG9pY2VzIiwiY29ycmVjdFJlc3BvbnNlIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgaXNSZXNwb25zZUNvcnJlY3QgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzJztcbmltcG9ydCB7IGxvY2tDaG9pY2VzLCBwYXJ0aWFsU2NvcmluZywgZ2V0U2h1ZmZsZWRDaG9pY2VzIH0gZnJvbSAnQHBpZS1saWIvY29udHJvbGxlci11dGlscyc7XG5cbmNvbnN0IHByZXBhcmVDaG9pY2UgPSAobW9kZWwsIGVudiwgZGVmYXVsdEZlZWRiYWNrKSA9PiAoY2hvaWNlKSA9PiB7XG4gIGNvbnN0IHsgcm9sZSwgbW9kZSB9ID0gZW52IHx8IHt9O1xuICBjb25zdCBvdXQgPSB7XG4gICAgbGFiZWw6IGNob2ljZS5sYWJlbCxcbiAgICB2YWx1ZTogY2hvaWNlLnZhbHVlLFxuICB9O1xuXG4gIGlmIChyb2xlID09PSAnaW5zdHJ1Y3RvcicgJiYgKG1vZGUgPT09ICd2aWV3JyB8fCBtb2RlID09PSAnZXZhbHVhdGUnKSkge1xuICAgIG91dC5yYXRpb25hbGUgPSBtb2RlbC5yYXRpb25hbGVFbmFibGVkID8gY2hvaWNlLnJhdGlvbmFsZSA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgb3V0LnJhdGlvbmFsZSA9IG51bGw7XG4gIH1cblxuICBpZiAobW9kZSA9PT0gJ2V2YWx1YXRlJykge1xuICAgIG91dC5jb3JyZWN0ID0gISFjaG9pY2UuY29ycmVjdDtcblxuICAgIGlmIChtb2RlbC5mZWVkYmFja0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGZlZWRiYWNrVHlwZSA9IChjaG9pY2UuZmVlZGJhY2sgJiYgY2hvaWNlLmZlZWRiYWNrLnR5cGUpIHx8ICdub25lJztcblxuICAgICAgaWYgKGZlZWRiYWNrVHlwZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIG91dC5mZWVkYmFjayA9IGRlZmF1bHRGZWVkYmFja1tjaG9pY2UuY29ycmVjdCA/ICdjb3JyZWN0JyA6ICdpbmNvcnJlY3QnXTtcbiAgICAgIH0gZWxzZSBpZiAoZmVlZGJhY2tUeXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICBvdXQuZmVlZGJhY2sgPSBjaG9pY2UuZmVlZGJhY2sudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0TW9kZWwobW9kZWwgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUoeyAuLi5kZWZhdWx0cywgLi4ubW9kZWwgfSkpO1xufVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKHF1ZXN0aW9uKSA9PiB7XG4gIGNvbnN0IHsgdmVydGljYWxNb2RlLCBjaG9pY2VzTGF5b3V0LCAuLi5xdWVzdGlvblByb3BzIH0gPSBxdWVzdGlvbiB8fCB7fTtcblxuICByZXR1cm4ge1xuICAgIC4uLmRlZmF1bHRzLFxuICAgIC4uLnF1ZXN0aW9uUHJvcHMsXG4gICAgLy8gVGhpcyBpcyB1c2VkIGZvciBvZmZlcmluZyBzdXBwb3J0IGZvciBvbGQgbW9kZWxzIHdoaWNoIGhhdmUgdGhlIHByb3BlcnR5IHZlcnRpY2FsTW9kZVxuICAgIC8vIFNhbWUgdGhpbmcgaXMgc2V0IGluIGF1dGhvcmluZyA6IHBhY2thZ2VzL211bHRpcGxlLWNob2ljZS9jb25maWd1cmUvc3JjL2luZGV4LmpzeCAtIGNyZWF0ZURlZmF1bHRNb2RlbFxuICAgIGNob2ljZXNMYXlvdXQ6IGNob2ljZXNMYXlvdXQgfHwgKHZlcnRpY2FsTW9kZSA9PT0gZmFsc2UgJiYgJ2hvcml6b250YWwnKSB8fCBkZWZhdWx0cy5jaG9pY2VzTGF5b3V0LFxuICB9O1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBxdWVzdGlvblxuICogQHBhcmFtIHsqfSBzZXNzaW9uXG4gKiBAcGFyYW0geyp9IGVudlxuICogQHBhcmFtIHsqfSB1cGRhdGVTZXNzaW9uIC0gb3B0aW9uYWwgLSBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBzZXQgdGhlIHByb3BlcnRpZXMgcGFzc2VkIGludG8gaXQgb24gdGhlIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb2RlbChxdWVzdGlvbiwgc2Vzc2lvbiwgZW52LCB1cGRhdGVTZXNzaW9uKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVzdGlvbiA9IG5vcm1hbGl6ZShxdWVzdGlvbik7XG5cbiAgY29uc3QgZGVmYXVsdEZlZWRiYWNrID0gT2JqZWN0LmFzc2lnbihcbiAgICB7IGNvcnJlY3Q6ICdDb3JyZWN0JywgaW5jb3JyZWN0OiAnSW5jb3JyZWN0JyB9LFxuICAgIG5vcm1hbGl6ZWRRdWVzdGlvbi5kZWZhdWx0RmVlZGJhY2ssXG4gICk7XG5cbiAgbGV0IGNob2ljZXMgPSAobm9ybWFsaXplZFF1ZXN0aW9uLmNob2ljZXMgfHwgW10pLm1hcChwcmVwYXJlQ2hvaWNlKG5vcm1hbGl6ZWRRdWVzdGlvbiwgZW52LCBkZWZhdWx0RmVlZGJhY2spKTtcblxuICBjb25zdCBsb2NrQ2hvaWNlT3JkZXIgPSBsb2NrQ2hvaWNlcyhub3JtYWxpemVkUXVlc3Rpb24sIHNlc3Npb24sIGVudik7XG5cbiAgaWYgKCFsb2NrQ2hvaWNlT3JkZXIpIHtcbiAgICBjaG9pY2VzID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sICd2YWx1ZScpO1xuICB9XG5cbiAgY29uc3Qgb3V0ID0ge1xuICAgIGRpc2FibGVkOiBlbnYubW9kZSAhPT0gJ2dhdGhlcicsXG4gICAgbW9kZTogZW52Lm1vZGUsXG4gICAgcHJvbXB0OiBub3JtYWxpemVkUXVlc3Rpb24ucHJvbXB0RW5hYmxlZCA/IG5vcm1hbGl6ZWRRdWVzdGlvbi5wcm9tcHQgOiBudWxsLFxuICAgIGNob2ljZXNMYXlvdXQ6IG5vcm1hbGl6ZWRRdWVzdGlvbi5jaG9pY2VzTGF5b3V0LFxuICAgIGdyaWRDb2x1bW5zOiBub3JtYWxpemVkUXVlc3Rpb24uZ3JpZENvbHVtbnMsXG4gICAgY2hvaWNlTW9kZTogbm9ybWFsaXplZFF1ZXN0aW9uLmNob2ljZU1vZGUsXG4gICAga2V5TW9kZTogbm9ybWFsaXplZFF1ZXN0aW9uLmNob2ljZVByZWZpeCxcbiAgICBjaG9pY2VzLFxuICAgIHJlc3BvbnNlQ29ycmVjdDogZW52Lm1vZGUgPT09ICdldmFsdWF0ZScgPyBpc1Jlc3BvbnNlQ29ycmVjdChub3JtYWxpemVkUXVlc3Rpb24sIHNlc3Npb24pIDogdW5kZWZpbmVkLFxuICAgIGxhbmd1YWdlOiBub3JtYWxpemVkUXVlc3Rpb24ubGFuZ3VhZ2UsXG4gICAgZXh0cmFDU1NSdWxlczogbm9ybWFsaXplZFF1ZXN0aW9uLmV4dHJhQ1NTUnVsZXMsXG4gICAgZm9udFNpemVGYWN0b3I6IG5vcm1hbGl6ZWRRdWVzdGlvbi5mb250U2l6ZUZhY3RvcixcbiAgICBpc1NlbGVjdGlvbkJ1dHRvbkJlbG93OiBub3JtYWxpemVkUXVlc3Rpb24uaXNTZWxlY3Rpb25CdXR0b25CZWxvdyxcbiAgICBzZWxlY3RlZEFuc3dlckJhY2tncm91bmRDb2xvcjogbm9ybWFsaXplZFF1ZXN0aW9uLnNlbGVjdGVkQW5zd2VyQmFja2dyb3VuZENvbG9yIHx8ICdpbml0aWFsJyxcbiAgICBzZWxlY3RlZEFuc3dlclN0cm9rZUNvbG9yOiBub3JtYWxpemVkUXVlc3Rpb24uc2VsZWN0ZWRBbnN3ZXJTdHJva2VDb2xvciB8fCAnaW5pdGlhbCcsXG4gICAgc2VsZWN0ZWRBbnN3ZXJTdHJva2VXaWR0aDogbm9ybWFsaXplZFF1ZXN0aW9uLnNlbGVjdGVkQW5zd2VyU3Ryb2tlV2lkdGggfHwgJ2luaXRpYWwnLFxuICAgIGhvdmVyQW5zd2VyQmFja2dyb3VuZENvbG9yOiBub3JtYWxpemVkUXVlc3Rpb24uaG92ZXJBbnN3ZXJCYWNrZ3JvdW5kQ29sb3IgfHwgJ2luaXRpYWwnLFxuICAgIGhvdmVyQW5zd2VyU3Ryb2tlQ29sb3I6IG5vcm1hbGl6ZWRRdWVzdGlvbi5ob3ZlckFuc3dlclN0cm9rZUNvbG9yIHx8ICdpbml0aWFsJyxcbiAgICBob3ZlckFuc3dlclN0cm9rZVdpZHRoOiBub3JtYWxpemVkUXVlc3Rpb24uaG92ZXJBbnN3ZXJTdHJva2VXaWR0aCB8fCAnaW5pdGlhbCcsXG4gICAgbWluU2VsZWN0aW9uczogbm9ybWFsaXplZFF1ZXN0aW9uLm1pblNlbGVjdGlvbnMsXG4gICAgbWF4U2VsZWN0aW9uczogbm9ybWFsaXplZFF1ZXN0aW9uLm1heFNlbGVjdGlvbnMsXG4gICAga2V5Ym9hcmRFdmVudHNFbmFibGVkOiBub3JtYWxpemVkUXVlc3Rpb24ua2V5Ym9hcmRFdmVudHNFbmFibGVkLFxuICAgIGF1dG9wbGF5QXVkaW9FbmFibGVkOiBub3JtYWxpemVkUXVlc3Rpb24uYXV0b3BsYXlBdWRpb0VuYWJsZWQsXG4gICAgY29tcGxldGVBdWRpb0VuYWJsZWQ6IG5vcm1hbGl6ZWRRdWVzdGlvbi5jb21wbGV0ZUF1ZGlvRW5hYmxlZCxcbiAgICBjdXN0b21BdWRpb0J1dHRvbjogbm9ybWFsaXplZFF1ZXN0aW9uLmN1c3RvbUF1ZGlvQnV0dG9uLFxuICB9O1xuXG4gIGNvbnN0IHsgcm9sZSwgbW9kZSB9ID0gZW52IHx8IHt9O1xuXG4gIGlmIChyb2xlID09PSAnaW5zdHJ1Y3RvcicgJiYgKG1vZGUgPT09ICd2aWV3JyB8fCBtb2RlID09PSAnZXZhbHVhdGUnKSkge1xuICAgIG91dC50ZWFjaGVySW5zdHJ1Y3Rpb25zID0gbm9ybWFsaXplZFF1ZXN0aW9uLnRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkXG4gICAgICA/IG5vcm1hbGl6ZWRRdWVzdGlvbi50ZWFjaGVySW5zdHJ1Y3Rpb25zXG4gICAgICA6IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgb3V0LnRlYWNoZXJJbnN0cnVjdGlvbnMgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNjb3JlID0gKGNvbmZpZywgc2Vzc2lvbikgPT4ge1xuICBpZiAoIXNlc3Npb24gfHwgaXNFbXB0eShzZXNzaW9uKSkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0ZWRDaG9pY2VzID0gc2Vzc2lvbi52YWx1ZSB8fCBbXTtcbiAgY29uc3QgY29ycmVjdENob2ljZXMgPSAoY29uZmlnLmNob2ljZXMgfHwgW10pLmZpbHRlcigoY2gpID0+IGNoLmNvcnJlY3QpO1xuXG4gIGxldCBzY29yZSA9IHNlbGVjdGVkQ2hvaWNlcy5yZWR1Y2UoXG4gICAgKGFjYywgc2VsZWN0ZWRDaG9pY2UpID0+IGFjYyArIChjb3JyZWN0Q2hvaWNlcy5maW5kKChjaCkgPT4gY2gudmFsdWUgPT09IHNlbGVjdGVkQ2hvaWNlKSA/IDEgOiAwKSxcbiAgICAwLFxuICApO1xuXG4gIGlmIChjb3JyZWN0Q2hvaWNlcy5sZW5ndGggPCBzZWxlY3RlZENob2ljZXMubGVuZ3RoKSB7XG4gICAgc2NvcmUgLT0gc2VsZWN0ZWRDaG9pY2VzLmxlbmd0aCAtIGNvcnJlY3RDaG9pY2VzLmxlbmd0aDtcblxuICAgIGlmIChzY29yZSA8IDApIHtcbiAgICAgIHNjb3JlID0gMDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdHIgPSBjb3JyZWN0Q2hvaWNlcy5sZW5ndGggPyBzY29yZSAvIGNvcnJlY3RDaG9pY2VzLmxlbmd0aCA6IDA7XG5cbiAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyLnRvRml4ZWQoMikpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgZGV0YWlsZWQgdHJhY2UgbG9nIGZvciBzY29yaW5nIGV2YWx1YXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtb2RlbCAtIHRoZSBxdWVzdGlvbiBtb2RlbFxuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb24gLSB0aGUgc3R1ZGVudCBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZW52IC0gdGhlIGVudmlyb25tZW50XG4gKiBAcmV0dXJucyB7QXJyYXl9IHRyYWNlTG9nIC0gYXJyYXkgb2YgdHJhY2UgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExvZ1RyYWNlID0gKG1vZGVsLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgY29uc3QgdHJhY2VMb2cgPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBzZXNzaW9uPy52YWx1ZSB8fCBbXTtcbiAgXG4gIGNvbnN0IHF1ZXN0aW9uVHlwZSA9IG1vZGVsLmNob2ljZU1vZGUgPT09ICdyYWRpbycgPyAnbXVsdGlwbGUtY2hvaWNlIChyYWRpbyknIDogJ211bHRpcGxlLXNlbGVjdCAoY2hlY2tib3gpJztcbiAgdHJhY2VMb2cucHVzaChgUXVlc3Rpb24gdHlwZTogJHtxdWVzdGlvblR5cGV9LmApO1xuICBcbiAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgIHRyYWNlTG9nLnB1c2goYFN0dWRlbnQgc2VsZWN0ZWQgJHtzZWxlY3RlZC5sZW5ndGh9IGFuc3dlcihzKTogJHtzZWxlY3RlZC5qb2luKCcsICcpfS5gKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZUxvZy5wdXNoKCdTdHVkZW50IGRpZCBub3Qgc2VsZWN0IGFueSBhbnN3ZXJzLicpO1xuICB9XG5cbiAgY29uc3QgY29ycmVjdENob2ljZXMgPSAobW9kZWwuY2hvaWNlcyB8fCBbXSkuZmlsdGVyKChjKSA9PiBjLmNvcnJlY3QpO1xuICBjb25zdCBjb3JyZWN0VmFsdWVzID0gY29ycmVjdENob2ljZXMubWFwKChjKSA9PiBjLnZhbHVlKTtcbiAgdHJhY2VMb2cucHVzaChgJHtjb3JyZWN0Q2hvaWNlcy5sZW5ndGh9IGNvcnJlY3QgYW5zd2VyKHMpIGFyZSBkZWZpbmVkIGZvciB0aGlzIHF1ZXN0aW9uLmApO1xuICBcbiAgaWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuICAgIGNvbnN0IGNvcnJlY3RTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcigodikgPT4gY29ycmVjdFZhbHVlcy5pbmNsdWRlcyh2KSk7XG4gICAgY29uc3QgaW5jb3JyZWN0U2VsZWN0ZWQgPSBzZWxlY3RlZC5maWx0ZXIoKHYpID0+ICFjb3JyZWN0VmFsdWVzLmluY2x1ZGVzKHYpKTtcbiAgICB0cmFjZUxvZy5wdXNoKFxuICAgICAgYFN0dWRlbnQgc2VsZWN0ZWQgJHtjb3JyZWN0U2VsZWN0ZWQubGVuZ3RofSBjb3JyZWN0IGFuZCAke2luY29ycmVjdFNlbGVjdGVkLmxlbmd0aH0gaW5jb3JyZWN0IGFuc3dlcihzKS5gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnRpYWxTY29yaW5nRW5hYmxlZCA9IHBhcnRpYWxTY29yaW5nLmVuYWJsZWQobW9kZWwsIGVudikgJiYgbW9kZWwuY2hvaWNlTW9kZSAhPT0gJ3JhZGlvJztcbiAgY29uc3Qgc2NvcmluZ01ldGhvZCA9IHBhcnRpYWxTY29yaW5nRW5hYmxlZCA/ICdwYXJ0aWFsIHNjb3JpbmcnIDogJ2FsbC1vci1ub3RoaW5nIHNjb3JpbmcnO1xuICB0cmFjZUxvZy5wdXNoKGBTY29yZSBjYWxjdWxhdGVkIHVzaW5nICR7c2NvcmluZ01ldGhvZH0uYCk7XG5cbiAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZShtb2RlbCwgc2Vzc2lvbik7XG4gIHRyYWNlTG9nLnB1c2goYEZpbmFsIHNjb3JlOiAke3Njb3JlfS5gKTtcblxuICByZXR1cm4gdHJhY2VMb2c7XG59O1xuXG4vKipcbiAqXG4gKiBUaGUgc2NvcmUgaXMgcGFydGlhbCBieSBkZWZhdWx0IGZvciBjaGVja2JveCBtb2RlLCBhbGxPck5vdGhpbmcgZm9yIHJhZGlvIG1vZGUuXG4gKiBUbyBkaXNhYmxlIHBhcnRpYWwgc2NvcmluZyBmb3IgY2hlY2tib3ggbW9kZSB5b3UgZWl0aGVyIHNldCBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlIG9yIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLiB0aGUgdmFsdWUgaW4gYGVudmAgd2lsbFxuICogb3ZlcnJpZGUgdGhlIHZhbHVlIGluIGBtb2RlbGAuXG4gKiBAcGFyYW0ge09iamVjdH0gbW9kZWwgLSB0aGUgbWFpbiBtb2RlbFxuICogQHBhcmFtIHsqfSBzZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gZW52XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdXRjb21lKG1vZGVsLCBzZXNzaW9uLCBlbnYpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uIHx8IGlzRW1wdHkoc2Vzc2lvbikpIHtcbiAgICAgIHJlc29sdmUoeyBzY29yZTogMCwgZW1wdHk6IHRydWUsIHRyYWNlTG9nOiBbJ1N0dWRlbnQgZGlkIG5vdCBzZWxlY3QgYW55IGFuc3dlcnMuIFNjb3JlIGlzIDAuJ10gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyYWNlTG9nID0gZ2V0TG9nVHJhY2UobW9kZWwsIHNlc3Npb24sIGVudik7XG4gICAgICBjb25zdCBzY29yZSA9IGdldFNjb3JlKG1vZGVsLCBzZXNzaW9uKTtcbiAgICAgIGNvbnN0IHBhcnRpYWxTY29yaW5nRW5hYmxlZCA9IHBhcnRpYWxTY29yaW5nLmVuYWJsZWQobW9kZWwsIGVudikgJiYgbW9kZWwuY2hvaWNlTW9kZSAhPT0gJ3JhZGlvJztcblxuICAgICAgcmVzb2x2ZSh7IFxuICAgICAgICBzY29yZTogcGFydGlhbFNjb3JpbmdFbmFibGVkID8gc2NvcmUgOiBzY29yZSA9PT0gMSA/IDEgOiAwLCBcbiAgICAgICAgZW1wdHk6IGZhbHNlLCBcbiAgICAgICAgdHJhY2VMb2cgXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlQ29ycmVjdFJlc3BvbnNlU2Vzc2lvbiA9IChxdWVzdGlvbiwgZW52KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmIChlbnYubW9kZSAhPT0gJ2V2YWx1YXRlJyAmJiBlbnYucm9sZSA9PT0gJ2luc3RydWN0b3InKSB7XG4gICAgICBjb25zdCB7IGNob2ljZXMgfSA9IHF1ZXN0aW9uIHx8IHsgY2hvaWNlczogW10gfTtcblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIHZhbHVlOiBjaG9pY2VzLmZpbHRlcigoYykgPT4gYy5jb3JyZWN0KS5tYXAoKGMpID0+IGMudmFsdWUpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8vIHJlbW92ZSBhbGwgaHRtbCB0YWdzXG5jb25zdCBnZXRJbm5lclRleHQgPSAoaHRtbCkgPT4gKGh0bWwgfHwgJycpLnJlcGxhY2VBbGwoLzxbXj5dKj4vZywgJycpO1xuXG4vLyByZW1vdmUgYWxsIGh0bWwgdGFncyBleGNlcHQgaW1nLCBpZnJhbWUgYW5kIHNvdXJjZSB0YWcgZm9yIGF1ZGlvXG5jb25zdCBnZXRDb250ZW50ID0gKGh0bWwpID0+IChodG1sIHx8ICcnKS5yZXBsYWNlKC8oPCg/IWltZ3xpZnJhbWV8c291cmNlKShbXj5dKyk+KS9naSwgJycpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSAobW9kZWwgPSB7fSwgY29uZmlnID0ge30pID0+IHtcbiAgY29uc3QgeyBjaG9pY2VzIH0gPSBtb2RlbDtcbiAgY29uc3QgeyBtaW5BbnN3ZXJDaG9pY2VzID0gMiwgbWF4QW5zd2VyQ2hvaWNlcyB9ID0gY29uZmlnO1xuICBjb25zdCByZXZlcnNlZENob2ljZXMgPSBbLi4uKGNob2ljZXMgfHwgW10pXS5yZXZlcnNlKCk7XG4gIGNvbnN0IGNob2ljZXNFcnJvcnMgPSB7fTtcbiAgY29uc3QgcmF0aW9uYWxlRXJyb3JzID0ge307XG4gIGNvbnN0IGVycm9ycyA9IHt9O1xuXG4gIFsndGVhY2hlckluc3RydWN0aW9ucycsICdwcm9tcHQnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIGlmIChjb25maWdbZmllbGRdPy5yZXF1aXJlZCAmJiAhZ2V0Q29udGVudChtb2RlbFtmaWVsZF0pKSB7XG4gICAgICBlcnJvcnNbZmllbGRdID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJztcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBoYXNDb3JyZWN0UmVzcG9uc2UgPSBmYWxzZTtcbiAgbGV0IGNvcnJlY3RDb3VudCA9IDA7XG5cbiAgcmV2ZXJzZWRDaG9pY2VzLmZvckVhY2goKGNob2ljZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IGNvcnJlY3QsIHZhbHVlLCBsYWJlbCwgcmF0aW9uYWxlIH0gPSBjaG9pY2U7XG5cbiAgICBpZiAoY29ycmVjdCkge1xuICAgICAgaGFzQ29ycmVjdFJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgIGNvcnJlY3RDb3VudCsrO1xuICAgIH1cblxuICAgIGlmICghZ2V0Q29udGVudChsYWJlbCkpIHtcbiAgICAgIGNob2ljZXNFcnJvcnNbdmFsdWVdID0gJ0NvbnRlbnQgc2hvdWxkIG5vdCBiZSBlbXB0eS4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZGVudGljYWxBbnN3ZXIgPSByZXZlcnNlZENob2ljZXMuc2xpY2UoaW5kZXggKyAxKS5zb21lKChjKSA9PiBjLmxhYmVsID09PSBsYWJlbCk7XG5cbiAgICAgIGlmIChpZGVudGljYWxBbnN3ZXIpIHtcbiAgICAgICAgY2hvaWNlc0Vycm9yc1t2YWx1ZV0gPSAnQ29udGVudCBzaG91bGQgYmUgdW5pcXVlLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5yYXRpb25hbGU/LnJlcXVpcmVkICYmICFnZXRDb250ZW50KHJhdGlvbmFsZSkpIHtcbiAgICAgIHJhdGlvbmFsZUVycm9yc1t2YWx1ZV0gPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmJPZkNob2ljZXMgPSAoY2hvaWNlcyB8fCBbXSkubGVuZ3RoO1xuXG4gIGlmIChuYk9mQ2hvaWNlcyA8IG1pbkFuc3dlckNob2ljZXMpIHtcbiAgICBlcnJvcnMuYW5zd2VyQ2hvaWNlcyA9IGBUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgJHttaW5BbnN3ZXJDaG9pY2VzfSBjaG9pY2VzIGRlZmluZWQuYDtcbiAgfSBlbHNlIGlmIChuYk9mQ2hvaWNlcyA+IG1heEFuc3dlckNob2ljZXMpIHtcbiAgICBlcnJvcnMuYW5zd2VyQ2hvaWNlcyA9IGBObyBtb3JlIHRoYW4gJHttYXhBbnN3ZXJDaG9pY2VzfSBjaG9pY2VzIHNob3VsZCBiZSBkZWZpbmVkLmA7XG4gIH1cblxuICBpZiAoIWhhc0NvcnJlY3RSZXNwb25zZSkge1xuICAgIGVycm9ycy5jb3JyZWN0UmVzcG9uc2UgPSAnTm8gY29ycmVjdCByZXNwb25zZSBkZWZpbmVkLic7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBtYXhTZWxlY3Rpb25zLCBjaG9pY2VNb2RlIH0gPSBtb2RlbDtcblxuICAgIGlmIChjaG9pY2VNb2RlICE9PSAncmFkaW8nICYmIG1heFNlbGVjdGlvbnMgIT0gbnVsbCAmJiBjb3JyZWN0Q291bnQgPiBtYXhTZWxlY3Rpb25zKSB7XG4gICAgICBlcnJvcnMuY29ycmVjdFJlc3BvbnNlID0gYFRoZSBudW1iZXIgb2YgY29ycmVjdCBhbnN3ZXJzICgke2NvcnJlY3RDb3VudH0pIGV4Y2VlZHMgbWF4IHNlbGVjdGlvbnMgKCR7bWF4U2VsZWN0aW9uc30pLiBTdHVkZW50cyB3b24ndCBiZSBhYmxlIHRvIHNlbGVjdCBhbGwgY29ycmVjdCBhbnN3ZXJzLmA7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc0VtcHR5KGNob2ljZXNFcnJvcnMpKSB7XG4gICAgZXJyb3JzLmNob2ljZXMgPSBjaG9pY2VzRXJyb3JzO1xuICB9XG5cbiAgaWYgKCFpc0VtcHR5KHJhdGlvbmFsZUVycm9ycykpIHtcbiAgICBlcnJvcnMucmF0aW9uYWxlID0gcmF0aW9uYWxlRXJyb3JzO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFD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
|
package/controller/lib/utils.js
CHANGED
|
@@ -12,4 +12,4 @@ const isResponseCorrect = (question, session) => {
|
|
|
12
12
|
return session && (0, _lodashEs.isEqual)((session.value || []).sort(), correctResponse);
|
|
13
13
|
};
|
|
14
14
|
exports.isResponseCorrect = isResponseCorrect;
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiZ2V0Q29ycmVjdFJlc3BvbnNlIiwiY2hvaWNlcyIsImZpbHRlciIsImMiLCJjb3JyZWN0IiwibWFwIiwidmFsdWUiLCJzb3J0IiwiZXhwb3J0cyIsImlzUmVzcG9uc2VDb3JyZWN0IiwicXVlc3Rpb24iLCJzZXNzaW9uIiwiY29ycmVjdFJlc3BvbnNlIiwiaXNFcXVhbCJdLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IGNvbnN0IGdldENvcnJlY3RSZXNwb25zZSA9IChjaG9pY2VzKSA9PlxuICBjaG9pY2VzXG4gICAgLmZpbHRlcigoYykgPT4gYy5jb3JyZWN0KVxuICAgIC5tYXAoKGMpID0+IGMudmFsdWUpXG4gICAgLnNvcnQoKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVzcG9uc2VDb3JyZWN0ID0gKHF1ZXN0aW9uLCBzZXNzaW9uKSA9PiB7XG4gIGxldCBjb3JyZWN0UmVzcG9uc2UgPSBnZXRDb3JyZWN0UmVzcG9uc2UocXVlc3Rpb24uY2hvaWNlcyk7XG4gIHJldHVybiBzZXNzaW9uICYmIGlzRXF1YWwoKHNlc3Npb24udmFsdWUgfHwgW10pLnNvcnQoKSwgY29ycmVjdFJlc3BvbnNlKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUVPLE1BQU1DLGtCQUFrQixHQUFJQyxPQUFPLElBQ3hDQSxPQUFPLENBQ0pDLE1BQU0sQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUN4QkMsR0FBRyxDQUFFRixDQUFDLElBQUtBLENBQUMsQ0FBQ0csS0FBSyxDQUFDLENBQ25CQyxJQUFJLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFSLGtCQUFBLEdBQUFBLGtCQUFBO0FBRUwsTUFBTVMsaUJBQWlCLEdBQUdBLENBQUNDLFFBQVEsRUFBRUMsT0FBTyxLQUFLO0VBQ3RELElBQUlDLGVBQWUsR0FBR1osa0JBQWtCLENBQUNVLFFBQVEsQ0FBQ1QsT0FBTyxDQUFDO0VBQzFELE9BQU9VLE9BQU8sSUFBSSxJQUFBRSxpQkFBTyxFQUFDLENBQUNGLE9BQU8sQ0FBQ0wsS0FBSyxJQUFJLEVBQUUsRUFBRUMsSUFBSSxDQUFDLENBQUMsRUFBRUssZUFBZSxDQUFDO0FBQzFFLENBQUM7QUFBQ0osT0FBQSxDQUFBQyxpQkFBQSxHQUFBQSxpQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
package/controller/package.json
CHANGED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _choiceInput = require("../choice-input");
|
|
8
|
+
describe('ChoiceInput', () => {
|
|
9
|
+
let onChange;
|
|
10
|
+
const mkWrapper = (opts = {}) => {
|
|
11
|
+
const defaultOpts = {
|
|
12
|
+
checked: false,
|
|
13
|
+
disabled: false,
|
|
14
|
+
choiceMode: 'checkbox',
|
|
15
|
+
label: 'label',
|
|
16
|
+
displayKey: '1',
|
|
17
|
+
correctness: 'correct',
|
|
18
|
+
value: 'value',
|
|
19
|
+
classes: {
|
|
20
|
+
label: 'label'
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const finalOpts = {
|
|
24
|
+
...defaultOpts,
|
|
25
|
+
...opts
|
|
26
|
+
};
|
|
27
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_choiceInput.ChoiceInput, (0, _extends2.default)({}, finalOpts, {
|
|
28
|
+
onChange: onChange
|
|
29
|
+
})));
|
|
30
|
+
};
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
onChange = jest.fn();
|
|
33
|
+
});
|
|
34
|
+
describe('onToggleChoice', () => {
|
|
35
|
+
it('calls handler when checkbox is clicked', () => {
|
|
36
|
+
const {
|
|
37
|
+
container
|
|
38
|
+
} = mkWrapper({
|
|
39
|
+
disabled: false
|
|
40
|
+
});
|
|
41
|
+
const input = container.querySelector('input[type="checkbox"]');
|
|
42
|
+
if (input) {
|
|
43
|
+
_react2.fireEvent.click(input);
|
|
44
|
+
expect(onChange).toHaveBeenCalled();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfY2hvaWNlSW5wdXQiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwibWtXcmFwcGVyIiwib3B0cyIsImRlZmF1bHRPcHRzIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hvaWNlTW9kZSIsImxhYmVsIiwiZGlzcGxheUtleSIsImNvcnJlY3RuZXNzIiwidmFsdWUiLCJjbGFzc2VzIiwiZmluYWxPcHRzIiwicmVuZGVyIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJDaG9pY2VJbnB1dCIsIl9leHRlbmRzMiIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJpdCIsImNvbnRhaW5lciIsImlucHV0IiwicXVlcnlTZWxlY3RvciIsImZpcmVFdmVudCIsImNsaWNrIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY2hvaWNlLWlucHV0LXRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIGZpcmVFdmVudCB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgQ2hvaWNlSW5wdXQgfSBmcm9tICcuLi9jaG9pY2UtaW5wdXQnO1xuXG5kZXNjcmliZSgnQ2hvaWNlSW5wdXQnLCAoKSA9PiB7XG4gIGxldCBvbkNoYW5nZTtcblxuICBjb25zdCBta1dyYXBwZXIgPSAob3B0cyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdE9wdHMgPSB7XG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgIGRpc3BsYXlLZXk6ICcxJyxcbiAgICAgIGNvcnJlY3RuZXNzOiAnY29ycmVjdCcsXG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgbGFiZWw6ICdsYWJlbCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBmaW5hbE9wdHMgPSB7IC4uLmRlZmF1bHRPcHRzLCAuLi5vcHRzIH07XG5cbiAgICByZXR1cm4gcmVuZGVyKDxDaG9pY2VJbnB1dCB7Li4uZmluYWxPcHRzfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uVG9nZ2xlQ2hvaWNlJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBoYW5kbGVyIHdoZW4gY2hlY2tib3ggaXMgY2xpY2tlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSBta1dyYXBwZXIoeyBkaXNhYmxlZDogZmFsc2UgfSk7XG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGZpcmVFdmVudC5jbGljayhpbnB1dCk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBRUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTTtFQUM1QixJQUFJQyxRQUFRO0VBRVosTUFBTUMsU0FBUyxHQUFHQSxDQUFDQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUs7SUFDL0IsTUFBTUMsV0FBVyxHQUFHO01BQ2xCQyxPQUFPLEVBQUUsS0FBSztNQUNkQyxRQUFRLEVBQUUsS0FBSztNQUNmQyxVQUFVLEVBQUUsVUFBVTtNQUN0QkMsS0FBSyxFQUFFLE9BQU87TUFDZEMsVUFBVSxFQUFFLEdBQUc7TUFDZkMsV0FBVyxFQUFFLFNBQVM7TUFDdEJDLEtBQUssRUFBRSxPQUFPO01BQ2RDLE9BQU8sRUFBRTtRQUNQSixLQUFLLEVBQUU7TUFDVDtJQUNGLENBQUM7SUFFRCxNQUFNSyxTQUFTLEdBQUc7TUFBRSxHQUFHVCxXQUFXO01BQUUsR0FBR0Q7SUFBSyxDQUFDO0lBRTdDLE9BQU8sSUFBQVcsY0FBTSxlQUFDbkIsTUFBQSxDQUFBb0IsT0FBQSxDQUFBQyxhQUFBLENBQUNqQixZQUFBLENBQUFrQixXQUFXLE1BQUFDLFNBQUEsQ0FBQUgsT0FBQSxNQUFLRixTQUFTO01BQUVaLFFBQVEsRUFBRUE7SUFBUyxFQUFFLENBQUMsQ0FBQztFQUNuRSxDQUFDO0VBRURrQixVQUFVLENBQUMsTUFBTTtJQUNmbEIsUUFBUSxHQUFHbUIsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRnJCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO0lBQy9Cc0IsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLE1BQU07TUFDakQsTUFBTTtRQUFFQztNQUFVLENBQUMsR0FBR3JCLFNBQVMsQ0FBQztRQUFFSSxRQUFRLEVBQUU7TUFBTSxDQUFDLENBQUM7TUFDcEQsTUFBTWtCLEtBQUssR0FBR0QsU0FBUyxDQUFDRSxhQUFhLENBQUMsd0JBQXdCLENBQUM7TUFFL0QsSUFBSUQsS0FBSyxFQUFFO1FBQ1RFLGlCQUFTLENBQUNDLEtBQUssQ0FBQ0gsS0FBSyxDQUFDO1FBQ3RCSSxNQUFNLENBQUMzQixRQUFRLENBQUMsQ0FBQzRCLGdCQUFnQixDQUFDLENBQUM7TUFDckM7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
var _choiceInput = require("../choice-input");
|
|
8
|
+
describe('ChoiceInput', () => {
|
|
9
|
+
let onChange;
|
|
10
|
+
const mkWrapper = (opts = {}) => {
|
|
11
|
+
const defaultOpts = {
|
|
12
|
+
checked: false,
|
|
13
|
+
disabled: false,
|
|
14
|
+
choiceMode: 'checkbox',
|
|
15
|
+
label: 'label',
|
|
16
|
+
displayKey: '1',
|
|
17
|
+
correctness: 'correct',
|
|
18
|
+
value: 'value',
|
|
19
|
+
classes: {
|
|
20
|
+
label: 'label'
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const finalOpts = {
|
|
24
|
+
...defaultOpts,
|
|
25
|
+
...opts
|
|
26
|
+
};
|
|
27
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_choiceInput.ChoiceInput, (0, _extends2.default)({}, finalOpts, {
|
|
28
|
+
onChange: onChange
|
|
29
|
+
})));
|
|
30
|
+
};
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
onChange = jest.fn();
|
|
33
|
+
});
|
|
34
|
+
describe('onToggleChoice', () => {
|
|
35
|
+
it('calls handler when checkbox is clicked', () => {
|
|
36
|
+
const {
|
|
37
|
+
container
|
|
38
|
+
} = mkWrapper({
|
|
39
|
+
disabled: false
|
|
40
|
+
});
|
|
41
|
+
const input = container.querySelector('input[type="checkbox"]');
|
|
42
|
+
if (input) {
|
|
43
|
+
_react2.fireEvent.click(input);
|
|
44
|
+
expect(onChange).toHaveBeenCalled();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfY2hvaWNlSW5wdXQiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwibWtXcmFwcGVyIiwib3B0cyIsImRlZmF1bHRPcHRzIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hvaWNlTW9kZSIsImxhYmVsIiwiZGlzcGxheUtleSIsImNvcnJlY3RuZXNzIiwidmFsdWUiLCJjbGFzc2VzIiwiZmluYWxPcHRzIiwicmVuZGVyIiwiZGVmYXVsdCIsImNyZWF0ZUVsZW1lbnQiLCJDaG9pY2VJbnB1dCIsIl9leHRlbmRzMiIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJpdCIsImNvbnRhaW5lciIsImlucHV0IiwicXVlcnlTZWxlY3RvciIsImZpcmVFdmVudCIsImNsaWNrIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY2hvaWNlLWlucHV0LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIGZpcmVFdmVudCB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHsgQ2hvaWNlSW5wdXQgfSBmcm9tICcuLi9jaG9pY2UtaW5wdXQnO1xuXG5kZXNjcmliZSgnQ2hvaWNlSW5wdXQnLCAoKSA9PiB7XG4gIGxldCBvbkNoYW5nZTtcblxuICBjb25zdCBta1dyYXBwZXIgPSAob3B0cyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdE9wdHMgPSB7XG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIGNob2ljZU1vZGU6ICdjaGVja2JveCcsXG4gICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgIGRpc3BsYXlLZXk6ICcxJyxcbiAgICAgIGNvcnJlY3RuZXNzOiAnY29ycmVjdCcsXG4gICAgICB2YWx1ZTogJ3ZhbHVlJyxcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgbGFiZWw6ICdsYWJlbCcsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBmaW5hbE9wdHMgPSB7IC4uLmRlZmF1bHRPcHRzLCAuLi5vcHRzIH07XG5cbiAgICByZXR1cm4gcmVuZGVyKDxDaG9pY2VJbnB1dCB7Li4uZmluYWxPcHRzfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uVG9nZ2xlQ2hvaWNlJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBoYW5kbGVyIHdoZW4gY2hlY2tib3ggaXMgY2xpY2tlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSBta1dyYXBwZXIoeyBkaXNhYmxlZDogZmFsc2UgfSk7XG4gICAgICBjb25zdCBpbnB1dCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcblxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGZpcmVFdmVudC5jbGljayhpbnB1dCk7XG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBRUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsTUFBTTtFQUM1QixJQUFJQyxRQUFRO0VBRVosTUFBTUMsU0FBUyxHQUFHQSxDQUFDQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUs7SUFDL0IsTUFBTUMsV0FBVyxHQUFHO01BQ2xCQyxPQUFPLEVBQUUsS0FBSztNQUNkQyxRQUFRLEVBQUUsS0FBSztNQUNmQyxVQUFVLEVBQUUsVUFBVTtNQUN0QkMsS0FBSyxFQUFFLE9BQU87TUFDZEMsVUFBVSxFQUFFLEdBQUc7TUFDZkMsV0FBVyxFQUFFLFNBQVM7TUFDdEJDLEtBQUssRUFBRSxPQUFPO01BQ2RDLE9BQU8sRUFBRTtRQUNQSixLQUFLLEVBQUU7TUFDVDtJQUNGLENBQUM7SUFFRCxNQUFNSyxTQUFTLEdBQUc7TUFBRSxHQUFHVCxXQUFXO01BQUUsR0FBR0Q7SUFBSyxDQUFDO0lBRTdDLE9BQU8sSUFBQVcsY0FBTSxlQUFDbkIsTUFBQSxDQUFBb0IsT0FBQSxDQUFBQyxhQUFBLENBQUNqQixZQUFBLENBQUFrQixXQUFXLE1BQUFDLFNBQUEsQ0FBQUgsT0FBQSxNQUFLRixTQUFTO01BQUVaLFFBQVEsRUFBRUE7SUFBUyxFQUFFLENBQUMsQ0FBQztFQUNuRSxDQUFDO0VBRURrQixVQUFVLENBQUMsTUFBTTtJQUNmbEIsUUFBUSxHQUFHbUIsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRnJCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO0lBQy9Cc0IsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLE1BQU07TUFDakQsTUFBTTtRQUFFQztNQUFVLENBQUMsR0FBR3JCLFNBQVMsQ0FBQztRQUFFSSxRQUFRLEVBQUU7TUFBTSxDQUFDLENBQUM7TUFDcEQsTUFBTWtCLEtBQUssR0FBR0QsU0FBUyxDQUFDRSxhQUFhLENBQUMsd0JBQXdCLENBQUM7TUFFL0QsSUFBSUQsS0FBSyxFQUFFO1FBQ1RFLGlCQUFTLENBQUNDLEtBQUssQ0FBQ0gsS0FBSyxDQUFDO1FBQ3RCSSxNQUFNLENBQUMzQixRQUFRLENBQUMsQ0FBQzRCLGdCQUFnQixDQUFDLENBQUM7TUFDckM7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
7
|
+
var _main = _interopRequireDefault(require("../main"));
|
|
8
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
9
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
10
|
+
jest.useFakeTimers();
|
|
11
|
+
jest.mock('@pie-lib/math-rendering', () => ({
|
|
12
|
+
renderMath: jest.fn()
|
|
13
|
+
}));
|
|
14
|
+
jest.mock('lodash-es', () => {
|
|
15
|
+
const lodash = require('lodash');
|
|
16
|
+
return {
|
|
17
|
+
...lodash,
|
|
18
|
+
debounce: jest.fn(fn => fn)
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// Mock the render-ui PreviewLayout
|
|
23
|
+
jest.mock('@pie-lib/render-ui', () => ({
|
|
24
|
+
PreviewLayout: ({
|
|
25
|
+
children
|
|
26
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
27
|
+
"data-testid": "preview-layout"
|
|
28
|
+
}, children),
|
|
29
|
+
Collapsible: ({
|
|
30
|
+
children,
|
|
31
|
+
labels
|
|
32
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
33
|
+
"data-testid": "collapsible"
|
|
34
|
+
}, /*#__PURE__*/_react.default.createElement("button", null, labels?.hidden || 'Show'), children),
|
|
35
|
+
PreviewPrompt: ({
|
|
36
|
+
prompt
|
|
37
|
+
}) => /*#__PURE__*/_react.default.createElement("div", {
|
|
38
|
+
"data-testid": "preview-prompt"
|
|
39
|
+
}, prompt),
|
|
40
|
+
color: {
|
|
41
|
+
text: () => '#000',
|
|
42
|
+
background: () => '#fff',
|
|
43
|
+
primary: () => '#1976d2',
|
|
44
|
+
correct: () => '#4caf50',
|
|
45
|
+
incorrect: () => '#f44336',
|
|
46
|
+
disabled: () => '#9e9e9e'
|
|
47
|
+
}
|
|
48
|
+
}));
|
|
49
|
+
describe('isComplete', () => {
|
|
50
|
+
it.each`
|
|
51
|
+
session | expected
|
|
52
|
+
${{
|
|
53
|
+
value: [1, 2, 3]
|
|
54
|
+
}} | ${true}
|
|
55
|
+
${{
|
|
56
|
+
value: []
|
|
57
|
+
}} | ${false}
|
|
58
|
+
${{}} | ${false}
|
|
59
|
+
${null} | ${false}
|
|
60
|
+
${undefined} | ${false}
|
|
61
|
+
`('session = $session is complete => $expected', ({
|
|
62
|
+
session,
|
|
63
|
+
expected
|
|
64
|
+
}) => {
|
|
65
|
+
expect((0, _index.isComplete)(session)).toEqual(expected);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('multiple-choice', () => {
|
|
69
|
+
describe('rendering', () => {
|
|
70
|
+
const renderComponent = (modelOverrides = {}) => {
|
|
71
|
+
const defaultProps = {
|
|
72
|
+
model: {
|
|
73
|
+
choices: [],
|
|
74
|
+
prompt: 'Select an answer',
|
|
75
|
+
...modelOverrides
|
|
76
|
+
},
|
|
77
|
+
session: {},
|
|
78
|
+
classes: {}
|
|
79
|
+
};
|
|
80
|
+
return (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_main.default, defaultProps));
|
|
81
|
+
};
|
|
82
|
+
it('renders without crashing', () => {
|
|
83
|
+
const {
|
|
84
|
+
container
|
|
85
|
+
} = renderComponent();
|
|
86
|
+
expect(container).toBeInTheDocument();
|
|
87
|
+
});
|
|
88
|
+
it('renders the preview layout wrapper', () => {
|
|
89
|
+
renderComponent();
|
|
90
|
+
expect(_react2.screen.getByTestId('preview-layout')).toBeInTheDocument();
|
|
91
|
+
});
|
|
92
|
+
it('renders with rationale', () => {
|
|
93
|
+
renderComponent({
|
|
94
|
+
rationale: 'This is rationale'
|
|
95
|
+
});
|
|
96
|
+
expect(_react2.screen.getByText('This is rationale')).toBeInTheDocument();
|
|
97
|
+
});
|
|
98
|
+
it('renders with teacherInstructions', () => {
|
|
99
|
+
renderComponent({
|
|
100
|
+
teacherInstructions: 'These are teacher instructions'
|
|
101
|
+
});
|
|
102
|
+
expect(_react2.screen.getByText('These are teacher instructions')).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
it('renders choices when provided', () => {
|
|
105
|
+
renderComponent({
|
|
106
|
+
choices: [{
|
|
107
|
+
value: 'a',
|
|
108
|
+
label: 'Option A'
|
|
109
|
+
}, {
|
|
110
|
+
value: 'b',
|
|
111
|
+
label: 'Option B'
|
|
112
|
+
}]
|
|
113
|
+
});
|
|
114
|
+
expect(_react2.screen.getByText('Option A')).toBeInTheDocument();
|
|
115
|
+
expect(_react2.screen.getByText('Option B')).toBeInTheDocument();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('events', () => {
|
|
119
|
+
describe('model', () => {
|
|
120
|
+
it('dispatches model set event', () => {
|
|
121
|
+
const el = new _index.default();
|
|
122
|
+
el.tagName = 'mc-el';
|
|
123
|
+
el.model = {};
|
|
124
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.ModelSetEvent('mc-el', false, true));
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('onChange', () => {
|
|
128
|
+
it('dispatches session changed event - add answer (checkbox)', () => {
|
|
129
|
+
const el = new _index.default();
|
|
130
|
+
el.tagName = 'mc-el';
|
|
131
|
+
el.model = {
|
|
132
|
+
choiceMode: 'checkbox'
|
|
133
|
+
};
|
|
134
|
+
el.session = {
|
|
135
|
+
value: []
|
|
136
|
+
};
|
|
137
|
+
el._onChange({
|
|
138
|
+
value: 'a',
|
|
139
|
+
selected: true
|
|
140
|
+
});
|
|
141
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', true));
|
|
142
|
+
});
|
|
143
|
+
it('dispatches session changed event - remove answer (checkbox)', () => {
|
|
144
|
+
const el = new _index.default();
|
|
145
|
+
el.tagName = 'mc-el';
|
|
146
|
+
el.model = {
|
|
147
|
+
choiceMode: 'checkbox'
|
|
148
|
+
};
|
|
149
|
+
el.session = {
|
|
150
|
+
value: ['a']
|
|
151
|
+
};
|
|
152
|
+
el._onChange({
|
|
153
|
+
value: 'a',
|
|
154
|
+
selected: false
|
|
155
|
+
});
|
|
156
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', false));
|
|
157
|
+
});
|
|
158
|
+
it('dispatches session changed event - add/remove answer (checkbox)', () => {
|
|
159
|
+
const el = new _index.default();
|
|
160
|
+
el.tagName = 'mc-el';
|
|
161
|
+
el.model = {
|
|
162
|
+
choiceMode: 'checkbox'
|
|
163
|
+
};
|
|
164
|
+
el.session = {
|
|
165
|
+
value: ['1']
|
|
166
|
+
};
|
|
167
|
+
el._onChange({
|
|
168
|
+
id: '2',
|
|
169
|
+
selected: true
|
|
170
|
+
});
|
|
171
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', true));
|
|
172
|
+
el._onChange({
|
|
173
|
+
id: '1',
|
|
174
|
+
selected: false
|
|
175
|
+
});
|
|
176
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', true));
|
|
177
|
+
el._onChange({
|
|
178
|
+
id: '2',
|
|
179
|
+
selected: false
|
|
180
|
+
});
|
|
181
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', false));
|
|
182
|
+
});
|
|
183
|
+
it('dispatches session changed event - add/change answer (radio)', () => {
|
|
184
|
+
const el = new _index.default();
|
|
185
|
+
el.tagName = 'mc-el';
|
|
186
|
+
el.model = {
|
|
187
|
+
choiceMode: 'radio'
|
|
188
|
+
};
|
|
189
|
+
el.session = {
|
|
190
|
+
value: []
|
|
191
|
+
};
|
|
192
|
+
el._onChange({
|
|
193
|
+
value: 'a',
|
|
194
|
+
selected: true
|
|
195
|
+
});
|
|
196
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', true));
|
|
197
|
+
el._onChange({
|
|
198
|
+
value: 'b',
|
|
199
|
+
selected: true
|
|
200
|
+
});
|
|
201
|
+
expect(el.dispatchEvent).toBeCalledWith(new _piePlayerEvents.SessionChangedEvent('mc-el', true));
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfcGllUGxheWVyRXZlbnRzIiwiX21haW4iLCJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImplc3QiLCJ1c2VGYWtlVGltZXJzIiwibW9jayIsInJlbmRlck1hdGgiLCJmbiIsImxvZGFzaCIsImRlYm91bmNlIiwiUHJldmlld0xheW91dCIsImNoaWxkcmVuIiwiY3JlYXRlRWxlbWVudCIsIkNvbGxhcHNpYmxlIiwibGFiZWxzIiwiaGlkZGVuIiwiUHJldmlld1Byb21wdCIsInByb21wdCIsImNvbG9yIiwidGV4dCIsImJhY2tncm91bmQiLCJwcmltYXJ5IiwiY29ycmVjdCIsImluY29ycmVjdCIsImRpc2FibGVkIiwiZGVzY3JpYmUiLCJpdCIsImVhY2giLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInNlc3Npb24iLCJleHBlY3RlZCIsImV4cGVjdCIsImlzQ29tcGxldGUiLCJ0b0VxdWFsIiwicmVuZGVyQ29tcG9uZW50IiwibW9kZWxPdmVycmlkZXMiLCJkZWZhdWx0UHJvcHMiLCJtb2RlbCIsImNob2ljZXMiLCJjbGFzc2VzIiwicmVuZGVyIiwiY29udGFpbmVyIiwidG9CZUluVGhlRG9jdW1lbnQiLCJzY3JlZW4iLCJnZXRCeVRlc3RJZCIsInJhdGlvbmFsZSIsImdldEJ5VGV4dCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJsYWJlbCIsImVsIiwiTXVsdGlwbGVDaG9pY2UiLCJ0YWdOYW1lIiwiZGlzcGF0Y2hFdmVudCIsInRvQmVDYWxsZWRXaXRoIiwiTW9kZWxTZXRFdmVudCIsImNob2ljZU1vZGUiLCJfb25DaGFuZ2UiLCJzZWxlY3RlZCIsIlNlc3Npb25DaGFuZ2VkRXZlbnQiLCJpZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgtdGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgeyBNb2RlbFNldEV2ZW50LCBTZXNzaW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQHBpZS1mcmFtZXdvcmsvcGllLXBsYXllci1ldmVudHMnO1xuaW1wb3J0IE11bHRpcGxlQ2hvaWNlQ29tcG9uZW50IGZyb20gJy4uL21haW4nO1xuaW1wb3J0IE11bHRpcGxlQ2hvaWNlIGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IGlzQ29tcGxldGUgfSBmcm9tICcuLi9pbmRleCc7XG5cbmplc3QudXNlRmFrZVRpbWVycygpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXJlbmRlcmluZycsICgpID0+ICh7IHJlbmRlck1hdGg6IGplc3QuZm4oKSB9KSk7XG5qZXN0Lm1vY2soJ2xvZGFzaC1lcycsICgpID0+IHtcbiAgY29uc3QgbG9kYXNoID0gcmVxdWlyZSgnbG9kYXNoJyk7XG4gIHJldHVybiB7XG4gICAgLi4ubG9kYXNoLFxuICAgIGRlYm91bmNlOiBqZXN0LmZuKChmbikgPT4gZm4pLFxuICB9O1xufSk7XG5cbi8vIE1vY2sgdGhlIHJlbmRlci11aSBQcmV2aWV3TGF5b3V0XG5qZXN0Lm1vY2soJ0BwaWUtbGliL3JlbmRlci11aScsICgpID0+ICh7XG4gIFByZXZpZXdMYXlvdXQ6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJwcmV2aWV3LWxheW91dFwiPntjaGlsZHJlbn08L2Rpdj4sXG4gIENvbGxhcHNpYmxlOiAoeyBjaGlsZHJlbiwgbGFiZWxzIH0pID0+IChcbiAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiY29sbGFwc2libGVcIj5cbiAgICAgIDxidXR0b24+e2xhYmVscz8uaGlkZGVuIHx8ICdTaG93J308L2J1dHRvbj5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKSxcbiAgUHJldmlld1Byb21wdDogKHsgcHJvbXB0IH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJwcmV2aWV3LXByb21wdFwiPntwcm9tcHR9PC9kaXY+LFxuICBjb2xvcjoge1xuICAgIHRleHQ6ICgpID0+ICcjMDAwJyxcbiAgICBiYWNrZ3JvdW5kOiAoKSA9PiAnI2ZmZicsXG4gICAgcHJpbWFyeTogKCkgPT4gJyMxOTc2ZDInLFxuICAgIGNvcnJlY3Q6ICgpID0+ICcjNGNhZjUwJyxcbiAgICBpbmNvcnJlY3Q6ICgpID0+ICcjZjQ0MzM2JyxcbiAgICBkaXNhYmxlZDogKCkgPT4gJyM5ZTllOWUnLFxuICB9LFxufSkpO1xuXG5kZXNjcmliZSgnaXNDb21wbGV0ZScsICgpID0+IHtcbiAgaXQuZWFjaGBcbiAgICBzZXNzaW9uICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHt7IHZhbHVlOiBbMSwgMiwgM10gfX0gfCAke3RydWV9XG4gICAgJHt7IHZhbHVlOiBbXSB9fSAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7e319ICAgICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke251bGx9ICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9ICAgICAgICAgICAgfCAke2ZhbHNlfVxuICBgKCdzZXNzaW9uID0gJHNlc3Npb24gaXMgY29tcGxldGUgPT4gJGV4cGVjdGVkJywgKHsgc2Vzc2lvbiwgZXhwZWN0ZWQgfSkgPT4ge1xuICAgIGV4cGVjdChpc0NvbXBsZXRlKHNlc3Npb24pKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ211bHRpcGxlLWNob2ljZScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBjb25zdCByZW5kZXJDb21wb25lbnQgPSAobW9kZWxPdmVycmlkZXMgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICAgIHByb21wdDogJ1NlbGVjdCBhbiBhbnN3ZXInLFxuICAgICAgICAgIC4uLm1vZGVsT3ZlcnJpZGVzLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uOiB7fSxcbiAgICAgICAgY2xhc3Nlczoge30sXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVuZGVyKDxNdWx0aXBsZUNob2ljZUNvbXBvbmVudCB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgfTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgdGhlIHByZXZpZXcgbGF5b3V0IHdyYXBwZXInLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXN0SWQoJ3ByZXZpZXctbGF5b3V0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIHJhdGlvbmFsZScsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IHJhdGlvbmFsZTogJ1RoaXMgaXMgcmF0aW9uYWxlJyB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdUaGlzIGlzIHJhdGlvbmFsZScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCB0ZWFjaGVySW5zdHJ1Y3Rpb25zJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgdGVhY2hlckluc3RydWN0aW9uczogJ1RoZXNlIGFyZSB0ZWFjaGVyIGluc3RydWN0aW9ucycgfSk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGhlc2UgYXJlIHRlYWNoZXIgaW5zdHJ1Y3Rpb25zJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBjaG9pY2VzIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyB2YWx1ZTogJ2EnLCBsYWJlbDogJ09wdGlvbiBBJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICdiJywgbGFiZWw6ICdPcHRpb24gQicgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ09wdGlvbiBBJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnT3B0aW9uIEInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V2ZW50cycsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgICBpdCgnZGlzcGF0Y2hlcyBtb2RlbCBzZXQgZXZlbnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gbmV3IE11bHRpcGxlQ2hvaWNlKCk7XG4gICAgICAgIGVsLnRhZ05hbWUgPSAnbWMtZWwnO1xuICAgICAgICBlbC5tb2RlbCA9IHt9O1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IE1vZGVsU2V0RXZlbnQoJ21jLWVsJywgZmFsc2UsIHRydWUpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gYWRkIGFuc3dlciAoY2hlY2tib3gpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IG5ldyBNdWx0aXBsZUNob2ljZSgpO1xuICAgICAgICBlbC50YWdOYW1lID0gJ21jLWVsJztcbiAgICAgICAgZWwubW9kZWwgPSB7IGNob2ljZU1vZGU6ICdjaGVja2JveCcgfTtcbiAgICAgICAgZWwuc2Vzc2lvbiA9IHsgdmFsdWU6IFtdIH07XG4gICAgICAgIGVsLl9vbkNoYW5nZSh7IHZhbHVlOiAnYScsIHNlbGVjdGVkOiB0cnVlIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoJ21jLWVsJywgdHJ1ZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaXNwYXRjaGVzIHNlc3Npb24gY2hhbmdlZCBldmVudCAtIHJlbW92ZSBhbnN3ZXIgKGNoZWNrYm94KScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBuZXcgTXVsdGlwbGVDaG9pY2UoKTtcbiAgICAgICAgZWwudGFnTmFtZSA9ICdtYy1lbCc7XG4gICAgICAgIGVsLm1vZGVsID0geyBjaG9pY2VNb2RlOiAnY2hlY2tib3gnIH07XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiBbJ2EnXSB9O1xuICAgICAgICBlbC5fb25DaGFuZ2UoeyB2YWx1ZTogJ2EnLCBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnbWMtZWwnLCBmYWxzZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaXNwYXRjaGVzIHNlc3Npb24gY2hhbmdlZCBldmVudCAtIGFkZC9yZW1vdmUgYW5zd2VyIChjaGVja2JveCknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gbmV3IE11bHRpcGxlQ2hvaWNlKCk7XG4gICAgICAgIGVsLnRhZ05hbWUgPSAnbWMtZWwnO1xuICAgICAgICBlbC5tb2RlbCA9IHsgY2hvaWNlTW9kZTogJ2NoZWNrYm94JyB9O1xuICAgICAgICBlbC5zZXNzaW9uID0geyB2YWx1ZTogWycxJ10gfTtcbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgaWQ6ICcyJywgc2VsZWN0ZWQ6IHRydWUgfSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnbWMtZWwnLCB0cnVlKSk7XG5cbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgaWQ6ICcxJywgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBleHBlY3QoZWwuZGlzcGF0Y2hFdmVudCkudG9CZUNhbGxlZFdpdGgobmV3IFNlc3Npb25DaGFuZ2VkRXZlbnQoJ21jLWVsJywgdHJ1ZSkpO1xuXG4gICAgICAgIGVsLl9vbkNoYW5nZSh7IGlkOiAnMicsIHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KCdtYy1lbCcsIGZhbHNlKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc3BhdGNoZXMgc2Vzc2lvbiBjaGFuZ2VkIGV2ZW50IC0gYWRkL2NoYW5nZSBhbnN3ZXIgKHJhZGlvKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBuZXcgTXVsdGlwbGVDaG9pY2UoKTtcbiAgICAgICAgZWwudGFnTmFtZSA9ICdtYy1lbCc7XG4gICAgICAgIGVsLm1vZGVsID0geyBjaG9pY2VNb2RlOiAncmFkaW8nIH07XG4gICAgICAgIGVsLnNlc3Npb24gPSB7IHZhbHVlOiBbXSB9O1xuICAgICAgICBlbC5fb25DaGFuZ2UoeyB2YWx1ZTogJ2EnLCBzZWxlY3RlZDogdHJ1ZSB9KTtcbiAgICAgICAgZXhwZWN0KGVsLmRpc3BhdGNoRXZlbnQpLnRvQmVDYWxsZWRXaXRoKG5ldyBTZXNzaW9uQ2hhbmdlZEV2ZW50KCdtYy1lbCcsIHRydWUpKTtcbiAgICAgICAgZWwuX29uQ2hhbmdlKHsgdmFsdWU6ICdiJywgc2VsZWN0ZWQ6IHRydWUgfSk7XG4gICAgICAgIGV4cGVjdChlbC5kaXNwYXRjaEV2ZW50KS50b0JlQ2FsbGVkV2l0aChuZXcgU2Vzc2lvbkNoYW5nZWRFdmVudCgnbWMtZWwnLCB0cnVlKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUwsT0FBQTtBQUFzQyxTQUFBSyx3QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUgsdUJBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFB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
|