scorm-again 2.4.1 → 2.6.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.
Files changed (87) hide show
  1. package/README.md +23 -23
  2. package/dist/aicc.js +676 -493
  3. package/dist/aicc.js.map +1 -1
  4. package/dist/aicc.min.js +1 -1
  5. package/dist/aicc.min.js.map +1 -1
  6. package/dist/esm/aicc.js +692 -496
  7. package/dist/esm/aicc.js.map +1 -1
  8. package/dist/esm/aicc.min.js +1 -1
  9. package/dist/esm/aicc.min.js.map +1 -1
  10. package/dist/esm/scorm-again.js +1151 -743
  11. package/dist/esm/scorm-again.js.map +1 -1
  12. package/dist/esm/scorm-again.min.js +1 -1
  13. package/dist/esm/scorm-again.min.js.map +1 -1
  14. package/dist/esm/scorm12.js +534 -401
  15. package/dist/esm/scorm12.js.map +1 -1
  16. package/dist/esm/scorm12.min.js +1 -1
  17. package/dist/esm/scorm12.min.js.map +1 -1
  18. package/dist/esm/scorm2004.js +712 -465
  19. package/dist/esm/scorm2004.js.map +1 -1
  20. package/dist/esm/scorm2004.min.js +1 -1
  21. package/dist/esm/scorm2004.min.js.map +1 -1
  22. package/dist/scorm-again.js +1127 -731
  23. package/dist/scorm-again.js.map +1 -1
  24. package/dist/scorm-again.min.js +1 -1
  25. package/dist/scorm-again.min.js.map +1 -1
  26. package/dist/scorm12.js +521 -400
  27. package/dist/scorm12.js.map +1 -1
  28. package/dist/scorm12.min.js +1 -1
  29. package/dist/scorm12.min.js.map +1 -1
  30. package/dist/scorm2004.js +698 -464
  31. package/dist/scorm2004.js.map +1 -1
  32. package/dist/scorm2004.min.js +1 -1
  33. package/dist/scorm2004.min.js.map +1 -1
  34. package/package.json +15 -15
  35. package/src/AICC.ts +3 -0
  36. package/src/BaseAPI.ts +60 -95
  37. package/src/Scorm12API.ts +14 -14
  38. package/src/Scorm2004API.ts +107 -37
  39. package/src/cmi/aicc/attempts.ts +22 -12
  40. package/src/cmi/aicc/cmi.ts +2 -2
  41. package/src/cmi/aicc/core.ts +44 -26
  42. package/src/cmi/aicc/evaluation.ts +31 -12
  43. package/src/cmi/aicc/paths.ts +29 -15
  44. package/src/cmi/aicc/student_data.ts +14 -5
  45. package/src/cmi/aicc/student_demographics.ts +31 -24
  46. package/src/cmi/aicc/student_preferences.ts +11 -11
  47. package/src/cmi/aicc/tries.ts +24 -14
  48. package/src/cmi/aicc/validation.ts +3 -4
  49. package/src/cmi/common/array.ts +17 -5
  50. package/src/cmi/common/base_cmi.ts +3 -1
  51. package/src/cmi/common/score.ts +16 -13
  52. package/src/cmi/scorm12/cmi.ts +25 -10
  53. package/src/cmi/scorm12/interactions.ts +62 -28
  54. package/src/cmi/scorm12/nav.ts +13 -5
  55. package/src/cmi/scorm12/objectives.ts +28 -18
  56. package/src/cmi/scorm12/student_data.ts +15 -8
  57. package/src/cmi/scorm12/student_preference.ts +20 -13
  58. package/src/cmi/scorm12/validation.ts +7 -7
  59. package/src/cmi/scorm2004/adl.ts +141 -25
  60. package/src/cmi/scorm2004/cmi.ts +50 -55
  61. package/src/cmi/scorm2004/comments.ts +21 -20
  62. package/src/cmi/scorm2004/interactions.ts +73 -32
  63. package/src/cmi/scorm2004/learner_preference.ts +20 -13
  64. package/src/cmi/scorm2004/objectives.ts +41 -16
  65. package/src/cmi/scorm2004/score.ts +22 -11
  66. package/src/cmi/scorm2004/validation.ts +4 -4
  67. package/src/constants/api_constants.ts +8 -29
  68. package/src/constants/default_settings.ts +26 -12
  69. package/src/constants/enums.ts +9 -0
  70. package/src/constants/error_codes.ts +5 -12
  71. package/src/constants/regex.ts +5 -11
  72. package/src/constants/response_constants.ts +1 -2
  73. package/src/exceptions/aicc_exceptions.ts +29 -0
  74. package/src/exceptions/scorm12_exceptions.ts +29 -0
  75. package/src/exceptions/scorm2004_exceptions.ts +29 -0
  76. package/src/exceptions.ts +1 -86
  77. package/src/types/api_types.ts +29 -5
  78. package/test/AICC.spec.ts +114 -43
  79. package/test/Scorm12API.spec.ts +37 -39
  80. package/test/Scorm2004API.spec.ts +165 -80
  81. package/test/cmi/aicc_cmi.spec.ts +6 -9
  82. package/test/cmi/scorm12_cmi.spec.ts +8 -8
  83. package/test/cmi/scorm2004_cmi.spec.ts +8 -9
  84. package/test/exceptions.spec.ts +11 -9
  85. package/test/types/api_types.spec.ts +40 -47
  86. package/test/utilities.spec.ts +1 -4
  87. package/webpack.config.js +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scorm-again",
3
- "version": "2.4.1",
3
+ "version": "2.6.0",
4
4
  "description": "A modern SCORM JavaScript run-time library for AICC, SCORM 1.2, and SCORM 2004",
5
5
  "main": "dist/scorm-again.js",
6
6
  "types": "index.d.ts",
@@ -22,47 +22,47 @@
22
22
  "test": "test"
23
23
  },
24
24
  "devDependencies": {
25
- "@babel/cli": "^7.25.9",
25
+ "@babel/cli": "^7.26.4",
26
26
  "@babel/core": "^7.26.0",
27
27
  "@babel/eslint-parser": "^7.25.9",
28
28
  "@babel/node": "^7.26.0",
29
29
  "@babel/preset-env": "^7.26.0",
30
30
  "@babel/preset-typescript": "^7.26.0",
31
- "@eslint/eslintrc": "^3.1.0",
32
- "@eslint/js": "^9.13.0",
31
+ "@eslint/eslintrc": "^3.2.0",
32
+ "@eslint/js": "^9.16.0",
33
33
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
34
34
  "@types/eslint__js": "^8.42.3",
35
- "@types/mocha": "^10.0.9",
35
+ "@types/mocha": "^10.0.10",
36
36
  "@types/sinon": "^17.0.3",
37
37
  "babel-eslint": "^11.0.0-beta.2",
38
38
  "babel-loader": "^9.2.1",
39
39
  "babelify": "^10.0.0",
40
40
  "browserify": "^17.0.1",
41
- "c8": "^10.1.2",
41
+ "c8": "^10.1.3",
42
42
  "c8-as-nyc": "^1.1.11",
43
- "eslint": "^9.13.0",
43
+ "eslint": "^9.16.0",
44
44
  "eslint-formatter-junit": "^8.40.0",
45
45
  "eslint-plugin-import": "^2.31.0",
46
- "eslint-plugin-jsdoc": "^50.4.3",
46
+ "eslint-plugin-jsdoc": "^50.6.1",
47
47
  "eslint-webpack-plugin": "^4.2.0",
48
48
  "expect": "^29.7.0",
49
49
  "fetch-pretender": "https://github.com/jcputney/fetch-pretender#master",
50
- "globals": "^15.11.0",
50
+ "globals": "^15.13.0",
51
51
  "jsdoc": "^4.0.4",
52
52
  "jsdoc-babel": "^0.5.0",
53
53
  "minimist": "^1.2.8",
54
54
  "miragejs": "^0.2.0-alpha.3",
55
- "mocha": "^10.7.3",
55
+ "mocha": "^11.0.1",
56
56
  "mocha-junit-reporter": "^2.2.1",
57
57
  "mochawesome": "^7.1.3",
58
- "prettier": "^3.3.3",
58
+ "prettier": "^3.4.2",
59
59
  "sinon": "^19.0.2",
60
60
  "terser-webpack-plugin": "^5.3.10",
61
61
  "ts-loader": "^9.5.1",
62
- "tsx": "^4.19.1",
63
- "typescript": "^5.6.3",
64
- "typescript-eslint": "^8.11.0",
65
- "webpack": "^5.91.0",
62
+ "tsx": "^4.19.2",
63
+ "typescript": "^5.7.2",
64
+ "typescript-eslint": "^8.18.0",
65
+ "webpack": "^5.97.1",
66
66
  "webpack-cli": "^5.1.4"
67
67
  },
68
68
  "scripts": {
package/src/AICC.ts CHANGED
@@ -25,6 +25,9 @@ class AICCImpl extends Scorm12Impl {
25
25
  this.nav = new NAV();
26
26
  }
27
27
 
28
+ override cmi: CMI;
29
+ override nav: NAV;
30
+
28
31
  /**
29
32
  * Gets or builds a new child element to add to the array.
30
33
  *
package/src/BaseAPI.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { CMIArray } from "./cmi/common/array";
2
2
  import { ValidationError } from "./exceptions";
3
- import ErrorCodes, { ErrorCode } from "./constants/error_codes";
4
- import APIConstants from "./constants/api_constants";
3
+ import { ErrorCode } from "./constants/error_codes";
4
+ import { global_constants } from "./constants/api_constants";
5
5
  import { formatMessage, stringMatches, unflatten } from "./utilities";
6
6
  import { BaseCMI } from "./cmi/common/base_cmi";
7
7
  import {
8
8
  CommitObject,
9
+ LogLevel,
9
10
  RefObject,
10
11
  ResultObject,
11
12
  Settings,
@@ -13,6 +14,7 @@ import {
13
14
  import { DefaultSettings } from "./constants/default_settings";
14
15
  import { IBaseAPI } from "./interfaces/IBaseAPI";
15
16
  import { ScheduledCommit } from "./helpers/scheduled_commit";
17
+ import { LogLevelEnum } from "./constants/enums";
16
18
 
17
19
  /**
18
20
  * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered
@@ -33,7 +35,7 @@ export default abstract class BaseAPI implements IBaseAPI {
33
35
  if (new.target === BaseAPI) {
34
36
  throw new TypeError("Cannot construct BaseAPI instances directly");
35
37
  }
36
- this.currentState = APIConstants.global.STATE_NOT_INITIALIZED;
38
+ this.currentState = global_constants.STATE_NOT_INITIALIZED;
37
39
  this.lastErrorCode = "0";
38
40
  this.listenerArray = [];
39
41
 
@@ -44,6 +46,10 @@ export default abstract class BaseAPI implements IBaseAPI {
44
46
  }
45
47
  this.apiLogLevel = this.settings.logLevel;
46
48
  this.selfReportSessionTime = this.settings.selfReportSessionTime;
49
+
50
+ if (this.apiLogLevel === undefined) {
51
+ this.apiLogLevel = LogLevelEnum.NONE;
52
+ }
47
53
  }
48
54
 
49
55
  public abstract cmi: BaseCMI;
@@ -52,7 +58,7 @@ export default abstract class BaseAPI implements IBaseAPI {
52
58
  public currentState: number;
53
59
  public lastErrorCode: string;
54
60
  public listenerArray: any[];
55
- public apiLogLevel: number;
61
+ public apiLogLevel: LogLevel;
56
62
  public selfReportSessionTime: boolean;
57
63
 
58
64
  abstract reset(settings?: Settings): void;
@@ -63,11 +69,15 @@ export default abstract class BaseAPI implements IBaseAPI {
63
69
  * @protected
64
70
  */
65
71
  commonReset(settings?: Settings): void {
72
+ this.apiLog("reset", "Called", LogLevelEnum.INFO);
73
+
66
74
  this.settings = { ...this.settings, ...settings };
67
75
 
68
- this.currentState = APIConstants.global.STATE_NOT_INITIALIZED;
76
+ this.clearScheduledCommit();
77
+ this.currentState = global_constants.STATE_NOT_INITIALIZED;
69
78
  this.lastErrorCode = "0";
70
79
  this.listenerArray = [];
80
+ this.startingData = undefined;
71
81
  }
72
82
 
73
83
  /**
@@ -82,7 +92,7 @@ export default abstract class BaseAPI implements IBaseAPI {
82
92
  initializeMessage?: string,
83
93
  terminationMessage?: string,
84
94
  ): string {
85
- let returnValue = APIConstants.global.SCORM_FALSE;
95
+ let returnValue = global_constants.SCORM_FALSE;
86
96
 
87
97
  if (this.isInitialized()) {
88
98
  this.throwSCORMError(this._error_codes.INITIALIZED, initializeMessage);
@@ -93,17 +103,13 @@ export default abstract class BaseAPI implements IBaseAPI {
93
103
  this.cmi.setStartTime();
94
104
  }
95
105
 
96
- this.currentState = APIConstants.global.STATE_INITIALIZED;
106
+ this.currentState = global_constants.STATE_INITIALIZED;
97
107
  this.lastErrorCode = "0";
98
- returnValue = APIConstants.global.SCORM_TRUE;
108
+ returnValue = global_constants.SCORM_TRUE;
99
109
  this.processListeners(callbackName);
100
110
  }
101
111
 
102
- this.apiLog(
103
- callbackName,
104
- "returned: " + returnValue,
105
- APIConstants.global.LOG_LEVEL_INFO,
106
- );
112
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
107
113
  this.clearSCORMError(returnValue);
108
114
 
109
115
  return returnValue;
@@ -187,7 +193,7 @@ export default abstract class BaseAPI implements IBaseAPI {
187
193
  apiLog(
188
194
  functionName: string,
189
195
  logMessage: string,
190
- messageLevel: number,
196
+ messageLevel: LogLevel,
191
197
  CMIElement?: string,
192
198
  ) {
193
199
  logMessage = formatMessage(functionName, logMessage, CMIElement);
@@ -231,7 +237,7 @@ export default abstract class BaseAPI implements IBaseAPI {
231
237
  callbackName: string,
232
238
  checkTerminated: boolean,
233
239
  ): Promise<string> {
234
- let returnValue = APIConstants.global.SCORM_FALSE;
240
+ let returnValue = global_constants.SCORM_FALSE;
235
241
 
236
242
  if (
237
243
  this.checkState(
@@ -240,7 +246,7 @@ export default abstract class BaseAPI implements IBaseAPI {
240
246
  this._error_codes.MULTIPLE_TERMINATION,
241
247
  )
242
248
  ) {
243
- this.currentState = APIConstants.global.STATE_TERMINATED;
249
+ this.currentState = global_constants.STATE_TERMINATED;
244
250
 
245
251
  const result: ResultObject = await this.storeData(true);
246
252
  if (typeof result.errorCode !== "undefined" && result.errorCode > 0) {
@@ -249,19 +255,15 @@ export default abstract class BaseAPI implements IBaseAPI {
249
255
  returnValue =
250
256
  typeof result !== "undefined" && result.result
251
257
  ? result.result
252
- : APIConstants.global.SCORM_FALSE;
258
+ : global_constants.SCORM_FALSE;
253
259
 
254
260
  if (checkTerminated) this.lastErrorCode = "0";
255
261
 
256
- returnValue = APIConstants.global.SCORM_TRUE;
262
+ returnValue = global_constants.SCORM_TRUE;
257
263
  this.processListeners(callbackName);
258
264
  }
259
265
 
260
- this.apiLog(
261
- callbackName,
262
- "returned: " + returnValue,
263
- APIConstants.global.LOG_LEVEL_INFO,
264
- );
266
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
265
267
  this.clearSCORMError(returnValue);
266
268
 
267
269
  return returnValue;
@@ -301,7 +303,7 @@ export default abstract class BaseAPI implements IBaseAPI {
301
303
  this.apiLog(
302
304
  callbackName,
303
305
  ": returned: " + returnValue,
304
- APIConstants.global.LOG_LEVEL_INFO,
306
+ LogLevelEnum.INFO,
305
307
  CMIElement,
306
308
  );
307
309
 
@@ -334,7 +336,7 @@ export default abstract class BaseAPI implements IBaseAPI {
334
336
  if (value !== undefined) {
335
337
  value = String(value);
336
338
  }
337
- let returnValue: string = APIConstants.global.SCORM_FALSE;
339
+ let returnValue: string = global_constants.SCORM_FALSE;
338
340
 
339
341
  if (
340
342
  this.checkState(
@@ -353,7 +355,7 @@ export default abstract class BaseAPI implements IBaseAPI {
353
355
  }
354
356
 
355
357
  if (returnValue === undefined) {
356
- returnValue = APIConstants.global.SCORM_FALSE;
358
+ returnValue = global_constants.SCORM_FALSE;
357
359
  }
358
360
 
359
361
  // If we didn't have any errors while setting the data, go ahead and
@@ -370,7 +372,7 @@ export default abstract class BaseAPI implements IBaseAPI {
370
372
  this.apiLog(
371
373
  callbackName,
372
374
  ": " + value + ": result: " + returnValue,
373
- APIConstants.global.LOG_LEVEL_INFO,
375
+ LogLevelEnum.INFO,
374
376
  CMIElement,
375
377
  );
376
378
  this.clearSCORMError(returnValue);
@@ -388,10 +390,9 @@ export default abstract class BaseAPI implements IBaseAPI {
388
390
  callbackName: string,
389
391
  checkTerminated: boolean = false,
390
392
  ): Promise<string> {
391
- console.log("commit");
392
393
  this.clearScheduledCommit();
393
394
 
394
- let returnValue = APIConstants.global.SCORM_FALSE;
395
+ let returnValue = global_constants.SCORM_FALSE;
395
396
 
396
397
  if (
397
398
  this.checkState(
@@ -407,12 +408,12 @@ export default abstract class BaseAPI implements IBaseAPI {
407
408
  returnValue =
408
409
  typeof result !== "undefined" && result.result
409
410
  ? result.result
410
- : APIConstants.global.SCORM_FALSE;
411
+ : global_constants.SCORM_FALSE;
411
412
 
412
413
  this.apiLog(
413
414
  callbackName,
414
415
  " Result: " + returnValue,
415
- APIConstants.global.LOG_LEVEL_DEBUG,
416
+ LogLevelEnum.DEBUG,
416
417
  "HttpRequest",
417
418
  );
418
419
 
@@ -421,11 +422,7 @@ export default abstract class BaseAPI implements IBaseAPI {
421
422
  this.processListeners(callbackName);
422
423
  }
423
424
 
424
- this.apiLog(
425
- callbackName,
426
- "returned: " + returnValue,
427
- APIConstants.global.LOG_LEVEL_INFO,
428
- );
425
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
429
426
  this.clearSCORMError(returnValue);
430
427
 
431
428
  return returnValue;
@@ -441,11 +438,7 @@ export default abstract class BaseAPI implements IBaseAPI {
441
438
 
442
439
  this.processListeners(callbackName);
443
440
 
444
- this.apiLog(
445
- callbackName,
446
- "returned: " + returnValue,
447
- APIConstants.global.LOG_LEVEL_INFO,
448
- );
441
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
449
442
 
450
443
  return returnValue;
451
444
  }
@@ -465,11 +458,7 @@ export default abstract class BaseAPI implements IBaseAPI {
465
458
  this.processListeners(callbackName);
466
459
  }
467
460
 
468
- this.apiLog(
469
- callbackName,
470
- "returned: " + returnValue,
471
- APIConstants.global.LOG_LEVEL_INFO,
472
- );
461
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
473
462
 
474
463
  return returnValue;
475
464
  }
@@ -489,11 +478,7 @@ export default abstract class BaseAPI implements IBaseAPI {
489
478
  this.processListeners(callbackName);
490
479
  }
491
480
 
492
- this.apiLog(
493
- callbackName,
494
- "returned: " + returnValue,
495
- APIConstants.global.LOG_LEVEL_INFO,
496
- );
481
+ this.apiLog(callbackName, "returned: " + returnValue, LogLevelEnum.INFO);
497
482
 
498
483
  return returnValue;
499
484
  }
@@ -581,12 +566,12 @@ export default abstract class BaseAPI implements IBaseAPI {
581
566
  value: any,
582
567
  ): string {
583
568
  if (!CMIElement || CMIElement === "") {
584
- return APIConstants.global.SCORM_FALSE;
569
+ return global_constants.SCORM_FALSE;
585
570
  }
586
571
 
587
572
  const structure = CMIElement.split(".");
588
573
  let refObject: RefObject = this;
589
- let returnValue = APIConstants.global.SCORM_FALSE;
574
+ let returnValue = global_constants.SCORM_FALSE;
590
575
  let foundFirstIndex = false;
591
576
 
592
577
  const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;
@@ -619,7 +604,7 @@ export default abstract class BaseAPI implements IBaseAPI {
619
604
 
620
605
  if (!scorm2004 || this.lastErrorCode === "0") {
621
606
  refObject[attribute] = value;
622
- returnValue = APIConstants.global.SCORM_TRUE;
607
+ returnValue = global_constants.SCORM_TRUE;
623
608
  }
624
609
  }
625
610
  } else {
@@ -664,11 +649,11 @@ export default abstract class BaseAPI implements IBaseAPI {
664
649
  }
665
650
  }
666
651
 
667
- if (returnValue === APIConstants.global.SCORM_FALSE) {
652
+ if (returnValue === global_constants.SCORM_FALSE) {
668
653
  this.apiLog(
669
654
  methodName,
670
655
  `There was an error setting the value for: ${CMIElement}, value of: ${value}`,
671
- APIConstants.global.LOG_LEVEL_WARNING,
656
+ LogLevelEnum.WARN,
672
657
  );
673
658
  }
674
659
 
@@ -760,9 +745,9 @@ export default abstract class BaseAPI implements IBaseAPI {
760
745
  if (refObject === null || refObject === undefined) {
761
746
  if (!scorm2004) {
762
747
  if (attribute === "_children") {
763
- this.throwSCORMError(ErrorCodes.scorm12.CHILDREN_ERROR);
748
+ this.throwSCORMError(this._error_codes.CHILDREN_ERROR);
764
749
  } else if (attribute === "_count") {
765
- this.throwSCORMError(ErrorCodes.scorm12.COUNT_ERROR);
750
+ this.throwSCORMError(this._error_codes.COUNT_ERROR);
766
751
  }
767
752
  }
768
753
  } else {
@@ -776,7 +761,7 @@ export default abstract class BaseAPI implements IBaseAPI {
776
761
  * @return {boolean}
777
762
  */
778
763
  isInitialized(): boolean {
779
- return this.currentState === APIConstants.global.STATE_INITIALIZED;
764
+ return this.currentState === global_constants.STATE_INITIALIZED;
780
765
  }
781
766
 
782
767
  /**
@@ -785,7 +770,7 @@ export default abstract class BaseAPI implements IBaseAPI {
785
770
  * @return {boolean}
786
771
  */
787
772
  isNotInitialized(): boolean {
788
- return this.currentState === APIConstants.global.STATE_NOT_INITIALIZED;
773
+ return this.currentState === global_constants.STATE_NOT_INITIALIZED;
789
774
  }
790
775
 
791
776
  /**
@@ -794,7 +779,7 @@ export default abstract class BaseAPI implements IBaseAPI {
794
779
  * @return {boolean}
795
780
  */
796
781
  isTerminated(): boolean {
797
- return this.currentState === APIConstants.global.STATE_TERMINATED;
782
+ return this.currentState === global_constants.STATE_TERMINATED;
798
783
  }
799
784
 
800
785
  /**
@@ -827,7 +812,7 @@ export default abstract class BaseAPI implements IBaseAPI {
827
812
  this.apiLog(
828
813
  "on",
829
814
  `Added event listener: ${this.listenerArray.length}`,
830
- APIConstants.global.LOG_LEVEL_INFO,
815
+ LogLevelEnum.INFO,
831
816
  functionName,
832
817
  );
833
818
  }
@@ -865,7 +850,7 @@ export default abstract class BaseAPI implements IBaseAPI {
865
850
  this.apiLog(
866
851
  "off",
867
852
  `Removed event listener: ${this.listenerArray.length}`,
868
- APIConstants.global.LOG_LEVEL_INFO,
853
+ LogLevelEnum.INFO,
869
854
  functionName,
870
855
  );
871
856
  }
@@ -905,12 +890,7 @@ export default abstract class BaseAPI implements IBaseAPI {
905
890
  * @param {any} value
906
891
  */
907
892
  processListeners(functionName: string, CMIElement?: string, value?: any) {
908
- this.apiLog(
909
- functionName,
910
- value,
911
- APIConstants.global.LOG_LEVEL_INFO,
912
- CMIElement,
913
- );
893
+ this.apiLog(functionName, value, LogLevelEnum.INFO, CMIElement);
914
894
  for (let i = 0; i < this.listenerArray.length; i++) {
915
895
  const listener = this.listenerArray[i];
916
896
  const functionsMatch = listener.functionName === functionName;
@@ -933,7 +913,7 @@ export default abstract class BaseAPI implements IBaseAPI {
933
913
  this.apiLog(
934
914
  "processListeners",
935
915
  `Processing listener: ${listener.functionName}`,
936
- APIConstants.global.LOG_LEVEL_INFO,
916
+ LogLevelEnum.INFO,
937
917
  CMIElement,
938
918
  );
939
919
  listener.callback(CMIElement, value);
@@ -955,7 +935,7 @@ export default abstract class BaseAPI implements IBaseAPI {
955
935
  this.apiLog(
956
936
  "throwSCORMError",
957
937
  errorNumber + ": " + message,
958
- APIConstants.global.LOG_LEVEL_ERROR,
938
+ LogLevelEnum.ERROR,
959
939
  );
960
940
 
961
941
  this.lastErrorCode = String(errorNumber);
@@ -967,7 +947,7 @@ export default abstract class BaseAPI implements IBaseAPI {
967
947
  * @param {string} success
968
948
  */
969
949
  clearSCORMError(success: string) {
970
- if (success !== undefined && success !== APIConstants.global.SCORM_FALSE) {
950
+ if (success !== undefined && success !== global_constants.SCORM_FALSE) {
971
951
  this.lastErrorCode = "0";
972
952
  }
973
953
  }
@@ -1137,7 +1117,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1137
1117
  ): Promise<ResultObject> {
1138
1118
  const api = this;
1139
1119
  const genericError: ResultObject = {
1140
- result: APIConstants.global.SCORM_FALSE,
1120
+ result: global_constants.SCORM_FALSE,
1141
1121
  errorCode: this.error_codes.GENERAL,
1142
1122
  };
1143
1123
 
@@ -1148,7 +1128,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1148
1128
  await this.transformResponse(response);
1149
1129
  });
1150
1130
  return {
1151
- result: APIConstants.global.SCORM_TRUE,
1131
+ result: global_constants.SCORM_TRUE,
1152
1132
  errorCode: 0,
1153
1133
  };
1154
1134
  }
@@ -1164,11 +1144,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1164
1144
 
1165
1145
  return this.transformResponse(response);
1166
1146
  } catch (e) {
1167
- this.apiLog(
1168
- "processHttpRequest",
1169
- e,
1170
- APIConstants.global.LOG_LEVEL_ERROR,
1171
- );
1147
+ this.apiLog("processHttpRequest", e, LogLevelEnum.ERROR);
1172
1148
  api.processListeners("CommitError");
1173
1149
  return genericError;
1174
1150
  }
@@ -1186,12 +1162,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1186
1162
  scheduleCommit(when: number, callback: string) {
1187
1163
  if (!this._timeout) {
1188
1164
  this._timeout = new ScheduledCommit(this, when, callback);
1189
- this.apiLog(
1190
- "scheduleCommit",
1191
- "scheduled",
1192
- APIConstants.global.LOG_LEVEL_DEBUG,
1193
- "",
1194
- );
1165
+ this.apiLog("scheduleCommit", "scheduled", LogLevelEnum.DEBUG, "");
1195
1166
  }
1196
1167
  }
1197
1168
 
@@ -1202,12 +1173,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1202
1173
  if (this._timeout) {
1203
1174
  this._timeout.cancel();
1204
1175
  this._timeout = undefined;
1205
- this.apiLog(
1206
- "clearScheduledCommit",
1207
- "cleared",
1208
- APIConstants.global.LOG_LEVEL_DEBUG,
1209
- "",
1210
- );
1176
+ this.apiLog("clearScheduledCommit", "cleared", LogLevelEnum.DEBUG, "");
1211
1177
  }
1212
1178
  }
1213
1179
 
@@ -1242,7 +1208,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1242
1208
  private handleValueAccessException(e: any, returnValue: string): string {
1243
1209
  if (e instanceof ValidationError) {
1244
1210
  this.lastErrorCode = String(e.errorCode);
1245
- returnValue = APIConstants.global.SCORM_FALSE;
1211
+ returnValue = global_constants.SCORM_FALSE;
1246
1212
  } else {
1247
1213
  if (e instanceof Error && e.message) {
1248
1214
  console.error(e.message);
@@ -1269,7 +1235,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1269
1235
  ? this.renderCommitObject(shouldTerminateCommit)
1270
1236
  : this.renderCommitCMI(shouldTerminateCommit);
1271
1237
 
1272
- if (this.apiLogLevel === APIConstants.global.LOG_LEVEL_DEBUG) {
1238
+ if ([LogLevelEnum.DEBUG, "1", 1, "DEBUG"].includes(this.apiLogLevel)) {
1273
1239
  console.debug(
1274
1240
  "Commit (terminated: " + (terminateCommit ? "yes" : "no") + "): ",
1275
1241
  );
@@ -1317,8 +1283,7 @@ export default abstract class BaseAPI implements IBaseAPI {
1317
1283
  if (
1318
1284
  response.status >= 200 &&
1319
1285
  response.status <= 299 &&
1320
- (result.result === true ||
1321
- result.result === APIConstants.global.SCORM_TRUE)
1286
+ (result.result === true || result.result === global_constants.SCORM_TRUE)
1322
1287
  ) {
1323
1288
  this.processListeners("CommitSuccess");
1324
1289
  } else {
package/src/Scorm12API.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { CMI } from "./cmi/scorm12/cmi";
2
2
  import * as Utilities from "./utilities";
3
3
  import { stringMatches } from "./utilities";
4
- import APIConstants from "./constants/api_constants";
5
- import ErrorCodes from "./constants/error_codes";
4
+ import { global_constants, scorm12_constants } from "./constants/api_constants";
5
+ import { scorm12_errors } from "./constants/error_codes";
6
6
 
7
7
  import { BaseCMI } from "./cmi/common/base_cmi";
8
8
  import { CMIObjectivesObject } from "./cmi/scorm12/objectives";
@@ -19,9 +19,9 @@ import {
19
19
  ScoreObject,
20
20
  Settings,
21
21
  } from "./types/api_types";
22
- import Regex from "./constants/regex";
23
22
  import { CompletionStatus, SuccessStatus } from "./constants/enums";
24
23
  import BaseAPI from "./BaseAPI";
24
+ import { scorm12_regex } from "./constants/regex";
25
25
 
26
26
  /**
27
27
  * API class for SCORM 1.2
@@ -38,7 +38,7 @@ class Scorm12Impl extends BaseAPI {
38
38
  }
39
39
  }
40
40
 
41
- super(ErrorCodes.scorm12, settings);
41
+ super(scorm12_errors, settings);
42
42
 
43
43
  this.cmi = new CMI();
44
44
  this.nav = new NAV();
@@ -74,8 +74,8 @@ class Scorm12Impl extends BaseAPI {
74
74
  reset(settings?: Settings) {
75
75
  this.commonReset(settings);
76
76
 
77
- this.cmi = new CMI();
78
- this.nav = new NAV();
77
+ this.cmi?.reset();
78
+ this.nav?.reset();
79
79
  }
80
80
 
81
81
  /**
@@ -106,13 +106,13 @@ class Scorm12Impl extends BaseAPI {
106
106
  (async () => {
107
107
  await this.internalFinish();
108
108
  })();
109
- return APIConstants.global.SCORM_TRUE;
109
+ return global_constants.SCORM_TRUE;
110
110
  }
111
111
 
112
112
  async internalFinish(): Promise<string> {
113
113
  const result = await this.terminate("LMSFinish", true);
114
114
 
115
- if (result === APIConstants.global.SCORM_TRUE) {
115
+ if (result === global_constants.SCORM_TRUE) {
116
116
  if (this.nav.event !== "") {
117
117
  if (this.nav.event === "continue") {
118
118
  this.processListeners("SequenceNext");
@@ -164,7 +164,7 @@ class Scorm12Impl extends BaseAPI {
164
164
  await this.commit("LMSCommit", false);
165
165
  })();
166
166
  }
167
- return APIConstants.global.SCORM_TRUE;
167
+ return global_constants.SCORM_TRUE;
168
168
  }
169
169
 
170
170
  /**
@@ -281,11 +281,11 @@ class Scorm12Impl extends BaseAPI {
281
281
 
282
282
  // Set error number to string since inconsistent from modules if string or number
283
283
  errorNumber = String(errorNumber);
284
- if (APIConstants.scorm12.error_descriptions[errorNumber]) {
284
+ if (scorm12_constants.error_descriptions[errorNumber]) {
285
285
  basicMessage =
286
- APIConstants.scorm12.error_descriptions[errorNumber].basicMessage;
286
+ scorm12_constants.error_descriptions[errorNumber].basicMessage;
287
287
  detailMessage =
288
- APIConstants.scorm12.error_descriptions[errorNumber].detailMessage;
288
+ scorm12_constants.error_descriptions[errorNumber].detailMessage;
289
289
  }
290
290
 
291
291
  return detail ? detailMessage : basicMessage;
@@ -342,7 +342,7 @@ class Scorm12Impl extends BaseAPI {
342
342
  const totalTimeHHMMSS = this.cmi.getCurrentTotalTime();
343
343
  const totalTimeSeconds = Utilities.getTimeAsSeconds(
344
344
  totalTimeHHMMSS,
345
- Regex.scorm12.CMITimespan,
345
+ scorm12_regex.CMITimespan,
346
346
  );
347
347
  const lessonStatus = this.cmi.core.lesson_status;
348
348
  let completionStatus = CompletionStatus.unknown;
@@ -437,7 +437,7 @@ class Scorm12Impl extends BaseAPI {
437
437
  );
438
438
  } else {
439
439
  return {
440
- result: APIConstants.global.SCORM_TRUE,
440
+ result: global_constants.SCORM_TRUE,
441
441
  errorCode: 0,
442
442
  };
443
443
  }