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
@@ -1,5 +1,6 @@
1
- import { ResultObject, Settings } from "../types/api_types";
2
- import APIConstants from "./api_constants";
1
+ import { LogLevel, ResultObject, Settings } from "../types/api_types";
2
+ import { global_constants } from "./api_constants";
3
+ import { LogLevelEnum } from "./enums";
3
4
 
4
5
  /**
5
6
  * Default settings for the SCORM API
@@ -13,7 +14,7 @@ export const DefaultSettings: Settings = {
13
14
  dataCommitFormat: "json",
14
15
  commitRequestDataType: "application/json;charset=UTF-8",
15
16
  autoProgress: false,
16
- logLevel: APIConstants.global.LOG_LEVEL_ERROR,
17
+ logLevel: LogLevelEnum.ERROR,
17
18
  selfReportSessionTime: false,
18
19
  alwaysSendTotalTime: false,
19
20
  renderCommonCommitFields: false,
@@ -34,12 +35,12 @@ export const DefaultSettings: Settings = {
34
35
  ) {
35
36
  if (response.status === 200) {
36
37
  return {
37
- result: APIConstants.global.SCORM_TRUE,
38
+ result: global_constants.SCORM_TRUE,
38
39
  errorCode: 0,
39
40
  };
40
41
  } else {
41
42
  return {
42
- result: APIConstants.global.SCORM_FALSE,
43
+ result: global_constants.SCORM_FALSE,
43
44
  errorCode: 101,
44
45
  };
45
46
  }
@@ -48,32 +49,44 @@ export const DefaultSettings: Settings = {
48
49
  result: httpResult.result,
49
50
  errorCode: httpResult.errorCode
50
51
  ? httpResult.errorCode
51
- : httpResult.result === APIConstants.global.SCORM_TRUE
52
+ : httpResult.result === global_constants.SCORM_TRUE
52
53
  ? 0
53
54
  : 101,
54
55
  };
55
56
  }
56
57
  }
57
58
  return {
58
- result: APIConstants.global.SCORM_FALSE,
59
+ result: global_constants.SCORM_FALSE,
59
60
  errorCode: 101,
60
61
  };
61
62
  },
62
63
  requestHandler: function (commitObject) {
63
64
  return commitObject;
64
65
  },
65
- onLogMessage: function (messageLevel, logMessage) {
66
+ onLogMessage: function (messageLevel: LogLevel, logMessage) {
66
67
  switch (messageLevel) {
67
- case APIConstants.global.LOG_LEVEL_ERROR:
68
+ case "4":
69
+ case 4:
70
+ case "ERROR":
71
+ case LogLevelEnum.ERROR:
68
72
  console.error(logMessage);
69
73
  break;
70
- case APIConstants.global.LOG_LEVEL_WARNING:
74
+ case "3":
75
+ case 3:
76
+ case "WARN":
77
+ case LogLevelEnum.WARN:
71
78
  console.warn(logMessage);
72
79
  break;
73
- case APIConstants.global.LOG_LEVEL_INFO:
80
+ case "2":
81
+ case 2:
82
+ case "INFO":
83
+ case LogLevelEnum.INFO:
74
84
  console.info(logMessage);
75
85
  break;
76
- case APIConstants.global.LOG_LEVEL_DEBUG:
86
+ case "1":
87
+ case 1:
88
+ case "DEBUG":
89
+ case LogLevelEnum.DEBUG:
77
90
  if (console.debug) {
78
91
  console.debug(logMessage);
79
92
  } else {
@@ -84,4 +97,5 @@ export const DefaultSettings: Settings = {
84
97
  },
85
98
  scoItemIds: [],
86
99
  scoItemIdValidator: false,
100
+ globalObjectiveIds: [],
87
101
  };
@@ -15,3 +15,12 @@ export enum CompletionStatus {
15
15
  incomplete = "incomplete",
16
16
  unknown = "unknown",
17
17
  }
18
+
19
+ export enum LogLevelEnum {
20
+ _,
21
+ DEBUG,
22
+ INFO,
23
+ WARN,
24
+ ERROR,
25
+ NONE,
26
+ }
@@ -2,7 +2,7 @@ export type ErrorCode = {
2
2
  [key: string]: number;
3
3
  };
4
4
 
5
- const global: ErrorCode = {
5
+ export const global_errors: ErrorCode = {
6
6
  GENERAL: 101,
7
7
  INITIALIZATION_FAILED: 101,
8
8
  INITIALIZED: 101,
@@ -33,8 +33,8 @@ const global: ErrorCode = {
33
33
  DEPENDENCY_NOT_ESTABLISHED: 101,
34
34
  };
35
35
 
36
- const scorm12: ErrorCode = {
37
- ...global,
36
+ export const scorm12_errors: ErrorCode = {
37
+ ...global_errors,
38
38
  RETRIEVE_BEFORE_INIT: 301,
39
39
  STORE_BEFORE_INIT: 301,
40
40
  COMMIT_BEFORE_INIT: 301,
@@ -52,8 +52,8 @@ const scorm12: ErrorCode = {
52
52
  DEPENDENCY_NOT_ESTABLISHED: 408,
53
53
  };
54
54
 
55
- const scorm2004: ErrorCode = {
56
- ...global,
55
+ export const scorm2004_errors: ErrorCode = {
56
+ ...global_errors,
57
57
  INITIALIZATION_FAILED: 102,
58
58
  INITIALIZED: 103,
59
59
  TERMINATED: 104,
@@ -79,10 +79,3 @@ const scorm2004: ErrorCode = {
79
79
  VALUE_OUT_OF_RANGE: 407,
80
80
  DEPENDENCY_NOT_ESTABLISHED: 408,
81
81
  };
82
-
83
- const ErrorCodes = {
84
- scorm12,
85
- scorm2004,
86
- };
87
-
88
- export default ErrorCodes;
@@ -1,4 +1,4 @@
1
- const scorm12 = {
1
+ export const scorm12_regex = {
2
2
  CMIString256: "^.{0,255}$",
3
3
  CMIString4096: "^.{0,4096}$",
4
4
  CMITime: "^(?:[01]\\d|2[0123]):(?:[012345]\\d):(?:[012345]\\d)$",
@@ -28,13 +28,13 @@ const scorm12 = {
28
28
  weighting_range: "-100#100",
29
29
  text_range: "-1#1",
30
30
  };
31
- const aicc = {
32
- ...scorm12,
31
+ export const aicc_regex = {
32
+ ...scorm12_regex,
33
33
  ...{
34
34
  CMIIdentifier: "^\\w{1,255}$",
35
35
  },
36
36
  };
37
- const scorm2004 = {
37
+ export const scorm2004_regex = {
38
38
  CMIString200: "^[\\u0000-\\uFFFF]{0,200}$",
39
39
  CMIString250: "^[\\u0000-\\uFFFF]{0,250}$",
40
40
  CMIString1000: "^[\\u0000-\\uFFFF]{0,1000}$",
@@ -78,7 +78,7 @@ const scorm2004 = {
78
78
  CMIResult:
79
79
  "^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\.[0-9]{1,18})?)$",
80
80
  NAVEvent:
81
- "^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|_none_|(\\{target=\\S{0,}[a-zA-Z0-9-_]+})?choice|(\\{target=\\S{0,}[a-zA-Z0-9-_]+})?jump)$",
81
+ "^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|_none_|(\\{target=(?<choice_target>\\S{0,}[a-zA-Z0-9-_]+)})?choice|(\\{target=(?<jump_target>\\S{0,}[a-zA-Z0-9-_]+)})?jump)$",
82
82
 
83
83
  NAVBoolean: "^(unknown|true|false$)",
84
84
  NAVTarget: "^{target=\\S{0,}[a-zA-Z0-9-_]+}$",
@@ -89,9 +89,3 @@ const scorm2004 = {
89
89
  text_range: "-1#1",
90
90
  progress_range: "0#1",
91
91
  };
92
- const Regex = {
93
- aicc: aicc,
94
- scorm12: scorm12,
95
- scorm2004: scorm2004,
96
- };
97
- export default Regex;
@@ -1,6 +1,5 @@
1
- import Regex from "./regex";
1
+ import { scorm2004_regex } from "./regex";
2
2
 
3
- const scorm2004_regex = Regex.scorm2004;
4
3
  export const LearnerResponses: Responses = {
5
4
  "true-false": {
6
5
  format: "^true$|^false$",
@@ -0,0 +1,29 @@
1
+ import { ValidationError } from "../exceptions";
2
+ import { aicc_constants } from "../constants/api_constants";
3
+
4
+ const aicc_errors = aicc_constants.error_descriptions;
5
+
6
+ /**
7
+ * AICC Validation Error
8
+ */
9
+ export class AICCValidationError extends ValidationError {
10
+ /**
11
+ * Constructor to take in an error code
12
+ * @param {number} errorCode
13
+ */
14
+ constructor(errorCode: number) {
15
+ if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {
16
+ super(
17
+ errorCode,
18
+ aicc_errors[String(errorCode)].basicMessage,
19
+ aicc_errors[String(errorCode)].detailMessage,
20
+ );
21
+ } else {
22
+ super(
23
+ 101,
24
+ aicc_errors["101"].basicMessage,
25
+ aicc_errors["101"].detailMessage,
26
+ );
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ import { ValidationError } from "../exceptions";
2
+ import { scorm12_constants } from "../constants/api_constants";
3
+
4
+ const scorm12_errors = scorm12_constants.error_descriptions;
5
+
6
+ /**
7
+ * SCORM 1.2 Validation Error
8
+ */
9
+ export class Scorm12ValidationError extends ValidationError {
10
+ /**
11
+ * Constructor to take in an error code
12
+ * @param {number} errorCode
13
+ */
14
+ constructor(errorCode: number) {
15
+ if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {
16
+ super(
17
+ errorCode,
18
+ scorm12_errors[String(errorCode)].basicMessage,
19
+ scorm12_errors[String(errorCode)].detailMessage,
20
+ );
21
+ } else {
22
+ super(
23
+ 101,
24
+ scorm12_errors["101"].basicMessage,
25
+ scorm12_errors["101"].detailMessage,
26
+ );
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ import { ValidationError } from "../exceptions";
2
+ import { scorm2004_constants } from "../constants/api_constants";
3
+
4
+ const scorm2004_errors = scorm2004_constants.error_descriptions;
5
+
6
+ /**
7
+ * SCORM 2004 Validation Error
8
+ */
9
+ export class Scorm2004ValidationError extends ValidationError {
10
+ /**
11
+ * Constructor to take in an error code
12
+ * @param {number} errorCode
13
+ */
14
+ constructor(errorCode: number) {
15
+ if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {
16
+ super(
17
+ errorCode,
18
+ scorm2004_errors[String(errorCode)].basicMessage,
19
+ scorm2004_errors[String(errorCode)].detailMessage,
20
+ );
21
+ } else {
22
+ super(
23
+ 101,
24
+ scorm2004_errors["101"].basicMessage,
25
+ scorm2004_errors["101"].detailMessage,
26
+ );
27
+ }
28
+ }
29
+ }
package/src/exceptions.ts CHANGED
@@ -1,9 +1,3 @@
1
- import APIConstants from "./constants/api_constants";
2
-
3
- const scorm12_errors = APIConstants.scorm12.error_descriptions;
4
- const aicc_errors = APIConstants.aicc.error_descriptions;
5
- const scorm2004_errors = APIConstants.scorm2004.error_descriptions;
6
-
7
1
  type APIError = {
8
2
  errorCode: number;
9
3
  errorMessage: string;
@@ -26,10 +20,6 @@ export class BaseScormValidationError extends Error {
26
20
  get errorCode(): number {
27
21
  return this._errorCode;
28
22
  }
29
-
30
- setMessage(message: string) {
31
- this.message = message;
32
- }
33
23
  }
34
24
 
35
25
  /**
@@ -51,7 +41,7 @@ export class ValidationError
51
41
  detailedMessage?: string,
52
42
  ) {
53
43
  super(errorCode);
54
- this.setMessage(errorMessage);
44
+ this.message = errorMessage;
55
45
  this._errorMessage = errorMessage;
56
46
  if (detailedMessage) {
57
47
  this._detailedMessage = detailedMessage;
@@ -77,78 +67,3 @@ export class ValidationError
77
67
  return this._detailedMessage;
78
68
  }
79
69
  }
80
-
81
- /**
82
- * SCORM 1.2 Validation Error
83
- */
84
- export class Scorm12ValidationError extends ValidationError {
85
- /**
86
- * Constructor to take in an error code
87
- * @param {number} errorCode
88
- */
89
- constructor(errorCode: number) {
90
- if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {
91
- super(
92
- errorCode,
93
- scorm12_errors[String(errorCode)].basicMessage,
94
- scorm12_errors[String(errorCode)].detailMessage,
95
- );
96
- } else {
97
- super(
98
- 101,
99
- scorm12_errors["101"].basicMessage,
100
- scorm12_errors["101"].detailMessage,
101
- );
102
- }
103
- }
104
- }
105
-
106
- /**
107
- * AICC Validation Error
108
- */
109
- export class AICCValidationError extends ValidationError {
110
- /**
111
- * Constructor to take in an error code
112
- * @param {number} errorCode
113
- */
114
- constructor(errorCode: number) {
115
- if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {
116
- super(
117
- errorCode,
118
- aicc_errors[String(errorCode)].basicMessage,
119
- aicc_errors[String(errorCode)].detailMessage,
120
- );
121
- } else {
122
- super(
123
- 101,
124
- aicc_errors["101"].basicMessage,
125
- aicc_errors["101"].detailMessage,
126
- );
127
- }
128
- }
129
- }
130
-
131
- /**
132
- * SCORM 2004 Validation Error
133
- */
134
- export class Scorm2004ValidationError extends ValidationError {
135
- /**
136
- * Constructor to take in an error code
137
- * @param {number} errorCode
138
- */
139
- constructor(errorCode: number) {
140
- if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {
141
- super(
142
- errorCode,
143
- scorm2004_errors[String(errorCode)].basicMessage,
144
- scorm2004_errors[String(errorCode)].detailMessage,
145
- );
146
- } else {
147
- super(
148
- 101,
149
- scorm2004_errors["101"].basicMessage,
150
- scorm2004_errors["101"].detailMessage,
151
- );
152
- }
153
- }
154
- }
@@ -1,4 +1,8 @@
1
- import { CompletionStatus, SuccessStatus } from "../constants/enums";
1
+ import {
2
+ CompletionStatus,
3
+ LogLevelEnum,
4
+ SuccessStatus,
5
+ } from "../constants/enums";
2
6
 
3
7
  export type Settings = {
4
8
  autocommit?: boolean;
@@ -9,7 +13,7 @@ export type Settings = {
9
13
  dataCommitFormat?: string;
10
14
  commitRequestDataType?: string;
11
15
  autoProgress?: boolean;
12
- logLevel?: number;
16
+ logLevel?: LogLevel;
13
17
  selfReportSessionTime?: boolean;
14
18
  alwaysSendTotalTime?: boolean;
15
19
  strict_errors?: boolean;
@@ -18,11 +22,12 @@ export type Settings = {
18
22
  fetchMode?: "cors" | "no-cors" | "same-origin" | "navigate";
19
23
  responseHandler?: (response: Response) => Promise<ResultObject>;
20
24
  requestHandler?: (commitObject: any) => any;
21
- onLogMessage?: (messageLevel: number, logMessage: string) => void;
22
- scoItemIds?: string[];
23
- scoItemIdValidator?: false | ((scoItemId: string) => boolean);
25
+ onLogMessage?: (messageLevel: LogLevel, logMessage: string) => void;
24
26
  mastery_override?: boolean;
25
27
  renderCommonCommitFields?: boolean;
28
+ scoItemIds?: string[];
29
+ scoItemIdValidator?: false | ((scoItemId: string) => boolean);
30
+ globalObjectiveIds?: string[];
26
31
  };
27
32
 
28
33
  export type RefObject = {
@@ -49,3 +54,22 @@ export type CommitObject = {
49
54
  runtimeData: RefObject;
50
55
  score?: ScoreObject;
51
56
  };
57
+
58
+ export type LogLevel =
59
+ | 1
60
+ | 2
61
+ | 3
62
+ | 4
63
+ | 5
64
+ | "1"
65
+ | "2"
66
+ | "3"
67
+ | "4"
68
+ | "5"
69
+ | "DEBUG"
70
+ | "INFO"
71
+ | "WARN"
72
+ | "ERROR"
73
+ | "NONE"
74
+ | LogLevelEnum
75
+ | undefined;