@pie-lib/controller-utils 0.4.0-beta.0 → 0.4.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.json CHANGED
@@ -1,137 +1 @@
1
- [
2
- {
3
- "type": "feat",
4
- "scope": null,
5
- "subject": "new package controller-utils",
6
- "merge": null,
7
- "header": "feat: new package controller-utils",
8
- "body": null,
9
- "footer": null,
10
- "notes": [],
11
- "hash": "0994a4bda1c0ed809e565ff3569bbbf8f0713bd0",
12
- "gitTags": "",
13
- "committerDate": "2019-04-02 17:02:30 +0100",
14
- "isTagged": true,
15
- "tag": "@pie-lib/controller-utils@0.1.0"
16
- },
17
- {
18
- "type": "feat",
19
- "scope": null,
20
- "subject": "implement a shuffle/persistence reusable method",
21
- "merge": null,
22
- "header": "feat: implement a shuffle/persistence reusable method",
23
- "body": null,
24
- "footer": null,
25
- "notes": [],
26
- "hash": "33cc7f3ea35019d9896b656134672950c145d28d",
27
- "gitTags": "",
28
- "committerDate": "2019-08-29 19:15:16 +0300",
29
- "isTagged": true,
30
- "tag": "@pie-lib/controller-utils@0.2.0"
31
- },
32
- {
33
- "type": "fix",
34
- "scope": null,
35
- "subject": "fix handling and saving of bad shuffled values [ch4723]",
36
- "merge": null,
37
- "header": "fix: fix handling and saving of bad shuffled values [ch4723]",
38
- "body": "* strip null/undefined from arrays, treat empty arrays as if no shuffle\nis set.\n* refuse to save stripped empty shuffled arrays",
39
- "footer": null,
40
- "notes": [],
41
- "hash": "186ff87e9e8db7952203e1629ade8e0c49b56f6b",
42
- "gitTags": "",
43
- "committerDate": "2019-10-10 19:29:34 +0100",
44
- "isTagged": true,
45
- "tag": "@pie-lib/controller-utils@0.2.1"
46
- },
47
- {
48
- "type": "fix",
49
- "scope": null,
50
- "subject": "rm async",
51
- "merge": null,
52
- "header": "fix: rm async",
53
- "body": null,
54
- "footer": null,
55
- "notes": [],
56
- "hash": "3e96db3e5897896f95ed21ec1fc86a029c49b8d6",
57
- "gitTags": " (origin/fix/rm-async, origin/develop, origin/HEAD, develop)",
58
- "committerDate": "2019-10-14 13:47:35 +0100",
59
- "isTagged": true,
60
- "tag": "@pie-lib/controller-utils@0.2.2"
61
- },
62
- {
63
- "type": "fix",
64
- "scope": null,
65
- "subject": "allow number 0 to be used as value in shuffledValues",
66
- "merge": null,
67
- "header": "fix: allow number 0 to be used as value in shuffledValues",
68
- "body": null,
69
- "footer": null,
70
- "notes": [],
71
- "hash": "874127ce12bcfa6403d7b883b469f3fd2f09a365",
72
- "gitTags": " (origin/develop, origin/HEAD, develop)",
73
- "committerDate": "2019-11-18 11:28:05 +0000",
74
- "isTagged": true,
75
- "tag": "@pie-lib/controller-utils@0.2.3"
76
- },
77
- {
78
- "type": "fix",
79
- "scope": null,
80
- "subject": "Updated using the given documentation.",
81
- "merge": null,
82
- "header": "fix: Updated using the given documentation.",
83
- "body": null,
84
- "footer": null,
85
- "notes": [],
86
- "hash": "14c7b98d1fd3bc20ea3aefc1d3a7db4d4e9bcb14",
87
- "gitTags": " (origin/fix/PIE-200-partial-scoring)",
88
- "committerDate": "2020-01-15 13:25:30 +0200",
89
- "isTagged": true,
90
- "tag": "@pie-lib/controller-utils@0.2.4"
91
- },
92
- {
93
- "type": "fix",
94
- "scope": null,
95
- "subject": "add module prop to package.json",
96
- "merge": null,
97
- "header": "fix: add module prop to package.json",
98
- "body": null,
99
- "footer": null,
100
- "notes": [],
101
- "hash": "8a1b445ad76ba8472a6d375d0c604baf951a3b25",
102
- "gitTags": " (develop)",
103
- "committerDate": "2020-03-29 23:12:09 +0100",
104
- "isTagged": true,
105
- "tag": "@pie-lib/controller-utils@0.2.6"
106
- },
107
- {
108
- "type": "fix",
109
- "scope": null,
110
- "subject": "add module prop to package.json",
111
- "merge": null,
112
- "header": "fix: add module prop to package.json",
113
- "body": null,
114
- "footer": null,
115
- "notes": [],
116
- "hash": "694b1065959105438aeed7fcd88d5537ce234802",
117
- "gitTags": "",
118
- "committerDate": "2020-03-30 13:00:38 +0100",
119
- "isTagged": true,
120
- "tag": "@pie-lib/controller-utils@0.2.7"
121
- },
122
- {
123
- "type": "fix",
124
- "scope": null,
125
- "subject": "rm ExportNamespaceSpecifier",
126
- "merge": null,
127
- "header": "fix: rm ExportNamespaceSpecifier",
128
- "body": null,
129
- "footer": null,
130
- "notes": [],
131
- "hash": "970e2edcf797b8eea06449834c9174ac69d718d1",
132
- "gitTags": "",
133
- "committerDate": "2020-03-31 12:35:26 +0100",
134
- "isTagged": true,
135
- "tag": "@pie-lib/controller-utils@0.2.16"
136
- }
137
- ]
1
+ []
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
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
- # [0.4.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.4.0-beta.0) (2025-07-15)
6
+ # [0.4.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.4.0) (2025-07-31)
7
7
 
8
8
  **Note:** Version bump only for package @pie-lib/controller-utils
9
9
 
@@ -11,7 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
11
 
12
12
 
13
13
 
14
- # [0.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.0) (2025-07-15)
14
+ # [0.5.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.5.0) (2025-07-31)
15
15
 
16
16
  **Note:** Version bump only for package @pie-lib/controller-utils
17
17
 
@@ -19,7 +19,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
19
19
 
20
20
 
21
21
 
22
- ## [0.2.44](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.43...@pie-lib/controller-utils@0.2.44) (2023-06-24)
22
+ # [0.4.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.4.0) (2025-07-31)
23
23
 
24
24
  **Note:** Version bump only for package @pie-lib/controller-utils
25
25
 
@@ -27,18 +27,23 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
27
27
 
28
28
 
29
29
 
30
- ## [0.2.43](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.42...@pie-lib/controller-utils@0.2.43) (2023-04-19)
30
+ # [0.3.0-beta.8](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.8) (2025-07-25)
31
31
 
32
+ **Note:** Version bump only for package @pie-lib/controller-utils
32
33
 
33
- ### Bug Fixes
34
34
 
35
- * **eslint:** fix eslint problems-PD-2732 ([9eb9976](https://github.com/pie-framework/pie-lib/commit/9eb9976749753da86e1057a07bd2cfc65bf64ae4))
36
35
 
37
36
 
38
37
 
38
+ # [0.3.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.7) (2025-07-25)
39
39
 
40
+ **Note:** Version bump only for package @pie-lib/controller-utils
40
41
 
41
- ## [0.2.42](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.40...@pie-lib/controller-utils@0.2.42) (2023-01-31)
42
+
43
+
44
+
45
+
46
+ # [0.3.0-beta.7](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.7) (2025-07-25)
42
47
 
43
48
  **Note:** Version bump only for package @pie-lib/controller-utils
44
49
 
@@ -46,7 +51,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
46
51
 
47
52
 
48
53
 
49
- ## [0.2.40](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.39...@pie-lib/controller-utils@0.2.40) (2023-01-31)
54
+ # [0.3.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.6) (2025-07-25)
50
55
 
51
56
  **Note:** Version bump only for package @pie-lib/controller-utils
52
57
 
@@ -54,7 +59,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
54
59
 
55
60
 
56
61
 
57
- ## [0.2.39](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.38...@pie-lib/controller-utils@0.2.39) (2023-01-31)
62
+ # [0.3.0-beta.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.6) (2025-07-25)
58
63
 
59
64
  **Note:** Version bump only for package @pie-lib/controller-utils
60
65
 
@@ -62,7 +67,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
62
67
 
63
68
 
64
69
 
65
- ## [0.2.38](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.37...@pie-lib/controller-utils@0.2.38) (2023-01-31)
70
+ # [0.3.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.5) (2025-07-25)
66
71
 
67
72
  **Note:** Version bump only for package @pie-lib/controller-utils
68
73
 
@@ -70,7 +75,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
70
75
 
71
76
 
72
77
 
73
- ## [0.2.37](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.31...@pie-lib/controller-utils@0.2.37) (2023-01-31)
78
+ # [0.3.0-beta.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.5) (2025-07-25)
74
79
 
75
80
  **Note:** Version bump only for package @pie-lib/controller-utils
76
81
 
@@ -78,7 +83,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
78
83
 
79
84
 
80
85
 
81
- ## [0.2.31](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.29...@pie-lib/controller-utils@0.2.31) (2023-01-31)
86
+ # [0.3.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.4) (2025-07-25)
82
87
 
83
88
  **Note:** Version bump only for package @pie-lib/controller-utils
84
89
 
@@ -86,7 +91,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
86
91
 
87
92
 
88
93
 
89
- ## [0.2.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.27...@pie-lib/controller-utils@0.2.29) (2023-01-31)
94
+ # [0.3.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.3) (2025-07-25)
90
95
 
91
96
  **Note:** Version bump only for package @pie-lib/controller-utils
92
97
 
@@ -94,13 +99,127 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
94
99
 
95
100
 
96
101
 
97
- ## [0.2.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.26...@pie-lib/controller-utils@0.2.27) (2022-11-23)
102
+ # [0.3.0-beta.4](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.4) (2025-07-23)
103
+
104
+ **Note:** Version bump only for package @pie-lib/controller-utils
105
+
106
+
107
+
108
+
109
+
110
+ # [0.3.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.3) (2025-07-23)
111
+
112
+ **Note:** Version bump only for package @pie-lib/controller-utils
113
+
114
+
115
+
116
+
117
+
118
+ # [0.3.0-beta.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.3) (2025-07-20)
119
+
120
+ **Note:** Version bump only for package @pie-lib/controller-utils
121
+
122
+
123
+
124
+
125
+
126
+ # [0.3.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.2) (2025-07-20)
127
+
128
+ **Note:** Version bump only for package @pie-lib/controller-utils
129
+
130
+
131
+
132
+
133
+
134
+ # [0.3.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.1) (2025-07-20)
135
+
136
+ **Note:** Version bump only for package @pie-lib/controller-utils
137
+
138
+
139
+
140
+
141
+
142
+ # [0.3.0-beta.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.2) (2025-07-20)
143
+
144
+ **Note:** Version bump only for package @pie-lib/controller-utils
145
+
146
+
147
+
148
+
149
+
150
+ # [0.3.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.1) (2025-07-20)
151
+
152
+ **Note:** Version bump only for package @pie-lib/controller-utils
153
+
154
+
155
+
156
+
157
+
158
+ # [0.3.0-beta.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.1) (2025-07-20)
159
+
160
+ **Note:** Version bump only for package @pie-lib/controller-utils
161
+
162
+
163
+
164
+
165
+
166
+ # [0.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.0) (2025-07-20)
167
+
168
+ **Note:** Version bump only for package @pie-lib/controller-utils
169
+
170
+
171
+
172
+
173
+
174
+ # [0.4.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.4.0-beta.0) (2025-07-15)
175
+
176
+ **Note:** Version bump only for package @pie-lib/controller-utils
177
+
178
+ # [0.3.0-beta.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.44...@pie-lib/controller-utils@0.3.0-beta.0) (2025-07-15)
179
+
180
+ **Note:** Version bump only for package @pie-lib/controller-utils
181
+
182
+ ## [0.2.44](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.43...@pie-lib/controller-utils@0.2.44) (2023-06-24)
183
+
184
+ **Note:** Version bump only for package @pie-lib/controller-utils
185
+
186
+ ## [0.2.43](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.42...@pie-lib/controller-utils@0.2.43) (2023-04-19)
187
+
188
+ ### Bug Fixes
189
+
190
+ - **eslint:** fix eslint problems-PD-2732 ([9eb9976](https://github.com/pie-framework/pie-lib/commit/9eb9976749753da86e1057a07bd2cfc65bf64ae4))
191
+
192
+ ## [0.2.42](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.40...@pie-lib/controller-utils@0.2.42) (2023-01-31)
193
+
194
+ **Note:** Version bump only for package @pie-lib/controller-utils
195
+
196
+ ## [0.2.40](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.39...@pie-lib/controller-utils@0.2.40) (2023-01-31)
98
197
 
99
198
  **Note:** Version bump only for package @pie-lib/controller-utils
100
199
 
200
+ ## [0.2.39](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.38...@pie-lib/controller-utils@0.2.39) (2023-01-31)
201
+
202
+ **Note:** Version bump only for package @pie-lib/controller-utils
101
203
 
204
+ ## [0.2.38](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.37...@pie-lib/controller-utils@0.2.38) (2023-01-31)
102
205
 
206
+ **Note:** Version bump only for package @pie-lib/controller-utils
103
207
 
208
+ ## [0.2.37](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.31...@pie-lib/controller-utils@0.2.37) (2023-01-31)
209
+
210
+ **Note:** Version bump only for package @pie-lib/controller-utils
211
+
212
+ ## [0.2.31](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.29...@pie-lib/controller-utils@0.2.31) (2023-01-31)
213
+
214
+ **Note:** Version bump only for package @pie-lib/controller-utils
215
+
216
+ ## [0.2.29](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.27...@pie-lib/controller-utils@0.2.29) (2023-01-31)
217
+
218
+ **Note:** Version bump only for package @pie-lib/controller-utils
219
+
220
+ ## [0.2.27](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.26...@pie-lib/controller-utils@0.2.27) (2022-11-23)
221
+
222
+ **Note:** Version bump only for package @pie-lib/controller-utils
104
223
 
105
224
  ## [0.2.26](https://github.com/pie-framework/pie-lib/compare/@pie-lib/controller-utils@0.2.24...@pie-lib/controller-utils@0.2.26) (2021-06-25)
106
225
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/controller-utils",
3
- "version": "0.4.0-beta.0",
3
+ "version": "0.4.0",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -14,5 +14,5 @@
14
14
  "scripts": {},
15
15
  "author": "",
16
16
  "license": "ISC",
17
- "gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a"
17
+ "gitHead": "889a13bfea2c768b8a3a6eabfc6fe7b7725aa832"
18
18
  }
@@ -1,35 +0,0 @@
1
- "use strict";
2
-
3
- var _partialScoring = require("../partial-scoring");
4
-
5
- describe('enabled', function () {
6
- var assertEnabled = function assertEnabled(config, env, expected) {
7
- it("returns ".concat(expected, " for: config: ").concat(config.partialScoring, ", env:").concat(env.partialScoring), function () {
8
- var result = (0, _partialScoring.enabled)(config, env);
9
- expect(result).toEqual(expected);
10
- });
11
- };
12
-
13
- var config = function config(v) {
14
- return {
15
- partialScoring: v
16
- };
17
- };
18
-
19
- var env = function env(v) {
20
- return {
21
- partialScoring: v
22
- };
23
- };
24
-
25
- assertEnabled(config(undefined), env(undefined), true);
26
- assertEnabled(config(undefined), env(true), true);
27
- assertEnabled(config(undefined), env(false), false);
28
- assertEnabled(config(false), env(undefined), false);
29
- assertEnabled(config(false), env(true), false);
30
- assertEnabled(config(false), env(false), false);
31
- assertEnabled(config(true), env(undefined), true);
32
- assertEnabled(config(true), env(true), true);
33
- assertEnabled(config(true), env(false), false);
34
- });
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcGFydGlhbC1zY29yaW5nLnRlc3QuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhc3NlcnRFbmFibGVkIiwiY29uZmlnIiwiZW52IiwiZXhwZWN0ZWQiLCJpdCIsInBhcnRpYWxTY29yaW5nIiwicmVzdWx0IiwiZXhwZWN0IiwidG9FcXVhbCIsInYiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBRUFBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBTTtBQUN4QixNQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCLENBQUNDLE1BQUQsRUFBU0MsR0FBVCxFQUFjQyxRQUFkLEVBQTJCO0FBQy9DQyxJQUFBQSxFQUFFLG1CQUFZRCxRQUFaLDJCQUFxQ0YsTUFBTSxDQUFDSSxjQUE1QyxtQkFBbUVILEdBQUcsQ0FBQ0csY0FBdkUsR0FBeUYsWUFBTTtBQUMvRixVQUFNQyxNQUFNLEdBQUcsNkJBQVFMLE1BQVIsRUFBZ0JDLEdBQWhCLENBQWY7QUFDQUssTUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZUUsT0FBZixDQUF1QkwsUUFBdkI7QUFDRCxLQUhDLENBQUY7QUFJRCxHQUxEOztBQU9BLE1BQU1GLE1BQU0sR0FBRyxTQUFUQSxNQUFTLENBQUNRLENBQUQ7QUFBQSxXQUFRO0FBQUVKLE1BQUFBLGNBQWMsRUFBRUk7QUFBbEIsS0FBUjtBQUFBLEdBQWY7O0FBQ0EsTUFBTVAsR0FBRyxHQUFHLFNBQU5BLEdBQU0sQ0FBQ08sQ0FBRDtBQUFBLFdBQVE7QUFBRUosTUFBQUEsY0FBYyxFQUFFSTtBQUFsQixLQUFSO0FBQUEsR0FBWjs7QUFFQVQsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUNTLFNBQUQsQ0FBUCxFQUFvQlIsR0FBRyxDQUFDUSxTQUFELENBQXZCLEVBQW9DLElBQXBDLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUNTLFNBQUQsQ0FBUCxFQUFvQlIsR0FBRyxDQUFDLElBQUQsQ0FBdkIsRUFBK0IsSUFBL0IsQ0FBYjtBQUNBRixFQUFBQSxhQUFhLENBQUNDLE1BQU0sQ0FBQ1MsU0FBRCxDQUFQLEVBQW9CUixHQUFHLENBQUMsS0FBRCxDQUF2QixFQUFnQyxLQUFoQyxDQUFiO0FBRUFGLEVBQUFBLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDLEtBQUQsQ0FBUCxFQUFnQkMsR0FBRyxDQUFDUSxTQUFELENBQW5CLEVBQWdDLEtBQWhDLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsS0FBRCxDQUFQLEVBQWdCQyxHQUFHLENBQUMsSUFBRCxDQUFuQixFQUEyQixLQUEzQixDQUFiO0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDLEtBQUQsQ0FBUCxFQUFnQkMsR0FBRyxDQUFDLEtBQUQsQ0FBbkIsRUFBNEIsS0FBNUIsQ0FBYjtBQUVBRixFQUFBQSxhQUFhLENBQUNDLE1BQU0sQ0FBQyxJQUFELENBQVAsRUFBZUMsR0FBRyxDQUFDUSxTQUFELENBQWxCLEVBQStCLElBQS9CLENBQWI7QUFDQVYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsSUFBRCxDQUFQLEVBQWVDLEdBQUcsQ0FBQyxJQUFELENBQWxCLEVBQTBCLElBQTFCLENBQWI7QUFDQUYsRUFBQUEsYUFBYSxDQUFDQyxNQUFNLENBQUMsSUFBRCxDQUFQLEVBQWVDLEdBQUcsQ0FBQyxLQUFELENBQWxCLEVBQTJCLEtBQTNCLENBQWI7QUFDRCxDQXRCTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5hYmxlZCB9IGZyb20gJy4uL3BhcnRpYWwtc2NvcmluZyc7XG5cbmRlc2NyaWJlKCdlbmFibGVkJywgKCkgPT4ge1xuICBjb25zdCBhc3NlcnRFbmFibGVkID0gKGNvbmZpZywgZW52LCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGByZXR1cm5zICR7ZXhwZWN0ZWR9IGZvcjogY29uZmlnOiAke2NvbmZpZy5wYXJ0aWFsU2NvcmluZ30sIGVudjoke2Vudi5wYXJ0aWFsU2NvcmluZ31gLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBlbmFibGVkKGNvbmZpZywgZW52KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9ICh2KSA9PiAoeyBwYXJ0aWFsU2NvcmluZzogdiB9KTtcbiAgY29uc3QgZW52ID0gKHYpID0+ICh7IHBhcnRpYWxTY29yaW5nOiB2IH0pO1xuXG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKHVuZGVmaW5lZCksIGVudih1bmRlZmluZWQpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodW5kZWZpbmVkKSwgZW52KHRydWUpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodW5kZWZpbmVkKSwgZW52KGZhbHNlKSwgZmFsc2UpO1xuXG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKGZhbHNlKSwgZW52KHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcoZmFsc2UpLCBlbnYodHJ1ZSksIGZhbHNlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcoZmFsc2UpLCBlbnYoZmFsc2UpLCBmYWxzZSk7XG5cbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodHJ1ZSksIGVudih1bmRlZmluZWQpLCB0cnVlKTtcbiAgYXNzZXJ0RW5hYmxlZChjb25maWcodHJ1ZSksIGVudih0cnVlKSwgdHJ1ZSk7XG4gIGFzc2VydEVuYWJsZWQoY29uZmlnKHRydWUpLCBlbnYoZmFsc2UpLCBmYWxzZSk7XG59KTtcbiJdfQ==
@@ -1,299 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
6
-
7
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
-
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
-
11
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
-
13
- var _persistence = require("../persistence");
14
-
15
- var _templateObject, _templateObject2, _templateObject3;
16
-
17
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
-
19
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20
-
21
- describe('getShuffledChoices', function () {
22
- var choices, session, updateSession, key;
23
- beforeEach(function () {
24
- updateSession = jest.fn().mockResolvedValue([]);
25
- session = {
26
- id: '1',
27
- element: 'element'
28
- };
29
- choices = [{
30
- value: 1
31
- }, {
32
- value: 2
33
- }];
34
- key = 'value';
35
- });
36
- describe('0 key', function () {
37
- it('calls update session w/ 0 as a key', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
38
- var result;
39
- return _regenerator["default"].wrap(function _callee$(_context) {
40
- while (1) {
41
- switch (_context.prev = _context.next) {
42
- case 0:
43
- _context.next = 2;
44
- return (0, _persistence.getShuffledChoices)([{
45
- value: 0
46
- }, {
47
- value: 1
48
- }], session, updateSession, 'value');
49
-
50
- case 2:
51
- result = _context.sent;
52
- expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
53
- shuffledValues: expect.arrayContaining([0, 1])
54
- });
55
-
56
- case 4:
57
- case "end":
58
- return _context.stop();
59
- }
60
- }
61
- }, _callee);
62
- })));
63
- });
64
- describe('handles null values in session', function () {
65
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
66
- var result;
67
- return _regenerator["default"].wrap(function _callee2$(_context2) {
68
- while (1) {
69
- switch (_context2.prev = _context2.next) {
70
- case 0:
71
- _context2.next = 2;
72
- return (0, _persistence.getShuffledChoices)(choices, _objectSpread(_objectSpread({}, session), {}, {
73
- shuffledValues: [null]
74
- }), updateSession, 'value');
75
-
76
- case 2:
77
- result = _context2.sent;
78
-
79
- case 3:
80
- case "end":
81
- return _context2.stop();
82
- }
83
- }
84
- }, _callee2);
85
- })));
86
- it('calls updateSession w/ new shuffle cos [null] is treated as empty', function () {
87
- expect(updateSession).toHaveBeenCalledWith(session.id, session.element, {
88
- shuffledValues: expect.arrayContaining([1, 2])
89
- });
90
- });
91
- });
92
- describe('bad shuffle generation does not call updateSession', function () {
93
- beforeEach( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
94
- var result;
95
- return _regenerator["default"].wrap(function _callee3$(_context3) {
96
- while (1) {
97
- switch (_context3.prev = _context3.next) {
98
- case 0:
99
- _context3.next = 2;
100
- return (0, _persistence.getShuffledChoices)(choices, {}, updateSession, 'foo');
101
-
102
- case 2:
103
- result = _context3.sent;
104
-
105
- case 3:
106
- case "end":
107
- return _context3.stop();
108
- }
109
- }
110
- }, _callee3);
111
- })));
112
- it('does not call update session', function () {
113
- expect(updateSession).not.toHaveBeenCalled();
114
- });
115
- });
116
- describe('session does not exist', function () {
117
- it('returns undefined for empty session', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
118
- var result;
119
- return _regenerator["default"].wrap(function _callee4$(_context4) {
120
- while (1) {
121
- switch (_context4.prev = _context4.next) {
122
- case 0:
123
- _context4.next = 2;
124
- return (0, _persistence.getShuffledChoices)(choices, undefined, updateSession, key);
125
-
126
- case 2:
127
- result = _context4.sent;
128
- expect(result).toEqual(undefined);
129
-
130
- case 4:
131
- case "end":
132
- return _context4.stop();
133
- }
134
- }
135
- }, _callee4);
136
- })));
137
- });
138
- describe('session exists', function () {
139
- it('returns compact choices if session has shuffledValues', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
140
- var result;
141
- return _regenerator["default"].wrap(function _callee5$(_context5) {
142
- while (1) {
143
- switch (_context5.prev = _context5.next) {
144
- case 0:
145
- session = {
146
- shuffledValues: [2, 1]
147
- };
148
- _context5.next = 3;
149
- return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
150
-
151
- case 3:
152
- result = _context5.sent;
153
- expect(result).toEqual(expect.arrayContaining(choices));
154
-
155
- case 5:
156
- case "end":
157
- return _context5.stop();
158
- }
159
- }
160
- }, _callee5);
161
- })));
162
- it('returns shuffled choices if updateSession is a function', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
163
- var result;
164
- return _regenerator["default"].wrap(function _callee6$(_context6) {
165
- while (1) {
166
- switch (_context6.prev = _context6.next) {
167
- case 0:
168
- session = {};
169
- updateSession = jest.fn().mockResolvedValue();
170
- _context6.next = 4;
171
- return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
172
-
173
- case 4:
174
- result = _context6.sent;
175
- expect(result).toEqual(expect.arrayContaining(choices));
176
-
177
- case 6:
178
- case "end":
179
- return _context6.stop();
180
- }
181
- }
182
- }, _callee6);
183
- })));
184
- it('calls updateSession as expected if updateSession is a function', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
185
- return _regenerator["default"].wrap(function _callee7$(_context7) {
186
- while (1) {
187
- switch (_context7.prev = _context7.next) {
188
- case 0:
189
- session = {
190
- id: '1',
191
- element: 'pie-element'
192
- };
193
- _context7.next = 3;
194
- return (0, _persistence.getShuffledChoices)(choices, session, updateSession, key);
195
-
196
- case 3:
197
- expect(updateSession).toHaveBeenCalledWith('1', 'pie-element', {
198
- shuffledValues: expect.arrayContaining([1, 2])
199
- });
200
-
201
- case 4:
202
- case "end":
203
- return _context7.stop();
204
- }
205
- }
206
- }, _callee7);
207
- })));
208
- });
209
- });
210
- describe('lockChoices', function () {
211
- var env = function env(lockChoiceOrder) {
212
- var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
213
- return {
214
- '@pie-element': {
215
- lockChoiceOrder: lockChoiceOrder
216
- },
217
- role: role
218
- };
219
- };
220
-
221
- var session = function session(shuffledValues) {
222
- return {
223
- shuffledValues: shuffledValues
224
- };
225
- };
226
-
227
- it.each(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, false, session(), undefined, false, false, undefined, undefined, false, undefined, session(), env(false), false, undefined, session(), env(undefined), false, false, session(), env(false, 'instructor'), true, false, session([0, 1]), env(false, 'instructor'), true, false, undefined, env(false, 'instructor'), true)('1. model.lockChoiceOrder: $modelLock, $session, $env => $expected', function (_ref8) {
228
- var modelLock = _ref8.modelLock,
229
- session = _ref8.session,
230
- env = _ref8.env,
231
- expected = _ref8.expected;
232
- var model = {
233
- lockChoiceOrder: modelLock
234
- };
235
- var result = (0, _persistence.lockChoices)(model, session, env);
236
- expect(result).toEqual(expected);
237
- });
238
- });
239
- describe('lockChoices mod', function () {
240
- var env = function env(lockChoiceOrder) {
241
- var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
242
- return {
243
- '@pie-element': {
244
- lockChoiceOrder: lockChoiceOrder
245
- },
246
- role: role
247
- };
248
- };
249
-
250
- var session = function session() {
251
- var answers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['foo', 'bar'];
252
- return {
253
- answers: answers
254
- };
255
- };
256
-
257
- it.each(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, undefined, session(), env(true), true, undefined, session(), env(undefined), false, undefined, session(), env(undefined, 'instructor'), true)('2. model.lockChoiceOrder: $modelLock, $session, $env => $expected', function (_ref9) {
258
- var modelLock = _ref9.modelLock,
259
- session = _ref9.session,
260
- env = _ref9.env,
261
- expected = _ref9.expected;
262
- var model = {
263
- lockChoiceOrder: modelLock
264
- };
265
- var result = (0, _persistence.lockChoices)(model, session, env);
266
- expect(result).toEqual(expected);
267
- });
268
- });
269
- describe('lockChoices', function () {
270
- var env = function env(lockChoiceOrder) {
271
- var role = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'student';
272
- return {
273
- '@pie-element': {
274
- lockChoiceOrder: lockChoiceOrder
275
- },
276
- role: role
277
- };
278
- };
279
-
280
- var session = function session(shuffledValues) {
281
- return {
282
- shuffledValues: shuffledValues,
283
- answers: ['foo', 'bar']
284
- };
285
- };
286
-
287
- it.each(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n modelLock | session | env | expected\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n ", " | ", " | ", " | ", "\n "])), true, session(), env(true), true, true, session(), env(false), true, false, session(), env(true), true, false, session(), env(false), false, undefined, session(), env(true), true, undefined, session(), env(undefined), false, undefined, session(), env(undefined, 'instructor'), true)('3. model.lockChoiceOrder: $modelLock, $env => $expected', function (_ref10) {
288
- var modelLock = _ref10.modelLock,
289
- session = _ref10.session,
290
- env = _ref10.env,
291
- expected = _ref10.expected;
292
- var model = {
293
- lockChoiceOrder: modelLock
294
- };
295
- var result = (0, _persistence.lockChoices)(model, session, env);
296
- expect(result).toEqual(expected);
297
- });
298
- });
299
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcGVyc2lzdGVuY2UudGVzdC5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImNob2ljZXMiLCJzZXNzaW9uIiwidXBkYXRlU2Vzc2lvbiIsImtleSIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsImlkIiwiZWxlbWVudCIsInZhbHVlIiwiaXQiLCJyZXN1bHQiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNodWZmbGVkVmFsdWVzIiwiYXJyYXlDb250YWluaW5nIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCIsInVuZGVmaW5lZCIsInRvRXF1YWwiLCJlbnYiLCJsb2NrQ2hvaWNlT3JkZXIiLCJyb2xlIiwiZWFjaCIsIm1vZGVsTG9jayIsImV4cGVjdGVkIiwibW9kZWwiLCJhbnN3ZXJzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDbkMsTUFBSUMsT0FBSixFQUFhQyxPQUFiLEVBQXNCQyxhQUF0QixFQUFxQ0MsR0FBckM7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZkYsSUFBQUEsYUFBYSxHQUFHRyxJQUFJLENBQUNDLEVBQUwsR0FBVUMsaUJBQVYsQ0FBNEIsRUFBNUIsQ0FBaEI7QUFDQU4sSUFBQUEsT0FBTyxHQUFHO0FBQ1JPLE1BQUFBLEVBQUUsRUFBRSxHQURJO0FBRVJDLE1BQUFBLE9BQU8sRUFBRTtBQUZELEtBQVY7QUFJQVQsSUFBQUEsT0FBTyxHQUFHLENBQ1I7QUFDRVUsTUFBQUEsS0FBSyxFQUFFO0FBRFQsS0FEUSxFQUlSO0FBQ0VBLE1BQUFBLEtBQUssRUFBRTtBQURULEtBSlEsQ0FBVjtBQVFBUCxJQUFBQSxHQUFHLEdBQUcsT0FBTjtBQUNELEdBZlMsQ0FBVjtBQWlCQUosRUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNO0FBQ3RCWSxJQUFBQSxF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QnBCLE9BQU8sRUFMMUIsRUFLa0NvQixHQUFHLENBQUMsS0FBRCxDQUxyQyxFQUtvRSxLQUxwRSxFQU1JRixTQU5KLEVBTW1CbEIsT0FBTyxFQU4xQixFQU1rQ29CLEdBQUcsQ0FBQyxJQUFELENBTnJDLEVBTW9FLElBTnBFLEVBT0lGLFNBUEosRUFPbUJsQixPQUFPLEVBUDFCLEVBT2tDb0IsR0FBRyxDQUFDRixTQUFELENBUHJDLEVBT29FLEtBUHBFLEVBUUlBLFNBUkosRUFRbUJsQixPQUFPLEVBUjFCLEVBUWtDb0IsR0FBRyxDQUFDRixTQUFELEVBQVksWUFBWixDQVJyQyxFQVFvRSxJQVJwRSxFQVNFLHlEQVRGLEVBUzZELGtCQUEyQztBQUFBLFFBQXhDTSxTQUF3QyxVQUF4Q0EsU0FBd0M7QUFBQSxRQUE3QnhCLE9BQTZCLFVBQTdCQSxPQUE2QjtBQUFBLFFBQXBCb0IsR0FBb0IsVUFBcEJBLEdBQW9CO0FBQUEsUUFBZkssUUFBZSxVQUFmQSxRQUFlO0FBQ3RHLFFBQU1DLEtBQUssR0FBRztBQUFFTCxNQUFBQSxlQUFlLEVBQUVHO0FBQW5CLEtBQWQ7QUFDQSxRQUFNYixNQUFNLEdBQUcsOEJBQVllLEtBQVosRUFBbUIxQixPQUFuQixFQUE0Qm9CLEdBQTVCLENBQWY7QUFDQVIsSUFBQUEsTUFBTSxDQUFDRCxNQUFELENBQU4sQ0FBZVEsT0FBZixDQUF1Qk0sUUFBdkI7QUFDRCxHQWJEO0FBY0QsQ0FwQk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNodWZmbGVkQ2hvaWNlcywgbG9ja0Nob2ljZXMgfSBmcm9tICcuLi9wZXJzaXN0ZW5jZSc7XG5cbmRlc2NyaWJlKCdnZXRTaHVmZmxlZENob2ljZXMnLCAoKSA9PiB7XG4gIGxldCBjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShbXSk7XG4gICAgc2Vzc2lvbiA9IHtcbiAgICAgIGlkOiAnMScsXG4gICAgICBlbGVtZW50OiAnZWxlbWVudCcsXG4gICAgfTtcbiAgICBjaG9pY2VzID0gW1xuICAgICAge1xuICAgICAgICB2YWx1ZTogMSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiAyLFxuICAgICAgfSxcbiAgICBdO1xuICAgIGtleSA9ICd2YWx1ZSc7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcwIGtleScsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgdXBkYXRlIHNlc3Npb24gdy8gMCBhcyBhIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNodWZmbGVkQ2hvaWNlcyhbeyB2YWx1ZTogMCB9LCB7IHZhbHVlOiAxIH1dLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCAndmFsdWUnKTtcbiAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHtcbiAgICAgICAgc2h1ZmZsZWRWYWx1ZXM6IGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoWzAsIDFdKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaGFuZGxlcyBudWxsIHZhbHVlcyBpbiBzZXNzaW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHsgLi4uc2Vzc2lvbiwgc2h1ZmZsZWRWYWx1ZXM6IFtudWxsXSB9LCB1cGRhdGVTZXNzaW9uLCAndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyB1cGRhdGVTZXNzaW9uIHcvIG5ldyBzaHVmZmxlIGNvcyBbbnVsbF0gaXMgdHJlYXRlZCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHtcbiAgICAgICAgc2h1ZmZsZWRWYWx1ZXM6IGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoWzEsIDJdKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2JhZCBzaHVmZmxlIGdlbmVyYXRpb24gZG9lcyBub3QgY2FsbCB1cGRhdGVTZXNzaW9uJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHt9LCB1cGRhdGVTZXNzaW9uLCAnZm9vJyk7XG4gICAgfSk7XG4gICAgaXQoJ2RvZXMgbm90IGNhbGwgdXBkYXRlIHNlc3Npb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nlc3Npb24gZG9lcyBub3QgZXhpc3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIGZvciBlbXB0eSBzZXNzaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHVuZGVmaW5lZCwgdXBkYXRlU2Vzc2lvbiwga2V5KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nlc3Npb24gZXhpc3RzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIGNvbXBhY3QgY2hvaWNlcyBpZiBzZXNzaW9uIGhhcyBzaHVmZmxlZFZhbHVlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIHNlc3Npb24gPSB7IHNodWZmbGVkVmFsdWVzOiBbMiwgMV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFNodWZmbGVkQ2hvaWNlcyhjaG9pY2VzLCBzZXNzaW9uLCB1cGRhdGVTZXNzaW9uLCBrZXkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKGNob2ljZXMpKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIHNodWZmbGVkIGNob2ljZXMgaWYgdXBkYXRlU2Vzc2lvbiBpcyBhIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHt9O1xuICAgICAgdXBkYXRlU2Vzc2lvbiA9IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSgpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoY2hvaWNlcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbGxzIHVwZGF0ZVNlc3Npb24gYXMgZXhwZWN0ZWQgaWYgdXBkYXRlU2Vzc2lvbiBpcyBhIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgc2Vzc2lvbiA9IHsgaWQ6ICcxJywgZWxlbWVudDogJ3BpZS1lbGVtZW50JyB9O1xuICAgICAgYXdhaXQgZ2V0U2h1ZmZsZWRDaG9pY2VzKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSk7XG4gICAgICBleHBlY3QodXBkYXRlU2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAncGllLWVsZW1lbnQnLCB7XG4gICAgICAgIHNodWZmbGVkVmFsdWVzOiBleHBlY3QuYXJyYXlDb250YWluaW5nKFsxLCAyXSksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2xvY2tDaG9pY2VzJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKHNodWZmbGVkVmFsdWVzKSA9PiAoeyBzaHVmZmxlZFZhbHVlcyB9KTtcbiAgaXQuZWFjaGBcbiAgICBtb2RlbExvY2sgICAgfCBzZXNzaW9uICAgICAgICAgICAgfCBlbnYgICAgICAgICAgICAgICAgICAgICAgICAgfCBleHBlY3RlZFxuICAgICR7dHJ1ZX0gICAgICB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KHRydWUpfSAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gICAgICAgfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3VuZGVmaW5lZH0gICAgICAgfCAke3VuZGVmaW5lZH0gICAgICAgICAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSAgICAgICB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9IHwgJHtzZXNzaW9uKCl9ICAgICAgIHwgJHtlbnYodW5kZWZpbmVkKX0gICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3Nlc3Npb24oKX0gICAgICAgfCAke2VudihmYWxzZSwgJ2luc3RydWN0b3InKX0gfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKFswLCAxXSl9IHwgJHtlbnYoZmFsc2UsICdpbnN0cnVjdG9yJyl9IHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7dW5kZWZpbmVkfSAgICAgICB8ICR7ZW52KGZhbHNlLCAnaW5zdHJ1Y3RvcicpfSB8ICR7dHJ1ZX1cbiAgYCgnMS4gbW9kZWwubG9ja0Nob2ljZU9yZGVyOiAkbW9kZWxMb2NrLCAkc2Vzc2lvbiwgJGVudiA9PiAkZXhwZWN0ZWQnLCAoeyBtb2RlbExvY2ssIHNlc3Npb24sIGVudiwgZXhwZWN0ZWQgfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsID0geyBsb2NrQ2hvaWNlT3JkZXI6IG1vZGVsTG9jayB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGxvY2tDaG9pY2VzKG1vZGVsLCBzZXNzaW9uLCBlbnYpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnbG9ja0Nob2ljZXMgbW9kJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKGFuc3dlcnMgPSBbJ2ZvbycsICdiYXInXSkgPT4gKHsgYW5zd2VycyB9KTtcbiAgaXQuZWFjaGBcbiAgICBtb2RlbExvY2sgICAgfCBzZXNzaW9uICAgICAgfCBlbnYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhwZWN0ZWRcbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gfCAke2Vudih0cnVlKX0gICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7dHJ1ZX0gICAgICB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KGZhbHNlKX0gICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke2ZhbHNlfSAgICAgfCAke3Nlc3Npb24oKX0gfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih0cnVlKX0gICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHVuZGVmaW5lZCl9ICAgICAgICAgICAgICAgfCAke2ZhbHNlfVxuICAgICR7dW5kZWZpbmVkfSB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHVuZGVmaW5lZCwgJ2luc3RydWN0b3InKX0gfCAke3RydWV9XG4gIGAoJzIuIG1vZGVsLmxvY2tDaG9pY2VPcmRlcjogJG1vZGVsTG9jaywgJHNlc3Npb24sICRlbnYgPT4gJGV4cGVjdGVkJywgKHsgbW9kZWxMb2NrLCBzZXNzaW9uLCBlbnYsIGV4cGVjdGVkIH0pID0+IHtcbiAgICBjb25zdCBtb2RlbCA9IHsgbG9ja0Nob2ljZU9yZGVyOiBtb2RlbExvY2sgfTtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrQ2hvaWNlcyhtb2RlbCwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2xvY2tDaG9pY2VzJywgKCkgPT4ge1xuICBjb25zdCBlbnYgPSAobG9ja0Nob2ljZU9yZGVyLCByb2xlID0gJ3N0dWRlbnQnKSA9PiAoe1xuICAgICdAcGllLWVsZW1lbnQnOiB7IGxvY2tDaG9pY2VPcmRlciB9LFxuICAgIHJvbGUsXG4gIH0pO1xuICBjb25zdCBzZXNzaW9uID0gKHNodWZmbGVkVmFsdWVzKSA9PiAoeyBzaHVmZmxlZFZhbHVlcywgYW5zd2VyczogWydmb28nLCAnYmFyJ10gfSk7XG4gIGl0LmVhY2hgXG4gICAgbW9kZWxMb2NrICAgIHwgc2Vzc2lvbiAgICAgIHwgZW52ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4cGVjdGVkXG4gICAgJHt0cnVlfSAgICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3RydWV9ICAgICAgfCAke3Nlc3Npb24oKX0gfCAke2VudihmYWxzZSl9ICAgICAgICAgICAgICAgICAgIHwgJHt0cnVlfVxuICAgICR7ZmFsc2V9ICAgICB8ICR7c2Vzc2lvbigpfSB8ICR7ZW52KHRydWUpfSAgICAgICAgICAgICAgICAgICAgfCAke3RydWV9XG4gICAgJHtmYWxzZX0gICAgIHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYoZmFsc2UpfSAgICAgICAgICAgICAgICAgICB8ICR7ZmFsc2V9XG4gICAgJHt1bmRlZmluZWR9IHwgJHtzZXNzaW9uKCl9IHwgJHtlbnYodHJ1ZSl9ICAgICAgICAgICAgICAgICAgICB8ICR7dHJ1ZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih1bmRlZmluZWQpfSAgICAgICAgICAgICAgIHwgJHtmYWxzZX1cbiAgICAke3VuZGVmaW5lZH0gfCAke3Nlc3Npb24oKX0gfCAke2Vudih1bmRlZmluZWQsICdpbnN0cnVjdG9yJyl9IHwgJHt0cnVlfVxuICBgKCczLiBtb2RlbC5sb2NrQ2hvaWNlT3JkZXI6ICRtb2RlbExvY2ssICRlbnYgPT4gJGV4cGVjdGVkJywgKHsgbW9kZWxMb2NrLCBzZXNzaW9uLCBlbnYsIGV4cGVjdGVkIH0pID0+IHtcbiAgICBjb25zdCBtb2RlbCA9IHsgbG9ja0Nob2ljZU9yZGVyOiBtb2RlbExvY2sgfTtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrQ2hvaWNlcyhtb2RlbCwgc2Vzc2lvbiwgZW52KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgfSk7XG59KTtcbiJdfQ==
package/lib/index.js DELETED
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime/helpers/typeof");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "getShuffledChoices", {
9
- enumerable: true,
10
- get: function get() {
11
- return _persistence.getShuffledChoices;
12
- }
13
- });
14
- Object.defineProperty(exports, "lockChoices", {
15
- enumerable: true,
16
- get: function get() {
17
- return _persistence.lockChoices;
18
- }
19
- });
20
- exports.partialScoring = void 0;
21
-
22
- var partialScoring = _interopRequireWildcard(require("./partial-scoring"));
23
-
24
- exports.partialScoring = partialScoring;
25
-
26
- var _persistence = require("./persistence");
27
-
28
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
-
30
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUVBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGFydGlhbFNjb3JpbmcgZnJvbSAnLi9wYXJ0aWFsLXNjb3JpbmcnO1xuXG5leHBvcnQgeyBsb2NrQ2hvaWNlcywgZ2V0U2h1ZmZsZWRDaG9pY2VzIH0gZnJvbSAnLi9wZXJzaXN0ZW5jZSc7XG5leHBvcnQgeyBwYXJ0aWFsU2NvcmluZyB9O1xuIl19
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.enabled = void 0;
7
-
8
- var enabled = function enabled(config, env, defaultValue) {
9
- // if model.partialScoring = false
10
- // - if env.partialScoring = false || env.partialScoring = true => use dichotomous scoring
11
- // else if model.partialScoring = true || undefined
12
- // - if env.partialScoring = false, use dichotomous scoring
13
- // - else if env.partialScoring = true, use partial scoring
14
- config = config || {};
15
- env = env || {};
16
-
17
- if (config.partialScoring === false) {
18
- return false;
19
- }
20
-
21
- if (env.partialScoring === false) {
22
- return false;
23
- }
24
-
25
- return typeof defaultValue === 'boolean' ? defaultValue : true;
26
- };
27
-
28
- exports.enabled = enabled;
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsLXNjb3JpbmcuanMiXSwibmFtZXMiOlsiZW5hYmxlZCIsImNvbmZpZyIsImVudiIsImRlZmF1bHRWYWx1ZSIsInBhcnRpYWxTY29yaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sSUFBTUEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsTUFBRCxFQUFTQyxHQUFULEVBQWNDLFlBQWQsRUFBK0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBRixFQUFBQSxNQUFNLEdBQUdBLE1BQU0sSUFBSSxFQUFuQjtBQUNBQyxFQUFBQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFiOztBQUVBLE1BQUlELE1BQU0sQ0FBQ0csY0FBUCxLQUEwQixLQUE5QixFQUFxQztBQUNuQyxXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJRixHQUFHLENBQUNFLGNBQUosS0FBdUIsS0FBM0IsRUFBa0M7QUFDaEMsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBTyxPQUFPRCxZQUFQLEtBQXdCLFNBQXhCLEdBQW9DQSxZQUFwQyxHQUFtRCxJQUExRDtBQUNELENBbEJNIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVuYWJsZWQgPSAoY29uZmlnLCBlbnYsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAvLyBpZiBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlXG4gIC8vICAtIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlIHx8IGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUgPT4gdXNlIGRpY2hvdG9tb3VzIHNjb3JpbmdcbiAgLy8gZWxzZSBpZiBtb2RlbC5wYXJ0aWFsU2NvcmluZyA9IHRydWUgfHwgdW5kZWZpbmVkXG4gIC8vICAtIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IGZhbHNlLCB1c2UgZGljaG90b21vdXMgc2NvcmluZ1xuICAvLyAgLSBlbHNlIGlmIGVudi5wYXJ0aWFsU2NvcmluZyA9IHRydWUsIHVzZSBwYXJ0aWFsIHNjb3JpbmdcbiAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICBlbnYgPSBlbnYgfHwge307XG5cbiAgaWYgKGNvbmZpZy5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoZW52LnBhcnRpYWxTY29yaW5nID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicgPyBkZWZhdWx0VmFsdWUgOiB0cnVlO1xufTtcbiJdfQ==
@@ -1,140 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.lockChoices = exports.getShuffledChoices = exports.compact = void 0;
9
-
10
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
-
12
- var _get = _interopRequireDefault(require("lodash/get"));
13
-
14
- var _shuffle = _interopRequireDefault(require("lodash/shuffle"));
15
-
16
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
17
-
18
- // eslint-disable-next-line no-console
19
- var lg = function lg(n) {
20
- return console[n].bind(console, 'controller-utils:');
21
- };
22
-
23
- var debug = lg('debug');
24
- var log = lg('log');
25
- var warn = lg('warn');
26
- var error = lg('error');
27
-
28
- var compact = function compact(arr) {
29
- if (Array.isArray(arr)) {
30
- return arr.filter(function (v) {
31
- return v !== null && v !== undefined;
32
- });
33
- }
34
-
35
- return arr;
36
- };
37
-
38
- exports.compact = compact;
39
-
40
- var getShuffledChoices = function getShuffledChoices(choices, session, updateSession, choiceKey) {
41
- return new Promise(function (resolve) {
42
- var _session$data;
43
-
44
- log('updateSession type: ', (0, _typeof2["default"])(updateSession));
45
- log('session: ', session);
46
- var currentShuffled = compact((session === null || session === void 0 ? void 0 : (_session$data = session.data) === null || _session$data === void 0 ? void 0 : _session$data.shuffledValues) || (session === null || session === void 0 ? void 0 : session.shuffledValues) || []);
47
-
48
- if (!session) {
49
- // eslint-disable-next-line quotes
50
- warn("unable to save shuffled choices because there's no session.");
51
- resolve(undefined);
52
- } else if (!(0, _isEmpty["default"])(currentShuffled)) {
53
- var _session$data2;
54
-
55
- debug('use shuffledValues to sort the choices...', (_session$data2 = session.data) === null || _session$data2 === void 0 ? void 0 : _session$data2.shuffledValues);
56
- resolve(compact(currentShuffled.map(function (v) {
57
- return choices.find(function (c) {
58
- return c[choiceKey] === v;
59
- });
60
- })));
61
- } else {
62
- var shuffledChoices = (0, _shuffle["default"])(choices);
63
-
64
- if (updateSession && typeof updateSession === 'function') {
65
- try {
66
- //Note: session.id refers to the id of the element within a session
67
- var shuffledValues = compact(shuffledChoices.map(function (c) {
68
- return c[choiceKey];
69
- }));
70
- log('try to save shuffledValues to session...', shuffledValues);
71
- log('call updateSession... ', session.id, session.element);
72
-
73
- if ((0, _isEmpty["default"])(shuffledValues)) {
74
- error("shuffledValues is an empty array? - refusing to call updateSession: shuffledChoices: ".concat(JSON.stringify(shuffledChoices), ", key: ").concat(choiceKey));
75
- } else {
76
- updateSession(session.id, session.element, {
77
- shuffledValues: shuffledValues
78
- })["catch"](function (e) {
79
- return (// eslint-disable-next-line no-console
80
- console.error('update session failed for: ', session.id, e)
81
- );
82
- });
83
- }
84
- } catch (e) {
85
- warn('unable to save shuffled order for choices');
86
- error(e);
87
- }
88
- } else {
89
- warn('unable to save shuffled choices, shuffle will happen every time.');
90
- } //save this shuffle to the session for later retrieval
91
-
92
-
93
- resolve(shuffledChoices);
94
- }
95
- });
96
- };
97
- /**
98
- * If we return:
99
- * - true - that means that the order of the choices will be ordinal (as is created in the configure item)
100
- * - false - that means the getShuffledChoices above will be called and that in turn means that we either
101
- * return the shuffled values on the session (if any exists) or we shuffle the choices
102
- * @param model - model to check if we should lock order
103
- * @param session - session to check if we should lock order
104
- * @param env - env to check if we should lock order
105
- * @returns {boolean}
106
- */
107
-
108
-
109
- exports.getShuffledChoices = getShuffledChoices;
110
-
111
- var lockChoices = function lockChoices(model, session, env) {
112
- if (model.lockChoiceOrder) {
113
- return true;
114
- }
115
-
116
- log('lockChoiceOrder: ', (0, _get["default"])(env, ['@pie-element', 'lockChoiceOrder'], false));
117
-
118
- if ((0, _get["default"])(env, ['@pie-element', 'lockChoiceOrder'], false)) {
119
- return true;
120
- }
121
-
122
- var role = (0, _get["default"])(env, 'role', 'student');
123
-
124
- if (role === 'instructor') {
125
- // TODO: .. in the future the instructor can toggle between ordinal and shuffled here, so keeping this code until then
126
-
127
- /*const alreadyShuffled = hasShuffledValues(session);
128
- if (alreadyShuffled) {
129
- return false;
130
- }
131
- return true;*/
132
- return true;
133
- } // here it's a student, so don't lock and it will shuffle if needs be
134
-
135
-
136
- return false;
137
- };
138
-
139
- exports.lockChoices = lockChoices;
140
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6WyJsZyIsIm4iLCJjb25zb2xlIiwiYmluZCIsImRlYnVnIiwibG9nIiwid2FybiIsImVycm9yIiwiY29tcGFjdCIsImFyciIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsInYiLCJ1bmRlZmluZWQiLCJnZXRTaHVmZmxlZENob2ljZXMiLCJjaG9pY2VzIiwic2Vzc2lvbiIsInVwZGF0ZVNlc3Npb24iLCJjaG9pY2VLZXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImN1cnJlbnRTaHVmZmxlZCIsImRhdGEiLCJzaHVmZmxlZFZhbHVlcyIsIm1hcCIsImZpbmQiLCJjIiwic2h1ZmZsZWRDaG9pY2VzIiwiaWQiLCJlbGVtZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImUiLCJsb2NrQ2hvaWNlcyIsIm1vZGVsIiwiZW52IiwibG9ja0Nob2ljZU9yZGVyIiwicm9sZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTtBQUNBLElBQU1BLEVBQUUsR0FBRyxTQUFMQSxFQUFLLENBQUNDLENBQUQ7QUFBQSxTQUFPQyxPQUFPLENBQUNELENBQUQsQ0FBUCxDQUFXRSxJQUFYLENBQWdCRCxPQUFoQixFQUF5QixtQkFBekIsQ0FBUDtBQUFBLENBQVg7O0FBQ0EsSUFBTUUsS0FBSyxHQUFHSixFQUFFLENBQUMsT0FBRCxDQUFoQjtBQUNBLElBQU1LLEdBQUcsR0FBR0wsRUFBRSxDQUFDLEtBQUQsQ0FBZDtBQUNBLElBQU1NLElBQUksR0FBR04sRUFBRSxDQUFDLE1BQUQsQ0FBZjtBQUNBLElBQU1PLEtBQUssR0FBR1AsRUFBRSxDQUFDLE9BQUQsQ0FBaEI7O0FBRU8sSUFBTVEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBQ0MsR0FBRCxFQUFTO0FBQzlCLE1BQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixHQUFkLENBQUosRUFBd0I7QUFDdEIsV0FBT0EsR0FBRyxDQUFDRyxNQUFK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O0FBQ0wzQixRQUFBQSxJQUFJLENBQUMsa0VBQUQsQ0FBSjtBQUNELE9BM0JJLENBNEJMOzs7QUFDQWUsTUFBQUEsT0FBTyxDQUFDTyxlQUFELENBQVA7QUFDRDtBQUNGLEdBNUNELENBRGdDO0FBQUEsQ0FBM0I7QUErQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTU0sV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsS0FBRCxFQUFRbEIsT0FBUixFQUFpQm1CLEdBQWpCLEVBQXlCO0FBQ2xELE1BQUlELEtBQUssQ0FBQ0UsZUFBVixFQUEyQjtBQUN6QixXQUFPLElBQVA7QUFDRDs7QUFFRGhDLEVBQUFBLEdBQUcsQ0FBQyxtQkFBRCxFQUFzQixxQkFBSStCLEdBQUosRUFBUyxDQUFDLGNBQUQsRUFBaUIsaUJBQWpCLENBQVQsRUFBOEMsS0FBOUMsQ0FBdEIsQ0FBSDs7QUFFQSxNQUFJLHFCQUFJQSxHQUFKLEVBQVMsQ0FBQyxjQUFELEVBQWlCLGlCQUFqQixDQUFULEVBQThDLEtBQTlDLENBQUosRUFBMEQ7QUFDeEQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsTUFBTUUsSUFBSSxHQUFHLHFCQUFJRixHQUFKLEVBQVMsTUFBVCxFQUFpQixTQUFqQixDQUFiOztBQUVBLE1BQUlFLElBQUksS0FBSyxZQUFiLEVBQTJCO0FBQ3pCOztBQUNBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFHSSxXQUFPLElBQVA7QUFDRCxHQXZCaUQsQ0F5QmxEOzs7QUFDQSxTQUFPLEtBQVA7QUFDRCxDQTNCTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgc2h1ZmZsZSBmcm9tICdsb2Rhc2gvc2h1ZmZsZSc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5jb25zdCBsZyA9IChuKSA9PiBjb25zb2xlW25dLmJpbmQoY29uc29sZSwgJ2NvbnRyb2xsZXItdXRpbHM6Jyk7XG5jb25zdCBkZWJ1ZyA9IGxnKCdkZWJ1ZycpO1xuY29uc3QgbG9nID0gbGcoJ2xvZycpO1xuY29uc3Qgd2FybiA9IGxnKCd3YXJuJyk7XG5jb25zdCBlcnJvciA9IGxnKCdlcnJvcicpO1xuXG5leHBvcnQgY29uc3QgY29tcGFjdCA9IChhcnIpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIHJldHVybiBhcnIuZmlsdGVyKCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaHVmZmxlZENob2ljZXMgPSAoY2hvaWNlcywgc2Vzc2lvbiwgdXBkYXRlU2Vzc2lvbiwgY2hvaWNlS2V5KSA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGxvZygndXBkYXRlU2Vzc2lvbiB0eXBlOiAnLCB0eXBlb2YgdXBkYXRlU2Vzc2lvbik7XG4gICAgbG9nKCdzZXNzaW9uOiAnLCBzZXNzaW9uKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9IGNvbXBhY3Qoc2Vzc2lvbj8uZGF0YT8uc2h1ZmZsZWRWYWx1ZXMgfHwgc2Vzc2lvbj8uc2h1ZmZsZWRWYWx1ZXMgfHwgW10pO1xuXG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcXVvdGVzXG4gICAgICB3YXJuKFwidW5hYmxlIHRvIHNhdmUgc2h1ZmZsZWQgY2hvaWNlcyBiZWNhdXNlIHRoZXJlJ3Mgbm8gc2Vzc2lvbi5cIik7XG4gICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmICghaXNFbXB0eShjdXJyZW50U2h1ZmZsZWQpKSB7XG4gICAgICBkZWJ1ZygndXNlIHNodWZmbGVkVmFsdWVzIHRvIHNvcnQgdGhlIGNob2ljZXMuLi4nLCBzZXNzaW9uLmRhdGE/LnNodWZmbGVkVmFsdWVzKTtcbiAgICAgIHJlc29sdmUoY29tcGFjdChjdXJyZW50U2h1ZmZsZWQubWFwKCh2KSA9PiBjaG9pY2VzLmZpbmQoKGMpID0+IGNbY2hvaWNlS2V5XSA9PT0gdikpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNodWZmbGVkQ2hvaWNlcyA9IHNodWZmbGUoY2hvaWNlcyk7XG5cbiAgICAgIGlmICh1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy9Ob3RlOiBzZXNzaW9uLmlkIHJlZmVycyB0byB0aGUgaWQgb2YgdGhlIGVsZW1lbnQgd2l0aGluIGEgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IHNodWZmbGVkVmFsdWVzID0gY29tcGFjdChzaHVmZmxlZENob2ljZXMubWFwKChjKSA9PiBjW2Nob2ljZUtleV0pKTtcbiAgICAgICAgICBsb2coJ3RyeSB0byBzYXZlIHNodWZmbGVkVmFsdWVzIHRvIHNlc3Npb24uLi4nLCBzaHVmZmxlZFZhbHVlcyk7XG4gICAgICAgICAgbG9nKCdjYWxsIHVwZGF0ZVNlc3Npb24uLi4gJywgc2Vzc2lvbi5pZCwgc2Vzc2lvbi5lbGVtZW50KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eShzaHVmZmxlZFZhbHVlcykpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICBgc2h1ZmZsZWRWYWx1ZXMgaXMgYW4gZW1wdHkgYXJyYXk/IC0gcmVmdXNpbmcgdG8gY2FsbCB1cGRhdGVTZXNzaW9uOiBzaHVmZmxlZENob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgc2h1ZmZsZWRDaG9pY2VzLFxuICAgICAgICAgICAgICApfSwga2V5OiAke2Nob2ljZUtleX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLmlkLCBzZXNzaW9uLmVsZW1lbnQsIHsgc2h1ZmZsZWRWYWx1ZXMgfSkuY2F0Y2goKGUpID0+XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ3VwZGF0ZSBzZXNzaW9uIGZhaWxlZCBmb3I6ICcsIHNlc3Npb24uaWQsIGUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB3YXJuKCd1bmFibGUgdG8gc2F2ZSBzaHVmZmxlZCBvcmRlciBmb3IgY2hvaWNlcycpO1xuICAgICAgICAgIGVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKCd1bmFibGUgdG8gc2F2ZSBzaHVmZmxlZCBjaG9pY2VzLCBzaHVmZmxlIHdpbGwgaGFwcGVuIGV2ZXJ5IHRpbWUuJyk7XG4gICAgICB9XG4gICAgICAvL3NhdmUgdGhpcyBzaHVmZmxlIHRvIHRoZSBzZXNzaW9uIGZvciBsYXRlciByZXRyaWV2YWxcbiAgICAgIHJlc29sdmUoc2h1ZmZsZWRDaG9pY2VzKTtcbiAgICB9XG4gIH0pO1xuXG4vKipcbiAqIElmIHdlIHJldHVybjpcbiAqIC0gdHJ1ZSAtIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGNob2ljZXMgd2lsbCBiZSBvcmRpbmFsIChhcyBpcyBjcmVhdGVkIGluIHRoZSBjb25maWd1cmUgaXRlbSlcbiAqIC0gZmFsc2UgLSB0aGF0IG1lYW5zIHRoZSBnZXRTaHVmZmxlZENob2ljZXMgYWJvdmUgd2lsbCBiZSBjYWxsZWQgYW5kIHRoYXQgaW4gdHVybiBtZWFucyB0aGF0IHdlIGVpdGhlclxuICogcmV0dXJuIHRoZSBzaHVmZmxlZCB2YWx1ZXMgb24gdGhlIHNlc3Npb24gKGlmIGFueSBleGlzdHMpIG9yIHdlIHNodWZmbGUgdGhlIGNob2ljZXNcbiAqIEBwYXJhbSBtb2RlbCAtIG1vZGVsIHRvIGNoZWNrIGlmIHdlIHNob3VsZCBsb2NrIG9yZGVyXG4gKiBAcGFyYW0gc2Vzc2lvbiAtIHNlc3Npb24gdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvY2sgb3JkZXJcbiAqIEBwYXJhbSBlbnYgLSBlbnYgdG8gY2hlY2sgaWYgd2Ugc2hvdWxkIGxvY2sgb3JkZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgbG9ja0Nob2ljZXMgPSAobW9kZWwsIHNlc3Npb24sIGVudikgPT4ge1xuICBpZiAobW9kZWwubG9ja0Nob2ljZU9yZGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBsb2coJ2xvY2tDaG9pY2VPcmRlcjogJywgZ2V0KGVudiwgWydAcGllLWVsZW1lbnQnLCAnbG9ja0Nob2ljZU9yZGVyJ10sIGZhbHNlKSk7XG5cbiAgaWYgKGdldChlbnYsIFsnQHBpZS1lbGVtZW50JywgJ2xvY2tDaG9pY2VPcmRlciddLCBmYWxzZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHJvbGUgPSBnZXQoZW52LCAncm9sZScsICdzdHVkZW50Jyk7XG5cbiAgaWYgKHJvbGUgPT09ICdpbnN0cnVjdG9yJykge1xuICAgIC8vIFRPRE86IC4uIGluIHRoZSBmdXR1cmUgdGhlIGluc3RydWN0b3IgY2FuIHRvZ2dsZSBiZXR3ZWVuIG9yZGluYWwgYW5kIHNodWZmbGVkIGhlcmUsIHNvIGtlZXBpbmcgdGhpcyBjb2RlIHVudGlsIHRoZW5cbiAgICAvKmNvbnN0IGFscmVhZHlTaHVmZmxlZCA9IGhhc1NodWZmbGVkVmFsdWVzKHNlc3Npb24pO1xuXG4gICAgaWYgKGFscmVhZHlTaHVmZmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlOyovXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBoZXJlIGl0J3MgYSBzdHVkZW50LCBzbyBkb24ndCBsb2NrIGFuZCBpdCB3aWxsIHNodWZmbGUgaWYgbmVlZHMgYmVcbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdfQ==