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.
- package/README.md +23 -23
- package/dist/aicc.js +676 -493
- package/dist/aicc.js.map +1 -1
- package/dist/aicc.min.js +1 -1
- package/dist/aicc.min.js.map +1 -1
- package/dist/esm/aicc.js +692 -496
- package/dist/esm/aicc.js.map +1 -1
- package/dist/esm/aicc.min.js +1 -1
- package/dist/esm/aicc.min.js.map +1 -1
- package/dist/esm/scorm-again.js +1151 -743
- package/dist/esm/scorm-again.js.map +1 -1
- package/dist/esm/scorm-again.min.js +1 -1
- package/dist/esm/scorm-again.min.js.map +1 -1
- package/dist/esm/scorm12.js +534 -401
- package/dist/esm/scorm12.js.map +1 -1
- package/dist/esm/scorm12.min.js +1 -1
- package/dist/esm/scorm12.min.js.map +1 -1
- package/dist/esm/scorm2004.js +712 -465
- package/dist/esm/scorm2004.js.map +1 -1
- package/dist/esm/scorm2004.min.js +1 -1
- package/dist/esm/scorm2004.min.js.map +1 -1
- package/dist/scorm-again.js +1127 -731
- package/dist/scorm-again.js.map +1 -1
- package/dist/scorm-again.min.js +1 -1
- package/dist/scorm-again.min.js.map +1 -1
- package/dist/scorm12.js +521 -400
- package/dist/scorm12.js.map +1 -1
- package/dist/scorm12.min.js +1 -1
- package/dist/scorm12.min.js.map +1 -1
- package/dist/scorm2004.js +698 -464
- package/dist/scorm2004.js.map +1 -1
- package/dist/scorm2004.min.js +1 -1
- package/dist/scorm2004.min.js.map +1 -1
- package/package.json +15 -15
- package/src/AICC.ts +3 -0
- package/src/BaseAPI.ts +60 -95
- package/src/Scorm12API.ts +14 -14
- package/src/Scorm2004API.ts +107 -37
- package/src/cmi/aicc/attempts.ts +22 -12
- package/src/cmi/aicc/cmi.ts +2 -2
- package/src/cmi/aicc/core.ts +44 -26
- package/src/cmi/aicc/evaluation.ts +31 -12
- package/src/cmi/aicc/paths.ts +29 -15
- package/src/cmi/aicc/student_data.ts +14 -5
- package/src/cmi/aicc/student_demographics.ts +31 -24
- package/src/cmi/aicc/student_preferences.ts +11 -11
- package/src/cmi/aicc/tries.ts +24 -14
- package/src/cmi/aicc/validation.ts +3 -4
- package/src/cmi/common/array.ts +17 -5
- package/src/cmi/common/base_cmi.ts +3 -1
- package/src/cmi/common/score.ts +16 -13
- package/src/cmi/scorm12/cmi.ts +25 -10
- package/src/cmi/scorm12/interactions.ts +62 -28
- package/src/cmi/scorm12/nav.ts +13 -5
- package/src/cmi/scorm12/objectives.ts +28 -18
- package/src/cmi/scorm12/student_data.ts +15 -8
- package/src/cmi/scorm12/student_preference.ts +20 -13
- package/src/cmi/scorm12/validation.ts +7 -7
- package/src/cmi/scorm2004/adl.ts +141 -25
- package/src/cmi/scorm2004/cmi.ts +50 -55
- package/src/cmi/scorm2004/comments.ts +21 -20
- package/src/cmi/scorm2004/interactions.ts +73 -32
- package/src/cmi/scorm2004/learner_preference.ts +20 -13
- package/src/cmi/scorm2004/objectives.ts +41 -16
- package/src/cmi/scorm2004/score.ts +22 -11
- package/src/cmi/scorm2004/validation.ts +4 -4
- package/src/constants/api_constants.ts +8 -29
- package/src/constants/default_settings.ts +26 -12
- package/src/constants/enums.ts +9 -0
- package/src/constants/error_codes.ts +5 -12
- package/src/constants/regex.ts +5 -11
- package/src/constants/response_constants.ts +1 -2
- package/src/exceptions/aicc_exceptions.ts +29 -0
- package/src/exceptions/scorm12_exceptions.ts +29 -0
- package/src/exceptions/scorm2004_exceptions.ts +29 -0
- package/src/exceptions.ts +1 -86
- package/src/types/api_types.ts +29 -5
- package/test/AICC.spec.ts +114 -43
- package/test/Scorm12API.spec.ts +37 -39
- package/test/Scorm2004API.spec.ts +165 -80
- package/test/cmi/aicc_cmi.spec.ts +6 -9
- package/test/cmi/scorm12_cmi.spec.ts +8 -8
- package/test/cmi/scorm2004_cmi.spec.ts +8 -9
- package/test/exceptions.spec.ts +11 -9
- package/test/types/api_types.spec.ts +40 -47
- package/test/utilities.spec.ts +1 -4
- package/webpack.config.js +4 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scorm-again",
|
|
3
|
-
"version": "2.
|
|
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
|
+
"@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.
|
|
32
|
-
"@eslint/js": "^9.
|
|
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.
|
|
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.
|
|
41
|
+
"c8": "^10.1.3",
|
|
42
42
|
"c8-as-nyc": "^1.1.11",
|
|
43
|
-
"eslint": "^9.
|
|
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.
|
|
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.
|
|
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": "^
|
|
55
|
+
"mocha": "^11.0.1",
|
|
56
56
|
"mocha-junit-reporter": "^2.2.1",
|
|
57
57
|
"mochawesome": "^7.1.3",
|
|
58
|
-
"prettier": "^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.
|
|
63
|
-
"typescript": "^5.
|
|
64
|
-
"typescript-eslint": "^8.
|
|
65
|
-
"webpack": "^5.
|
|
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
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
|
|
4
|
-
import
|
|
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 =
|
|
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:
|
|
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.
|
|
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 =
|
|
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 =
|
|
106
|
+
this.currentState = global_constants.STATE_INITIALIZED;
|
|
97
107
|
this.lastErrorCode = "0";
|
|
98
|
-
returnValue =
|
|
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:
|
|
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 =
|
|
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 =
|
|
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
|
-
:
|
|
258
|
+
: global_constants.SCORM_FALSE;
|
|
253
259
|
|
|
254
260
|
if (checkTerminated) this.lastErrorCode = "0";
|
|
255
261
|
|
|
256
|
-
returnValue =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
:
|
|
411
|
+
: global_constants.SCORM_FALSE;
|
|
411
412
|
|
|
412
413
|
this.apiLog(
|
|
413
414
|
callbackName,
|
|
414
415
|
" Result: " + returnValue,
|
|
415
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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 ===
|
|
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
|
-
|
|
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(
|
|
748
|
+
this.throwSCORMError(this._error_codes.CHILDREN_ERROR);
|
|
764
749
|
} else if (attribute === "_count") {
|
|
765
|
-
this.throwSCORMError(
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 !==
|
|
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:
|
|
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:
|
|
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 =
|
|
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 (
|
|
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
|
|
5
|
-
import
|
|
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(
|
|
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
|
|
78
|
-
this.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
|
|
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 ===
|
|
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
|
|
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 (
|
|
284
|
+
if (scorm12_constants.error_descriptions[errorNumber]) {
|
|
285
285
|
basicMessage =
|
|
286
|
-
|
|
286
|
+
scorm12_constants.error_descriptions[errorNumber].basicMessage;
|
|
287
287
|
detailMessage =
|
|
288
|
-
|
|
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
|
-
|
|
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:
|
|
440
|
+
result: global_constants.SCORM_TRUE,
|
|
441
441
|
errorCode: 0,
|
|
442
442
|
};
|
|
443
443
|
}
|