scorm-again 2.6.2 → 2.6.4

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 (70) hide show
  1. package/dist/aicc.js +41 -25
  2. package/dist/aicc.js.map +1 -1
  3. package/dist/aicc.min.js +1 -1
  4. package/dist/aicc.min.js.map +1 -1
  5. package/dist/esm/aicc.js +41 -25
  6. package/dist/esm/aicc.js.map +1 -1
  7. package/dist/esm/aicc.min.js +1 -1
  8. package/dist/esm/aicc.min.js.map +1 -1
  9. package/dist/esm/scorm-again.js +70 -45
  10. package/dist/esm/scorm-again.js.map +1 -1
  11. package/dist/esm/scorm-again.min.js +1 -1
  12. package/dist/esm/scorm-again.min.js.map +1 -1
  13. package/dist/esm/scorm12.js +38 -23
  14. package/dist/esm/scorm12.js.map +1 -1
  15. package/dist/esm/scorm12.min.js +1 -1
  16. package/dist/esm/scorm12.min.js.map +1 -1
  17. package/dist/esm/scorm2004.js +60 -39
  18. package/dist/esm/scorm2004.js.map +1 -1
  19. package/dist/esm/scorm2004.min.js +1 -1
  20. package/dist/esm/scorm2004.min.js.map +1 -1
  21. package/dist/scorm-again.js +70 -45
  22. package/dist/scorm-again.js.map +1 -1
  23. package/dist/scorm-again.min.js +1 -1
  24. package/dist/scorm-again.min.js.map +1 -1
  25. package/dist/scorm12.js +38 -23
  26. package/dist/scorm12.js.map +1 -1
  27. package/dist/scorm12.min.js +1 -1
  28. package/dist/scorm12.min.js.map +1 -1
  29. package/dist/scorm2004.js +60 -39
  30. package/dist/scorm2004.js.map +1 -1
  31. package/dist/scorm2004.min.js +1 -1
  32. package/dist/scorm2004.min.js.map +1 -1
  33. package/index.d.ts +24 -3
  34. package/package.json +1 -1
  35. package/src/BaseAPI.ts +57 -35
  36. package/src/Scorm12API.ts +3 -2
  37. package/src/Scorm2004API.ts +31 -24
  38. package/src/cmi/aicc/attempts.ts +3 -3
  39. package/src/cmi/aicc/core.ts +30 -12
  40. package/src/cmi/aicc/evaluation.ts +1 -1
  41. package/src/cmi/aicc/student_data.ts +1 -1
  42. package/src/cmi/aicc/student_demographics.ts +13 -13
  43. package/src/cmi/aicc/student_preferences.ts +1 -1
  44. package/src/cmi/aicc/tries.ts +3 -3
  45. package/src/cmi/aicc/validation.ts +1 -1
  46. package/src/cmi/common/array.ts +1 -1
  47. package/src/cmi/common/score.ts +3 -3
  48. package/src/cmi/common/validation.ts +2 -2
  49. package/src/cmi/scorm12/cmi.ts +12 -4
  50. package/src/cmi/scorm12/interactions.ts +27 -11
  51. package/src/cmi/scorm12/objectives.ts +4 -4
  52. package/src/cmi/scorm12/student_data.ts +12 -4
  53. package/src/cmi/scorm12/student_preference.ts +3 -1
  54. package/src/cmi/scorm12/validation.ts +5 -3
  55. package/src/cmi/scorm2004/adl.ts +21 -7
  56. package/src/cmi/scorm2004/cmi.ts +45 -15
  57. package/src/cmi/scorm2004/comments.ts +11 -5
  58. package/src/cmi/scorm2004/interactions.ts +25 -23
  59. package/src/cmi/scorm2004/learner_preference.ts +3 -1
  60. package/src/cmi/scorm2004/objectives.ts +5 -5
  61. package/src/cmi/scorm2004/score.ts +3 -3
  62. package/src/cmi/scorm2004/validation.ts +2 -2
  63. package/src/constants/regex.ts +8 -1
  64. package/src/exceptions/aicc_exceptions.ts +4 -4
  65. package/src/exceptions/scorm12_exceptions.ts +4 -4
  66. package/src/exceptions/scorm2004_exceptions.ts +4 -4
  67. package/src/utilities.ts +3 -3
  68. package/test/Scorm12API.spec.ts +45 -0
  69. package/test/Scorm2004API.spec.ts +43 -0
  70. package/tsconfig.json +1 -0
package/dist/scorm12.js CHANGED
@@ -417,6 +417,10 @@ var BaseAPI = (function () {
417
417
  : this._error_codes.GENERAL;
418
418
  for (var idx = 0; idx < structure.length; idx++) {
419
419
  var attribute = structure[idx];
420
+ if (!attribute) {
421
+ this.throwSCORMError(invalidErrorCode, invalidErrorMessage);
422
+ return api_constants.global_constants.SCORM_FALSE;
423
+ }
420
424
  if (idx === structure.length - 1) {
421
425
  if (scorm2004 && attribute.substring(0, 8) === "{target=") {
422
426
  if (this.isInitialized()) {
@@ -447,7 +451,7 @@ var BaseAPI = (function () {
447
451
  break;
448
452
  }
449
453
  if (refObject instanceof array.CMIArray) {
450
- var index = parseInt(structure[idx + 1], 10);
454
+ var index = parseInt(structure[idx + 1] || "0", 10);
451
455
  if (!isNaN(index)) {
452
456
  var item = refObject.childArray[index];
453
457
  if (item) {
@@ -491,6 +495,10 @@ var BaseAPI = (function () {
491
495
  : this._error_codes.GENERAL;
492
496
  for (var idx = 0; idx < structure.length; idx++) {
493
497
  attribute = structure[idx];
498
+ if (!attribute) {
499
+ this.throwSCORMError(invalidErrorCode, invalidErrorMessage);
500
+ return;
501
+ }
494
502
  if (!scorm2004) {
495
503
  if (idx === structure.length - 1) {
496
504
  if (!this._checkObjectHasProperty(refObject, attribute)) {
@@ -516,7 +524,7 @@ var BaseAPI = (function () {
516
524
  break;
517
525
  }
518
526
  if (refObject instanceof array.CMIArray) {
519
- var index = parseInt(structure[idx + 1], 10);
527
+ var index = parseInt(structure[idx + 1] || "", 10);
520
528
  if (!isNaN(index)) {
521
529
  var item = refObject.childArray[index];
522
530
  if (item) {
@@ -554,17 +562,18 @@ var BaseAPI = (function () {
554
562
  return this.currentState === api_constants.global_constants.STATE_TERMINATED;
555
563
  };
556
564
  BaseAPI.prototype.on = function (listenerName, callback) {
565
+ var _a, _c;
557
566
  if (!callback)
558
567
  return;
559
568
  var listenerFunctions = listenerName.split(" ");
560
569
  for (var i = 0; i < listenerFunctions.length; i++) {
561
- var listenerSplit = listenerFunctions[i].split(".");
562
- if (listenerSplit.length === 0)
570
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
571
+ if (!listenerSplit || listenerSplit.length === 0)
563
572
  return;
564
573
  var functionName = listenerSplit[0];
565
574
  var CMIElement = null;
566
575
  if (listenerSplit.length > 1) {
567
- CMIElement = listenerName.replace(functionName + ".", "");
576
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
568
577
  }
569
578
  this.listenerArray.push({
570
579
  functionName: functionName,
@@ -575,17 +584,18 @@ var BaseAPI = (function () {
575
584
  }
576
585
  };
577
586
  BaseAPI.prototype.off = function (listenerName, callback) {
587
+ var _a, _c;
578
588
  if (!callback)
579
589
  return;
580
590
  var listenerFunctions = listenerName.split(" ");
581
591
  var _loop_1 = function (i) {
582
- var listenerSplit = listenerFunctions[i].split(".");
583
- if (listenerSplit.length === 0)
592
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
593
+ if (!listenerSplit || listenerSplit.length === 0)
584
594
  return { value: void 0 };
585
595
  var functionName = listenerSplit[0];
586
596
  var CMIElement = null;
587
597
  if (listenerSplit.length > 1) {
588
- CMIElement = listenerName.replace(functionName + ".", "");
598
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
589
599
  }
590
600
  var removeIndex = this_1.listenerArray.findIndex(function (obj) {
591
601
  return obj.functionName === functionName &&
@@ -605,15 +615,16 @@ var BaseAPI = (function () {
605
615
  }
606
616
  };
607
617
  BaseAPI.prototype.clear = function (listenerName) {
618
+ var _a, _c;
608
619
  var listenerFunctions = listenerName.split(" ");
609
620
  var _loop_2 = function (i) {
610
- var listenerSplit = listenerFunctions[i].split(".");
611
- if (listenerSplit.length === 0)
621
+ var listenerSplit = (_a = listenerFunctions[i]) === null || _a === void 0 ? void 0 : _a.split(".");
622
+ if (!listenerSplit || (listenerSplit === null || listenerSplit === void 0 ? void 0 : listenerSplit.length) === 0)
612
623
  return { value: void 0 };
613
624
  var functionName = listenerSplit[0];
614
625
  var CMIElement = null;
615
626
  if (listenerSplit.length > 1) {
616
- CMIElement = listenerName.replace(functionName + ".", "");
627
+ CMIElement = (_c = listenerFunctions[i]) === null || _c === void 0 ? void 0 : _c.replace(functionName + ".", "");
617
628
  }
618
629
  this_2.listenerArray = this_2.listenerArray.filter(function (obj) {
619
630
  return obj.functionName !== functionName && obj.CMIElement !== CMIElement;
@@ -796,7 +807,7 @@ var BaseAPI = (function () {
796
807
  }];
797
808
  }
798
809
  process = function (url, params, settings) { return (0,tslib_es6.__awaiter)(_this, void 0, void 0, function () {
799
- var response, e_1;
810
+ var response, e_1, message;
800
811
  return (0,tslib_es6.__generator)(this, function (_a) {
801
812
  switch (_a.label) {
802
813
  case 0:
@@ -808,7 +819,8 @@ var BaseAPI = (function () {
808
819
  return [2, this.transformResponse(response)];
809
820
  case 2:
810
821
  e_1 = _a.sent();
811
- this.apiLog("processHttpRequest", e_1, enums.LogLevelEnum.ERROR);
822
+ message = e_1 instanceof Error ? e_1.message : String(e_1);
823
+ this.apiLog("processHttpRequest", message, enums.LogLevelEnum.ERROR);
812
824
  api.processListeners("CommitError");
813
825
  return [2, genericError];
814
826
  case 3: return [2];
@@ -1181,8 +1193,8 @@ function checkValidFormat(value, regexPattern, errorCode, errorClass, allowEmpty
1181
1193
  function checkValidRange(value, rangePattern, errorCode, errorClass) {
1182
1194
  var ranges = rangePattern.split("#");
1183
1195
  value = value * 1.0;
1184
- if (value >= ranges[0]) {
1185
- if (ranges[1] === "*" || value <= ranges[1]) {
1196
+ if (ranges[0] && value >= ranges[0]) {
1197
+ if (ranges[1] && (ranges[1] === "*" || value <= ranges[1])) {
1186
1198
  return true;
1187
1199
  }
1188
1200
  else {
@@ -2641,7 +2653,7 @@ var scorm12_regex = {
2641
2653
  CMISInteger: "^-?([0-9]+)$",
2642
2654
  CMIDecimal: "^-?([0-9]{0,3})(.[0-9]*)?$",
2643
2655
  CMIIdentifier: "^[\\u0021-\\u007E\\s]{0,255}$",
2644
- CMIFeedback: "^.{0,255}$",
2656
+ CMIFeedback: "^.*$",
2645
2657
  CMIIndex: "[._](\\d+).",
2646
2658
  CMIStatus: "^(passed|completed|failed|incomplete|browsed)$",
2647
2659
  CMIStatus2: "^(passed|completed|failed|incomplete|browsed|not attempted)$",
@@ -2777,11 +2789,12 @@ var Scorm12ValidationError = (function (_super) {
2777
2789
  (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__extends)(Scorm12ValidationError, _super);
2778
2790
  function Scorm12ValidationError(errorCode) {
2779
2791
  var _this = this;
2792
+ var _a, _b, _c, _d, _e;
2780
2793
  if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {
2781
- _this = _super.call(this, errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage) || this;
2794
+ _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;
2782
2795
  }
2783
2796
  else {
2784
- _this = _super.call(this, 101, scorm12_errors["101"].basicMessage, scorm12_errors["101"].detailMessage) || this;
2797
+ _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;
2785
2798
  }
2786
2799
  return _this;
2787
2800
  }
@@ -2851,7 +2864,7 @@ function getSecondsAsISODuration(seconds) {
2851
2864
  var duration = "P";
2852
2865
  var remainder = seconds;
2853
2866
  for (var designationsKey in designations) {
2854
- var current_seconds = designations[designationsKey];
2867
+ var current_seconds = designations[designationsKey] || 1;
2855
2868
  var value = Math.floor(remainder / current_seconds);
2856
2869
  remainder = remainder % current_seconds;
2857
2870
  if (countDecimals(remainder) > 2) {
@@ -2958,7 +2971,7 @@ function unflatten(data) {
2958
2971
  var m = regex.exec(p);
2959
2972
  while (m) {
2960
2973
  cur = cur[prop] || (cur[prop] = m[2] ? [] : {});
2961
- prop = m[2] || m[1];
2974
+ prop = m[2] || m[1] || "";
2962
2975
  m = regex.exec(p);
2963
2976
  }
2964
2977
  cur[prop] = data[p];
@@ -2970,7 +2983,7 @@ function countDecimals(num) {
2970
2983
  if (Math.floor(num) === num || String(num).indexOf(".") < 0)
2971
2984
  return 0;
2972
2985
  var parts = num.toString().split(".")[1];
2973
- return parts.length || 0;
2986
+ return (parts === null || parts === void 0 ? void 0 : parts.length) || 0;
2974
2987
  }
2975
2988
  function formatMessage(functionName, message, CMIElement) {
2976
2989
  var baseLength = 20;
@@ -3647,14 +3660,16 @@ var Scorm12Impl = (function (_super) {
3647
3660
  Scorm12Impl.prototype.validateCorrectResponse = function (_CMIElement, _value) {
3648
3661
  };
3649
3662
  Scorm12Impl.prototype.getLmsErrorMessageDetails = function (errorNumber, detail) {
3663
+ var _a, _b;
3650
3664
  var basicMessage = "No Error";
3651
3665
  var detailMessage = "No Error";
3652
3666
  errorNumber = String(errorNumber);
3653
3667
  if (_constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) {
3654
3668
  basicMessage =
3655
- _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber].basicMessage;
3669
+ ((_a = _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) === null || _a === void 0 ? void 0 : _a.basicMessage) ||
3670
+ "General Error";
3656
3671
  detailMessage =
3657
- _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber].detailMessage;
3672
+ ((_b = _constants_api_constants__WEBPACK_IMPORTED_MODULE_4__.scorm12_constants.error_descriptions[errorNumber]) === null || _b === void 0 ? void 0 : _b.detailMessage) || "";
3658
3673
  }
3659
3674
  return detail ? detailMessage : basicMessage;
3660
3675
  };