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
package/dist/esm/aicc.js CHANGED
@@ -415,6 +415,10 @@ var BaseAPI = (function () {
415
415
  : this._error_codes.GENERAL;
416
416
  for (var idx = 0; idx < structure.length; idx++) {
417
417
  var attribute = structure[idx];
418
+ if (!attribute) {
419
+ this.throwSCORMError(invalidErrorCode, invalidErrorMessage);
420
+ return api_constants.global_constants.SCORM_FALSE;
421
+ }
418
422
  if (idx === structure.length - 1) {
419
423
  if (scorm2004 && attribute.substring(0, 8) === "{target=") {
420
424
  if (this.isInitialized()) {
@@ -445,7 +449,7 @@ var BaseAPI = (function () {
445
449
  break;
446
450
  }
447
451
  if (refObject instanceof array.CMIArray) {
448
- var index = parseInt(structure[idx + 1], 10);
452
+ var index = parseInt(structure[idx + 1] || "0", 10);
449
453
  if (!isNaN(index)) {
450
454
  var item = refObject.childArray[index];
451
455
  if (item) {
@@ -489,6 +493,10 @@ var BaseAPI = (function () {
489
493
  : this._error_codes.GENERAL;
490
494
  for (var idx = 0; idx < structure.length; idx++) {
491
495
  attribute = structure[idx];
496
+ if (!attribute) {
497
+ this.throwSCORMError(invalidErrorCode, invalidErrorMessage);
498
+ return;
499
+ }
492
500
  if (!scorm2004) {
493
501
  if (idx === structure.length - 1) {
494
502
  if (!this._checkObjectHasProperty(refObject, attribute)) {
@@ -514,7 +522,7 @@ var BaseAPI = (function () {
514
522
  break;
515
523
  }
516
524
  if (refObject instanceof array.CMIArray) {
517
- var index = parseInt(structure[idx + 1], 10);
525
+ var index = parseInt(structure[idx + 1] || "", 10);
518
526
  if (!isNaN(index)) {
519
527
  var item = refObject.childArray[index];
520
528
  if (item) {
@@ -552,17 +560,18 @@ var BaseAPI = (function () {
552
560
  return this.currentState === api_constants.global_constants.STATE_TERMINATED;
553
561
  };
554
562
  BaseAPI.prototype.on = function (listenerName, callback) {
563
+ var _a, _c;
555
564
  if (!callback)
556
565
  return;
557
566
  var listenerFunctions = listenerName.split(" ");
558
567
  for (var i = 0; i < listenerFunctions.length; i++) {
559
- var listenerSplit = listenerFunctions[i].split(".");
560
- if (listenerSplit.length === 0)
568
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
569
+ if (!listenerSplit || listenerSplit.length === 0)
561
570
  return;
562
571
  var functionName = listenerSplit[0];
563
572
  var CMIElement = null;
564
573
  if (listenerSplit.length > 1) {
565
- CMIElement = listenerName.replace(functionName + ".", "");
574
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
566
575
  }
567
576
  this.listenerArray.push({
568
577
  functionName: functionName,
@@ -573,17 +582,18 @@ var BaseAPI = (function () {
573
582
  }
574
583
  };
575
584
  BaseAPI.prototype.off = function (listenerName, callback) {
585
+ var _a, _c;
576
586
  if (!callback)
577
587
  return;
578
588
  var listenerFunctions = listenerName.split(" ");
579
589
  var _loop_1 = function (i) {
580
- var listenerSplit = listenerFunctions[i].split(".");
581
- if (listenerSplit.length === 0)
590
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
591
+ if (!listenerSplit || listenerSplit.length === 0)
582
592
  return { value: void 0 };
583
593
  var functionName = listenerSplit[0];
584
594
  var CMIElement = null;
585
595
  if (listenerSplit.length > 1) {
586
- CMIElement = listenerName.replace(functionName + ".", "");
596
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
587
597
  }
588
598
  var removeIndex = this_1.listenerArray.findIndex(function (obj) {
589
599
  return obj.functionName === functionName &&
@@ -603,15 +613,16 @@ var BaseAPI = (function () {
603
613
  }
604
614
  };
605
615
  BaseAPI.prototype.clear = function (listenerName) {
616
+ var _a, _c;
606
617
  var listenerFunctions = listenerName.split(" ");
607
618
  var _loop_2 = function (i) {
608
- var listenerSplit = listenerFunctions[i].split(".");
609
- if (listenerSplit.length === 0)
619
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
620
+ if (!listenerSplit || (listenerSplit === null || listenerSplit === void 0 ? void 0 : listenerSplit.length) === 0)
610
621
  return { value: void 0 };
611
622
  var functionName = listenerSplit[0];
612
623
  var CMIElement = null;
613
624
  if (listenerSplit.length > 1) {
614
- CMIElement = listenerName.replace(functionName + ".", "");
625
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
615
626
  }
616
627
  this_2.listenerArray = this_2.listenerArray.filter(function (obj) {
617
628
  return obj.functionName !== functionName && obj.CMIElement !== CMIElement;
@@ -778,6 +789,7 @@ var BaseAPI = (function () {
778
789
  errorCode: this.error_codes.GENERAL,
779
790
  };
780
791
  if (immediate) {
792
+ params = this.settings.requestHandler(params);
781
793
  this.performFetch(url, params).then(function (response) { return (0,tslib_es6.__awaiter)(_this, void 0, void 0, function () {
782
794
  return (0,tslib_es6.__generator)(this, function (_a) {
783
795
  switch (_a.label) {
@@ -1093,14 +1105,16 @@ var Scorm12Impl = (function (_super) {
1093
1105
  Scorm12Impl.prototype.validateCorrectResponse = function (_CMIElement, _value) {
1094
1106
  };
1095
1107
  Scorm12Impl.prototype.getLmsErrorMessageDetails = function (errorNumber, detail) {
1108
+ var _a, _b;
1096
1109
  var basicMessage = "No Error";
1097
1110
  var detailMessage = "No Error";
1098
1111
  errorNumber = String(errorNumber);
1099
1112
  if (_constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) {
1100
1113
  basicMessage =
1101
- _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber].basicMessage;
1114
+ ((_a = _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) === null || _a === void 0 ? void 0 : _a.basicMessage) ||
1115
+ "General Error";
1102
1116
  detailMessage =
1103
- _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber].detailMessage;
1117
+ ((_b = _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) === null || _b === void 0 ? void 0 : _b.detailMessage) || "";
1104
1118
  }
1105
1119
  return detail ? detailMessage : basicMessage;
1106
1120
  };
@@ -1485,8 +1499,8 @@ function checkValidFormat(value, regexPattern, errorCode, errorClass, allowEmpty
1485
1499
  function checkValidRange(value, rangePattern, errorCode, errorClass) {
1486
1500
  var ranges = rangePattern.split("#");
1487
1501
  value = value * 1.0;
1488
- if (value >= ranges[0]) {
1489
- if (ranges[1] === "*" || value <= ranges[1]) {
1502
+ if (ranges[0] && value >= ranges[0]) {
1503
+ if (ranges[1] && (ranges[1] === "*" || value <= ranges[1])) {
1490
1504
  return true;
1491
1505
  }
1492
1506
  else {
@@ -3081,11 +3095,12 @@ var Scorm12ValidationError = (function (_super) {
3081
3095
  (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__extends)(Scorm12ValidationError, _super);
3082
3096
  function Scorm12ValidationError(errorCode) {
3083
3097
  var _this = this;
3098
+ var _a, _b, _c, _d, _e;
3084
3099
  if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {
3085
- _this = _super.call(this, errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage) || this;
3100
+ _this = _super.call(this, errorCode, ((_a = scorm12_errors[String(errorCode)]) === null || _a === void 0 ? void 0 : _a.basicMessage) || "Unknown error", (_b = scorm12_errors[String(errorCode)]) === null || _b === void 0 ? void 0 : _b.detailMessage) || this;
3086
3101
  }
3087
3102
  else {
3088
- _this = _super.call(this, 101, scorm12_errors["101"].basicMessage, scorm12_errors["101"].detailMessage) || this;
3103
+ _this = _super.call(this, 101, (_d = (_c = scorm12_errors["101"]) === null || _c === void 0 ? void 0 : _c.basicMessage) !== null && _d !== void 0 ? _d : "General error", (_e = scorm12_errors["101"]) === null || _e === void 0 ? void 0 : _e.detailMessage) || this;
3089
3104
  }
3090
3105
  return _this;
3091
3106
  }
@@ -3155,7 +3170,7 @@ function getSecondsAsISODuration(seconds) {
3155
3170
  var duration = "P";
3156
3171
  var remainder = seconds;
3157
3172
  for (var designationsKey in designations) {
3158
- var current_seconds = designations[designationsKey];
3173
+ var current_seconds = designations[designationsKey] || 1;
3159
3174
  var value = Math.floor(remainder / current_seconds);
3160
3175
  remainder = remainder % current_seconds;
3161
3176
  if (countDecimals(remainder) > 2) {
@@ -3262,7 +3277,7 @@ function unflatten(data) {
3262
3277
  var m = regex.exec(p);
3263
3278
  while (m) {
3264
3279
  cur = cur[prop] || (cur[prop] = m[2] ? [] : {});
3265
- prop = m[2] || m[1];
3280
+ prop = m[2] || m[1] || "";
3266
3281
  m = regex.exec(p);
3267
3282
  }
3268
3283
  cur[prop] = data[p];
@@ -3274,7 +3289,7 @@ function countDecimals(num) {
3274
3289
  if (Math.floor(num) === num || String(num).indexOf(".") < 0)
3275
3290
  return 0;
3276
3291
  var parts = num.toString().split(".")[1];
3277
- return parts.length || 0;
3292
+ return (parts === null || parts === void 0 ? void 0 : parts.length) || 0;
3278
3293
  }
3279
3294
  function formatMessage(functionName, message, CMIElement) {
3280
3295
  var baseLength = 20;
@@ -3810,11 +3825,12 @@ var AICCValidationError = (function (_super) {
3810
3825
  (0,tslib_es6.__extends)(AICCValidationError, _super);
3811
3826
  function AICCValidationError(errorCode) {
3812
3827
  var _this = this;
3828
+ var _a, _b, _c, _d;
3813
3829
  if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {
3814
- _this = _super.call(this, errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage) || this;
3830
+ _this = _super.call(this, errorCode, ((_a = aicc_errors[String(errorCode)]) === null || _a === void 0 ? void 0 : _a.basicMessage) || "Unknown rror", (_b = aicc_errors[String(errorCode)]) === null || _b === void 0 ? void 0 : _b.detailMessage) || this;
3815
3831
  }
3816
3832
  else {
3817
- _this = _super.call(this, 101, aicc_errors["101"].basicMessage, aicc_errors["101"].detailMessage) || this;
3833
+ _this = _super.call(this, 101, ((_c = aicc_errors["101"]) === null || _c === void 0 ? void 0 : _c.basicMessage) || "General error", (_d = aicc_errors["101"]) === null || _d === void 0 ? void 0 : _d.detailMessage) || this;
3818
3834
  }
3819
3835
  return _this;
3820
3836
  }