@pie-element/placement-ordering 14.1.7 → 14.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"choice-tile.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_core","_CardActions","_DragHandle","_IconButton","_RemoveCircle","_styles","_renderUi","_editableHtmlTipTap","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","debug","StyledChoiceTile","styled","theme","margin","spacing","backgroundColor","palette","background","paper","display","flexDirection","cursor","touchAction","StyledEditableHtml","EditableHtml","isTargetPrompt","width","borderRadius","error","light","StyledControls","justifyContent","StyledActions","DragHandle","color","StyledErrorText","fontSize","typography","main","marginLeft","marginTop","StyledRemoveCircle","RemoveCircle","fill","StyledIconButton","IconButton","tertiary","ChoiceTile","props","choice","index","onChoiceChange","onDelete","imageSupport","spellCheck","toolbarOpts","pluginProps","maxImageWidth","maxImageHeight","mathMlOptions","label","editable","type","draggableId","id","droppableId","attributes","listeners","setNodeRef","setDragRef","transform","isDragging","useDraggable","data","setDropRef","useDroppable","onLabelChange","style","x","y","undefined","opacity","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","isEditableElement","target","closest","isContentEditable","filteredListeners","onKeyDown","onPointerDown","createElement","ref","_extends2","disabled","placeholder","includes","markup","onChange","activePlugins","autoWidthToolbar","languageCharactersProps","language","onClick","size","exports","propTypes","PropTypes","any","object","string","isOver","bool","empty","outcome","number","shape","add","func","isRequired","delete","choices","array","choicesLabel","_default"],"sources":["../src/choice-tile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport CardActions from '@mui/material/CardActions';\nimport DragHandle from '@mui/icons-material/DragHandle';\nimport IconButton from '@mui/material/IconButton';\nimport RemoveCircle from '@mui/icons-material/RemoveCircle';\nimport { styled } from '@mui/material/styles';\n\nimport { color } from '@pie-lib/render-ui';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html-tip-tap';\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-tile');\n\nconst StyledChoiceTile = styled('div')(({ theme }) => ({\n margin: `${theme.spacing(1)} 0`,\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n cursor: 'move',\n touchAction: 'none',\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, isTargetPrompt }) => ({\n width: '80%',\n borderRadius: '4px',\n ...(isTargetPrompt && {\n backgroundColor: theme.palette.error.light,\n }),\n}));\n\nconst StyledControls = styled('div')(() => ({\n display: 'flex',\n justifyContent: 'flex-end',\n}));\n\nconst StyledActions = styled(DragHandle)(({ theme }) => ({\n color: theme.palette.error[400],\n}));\n\nconst StyledErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginLeft: theme.spacing(5),\n marginTop: theme.spacing(1),\n}));\n\nconst StyledRemoveCircle = styled(RemoveCircle)(({ theme }) => ({\n fill: theme.palette.error[500],\n}));\n\nconst StyledIconButton = styled(IconButton)({\n color: `${color.tertiary()} !important`,\n});\n\nexport const ChoiceTile = (props) => {\n const {\n choice,\n index,\n onChoiceChange,\n onDelete,\n imageSupport,\n spellCheck,\n toolbarOpts,\n pluginProps,\n maxImageWidth,\n maxImageHeight,\n error,\n mathMlOptions = {},\n } = props;\n const { label, editable, type } = choice;\n const draggableId = `${type}-${choice.id}`;\n const droppableId = `${type}-drop-${choice.id}`;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n isDragging,\n } = useDraggable({\n id: draggableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const { setNodeRef: setDropRef } = useDroppable({\n id: droppableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const onLabelChange = (label) => {\n choice.label = label;\n onChoiceChange(choice);\n };\n\n const style = {\n transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,\n opacity: isDragging ? 0.5 : 1,\n width: '100%',\n };\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter((p) => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const isEditableElement = (target) =>\n target.closest('[contenteditable]') ||\n target.closest('input') ||\n target.closest('textarea') ||\n target.isContentEditable;\n\n // edit listeners to prevent dragging when interacting with editable-html element\n const filteredListeners = {\n ...listeners,\n onKeyDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onKeyDown?.(e);\n },\n onPointerDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onPointerDown?.(e);\n },\n };\n\n return (\n <div ref={setDropRef}>\n <div ref={setDragRef} {...filteredListeners} {...attributes}>\n <StyledChoiceTile style={style}>\n <div style={{ width: '100%', display: 'flex' }}>\n <CardActions>\n <StyledActions />\n </CardActions>\n\n <StyledEditableHtml\n disabled={!editable}\n placeholder={type !== 'target' && !label.includes('data-latex') ? 'Enter a choice' : ''}\n markup={label}\n imageSupport={imageSupport || undefined}\n onChange={onLabelChange}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n autoWidthToolbar\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={editable && error}\n mathMlOptions={mathMlOptions}\n />\n\n {editable && (\n <StyledControls>\n <StyledIconButton onClick={onDelete} size=\"large\">\n <StyledRemoveCircle />\n </StyledIconButton>\n </StyledControls>\n )}\n </div>\n\n {editable && error && <StyledErrorText>{error}</StyledErrorText>}\n </StyledChoiceTile>\n </div>\n </div>\n );\n};\n\nChoiceTile.propTypes = {\n id: PropTypes.any,\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n label: PropTypes.string,\n isOver: PropTypes.bool,\n type: PropTypes.string,\n empty: PropTypes.bool,\n disabled: PropTypes.bool,\n outcome: PropTypes.object,\n index: PropTypes.number,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n choice: PropTypes.object,\n choices: PropTypes.array.isRequired,\n onChoiceChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n choicesLabel: PropTypes.string,\n error: PropTypes.string,\n spellCheck: PropTypes.bool,\n mathMlOptions: PropTypes.object,\n};\n\nexport default ChoiceTile;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"choice-tile.js","names":["_react","_interopRequireDefault","require","_propTypes","_debug","_core","_CardActions","_DragHandle","_IconButton","_RemoveCircle","_styles","_renderUi","_editableHtmlTipTap","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","debug","StyledChoiceTile","styled","theme","margin","spacing","backgroundColor","palette","background","paper","display","flexDirection","cursor","touchAction","StyledEditableHtml","EditableHtml","isTargetPrompt","width","borderRadius","error","light","StyledControls","justifyContent","StyledActions","DragHandle","color","StyledErrorText","fontSize","typography","main","marginLeft","marginTop","StyledRemoveCircle","RemoveCircle","fill","StyledIconButton","IconButton","tertiary","ChoiceTile","props","choice","index","onChoiceChange","onDelete","imageSupport","spellCheck","toolbarOpts","pluginProps","maxImageWidth","maxImageHeight","mathMlOptions","label","editable","type","draggableId","id","droppableId","attributes","listeners","setNodeRef","setDragRef","transform","isDragging","useDraggable","data","setDropRef","useDroppable","onLabelChange","style","x","y","undefined","opacity","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","isEditableElement","target","closest","isContentEditable","filteredListeners","onKeyDown","onPointerDown","createElement","ref","_extends2","alignItems","disabled","placeholder","includes","markup","onChange","activePlugins","autoWidthToolbar","languageCharactersProps","language","onClick","size","exports","propTypes","PropTypes","any","object","string","isOver","bool","empty","outcome","number","shape","add","func","isRequired","delete","choices","array","choicesLabel","_default"],"sources":["../src/choice-tile.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { useDraggable, useDroppable } from '@dnd-kit/core';\nimport CardActions from '@mui/material/CardActions';\nimport DragHandle from '@mui/icons-material/DragHandle';\nimport IconButton from '@mui/material/IconButton';\nimport RemoveCircle from '@mui/icons-material/RemoveCircle';\nimport { styled } from '@mui/material/styles';\n\nimport { color } from '@pie-lib/render-ui';\nimport EditableHtml, { DEFAULT_PLUGINS } from '@pie-lib/editable-html-tip-tap';\n\nconst log = debug('@pie-element:placement-ordering:configure:choice-tile');\n\nconst StyledChoiceTile = styled('div')(({ theme }) => ({\n margin: `${theme.spacing(1)} 0`,\n backgroundColor: theme.palette.background.paper,\n display: 'flex',\n flexDirection: 'column',\n cursor: 'move',\n touchAction: 'none',\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, isTargetPrompt }) => ({\n width: '80%',\n borderRadius: '4px',\n ...(isTargetPrompt && {\n backgroundColor: theme.palette.error.light,\n }),\n}));\n\nconst StyledControls = styled('div')(() => ({\n display: 'flex',\n justifyContent: 'flex-end',\n}));\n\nconst StyledActions = styled(DragHandle)(({ theme }) => ({\n color: theme.palette.error[400],\n}));\n\nconst StyledErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n marginLeft: theme.spacing(5),\n marginTop: theme.spacing(1),\n}));\n\nconst StyledRemoveCircle = styled(RemoveCircle)(({ theme }) => ({\n fill: theme.palette.error[500],\n}));\n\nconst StyledIconButton = styled(IconButton)({\n color: `${color.tertiary()} !important`,\n});\n\nexport const ChoiceTile = (props) => {\n const {\n choice,\n index,\n onChoiceChange,\n onDelete,\n imageSupport,\n spellCheck,\n toolbarOpts,\n pluginProps,\n maxImageWidth,\n maxImageHeight,\n error,\n mathMlOptions = {},\n } = props;\n const { label, editable, type } = choice;\n const draggableId = `${type}-${choice.id}`;\n const droppableId = `${type}-drop-${choice.id}`;\n\n const {\n attributes,\n listeners,\n setNodeRef: setDragRef,\n transform,\n isDragging,\n } = useDraggable({\n id: draggableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const { setNodeRef: setDropRef } = useDroppable({\n id: droppableId,\n data: {\n id: choice.id,\n index,\n type,\n },\n });\n\n const onLabelChange = (label) => {\n choice.label = label;\n onChoiceChange(choice);\n };\n\n const style = {\n transform: transform ? `translate3d(${transform.x}px, ${transform.y}px, 0)` : undefined,\n opacity: isDragging ? 0.5 : 1,\n width: '100%',\n };\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter((p) => p !== 'bulleted-list' && p !== 'numbered-list');\n\n const isEditableElement = (target) =>\n target.closest('[contenteditable]') ||\n target.closest('input') ||\n target.closest('textarea') ||\n target.isContentEditable;\n\n // edit listeners to prevent dragging when interacting with editable-html element\n const filteredListeners = {\n ...listeners,\n onKeyDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onKeyDown?.(e);\n },\n onPointerDown: (e) => {\n if (isEditableElement(e.target)) {\n return;\n }\n\n listeners?.onPointerDown?.(e);\n },\n };\n\n return (\n <div ref={setDropRef}>\n <div ref={setDragRef} {...filteredListeners} {...attributes}>\n <StyledChoiceTile style={style}>\n <div style={{ width: '100%', display: 'flex', alignItems: 'center' }}>\n <CardActions>\n <StyledActions />\n </CardActions>\n\n <StyledEditableHtml\n disabled={!editable}\n placeholder={type !== 'target' && !label.includes('data-latex') ? 'Enter a choice' : ''}\n markup={label}\n imageSupport={imageSupport || undefined}\n onChange={onLabelChange}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n activePlugins={filteredDefaultPlugins}\n spellCheck={spellCheck}\n autoWidthToolbar\n maxImageWidth={maxImageWidth}\n maxImageHeight={maxImageHeight}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n error={editable && error}\n mathMlOptions={mathMlOptions}\n />\n\n {editable && (\n <StyledControls>\n <StyledIconButton onClick={onDelete} size=\"large\">\n <StyledRemoveCircle />\n </StyledIconButton>\n </StyledControls>\n )}\n </div>\n\n {editable && error && <StyledErrorText>{error}</StyledErrorText>}\n </StyledChoiceTile>\n </div>\n </div>\n );\n};\n\nChoiceTile.propTypes = {\n id: PropTypes.any,\n maxImageHeight: PropTypes.object,\n maxImageWidth: PropTypes.object,\n label: PropTypes.string,\n isOver: PropTypes.bool,\n type: PropTypes.string,\n empty: PropTypes.bool,\n disabled: PropTypes.bool,\n outcome: PropTypes.object,\n index: PropTypes.number,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n choice: PropTypes.object,\n choices: PropTypes.array.isRequired,\n onChoiceChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n choicesLabel: PropTypes.string,\n error: PropTypes.string,\n spellCheck: PropTypes.bool,\n mathMlOptions: PropTypes.object,\n};\n\nexport default ChoiceTile;\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/placement-ordering-configure",
3
- "version": "11.1.7",
3
+ "version": "11.1.9",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -11,9 +11,9 @@
11
11
  "@mui/icons-material": "^7.3.4",
12
12
  "@mui/material": "^7.3.4",
13
13
  "@pie-framework/pie-configure-events": "^1.3.0",
14
- "@pie-lib/config-ui": "13.0.12",
14
+ "@pie-lib/config-ui": "13.0.13",
15
15
  "@pie-lib/drag": "4.0.6",
16
- "@pie-lib/editable-html-tip-tap": "2.1.10",
16
+ "@pie-lib/editable-html-tip-tap": "2.1.11",
17
17
  "@pie-lib/render-ui": "6.1.3",
18
18
  "debug": "^4.1.1",
19
19
  "lodash-es": "^4.17.23",
@@ -3,6 +3,10 @@
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
+ ## [11.1.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.2...@pie-element/placement-ordering-controller@11.1.3) (2026-08-11)
7
+
8
+ **Note:** Version bump only for package @pie-element/placement-ordering-controller
9
+
6
10
  ## [11.1.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.1...@pie-element/placement-ordering-controller@11.1.2) (2026-07-02)
7
11
 
8
12
  ### Bug Fixes
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+
3
+ var _lodashEs = require("lodash-es");
4
+ var controller = _interopRequireWildcard(require("../index"));
5
+ 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); }
6
+ describe('index', () => {
7
+ let base = o => {
8
+ o = (0, _lodashEs.merge)({
9
+ prompt: 'hi',
10
+ promptEnabled: true,
11
+ choices: [],
12
+ correctResponse: [],
13
+ feedbackEnabled: true
14
+ }, o);
15
+ return o;
16
+ };
17
+ describe('model', () => {
18
+ let assertModel = (q, s, e, partialExpected) => {
19
+ return async () => {
20
+ if ((0, _lodashEs.isFunction)(partialExpected) && partialExpected.name === 'Error') {
21
+ expect(() => controller.model(q, s, e)).toThrow(Error);
22
+ return Promise.resolve();
23
+ } else {
24
+ const result = await controller.model(q, s, e);
25
+ if ((0, _lodashEs.isFunction)(partialExpected)) {
26
+ return partialExpected(result);
27
+ } else {
28
+ expect(result).toMatchObject(partialExpected);
29
+ }
30
+ }
31
+ };
32
+ };
33
+ it('returns prompt', assertModel(base(), {}, {}, m => expect(m.prompt).toEqual('hi')));
34
+ it('returns empty config for mode=gather', assertModel(base(), {}, {
35
+ mode: 'gather'
36
+ }, {}));
37
+ it('returns empty config for mode=view', assertModel(base(), {}, {
38
+ mode: 'view'
39
+ }, {
40
+ disabled: true
41
+ }));
42
+ it('returns config.disabled=true for mode=evaluate', assertModel(base(), {}, {
43
+ mode: 'evaluate'
44
+ }, {
45
+ disabled: true
46
+ }));
47
+ it('returns feedback', assertModel(base({
48
+ correctResponse: ['a', 'b'],
49
+ feedback: {
50
+ correct: {
51
+ type: 'custom',
52
+ custom: 'foo'
53
+ }
54
+ }
55
+ }), {
56
+ value: ['a', 'b']
57
+ }, {
58
+ mode: 'evaluate'
59
+ }, {
60
+ feedback: 'foo'
61
+ }));
62
+ describe('choices and outcomes', () => {
63
+ let model, session, env;
64
+ model = base({
65
+ correctResponse: ['a', 'b', 'c'],
66
+ alternateResponses: [{
67
+ response: ['c', 'b', 'a']
68
+ }],
69
+ choices: [{
70
+ label: 'a',
71
+ id: 'a'
72
+ }, {
73
+ label: 'b',
74
+ id: 'b'
75
+ }, {
76
+ label: 'c',
77
+ id: 'c'
78
+ }]
79
+ });
80
+ session = {
81
+ value: ['a', 'b', 'c']
82
+ };
83
+ env = {
84
+ mode: 'evaluate'
85
+ };
86
+ it('choices', assertModel(model, {}, {}, {
87
+ choices: [{
88
+ id: 'a',
89
+ label: 'a'
90
+ }, {
91
+ id: 'b',
92
+ label: 'b'
93
+ }, {
94
+ label: 'c',
95
+ id: 'c'
96
+ }]
97
+ }));
98
+
99
+ // Main Correct Response
100
+ it('returns outcomes - 3 correct', assertModel(model, session, env, {
101
+ outcomes: [{
102
+ id: 'a',
103
+ outcome: 'correct'
104
+ }, {
105
+ id: 'b',
106
+ outcome: 'correct'
107
+ }, {
108
+ id: 'c',
109
+ outcome: 'correct'
110
+ }]
111
+ }));
112
+
113
+ // Alternate Correct Response
114
+ it('returns outcomes for alternate response - 3 correct', assertModel(model, {
115
+ value: ['c', 'b', 'a']
116
+ }, env, {
117
+ outcomes: [{
118
+ id: 'c',
119
+ outcome: 'correct'
120
+ }, {
121
+ id: 'b',
122
+ outcome: 'correct'
123
+ }, {
124
+ id: 'a',
125
+ outcome: 'correct'
126
+ }]
127
+ }));
128
+
129
+ // Main Correct Response
130
+ it('returns outcomes - 1 correct', assertModel(model, {
131
+ value: ['a']
132
+ }, env, {
133
+ outcomes: [{
134
+ id: 'a',
135
+ outcome: 'correct'
136
+ }]
137
+ }));
138
+
139
+ // Alternate Correct Response
140
+ it('returns outcomes for alternate - 1 correct', assertModel(model, {
141
+ value: ['c']
142
+ }, env, {
143
+ outcomes: [{
144
+ id: 'c',
145
+ outcome: 'correct'
146
+ }]
147
+ }));
148
+ it('does not return config.correctResponse - 1 correct', assertModel(model, session, env, {
149
+ disabled: true
150
+ }));
151
+ it('returns outcomes - 2 incorrect', assertModel(model, {
152
+ value: ['b', 'a']
153
+ }, env, {
154
+ outcomes: [{
155
+ id: 'b',
156
+ outcome: 'incorrect'
157
+ }, {
158
+ id: 'a',
159
+ outcome: 'incorrect'
160
+ }]
161
+ }));
162
+ it('returns config.correctResponse - 2 - incorrect', assertModel(model, {
163
+ value: ['b', 'a']
164
+ }, env, {
165
+ correctResponse: ['a', 'b', 'c']
166
+ }));
167
+ });
168
+ describe('session not set', () => {
169
+ const assertModelCorrectness = session => {
170
+ it(`returns correctness: incorrect of session is ${JSON.stringify(session)}`, async () => {
171
+ const m = await controller.model(base({
172
+ correctResponse: ['a', 'b']
173
+ }), session, {
174
+ mode: 'evaluate'
175
+ });
176
+ expect(m.correctness).toEqual('incorrect');
177
+ });
178
+ };
179
+ assertModelCorrectness(undefined);
180
+ assertModelCorrectness(null);
181
+ assertModelCorrectness({});
182
+ });
183
+ describe('correct response', () => {
184
+ const model = base({
185
+ correctResponse: ['a', 'b', 'c'],
186
+ alternateResponses: [{
187
+ response: ['c', 'b', 'a']
188
+ }],
189
+ choices: [{
190
+ label: 'a',
191
+ id: 'a'
192
+ }, {
193
+ label: 'b',
194
+ id: 'b'
195
+ }, {
196
+ label: 'c',
197
+ id: 'c'
198
+ }]
199
+ });
200
+ it('returns correct response if env is correct', async () => {
201
+ const sess = await controller.createCorrectResponseSession(model, {
202
+ mode: 'gather',
203
+ role: 'instructor'
204
+ });
205
+ expect(sess).toEqual({
206
+ id: '1',
207
+ value: ['a', 'b', 'c']
208
+ });
209
+ });
210
+ it('returns correct response if env is correct for shuffled choices', async () => {
211
+ const model = base({
212
+ correctResponse: ['a', 'b', 'c'],
213
+ alternateResponses: [{
214
+ response: ['c', 'b', 'a']
215
+ }],
216
+ choices: [{
217
+ label: 'c',
218
+ id: 'c'
219
+ }, {
220
+ label: 'b',
221
+ id: 'b'
222
+ }, {
223
+ label: 'a',
224
+ id: 'a'
225
+ }]
226
+ });
227
+ const sess = await controller.createCorrectResponseSession(model, {
228
+ mode: 'gather',
229
+ role: 'instructor'
230
+ });
231
+ expect(sess).toEqual({
232
+ id: '1',
233
+ value: ['a', 'b', 'c']
234
+ });
235
+ });
236
+ it('returns null if mode is evaluate', async () => {
237
+ const sess = await controller.createCorrectResponseSession(model, {
238
+ mode: 'evaluate',
239
+ role: 'instructor'
240
+ });
241
+ expect(sess).toBeNull();
242
+ });
243
+ it('returns null if role is student', async () => {
244
+ const noResult = await controller.createCorrectResponseSession(model, {
245
+ mode: 'gather',
246
+ role: 'student'
247
+ });
248
+ expect(noResult).toBeNull();
249
+ });
250
+ });
251
+ });
252
+ describe('outcome', () => {
253
+ const assertOutcome = (question, value, expectedScore, env) => {
254
+ it(`${expectedScore} when answer: ${value} and question: ${JSON.stringify(question)}, env: ${JSON.stringify(env)}`, async () => {
255
+ const result = await controller.outcome(question, {
256
+ value
257
+ }, env);
258
+ expect(result.score).toEqual(expectedScore);
259
+ });
260
+ };
261
+ const assertOutcomeError = (question, session, env) => {
262
+ it(`throws error for ${JSON.stringify(question)}`, () => expect(controller.outcome(question, session, env)).rejects.toThrow(controller.questionError()));
263
+ };
264
+ const assertOutcomeSessionNotset = session => {
265
+ it(`return score: 0 and empty: true if session is ${JSON.stringify(session)}`, () => expect(controller.outcome({}, session, {
266
+ mode: 'evaluate'
267
+ })).resolves.toEqual({
268
+ score: 0,
269
+ empty: true,
270
+ logTrace: ["Student did not interact with the placement-ordering item."]
271
+ }));
272
+ };
273
+ assertOutcomeError(null, {
274
+ value: []
275
+ }, {});
276
+ assertOutcomeError({}, {
277
+ value: []
278
+ }, {});
279
+ assertOutcomeError({
280
+ correctResponse: []
281
+ }, {
282
+ value: []
283
+ }, {});
284
+ assertOutcomeSessionNotset(undefined);
285
+ assertOutcomeSessionNotset(null);
286
+ assertOutcomeSessionNotset({});
287
+
288
+ // Main Correct Response
289
+ assertOutcome({
290
+ partialScoring: true,
291
+ correctResponse: ['a'],
292
+ alternateResponses: [{
293
+ response: ['c']
294
+ }]
295
+ }, ['a'], 1);
296
+ assertOutcome({
297
+ partialScoring: true,
298
+ correctResponse: ['a'],
299
+ alternateResponses: [{
300
+ response: ['c']
301
+ }]
302
+ }, ['b'], 0);
303
+ assertOutcome({
304
+ correctResponse: ['a', 'b', 'c'],
305
+ alternateResponses: [{
306
+ response: ['b', 'c', 'a']
307
+ }]
308
+ }, ['c', 'a', 'b'], 0.33);
309
+ assertOutcome({
310
+ correctResponse: ['a', 'b'],
311
+ alternateResponses: [['c', 'b']]
312
+ }, ['c', 'a', 'b'], 0);
313
+ assertOutcome({
314
+ correctResponse: ['a', 'b', 'c'],
315
+ alternateResponses: [{
316
+ response: ['a', 'c', 'b']
317
+ }]
318
+ }, ['a', 'b'], 0.33);
319
+ assertOutcome({
320
+ partialScoring: true,
321
+ correctResponse: ['a', 'b', 'c'],
322
+ alternateResponses: [{
323
+ response: ['a', 'b']
324
+ }]
325
+ }, ['c', 'a', 'b'], 0.33);
326
+ assertOutcome({
327
+ partialScoring: false,
328
+ correctResponse: ['a', 'b', 'c'],
329
+ alternateResponses: [{
330
+ response: ['a', 'c', 'b']
331
+ }]
332
+ }, ['a', 'b'], 0);
333
+ assertOutcome({
334
+ partialScoring: false,
335
+ correctResponse: ['a', 'b', 'c'],
336
+ alternateResponses: [{
337
+ response: ['a', 'b']
338
+ }]
339
+ }, ['c', 'a', 'b'], 0, {
340
+ partialScoring: true
341
+ });
342
+
343
+ // Alternate Correct Response
344
+ assertOutcome({
345
+ partialScoring: true,
346
+ correctResponse: ['a'],
347
+ alternateResponses: [{
348
+ response: ['c']
349
+ }]
350
+ }, ['c'], 1);
351
+ assertOutcome({
352
+ partialScoring: true,
353
+ correctResponse: ['a'],
354
+ alternateResponses: [{
355
+ response: ['c']
356
+ }]
357
+ }, ['b'], 0);
358
+ assertOutcome({
359
+ correctResponse: ['a', 'b', 'c'],
360
+ alternateResponses: [{
361
+ response: ['c', 'b', 'a']
362
+ }]
363
+ }, ['c', 'a', 'b'], 0.67);
364
+ assertOutcome({
365
+ correctResponse: ['a', 'b'],
366
+ alternateResponses: [{
367
+ response: ['c', 'b']
368
+ }]
369
+ }, ['c', 'a', 'b'], 0);
370
+ assertOutcome({
371
+ correctResponse: ['a', 'b', 'c'],
372
+ alternateResponses: [{
373
+ response: ['c', 'b', 'a']
374
+ }]
375
+ }, ['c', 'b'], 0.33);
376
+ assertOutcome({
377
+ partialScoring: true,
378
+ correctResponse: ['a', 'b', 'c'],
379
+ alternateResponses: [{
380
+ response: ['a', 'c', 'b']
381
+ }]
382
+ }, ['c', 'a', 'b'], 0.67);
383
+ assertOutcome({
384
+ partialScoring: false,
385
+ correctResponse: ['a', 'b', 'c'],
386
+ alternateResponses: [{
387
+ response: ['a', 'c', 'b']
388
+ }]
389
+ }, ['a', 'b'], 0);
390
+ assertOutcome({
391
+ partialScoring: false,
392
+ correctResponse: ['a', 'b', 'c'],
393
+ alternateResponses: [{
394
+ response: ['a', 'c', 'b']
395
+ }]
396
+ }, ['c', 'a', 'b'], 0, {
397
+ partialScoring: true
398
+ });
399
+ });
400
+ });
401
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoRXMiLCJyZXF1aXJlIiwiY29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJiYXNlIiwibWVyZ2UiLCJwcm9tcHQiLCJwcm9tcHRFbmFibGVkIiwiY2hvaWNlcyIsImNvcnJlY3RSZXNwb25zZSIsImZlZWRiYWNrRW5hYmxlZCIsImFzc2VydE1vZGVsIiwicSIsInMiLCJwYXJ0aWFsRXhwZWN0ZWQiLCJpc0Z1bmN0aW9uIiwibmFtZSIsImV4cGVjdCIsIm1vZGVsIiwidG9UaHJvdyIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXN1bHQiLCJ0b01hdGNoT2JqZWN0IiwiaXQiLCJtIiwidG9FcXVhbCIsIm1vZGUiLCJkaXNhYmxlZCIsImZlZWRiYWNrIiwiY29ycmVjdCIsInR5cGUiLCJjdXN0b20iLCJ2YWx1ZSIsInNlc3Npb24iLCJlbnYiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyZXNwb25zZSIsImxhYmVsIiwiaWQiLCJvdXRjb21lcyIsIm91dGNvbWUiLCJhc3NlcnRNb2RlbENvcnJlY3RuZXNzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvcnJlY3RuZXNzIiwidW5kZWZpbmVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwidG9CZU51bGwiLCJub1Jlc3VsdCIsImFzc2VydE91dGNvbWUiLCJxdWVzdGlvbiIsImV4cGVjdGVkU2NvcmUiLCJzY29yZSIsImFzc2VydE91dGNvbWVFcnJvciIsInJlamVjdHMiLCJxdWVzdGlvbkVycm9yIiwiYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQiLCJyZXNvbHZlcyIsImVtcHR5IiwibG9nVHJhY2UiLCJwYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgKiBhcyBjb250cm9sbGVyIGZyb20gJy4uL2luZGV4JztcblxuZGVzY3JpYmUoJ2luZGV4JywgKCkgPT4ge1xuICBsZXQgYmFzZSA9IChvKSA9PiB7XG4gICAgbyA9IG1lcmdlKFxuICAgICAge1xuICAgICAgICBwcm9tcHQ6ICdoaScsXG4gICAgICAgIHByb21wdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGNob2ljZXM6IFtdLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFtdLFxuICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgbyxcbiAgICApO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdtb2RlbCcsICgpID0+IHtcbiAgICBsZXQgYXNzZXJ0TW9kZWwgPSAocSwgcywgZSwgcGFydGlhbEV4cGVjdGVkKSA9PiB7XG4gICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpICYmIHBhcnRpYWxFeHBlY3RlZC5uYW1lID09PSAnRXJyb3InKSB7XG4gICAgICAgICAgZXhwZWN0KCgpID0+IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSkpLnRvVGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRyb2xsZXIubW9kZWwocSwgcywgZSk7XG5cbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwYXJ0aWFsRXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbEV4cGVjdGVkKHJlc3VsdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QocGFydGlhbEV4cGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIGl0KFxuICAgICAgJ3JldHVybnMgcHJvbXB0JyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHt9LCAobSkgPT4gZXhwZWN0KG0ucHJvbXB0KS50b0VxdWFsKCdoaScpKSxcbiAgICApO1xuXG4gICAgaXQoJ3JldHVybnMgZW1wdHkgY29uZmlnIGZvciBtb2RlPWdhdGhlcicsIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwge30pKTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IGNvbmZpZyBmb3IgbW9kZT12aWV3JywgYXNzZXJ0TW9kZWwoYmFzZSgpLCB7fSwgeyBtb2RlOiAndmlldycgfSwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGNvbmZpZy5kaXNhYmxlZD10cnVlIGZvciBtb2RlPWV2YWx1YXRlJyxcbiAgICAgIGFzc2VydE1vZGVsKGJhc2UoKSwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCB7IGRpc2FibGVkOiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICBpdChcbiAgICAgICdyZXR1cm5zIGZlZWRiYWNrJyxcbiAgICAgIGFzc2VydE1vZGVsKFxuICAgICAgICBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sXG4gICAgICAgICAgZmVlZGJhY2s6IHsgY29ycmVjdDogeyB0eXBlOiAnY3VzdG9tJywgY3VzdG9tOiAnZm9vJyB9IH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7IHZhbHVlOiBbJ2EnLCAnYiddIH0sXG4gICAgICAgIHsgbW9kZTogJ2V2YWx1YXRlJyB9LFxuICAgICAgICB7IGZlZWRiYWNrOiAnZm9vJyB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZGVzY3JpYmUoJ2Nob2ljZXMgYW5kIG91dGNvbWVzJywgKCkgPT4ge1xuICAgICAgbGV0IG1vZGVsLCBzZXNzaW9uLCBlbnY7XG5cbiAgICAgIG1vZGVsID0gYmFzZSh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IGxhYmVsOiAnYScsIGlkOiAnYScgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnYycsIGlkOiAnYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzZXNzaW9uID0geyB2YWx1ZTogWydhJywgJ2InLCAnYyddIH07XG4gICAgICBlbnYgPSB7IG1vZGU6ICdldmFsdWF0ZScgfTtcblxuICAgICAgaXQoXG4gICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgYXNzZXJ0TW9kZWwoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAge30sXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICB7IGlkOiAnYScsIGxhYmVsOiAnYScgfSxcbiAgICAgICAgICAgICAgeyBpZDogJ2InLCBsYWJlbDogJ2InIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gTWFpbiBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgLSAzIGNvcnJlY3QnLFxuICAgICAgICBhc3NlcnRNb2RlbChtb2RlbCwgc2Vzc2lvbiwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFsdGVybmF0ZSBDb3JyZWN0IFJlc3BvbnNlXG4gICAgICBpdChcbiAgICAgICAgJ3JldHVybnMgb3V0Y29tZXMgZm9yIGFsdGVybmF0ZSByZXNwb25zZSAtIDMgY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2MnLCAnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdjJywgb3V0Y29tZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgICAgICB7IGlkOiAnYicsIG91dGNvbWU6ICdjb3JyZWN0JyB9LFxuICAgICAgICAgICAgeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIE1haW4gQ29ycmVjdCBSZXNwb25zZVxuICAgICAgaXQoXG4gICAgICAgICdyZXR1cm5zIG91dGNvbWVzIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYSddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2EnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgLy8gQWx0ZXJuYXRlIENvcnJlY3QgUmVzcG9uc2VcbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyBmb3IgYWx0ZXJuYXRlIC0gMSBjb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYyddIH0sIGVudiwge1xuICAgICAgICAgIG91dGNvbWVzOiBbeyBpZDogJ2MnLCBvdXRjb21lOiAnY29ycmVjdCcgfV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgaXQoJ2RvZXMgbm90IHJldHVybiBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMSBjb3JyZWN0JywgYXNzZXJ0TW9kZWwobW9kZWwsIHNlc3Npb24sIGVudiwgeyBkaXNhYmxlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBvdXRjb21lcyAtIDIgaW5jb3JyZWN0JyxcbiAgICAgICAgYXNzZXJ0TW9kZWwobW9kZWwsIHsgdmFsdWU6IFsnYicsICdhJ10gfSwgZW52LCB7XG4gICAgICAgICAgb3V0Y29tZXM6IFtcbiAgICAgICAgICAgIHsgaWQ6ICdiJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdhJywgb3V0Y29tZTogJ2luY29ycmVjdCcgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIGl0KFxuICAgICAgICAncmV0dXJucyBjb25maWcuY29ycmVjdFJlc3BvbnNlIC0gMiAtIGluY29ycmVjdCcsXG4gICAgICAgIGFzc2VydE1vZGVsKG1vZGVsLCB7IHZhbHVlOiBbJ2InLCAnYSddIH0sIGVudiwge1xuICAgICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2Vzc2lvbiBub3Qgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0TW9kZWxDb3JyZWN0bmVzcyA9IChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGl0KGByZXR1cm5zIGNvcnJlY3RuZXNzOiBpbmNvcnJlY3Qgb2Ygc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtID0gYXdhaXQgY29udHJvbGxlci5tb2RlbChiYXNlKHsgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYiddIH0pLCBzZXNzaW9uLCB7IG1vZGU6ICdldmFsdWF0ZScgfSk7XG4gICAgICAgICAgZXhwZWN0KG0uY29ycmVjdG5lc3MpLnRvRXF1YWwoJ2luY29ycmVjdCcpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3ModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydE1vZGVsQ29ycmVjdG5lc3MobnVsbCk7XG4gICAgICBhc3NlcnRNb2RlbENvcnJlY3RuZXNzKHt9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb3JyZWN0IHJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdiJywgaWQ6ICdiJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdjJywgaWQ6ICdjJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgcmVzcG9uc2UgaWYgZW52IGlzIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCBmb3Igc2h1ZmZsZWQgY2hvaWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBiYXNlKHtcbiAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ2MnLCBpZDogJ2MnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnYicsIGlkOiAnYicgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdhJywgaWQ6ICdhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9FcXVhbCh7IGlkOiAnMScsIHZhbHVlOiBbJ2EnLCAnYicsICdjJ10gfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JldHVybnMgbnVsbCBpZiBtb2RlIGlzIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXNzID0gYXdhaXQgY29udHJvbGxlci5jcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKG1vZGVsLCB7XG4gICAgICAgICAgbW9kZTogJ2V2YWx1YXRlJyxcbiAgICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc2VzcykudG9CZU51bGwoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgncmV0dXJucyBudWxsIGlmIHJvbGUgaXMgc3R1ZGVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24obW9kZWwsIHtcbiAgICAgICAgICBtb2RlOiAnZ2F0aGVyJyxcbiAgICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qobm9SZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ291dGNvbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZSA9IChxdWVzdGlvbiwgdmFsdWUsIGV4cGVjdGVkU2NvcmUsIGVudikgPT4ge1xuICAgICAgaXQoYCR7ZXhwZWN0ZWRTY29yZX0gd2hlbiBhbnN3ZXI6ICR7dmFsdWV9IGFuZCBxdWVzdGlvbjogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICApfSwgZW52OiAke0pTT04uc3RyaW5naWZ5KGVudil9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHsgdmFsdWUgfSwgZW52KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zY29yZSkudG9FcXVhbChleHBlY3RlZFNjb3JlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZUVycm9yID0gKHF1ZXN0aW9uLCBzZXNzaW9uLCBlbnYpID0+IHtcbiAgICAgIGl0KGB0aHJvd3MgZXJyb3IgZm9yICR7SlNPTi5zdHJpbmdpZnkocXVlc3Rpb24pfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChjb250cm9sbGVyLm91dGNvbWUocXVlc3Rpb24sIHNlc3Npb24sIGVudikpLnJlamVjdHMudG9UaHJvdyhjb250cm9sbGVyLnF1ZXN0aW9uRXJyb3IoKSkpO1xuICAgIH07XG4gICAgY29uc3QgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQgPSAoc2Vzc2lvbikgPT4ge1xuICAgICAgaXQoYHJldHVybiBzY29yZTogMCBhbmQgZW1wdHk6IHRydWUgaWYgc2Vzc2lvbiBpcyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBzZXNzaW9uXG4gICAgICApfWAsICgpID0+XG4gICAgICAgIGV4cGVjdChcbiAgICAgICAgICBjb250cm9sbGVyLm91dGNvbWUoe30sIHNlc3Npb24sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KVxuICAgICAgICApLnJlc29sdmVzLnRvRXF1YWwoe1xuICAgICAgICAgIHNjb3JlOiAwLCBlbXB0eTogdHJ1ZSwgbG9nVHJhY2U6IFtcIlN0dWRlbnQgZGlkIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBwbGFjZW1lbnQtb3JkZXJpbmcgaXRlbS5cIl1cbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBhc3NlcnRPdXRjb21lRXJyb3IobnVsbCwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7fSwgeyB2YWx1ZTogW10gfSwge30pO1xuICAgIGFzc2VydE91dGNvbWVFcnJvcih7IGNvcnJlY3RSZXNwb25zZTogW10gfSwgeyB2YWx1ZTogW10gfSwge30pO1xuXG4gICAgYXNzZXJ0T3V0Y29tZVNlc3Npb25Ob3RzZXQodW5kZWZpbmVkKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldChudWxsKTtcbiAgICBhc3NlcnRPdXRjb21lU2Vzc2lvbk5vdHNldCh7fSk7XG5cbiAgICAvLyBNYWluIENvcnJlY3QgUmVzcG9uc2VcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydhJ10sXG4gICAgICAxLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYyddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYiddLFxuICAgICAgMCxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2InLCAnYycsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoeyBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJ10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snYycsICdiJ11dIH0sIFsnYycsICdhJywgJ2InXSwgMCk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2EnLCAnYiddLFxuICAgICAgMC4zMyxcbiAgICApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjMzLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLFxuICAgICAgeyBwYXJ0aWFsU2NvcmluZzogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBBbHRlcm5hdGUgQ29ycmVjdCBSZXNwb25zZVxuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYSddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnXSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYycsICdiJywgJ2EnXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZSh7IGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InXSwgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydjJywgJ2InXSB9XSB9LCBbJ2MnLCAnYScsICdiJ10sIDApO1xuICAgIGFzc2VydE91dGNvbWUoXG4gICAgICB7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogWydhJywgJ2InLCAnYyddLFxuICAgICAgICBhbHRlcm5hdGVSZXNwb25zZXM6IFt7IHJlc3BvbnNlOiBbJ2MnLCAnYicsICdhJ10gfV0sXG4gICAgICB9LFxuICAgICAgWydjJywgJ2InXSxcbiAgICAgIDAuMzMsXG4gICAgKTtcbiAgICBhc3NlcnRPdXRjb21lKFxuICAgICAge1xuICAgICAgICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBbJ2EnLCAnYicsICdjJ10sXG4gICAgICAgIGFsdGVybmF0ZVJlc3BvbnNlczogW3sgcmVzcG9uc2U6IFsnYScsICdjJywgJ2InXSB9XSxcbiAgICAgIH0sXG4gICAgICBbJ2MnLCAnYScsICdiJ10sXG4gICAgICAwLjY3LFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYScsICdiJ10sXG4gICAgICAwLFxuICAgICk7XG4gICAgYXNzZXJ0T3V0Y29tZShcbiAgICAgIHtcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IGZhbHNlLFxuICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IFsnYScsICdiJywgJ2MnXSxcbiAgICAgICAgYWx0ZXJuYXRlUmVzcG9uc2VzOiBbeyByZXNwb25zZTogWydhJywgJ2MnLCAnYiddIH1dLFxuICAgICAgfSxcbiAgICAgIFsnYycsICdhJywgJ2InXSxcbiAgICAgIDAsXG4gICAgICB7IHBhcnRpYWxTY29yaW5nOiB0cnVlIH0sXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBdUMsU0FBQUUsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLENBQUFDLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixD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W119