scorm-again 2.6.3 → 2.6.5

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.
Files changed (73) hide show
  1. package/.claude/.claude/settings.local.json +13 -0
  2. package/.claude/settings.local.json +33 -0
  3. package/dist/aicc.js +38 -22
  4. package/dist/aicc.js.map +1 -1
  5. package/dist/aicc.min.js +1 -1
  6. package/dist/aicc.min.js.map +1 -1
  7. package/dist/esm/aicc.js +38 -22
  8. package/dist/esm/aicc.js.map +1 -1
  9. package/dist/esm/aicc.min.js +1 -1
  10. package/dist/esm/aicc.min.js.map +1 -1
  11. package/dist/esm/scorm-again.js +79 -47
  12. package/dist/esm/scorm-again.js.map +1 -1
  13. package/dist/esm/scorm-again.min.js +1 -1
  14. package/dist/esm/scorm-again.min.js.map +1 -1
  15. package/dist/esm/scorm12.js +35 -20
  16. package/dist/esm/scorm12.js.map +1 -1
  17. package/dist/esm/scorm12.min.js +1 -1
  18. package/dist/esm/scorm12.min.js.map +1 -1
  19. package/dist/esm/scorm2004.js +69 -41
  20. package/dist/esm/scorm2004.js.map +1 -1
  21. package/dist/esm/scorm2004.min.js +1 -1
  22. package/dist/esm/scorm2004.min.js.map +1 -1
  23. package/dist/scorm-again.js +79 -47
  24. package/dist/scorm-again.js.map +1 -1
  25. package/dist/scorm-again.min.js +1 -1
  26. package/dist/scorm-again.min.js.map +1 -1
  27. package/dist/scorm12.js +35 -20
  28. package/dist/scorm12.js.map +1 -1
  29. package/dist/scorm12.min.js +1 -1
  30. package/dist/scorm12.min.js.map +1 -1
  31. package/dist/scorm2004.js +69 -41
  32. package/dist/scorm2004.js.map +1 -1
  33. package/dist/scorm2004.min.js +1 -1
  34. package/dist/scorm2004.min.js.map +1 -1
  35. package/dist/types/cmi/scorm2004/adl.d.ts +8 -2
  36. package/dist/types/cmi/scorm2004/cmi.d.ts +1 -1
  37. package/package.json +1 -1
  38. package/src/BaseAPI.ts +56 -33
  39. package/src/Scorm12API.ts +3 -2
  40. package/src/Scorm2004API.ts +31 -24
  41. package/src/cmi/aicc/attempts.ts +3 -3
  42. package/src/cmi/aicc/core.ts +30 -12
  43. package/src/cmi/aicc/evaluation.ts +1 -1
  44. package/src/cmi/aicc/student_data.ts +1 -1
  45. package/src/cmi/aicc/student_demographics.ts +13 -13
  46. package/src/cmi/aicc/student_preferences.ts +1 -1
  47. package/src/cmi/aicc/tries.ts +3 -3
  48. package/src/cmi/aicc/validation.ts +1 -1
  49. package/src/cmi/common/array.ts +1 -1
  50. package/src/cmi/common/score.ts +3 -3
  51. package/src/cmi/common/validation.ts +2 -2
  52. package/src/cmi/scorm12/cmi.ts +12 -4
  53. package/src/cmi/scorm12/interactions.ts +27 -11
  54. package/src/cmi/scorm12/objectives.ts +4 -4
  55. package/src/cmi/scorm12/student_data.ts +12 -4
  56. package/src/cmi/scorm12/student_preference.ts +3 -1
  57. package/src/cmi/scorm12/validation.ts +5 -3
  58. package/src/cmi/scorm2004/adl.ts +39 -22
  59. package/src/cmi/scorm2004/cmi.ts +47 -17
  60. package/src/cmi/scorm2004/comments.ts +11 -5
  61. package/src/cmi/scorm2004/interactions.ts +25 -23
  62. package/src/cmi/scorm2004/learner_preference.ts +3 -1
  63. package/src/cmi/scorm2004/objectives.ts +5 -5
  64. package/src/cmi/scorm2004/score.ts +3 -3
  65. package/src/cmi/scorm2004/validation.ts +2 -2
  66. package/src/exceptions/aicc_exceptions.ts +4 -4
  67. package/src/exceptions/scorm12_exceptions.ts +4 -4
  68. package/src/exceptions/scorm2004_exceptions.ts +4 -4
  69. package/src/utilities.ts +3 -3
  70. package/test/BaseAPI.requestHandler.spec.ts +126 -0
  71. package/test/Scorm12API.spec.ts +45 -0
  72. package/test/Scorm2004API.spec.ts +43 -0
  73. package/tsconfig.json +1 -0
@@ -59,7 +59,7 @@ export class CMIStudentDemographics extends BaseCMI {
59
59
  */
60
60
  set city(city: string) {
61
61
  if (this.initialized) {
62
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
62
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
63
63
  } else {
64
64
  this._city = city;
65
65
  }
@@ -80,7 +80,7 @@ export class CMIStudentDemographics extends BaseCMI {
80
80
  */
81
81
  set class(clazz: string) {
82
82
  if (this.initialized) {
83
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
83
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
84
84
  } else {
85
85
  this._class = clazz;
86
86
  }
@@ -101,7 +101,7 @@ export class CMIStudentDemographics extends BaseCMI {
101
101
  */
102
102
  set company(company: string) {
103
103
  if (this.initialized) {
104
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
104
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
105
105
  } else {
106
106
  this._company = company;
107
107
  }
@@ -122,7 +122,7 @@ export class CMIStudentDemographics extends BaseCMI {
122
122
  */
123
123
  set country(country: string) {
124
124
  if (this.initialized) {
125
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
125
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
126
126
  } else {
127
127
  this._country = country;
128
128
  }
@@ -143,7 +143,7 @@ export class CMIStudentDemographics extends BaseCMI {
143
143
  */
144
144
  set experience(experience: string) {
145
145
  if (this.initialized) {
146
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
146
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
147
147
  } else {
148
148
  this._experience = experience;
149
149
  }
@@ -164,7 +164,7 @@ export class CMIStudentDemographics extends BaseCMI {
164
164
  */
165
165
  set familiar_name(familiar_name: string) {
166
166
  if (this.initialized) {
167
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
167
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
168
168
  } else {
169
169
  this._familiar_name = familiar_name;
170
170
  }
@@ -185,7 +185,7 @@ export class CMIStudentDemographics extends BaseCMI {
185
185
  */
186
186
  set instructor_name(instructor_name: string) {
187
187
  if (this.initialized) {
188
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
188
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
189
189
  } else {
190
190
  this._instructor_name = instructor_name;
191
191
  }
@@ -206,7 +206,7 @@ export class CMIStudentDemographics extends BaseCMI {
206
206
  */
207
207
  set title(title: string) {
208
208
  if (this.initialized) {
209
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
209
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
210
210
  } else {
211
211
  this._title = title;
212
212
  }
@@ -227,7 +227,7 @@ export class CMIStudentDemographics extends BaseCMI {
227
227
  */
228
228
  set native_language(native_language: string) {
229
229
  if (this.initialized) {
230
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
230
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
231
231
  } else {
232
232
  this._native_language = native_language;
233
233
  }
@@ -248,7 +248,7 @@ export class CMIStudentDemographics extends BaseCMI {
248
248
  */
249
249
  set state(state: string) {
250
250
  if (this.initialized) {
251
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
251
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
252
252
  } else {
253
253
  this._state = state;
254
254
  }
@@ -269,7 +269,7 @@ export class CMIStudentDemographics extends BaseCMI {
269
269
  */
270
270
  set street_address(street_address: string) {
271
271
  if (this.initialized) {
272
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
272
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
273
273
  } else {
274
274
  this._street_address = street_address;
275
275
  }
@@ -290,7 +290,7 @@ export class CMIStudentDemographics extends BaseCMI {
290
290
  */
291
291
  set telephone(telephone: string) {
292
292
  if (this.initialized) {
293
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
293
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
294
294
  } else {
295
295
  this._telephone = telephone;
296
296
  }
@@ -311,7 +311,7 @@ export class CMIStudentDemographics extends BaseCMI {
311
311
  */
312
312
  set years_experience(years_experience: string) {
313
313
  if (this.initialized) {
314
- throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT);
314
+ throw new AICCValidationError(scorm12_errors.READ_ONLY_ELEMENT as number);
315
315
  } else {
316
316
  this._years_experience = years_experience;
317
317
  }
@@ -16,7 +16,7 @@ export class AICCStudentPreferences extends CMIStudentPreference {
16
16
  constructor() {
17
17
  super(aicc_constants.student_preference_children);
18
18
  this.windows = new CMIArray({
19
- errorCode: scorm12_errors.INVALID_SET_VALUE,
19
+ errorCode: scorm12_errors.INVALID_SET_VALUE as number,
20
20
  errorClass: AICCValidationError,
21
21
  children: "",
22
22
  });
@@ -36,9 +36,9 @@ export class CMITriesObject extends BaseCMI {
36
36
  this.score = new CMIScore({
37
37
  score_children: aicc_constants.score_children,
38
38
  score_range: aicc_regex.score_range,
39
- invalidErrorCode: scorm12_errors.INVALID_SET_VALUE,
40
- invalidTypeCode: scorm12_errors.TYPE_MISMATCH,
41
- invalidRangeCode: scorm12_errors.VALUE_OUT_OF_RANGE,
39
+ invalidErrorCode: scorm12_errors.INVALID_SET_VALUE as number,
40
+ invalidTypeCode: scorm12_errors.TYPE_MISMATCH as number,
41
+ invalidRangeCode: scorm12_errors.VALUE_OUT_OF_RANGE as number,
42
42
  errorClass: AICCValidationError,
43
43
  });
44
44
  }
@@ -17,7 +17,7 @@ export function checkAICCValidFormat(
17
17
  return checkValidFormat(
18
18
  value,
19
19
  regexPattern,
20
- scorm12_errors.TYPE_MISMATCH,
20
+ scorm12_errors.TYPE_MISMATCH as number,
21
21
  AICCValidationError,
22
22
  allowEmptyString,
23
23
  );
@@ -22,7 +22,7 @@ export class CMIArray extends BaseCMI {
22
22
  }) {
23
23
  super();
24
24
  this.__children = params.children;
25
- this._errorCode = params.errorCode || scorm12_errors.GENERAL;
25
+ this._errorCode = params.errorCode || (scorm12_errors.GENERAL as number);
26
26
  this._errorClass = params.errorClass || BaseScormValidationError;
27
27
  this.childArray = [];
28
28
  }
@@ -51,11 +51,11 @@ export class CMIScore extends BaseCMI {
51
51
  : scorm12_regex.score_range;
52
52
  this._max = params.max || params.max === "" ? params.max : "100";
53
53
  this.__invalid_error_code =
54
- params.invalidErrorCode || scorm12_errors.INVALID_SET_VALUE;
54
+ params.invalidErrorCode || (scorm12_errors.INVALID_SET_VALUE as number);
55
55
  this.__invalid_type_code =
56
- params.invalidTypeCode || scorm12_errors.TYPE_MISMATCH;
56
+ params.invalidTypeCode || (scorm12_errors.TYPE_MISMATCH as number);
57
57
  this.__invalid_range_code =
58
- params.invalidRangeCode || scorm12_errors.VALUE_OUT_OF_RANGE;
58
+ params.invalidRangeCode || (scorm12_errors.VALUE_OUT_OF_RANGE as number);
59
59
  this.__decimal_regex = params.decimalRegex || scorm12_regex.CMIDecimal;
60
60
  this.__error_class = params.errorClass;
61
61
  }
@@ -48,8 +48,8 @@ export function checkValidRange(
48
48
  ): boolean {
49
49
  const ranges = rangePattern.split("#");
50
50
  value = value * 1.0;
51
- if (value >= ranges[0]) {
52
- if (ranges[1] === "*" || value <= ranges[1]) {
51
+ if (ranges[0] && value >= ranges[0]) {
52
+ if (ranges[1] && (ranges[1] === "*" || value <= ranges[1])) {
53
53
  return true;
54
54
  } else {
55
55
  throw new errorClass(errorCode);
@@ -133,7 +133,9 @@ export class CMI extends BaseRootCMI {
133
133
  * @param {string} _version
134
134
  */
135
135
  set _version(_version: string) {
136
- throw new Scorm12ValidationError(scorm12_errors.INVALID_SET_VALUE);
136
+ throw new Scorm12ValidationError(
137
+ scorm12_errors.INVALID_SET_VALUE as number,
138
+ );
137
139
  }
138
140
 
139
141
  /**
@@ -149,7 +151,9 @@ export class CMI extends BaseRootCMI {
149
151
  * @param {string} _children
150
152
  */
151
153
  set _children(_children: string) {
152
- throw new Scorm12ValidationError(scorm12_errors.INVALID_SET_VALUE);
154
+ throw new Scorm12ValidationError(
155
+ scorm12_errors.INVALID_SET_VALUE as number,
156
+ );
153
157
  }
154
158
 
155
159
  /**
@@ -184,7 +188,9 @@ export class CMI extends BaseRootCMI {
184
188
  */
185
189
  set launch_data(launch_data: string) {
186
190
  if (this.initialized) {
187
- throw new Scorm12ValidationError(scorm12_errors.READ_ONLY_ELEMENT);
191
+ throw new Scorm12ValidationError(
192
+ scorm12_errors.READ_ONLY_ELEMENT as number,
193
+ );
188
194
  } else {
189
195
  this._launch_data = launch_data;
190
196
  }
@@ -222,7 +228,9 @@ export class CMI extends BaseRootCMI {
222
228
  */
223
229
  set comments_from_lms(comments_from_lms: string) {
224
230
  if (this.initialized) {
225
- throw new Scorm12ValidationError(scorm12_errors.READ_ONLY_ELEMENT);
231
+ throw new Scorm12ValidationError(
232
+ scorm12_errors.READ_ONLY_ELEMENT as number,
233
+ );
226
234
  } else {
227
235
  this._comments_from_lms = comments_from_lms;
228
236
  }
@@ -17,7 +17,7 @@ export class CMIInteractions extends CMIArray {
17
17
  constructor() {
18
18
  super({
19
19
  children: scorm12_constants.interactions_children,
20
- errorCode: scorm12_errors.INVALID_SET_VALUE,
20
+ errorCode: scorm12_errors.INVALID_SET_VALUE as number,
21
21
  errorClass: Scorm12ValidationError,
22
22
  });
23
23
  }
@@ -34,12 +34,12 @@ export class CMIInteractionsObject extends BaseCMI {
34
34
  constructor() {
35
35
  super();
36
36
  this.objectives = new CMIArray({
37
- errorCode: scorm12_errors.INVALID_SET_VALUE,
37
+ errorCode: scorm12_errors.INVALID_SET_VALUE as number,
38
38
  errorClass: Scorm12ValidationError,
39
39
  children: scorm12_constants.objectives_children,
40
40
  });
41
41
  this.correct_responses = new CMIArray({
42
- errorCode: scorm12_errors.INVALID_SET_VALUE,
42
+ errorCode: scorm12_errors.INVALID_SET_VALUE as number,
43
43
  errorClass: Scorm12ValidationError,
44
44
  children: scorm12_constants.correct_responses_children,
45
45
  });
@@ -89,7 +89,9 @@ export class CMIInteractionsObject extends BaseCMI {
89
89
  */
90
90
  get id(): string {
91
91
  if (!this.jsonString) {
92
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
92
+ throw new Scorm12ValidationError(
93
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
94
+ );
93
95
  }
94
96
  return this._id;
95
97
  }
@@ -110,7 +112,9 @@ export class CMIInteractionsObject extends BaseCMI {
110
112
  */
111
113
  get time(): string {
112
114
  if (!this.jsonString) {
113
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
115
+ throw new Scorm12ValidationError(
116
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
117
+ );
114
118
  }
115
119
  return this._time;
116
120
  }
@@ -131,7 +135,9 @@ export class CMIInteractionsObject extends BaseCMI {
131
135
  */
132
136
  get type(): string {
133
137
  if (!this.jsonString) {
134
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
138
+ throw new Scorm12ValidationError(
139
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
140
+ );
135
141
  }
136
142
  return this._type;
137
143
  }
@@ -152,7 +158,9 @@ export class CMIInteractionsObject extends BaseCMI {
152
158
  */
153
159
  get weighting(): string {
154
160
  if (!this.jsonString) {
155
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
161
+ throw new Scorm12ValidationError(
162
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
163
+ );
156
164
  }
157
165
  return this._weighting;
158
166
  }
@@ -176,7 +184,9 @@ export class CMIInteractionsObject extends BaseCMI {
176
184
  */
177
185
  get student_response(): string {
178
186
  if (!this.jsonString) {
179
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
187
+ throw new Scorm12ValidationError(
188
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
189
+ );
180
190
  }
181
191
  return this._student_response;
182
192
  }
@@ -197,7 +207,9 @@ export class CMIInteractionsObject extends BaseCMI {
197
207
  */
198
208
  get result(): string {
199
209
  if (!this.jsonString) {
200
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
210
+ throw new Scorm12ValidationError(
211
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
212
+ );
201
213
  }
202
214
  return this._result;
203
215
  }
@@ -218,7 +230,9 @@ export class CMIInteractionsObject extends BaseCMI {
218
230
  */
219
231
  get latency(): string {
220
232
  if (!this.jsonString) {
221
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
233
+ throw new Scorm12ValidationError(
234
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
235
+ );
222
236
  }
223
237
  return this._latency;
224
238
  }
@@ -366,7 +380,9 @@ export class CMIInteractionsCorrectResponsesObject extends BaseCMI {
366
380
  */
367
381
  get pattern(): string {
368
382
  if (!this.jsonString) {
369
- throw new Scorm12ValidationError(scorm12_errors.WRITE_ONLY_ELEMENT);
383
+ throw new Scorm12ValidationError(
384
+ scorm12_errors.WRITE_ONLY_ELEMENT as number,
385
+ );
370
386
  }
371
387
  return this._pattern;
372
388
  }
@@ -18,7 +18,7 @@ export class CMIObjectives extends CMIArray {
18
18
  constructor() {
19
19
  super({
20
20
  children: scorm12_constants.objectives_children,
21
- errorCode: scorm12_errors.INVALID_SET_VALUE,
21
+ errorCode: scorm12_errors.INVALID_SET_VALUE as number,
22
22
  errorClass: Scorm12ValidationError,
23
23
  });
24
24
  }
@@ -37,9 +37,9 @@ export class CMIObjectivesObject extends BaseCMI {
37
37
  this.score = new CMIScore({
38
38
  score_children: scorm12_constants.score_children,
39
39
  score_range: scorm12_regex.score_range,
40
- invalidErrorCode: scorm12_errors.INVALID_SET_VALUE,
41
- invalidTypeCode: scorm12_errors.TYPE_MISMATCH,
42
- invalidRangeCode: scorm12_errors.VALUE_OUT_OF_RANGE,
40
+ invalidErrorCode: scorm12_errors.INVALID_SET_VALUE as number,
41
+ invalidTypeCode: scorm12_errors.TYPE_MISMATCH as number,
42
+ invalidRangeCode: scorm12_errors.VALUE_OUT_OF_RANGE as number,
43
43
  errorClass: Scorm12ValidationError,
44
44
  });
45
45
  }
@@ -46,7 +46,9 @@ export class CMIStudentData extends BaseCMI {
46
46
  * @private
47
47
  */
48
48
  set _children(_children: string) {
49
- throw new Scorm12ValidationError(scorm12_errors.INVALID_SET_VALUE);
49
+ throw new Scorm12ValidationError(
50
+ scorm12_errors.INVALID_SET_VALUE as number,
51
+ );
50
52
  }
51
53
 
52
54
  /**
@@ -63,7 +65,9 @@ export class CMIStudentData extends BaseCMI {
63
65
  */
64
66
  set mastery_score(mastery_score: string) {
65
67
  if (this.initialized) {
66
- throw new Scorm12ValidationError(scorm12_errors.READ_ONLY_ELEMENT);
68
+ throw new Scorm12ValidationError(
69
+ scorm12_errors.READ_ONLY_ELEMENT as number,
70
+ );
67
71
  } else {
68
72
  this._mastery_score = mastery_score;
69
73
  }
@@ -83,7 +87,9 @@ export class CMIStudentData extends BaseCMI {
83
87
  */
84
88
  set max_time_allowed(max_time_allowed: string) {
85
89
  if (this.initialized) {
86
- throw new Scorm12ValidationError(scorm12_errors.READ_ONLY_ELEMENT);
90
+ throw new Scorm12ValidationError(
91
+ scorm12_errors.READ_ONLY_ELEMENT as number,
92
+ );
87
93
  } else {
88
94
  this._max_time_allowed = max_time_allowed;
89
95
  }
@@ -103,7 +109,9 @@ export class CMIStudentData extends BaseCMI {
103
109
  */
104
110
  set time_limit_action(time_limit_action: string) {
105
111
  if (this.initialized) {
106
- throw new Scorm12ValidationError(scorm12_errors.READ_ONLY_ELEMENT);
112
+ throw new Scorm12ValidationError(
113
+ scorm12_errors.READ_ONLY_ELEMENT as number,
114
+ );
107
115
  } else {
108
116
  this._time_limit_action = time_limit_action;
109
117
  }
@@ -50,7 +50,9 @@ export class CMIStudentPreference extends BaseCMI {
50
50
  * @private
51
51
  */
52
52
  set _children(_children: string) {
53
- throw new Scorm12ValidationError(scorm12_errors.INVALID_SET_VALUE);
53
+ throw new Scorm12ValidationError(
54
+ scorm12_errors.INVALID_SET_VALUE as number,
55
+ );
54
56
  }
55
57
 
56
58
  /**
@@ -17,7 +17,7 @@ export function check12ValidFormat(
17
17
  return checkValidFormat(
18
18
  value,
19
19
  regexPattern,
20
- scorm12_errors.TYPE_MISMATCH,
20
+ scorm12_errors.TYPE_MISMATCH as number,
21
21
  Scorm12ValidationError,
22
22
  allowEmptyString,
23
23
  );
@@ -36,13 +36,15 @@ export function check12ValidRange(
36
36
  allowEmptyString?: boolean,
37
37
  ): boolean {
38
38
  if (!allowEmptyString && value === "") {
39
- throw new Scorm12ValidationError(scorm12_errors.VALUE_OUT_OF_RANGE);
39
+ throw new Scorm12ValidationError(
40
+ scorm12_errors.VALUE_OUT_OF_RANGE as number,
41
+ );
40
42
  }
41
43
 
42
44
  return checkValidRange(
43
45
  value,
44
46
  rangePattern,
45
- scorm12_errors.VALUE_OUT_OF_RANGE,
47
+ scorm12_errors.VALUE_OUT_OF_RANGE as number,
46
48
  Scorm12ValidationError,
47
49
  );
48
50
  }
@@ -142,7 +142,7 @@ export class ADLData extends CMIArray {
142
142
  constructor() {
143
143
  super({
144
144
  children: scorm2004_constants.adl_data_children,
145
- errorCode: scorm2004_errors.READ_ONLY_ELEMENT,
145
+ errorCode: scorm2004_errors.READ_ONLY_ELEMENT as number,
146
146
  errorClass: Scorm2004ValidationError,
147
147
  });
148
148
  }
@@ -270,7 +270,9 @@ export class ADLNavRequestValid extends BaseCMI {
270
270
  */
271
271
  set continue(_continue: string) {
272
272
  if (this.initialized) {
273
- throw new Scorm2004ValidationError(scorm2004_errors.READ_ONLY_ELEMENT);
273
+ throw new Scorm2004ValidationError(
274
+ scorm2004_errors.READ_ONLY_ELEMENT as number,
275
+ );
274
276
  }
275
277
  if (check2004ValidFormat(_continue, scorm2004_regex.NAVBoolean)) {
276
278
  this._continue = _continue;
@@ -291,7 +293,9 @@ export class ADLNavRequestValid extends BaseCMI {
291
293
  */
292
294
  set previous(_previous: string) {
293
295
  if (this.initialized) {
294
- throw new Scorm2004ValidationError(scorm2004_errors.READ_ONLY_ELEMENT);
296
+ throw new Scorm2004ValidationError(
297
+ scorm2004_errors.READ_ONLY_ELEMENT as number,
298
+ );
295
299
  }
296
300
  if (check2004ValidFormat(_previous, scorm2004_regex.NAVBoolean)) {
297
301
  this._previous = _previous;
@@ -308,23 +312,28 @@ export class ADLNavRequestValid extends BaseCMI {
308
312
 
309
313
  /**
310
314
  * Setter for _choice
311
- * @param {{ [key: string]: string }} choice
315
+ * @param {{ [key: string]: string | NAVBoolean }} choice
312
316
  */
313
- set choice(choice: { [key: string]: string }) {
317
+ set choice(choice: { [key: string]: string | NAVBoolean }) {
314
318
  if (this.initialized) {
315
- throw new Scorm2004ValidationError(scorm2004_errors.READ_ONLY_ELEMENT);
319
+ throw new Scorm2004ValidationError(
320
+ scorm2004_errors.READ_ONLY_ELEMENT as number,
321
+ );
316
322
  }
317
323
  if (typeof choice !== "object") {
318
- throw new Scorm2004ValidationError(scorm2004_errors.TYPE_MISMATCH);
324
+ throw new Scorm2004ValidationError(
325
+ scorm2004_errors.TYPE_MISMATCH as number,
326
+ );
319
327
  }
320
328
  for (const key in choice) {
321
329
  if ({}.hasOwnProperty.call(choice, key)) {
322
- if (
323
- check2004ValidFormat(choice[key], scorm2004_regex.NAVBoolean) &&
324
- check2004ValidFormat(key, scorm2004_regex.NAVTarget)
325
- ) {
326
- this._choice[key] =
327
- NAVBoolean[choice[key] as keyof typeof NAVBoolean];
330
+ if (choice[key] !== undefined && check2004ValidFormat(key, scorm2004_regex.NAVTarget)) {
331
+ const value = choice[key];
332
+ if (typeof value === 'string' && check2004ValidFormat(value, scorm2004_regex.NAVBoolean)) {
333
+ this._choice[key] = NAVBoolean[value as keyof typeof NAVBoolean];
334
+ } else if (Object.values(NAVBoolean).includes(value as NAVBoolean)) {
335
+ this._choice[key] = value as NAVBoolean;
336
+ }
328
337
  }
329
338
  }
330
339
  }
@@ -340,22 +349,28 @@ export class ADLNavRequestValid extends BaseCMI {
340
349
 
341
350
  /**
342
351
  * Setter for _jump
343
- * @param {{ [key: string]: string }} jump
352
+ * @param {{ [key: string]: string | NAVBoolean }} jump
344
353
  */
345
- set jump(jump: { [key: string]: string }) {
354
+ set jump(jump: { [key: string]: string | NAVBoolean }) {
346
355
  if (this.initialized) {
347
- throw new Scorm2004ValidationError(scorm2004_errors.READ_ONLY_ELEMENT);
356
+ throw new Scorm2004ValidationError(
357
+ scorm2004_errors.READ_ONLY_ELEMENT as number,
358
+ );
348
359
  }
349
360
  if (typeof jump !== "object") {
350
- throw new Scorm2004ValidationError(scorm2004_errors.TYPE_MISMATCH);
361
+ throw new Scorm2004ValidationError(
362
+ scorm2004_errors.TYPE_MISMATCH as number,
363
+ );
351
364
  }
352
365
  for (const key in jump) {
353
366
  if ({}.hasOwnProperty.call(jump, key)) {
354
- if (
355
- check2004ValidFormat(jump[key], scorm2004_regex.NAVBoolean) &&
356
- check2004ValidFormat(key, scorm2004_regex.NAVTarget)
357
- ) {
358
- this._jump[key] = NAVBoolean[jump[key] as keyof typeof NAVBoolean];
367
+ if (jump[key] !== undefined && check2004ValidFormat(key, scorm2004_regex.NAVTarget)) {
368
+ const value = jump[key];
369
+ if (typeof value === 'string' && check2004ValidFormat(value, scorm2004_regex.NAVBoolean)) {
370
+ this._jump[key] = NAVBoolean[value as keyof typeof NAVBoolean];
371
+ } else if (Object.values(NAVBoolean).includes(value as NAVBoolean)) {
372
+ this._jump[key] = value as NAVBoolean;
373
+ }
359
374
  }
360
375
  }
361
376
  }
@@ -374,6 +389,8 @@ export class ADLNavRequestValid extends BaseCMI {
374
389
  toJSON(): {
375
390
  previous: string;
376
391
  continue: string;
392
+ choice: { [key: string]: NAVBoolean };
393
+ jump: { [key: string]: NAVBoolean };
377
394
  } {
378
395
  this.jsonString = true;
379
396
  const result = {