scorm-again 3.0.4 → 3.1.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 (42) hide show
  1. package/README.md +96 -5
  2. package/dist/cross-frame-api.js.map +1 -1
  3. package/dist/esm/cross-frame-api.js.map +1 -1
  4. package/dist/esm/scorm-again.js +503 -138
  5. package/dist/esm/scorm-again.js.map +1 -1
  6. package/dist/esm/scorm-again.min.js +1 -1
  7. package/dist/esm/scorm-again.min.js.map +1 -1
  8. package/dist/esm/scorm12.js +339 -73
  9. package/dist/esm/scorm12.js.map +1 -1
  10. package/dist/esm/scorm12.min.js +1 -1
  11. package/dist/esm/scorm12.min.js.map +1 -1
  12. package/dist/esm/scorm2004.js +486 -131
  13. package/dist/esm/scorm2004.js.map +1 -1
  14. package/dist/esm/scorm2004.min.js +1 -1
  15. package/dist/esm/scorm2004.min.js.map +1 -1
  16. package/dist/scorm-again.js +443 -119
  17. package/dist/scorm-again.js.map +1 -1
  18. package/dist/scorm-again.min.js +1 -1
  19. package/dist/scorm-again.min.js.map +1 -1
  20. package/dist/scorm12.js +316 -57
  21. package/dist/scorm12.js.map +1 -1
  22. package/dist/scorm12.min.js +1 -1
  23. package/dist/scorm12.min.js.map +1 -1
  24. package/dist/scorm2004.js +431 -112
  25. package/dist/scorm2004.js.map +1 -1
  26. package/dist/scorm2004.min.js +1 -1
  27. package/dist/scorm2004.min.js.map +1 -1
  28. package/dist/types/BaseAPI.d.ts +15 -5
  29. package/dist/types/Scorm12API.d.ts +2 -2
  30. package/dist/types/Scorm2004API.d.ts +3 -2
  31. package/dist/types/cmi/common/score.d.ts +2 -0
  32. package/dist/types/cmi/scorm2004/interaction_delimiters.d.ts +4 -0
  33. package/dist/types/interfaces/services.d.ts +8 -4
  34. package/dist/types/services/AsynchronousHttpService.d.ts +3 -2
  35. package/dist/types/services/EventService.d.ts +2 -2
  36. package/dist/types/services/OfflineStorageService.d.ts +6 -1
  37. package/dist/types/services/SynchronousHttpService.d.ts +2 -2
  38. package/dist/types/services/ValidationService.d.ts +1 -1
  39. package/dist/types/types/api_types.d.ts +22 -2
  40. package/dist/types/utilities/index.d.ts +1 -0
  41. package/dist/types/utilities/url.d.ts +2 -0
  42. package/package.json +46 -25
@@ -1,7 +1,7 @@
1
1
  import { StringKeyMap } from "./utilities";
2
2
  import { BaseCMI } from "./cmi/common/base_cmi";
3
3
  import { ErrorCode } from "./constants";
4
- import { CommitObject, InternalSettings, LogLevel, ResultObject, Settings } from "./types";
4
+ import { CommitEventContext, CommitObject, CommitTrigger, InternalSettings, LogLevel, ResultObject, Settings } from "./types";
5
5
  import { IBaseAPI, ICMIDataService, IErrorHandlingService, IEventService, IHttpService, ILoggingService, IOfflineStorageService, ISerializationService, ScormEventCallback } from "./interfaces";
6
6
  export default abstract class BaseAPI implements IBaseAPI {
7
7
  private _timeout?;
@@ -15,6 +15,10 @@ export default abstract class BaseAPI implements IBaseAPI {
15
15
  private readonly _offlineStorageService?;
16
16
  private readonly _cmiValueAccessService;
17
17
  private _courseId;
18
+ private _pendingCommitCount;
19
+ private _commitSequence;
20
+ private readonly _commitSettleWaiters;
21
+ protected readonly _setCMIElements: Set<string>;
18
22
  protected constructor(error_codes: ErrorCode, settings?: Settings, httpService?: IHttpService, eventService?: IEventService, serializationService?: ISerializationService, cmiDataService?: ICMIDataService, errorHandlingService?: IErrorHandlingService, loggingService?: ILoggingService, offlineStorageService?: IOfflineStorageService);
19
23
  abstract cmi: BaseCMI;
20
24
  startingData?: StringKeyMap;
@@ -36,16 +40,21 @@ export default abstract class BaseAPI implements IBaseAPI {
36
40
  abstract lmsGetDiagnostic(CMIErrorCode: string | number): string;
37
41
  abstract validateCorrectResponse(_CMIElement: string, _value: any): void;
38
42
  abstract getChildElement(_CMIElement: string, _value: any, _foundFirstIndex: boolean): BaseCMI | null;
39
- abstract storeData(_calculateTotalTime: boolean): ResultObject;
43
+ abstract storeData(_calculateTotalTime: boolean, _trigger?: CommitTrigger): ResultObject;
40
44
  abstract renderCommitCMI(_terminateCommit: boolean, _includeTotalTime?: boolean): StringKeyMap | Array<string>;
41
45
  abstract renderCommitObject(_terminateCommit: boolean, _includeTotalTime?: boolean): CommitObject;
42
46
  apiLog(functionName: string, logMessage: string, messageLevel: LogLevel, CMIElement?: string): void;
43
47
  get settings(): InternalSettings;
44
48
  set settings(settings: Settings);
49
+ get pendingCommitCount(): number;
50
+ whenCommitsSettled(options?: {
51
+ timeoutMs?: number;
52
+ }): Promise<void>;
53
+ private _flushCommitSettleWaiters;
45
54
  terminate(callbackName: string, checkTerminated: boolean): string;
46
55
  getValue(callbackName: string, checkTerminated: boolean, CMIElement: string): string;
47
56
  setValue(callbackName: string, commitCallback: string, checkTerminated: boolean, CMIElement: string, value: any): string;
48
- commit(callbackName: string, checkTerminated?: boolean): string;
57
+ commit(callbackName: string, checkTerminated?: boolean, trigger?: CommitTrigger): string;
49
58
  getLastError(callbackName: string): string;
50
59
  getErrorString(callbackName: string, CMIErrorCode: string | number): string;
51
60
  getDiagnostic(callbackName: string, CMIErrorCode: string | number): string;
@@ -56,13 +65,14 @@ export default abstract class BaseAPI implements IBaseAPI {
56
65
  setCMIValue(_CMIElement: string, _value: any): string;
57
66
  _commonSetCMIValue(methodName: string, scorm2004: boolean, CMIElement: string, value: any): string;
58
67
  _commonGetCMIValue(methodName: string, scorm2004: boolean, CMIElement: string): any;
68
+ protected checkUninitializedGet(_CMIElement: string, _returnValue: any): void;
59
69
  isInitialized(): boolean;
60
70
  isNotInitialized(): boolean;
61
71
  isTerminated(): boolean;
62
72
  on(listenerName: string, callback: ScormEventCallback): void;
63
73
  off(listenerName: string, callback: ScormEventCallback): void;
64
74
  clear(listenerName: string): void;
65
- processListeners(functionName: string, CMIElement?: string, value?: any): void;
75
+ processListeners(functionName: string, CMIElement?: string, value?: any, context?: CommitEventContext): void;
66
76
  throwSCORMError(CMIElement: string | undefined, errorNumber: number | undefined, message?: string): void;
67
77
  clearSCORMError(success: string): void;
68
78
  loadFromFlattenedJSON(json: StringKeyMap, CMIElement?: string): void;
@@ -70,7 +80,7 @@ export default abstract class BaseAPI implements IBaseAPI {
70
80
  loadFromJSON(json: StringKeyMap, CMIElement?: string): void;
71
81
  renderCMIToJSONString(): string;
72
82
  renderCMIToJSONObject(): StringKeyMap;
73
- processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate?: boolean): ResultObject;
83
+ processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate?: boolean, trigger?: CommitTrigger): ResultObject;
74
84
  scheduleCommit(when: number, callback: string): void;
75
85
  clearScheduledCommit(): void;
76
86
  private _checkObjectHasProperty;
@@ -3,7 +3,7 @@ import { StringKeyMap } from "./utilities";
3
3
  import { BaseCMI } from "./cmi/common/base_cmi";
4
4
  import { CMI } from "./cmi/scorm12/cmi";
5
5
  import { NAV } from "./cmi/scorm12/nav";
6
- import { CommitObject, ResultObject, Settings } from "./types";
6
+ import { CommitObject, CommitTrigger, ResultObject, Settings } from "./types";
7
7
  import { IHttpService } from "./interfaces";
8
8
  declare class Scorm12API extends BaseAPI {
9
9
  private static _globalLearnerPrefs;
@@ -38,7 +38,7 @@ declare class Scorm12API extends BaseAPI {
38
38
  replaceWithAnotherScormAPI(newAPI: Scorm12API): void;
39
39
  renderCommitCMI(terminateCommit: boolean, includeTotalTime?: boolean): StringKeyMap | Array<string>;
40
40
  renderCommitObject(terminateCommit: boolean, includeTotalTime?: boolean): CommitObject;
41
- storeData(terminateCommit: boolean): ResultObject;
41
+ storeData(terminateCommit: boolean, trigger?: CommitTrigger): ResultObject;
42
42
  private processCommitData;
43
43
  }
44
44
  export default Scorm12API;
@@ -4,7 +4,7 @@ import { BaseCMI } from "./cmi/common/base_cmi";
4
4
  import { CMI } from "./cmi/scorm2004/cmi";
5
5
  import { CMIObjectivesObject } from "./cmi/scorm2004/objectives";
6
6
  import { ADL } from "./cmi/scorm2004/adl";
7
- import { CommitObject, ResultObject, SequencingStateMetadata, Settings } from "./types";
7
+ import { CommitObject, CommitTrigger, ResultObject, SequencingStateMetadata, Settings } from "./types";
8
8
  import { IHttpService } from "./interfaces";
9
9
  import { SequencingConfiguration, SequencingEventListeners, SequencingService } from "./services";
10
10
  declare class Scorm2004API extends BaseAPI {
@@ -51,11 +51,12 @@ declare class Scorm2004API extends BaseAPI {
51
51
  validateCorrectResponse(CMIElement: string, value: any): void;
52
52
  private _peekCMIValue;
53
53
  getCMIValue(CMIElement: string): any;
54
+ protected checkUninitializedGet(CMIElement: string, returnValue: any): void;
54
55
  getLmsErrorMessageDetails(errorNumber: string | number, detail: boolean): string;
55
56
  replaceWithAnotherScormAPI(newAPI: Scorm2004API): void;
56
57
  renderCommitCMI(terminateCommit: boolean, includeTotalTime?: boolean): StringKeyMap | Array<any>;
57
58
  renderCommitObject(terminateCommit: boolean, includeTotalTime?: boolean): CommitObject;
58
- storeData(terminateCommit: boolean): ResultObject;
59
+ storeData(terminateCommit: boolean, trigger?: CommitTrigger): ResultObject;
59
60
  private configureSequencing;
60
61
  private configureActivityTree;
61
62
  private configureSequencingRules;
@@ -9,6 +9,7 @@ export declare class CMIScore extends BaseCMI {
9
9
  private readonly __invalid_range_code;
10
10
  private readonly __decimal_regex;
11
11
  private readonly __error_class;
12
+ private readonly __allow_empty_string;
12
13
  protected _raw: string;
13
14
  protected _min: string;
14
15
  protected _max: string;
@@ -22,6 +23,7 @@ export declare class CMIScore extends BaseCMI {
22
23
  invalidRangeCode?: number;
23
24
  decimalRegex?: string;
24
25
  errorClass: typeof BaseScormValidationError;
26
+ allowEmptyString?: boolean;
25
27
  });
26
28
  reset(): void;
27
29
  get _children(): string;
@@ -0,0 +1,4 @@
1
+ export declare function stripBrackets(delim: string): string;
2
+ export declare function splitDelimited(value: string, bracketed: string): string[];
3
+ export declare function splitFirstDelimited(value: string, bracketed: string): string[];
4
+ //# sourceMappingURL=interaction_delimiters.d.ts.map
@@ -1,11 +1,12 @@
1
- import { CommitObject, LogLevel, ResultObject, Settings } from "../types/api_types";
1
+ import { CommitEventContext, CommitMetadata, CommitObject, LogLevel, ResultObject, Settings } from "../types/api_types";
2
2
  import { ErrorCode } from "../constants/error_codes";
3
3
  import { LogLevelEnum } from "../constants/enums";
4
4
  import { BaseCMI } from "../cmi/common/base_cmi";
5
5
  import { ValidationError } from "../exceptions";
6
6
  import { StringKeyMap } from "../utilities";
7
7
  export interface IHttpService {
8
- processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean, apiLog: (functionName: string, message: any, messageLevel: LogLevelEnum, CMIElement?: string) => void, processListeners: (functionName: string, CMIElement?: string, value?: any) => void): ResultObject;
8
+ readonly reportsRequestCompletion?: boolean;
9
+ processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean, apiLog: (functionName: string, message: any, messageLevel: LogLevelEnum, CMIElement?: string) => void, processListeners: (functionName: string, CMIElement?: string, value?: any) => void, metadata?: CommitMetadata, onRequestComplete?: () => void): ResultObject;
9
10
  updateSettings(settings: Settings): void;
10
11
  }
11
12
  export type ScormEventCallback = (...args: any[]) => void;
@@ -13,7 +14,7 @@ export interface IEventService {
13
14
  on(listenerName: string, callback: ScormEventCallback): void;
14
15
  off(listenerName: string, callback: ScormEventCallback): void;
15
16
  clear(listenerName: string): void;
16
- processListeners(functionName: string, CMIElement?: string, value?: any): void;
17
+ processListeners(functionName: string, CMIElement?: string, value?: any, context?: CommitEventContext): void;
17
18
  reset(): void;
18
19
  }
19
20
  export interface ISerializationService {
@@ -49,7 +50,10 @@ export interface ILoggingService {
49
50
  debug(logMessage: string): void;
50
51
  }
51
52
  export interface IOfflineStorageService {
52
- storeOffline(courseId: string, commitData: CommitObject): ResultObject;
53
+ storeOffline(courseId: string, commitData: CommitObject, metadata?: {
54
+ isTerminateCommit?: boolean;
55
+ sequence?: number;
56
+ }): ResultObject;
53
57
  getOfflineData(courseId: string): Promise<CommitObject | null>;
54
58
  syncOfflineData(): Promise<boolean>;
55
59
  hasPendingOfflineData(courseId: string): Promise<boolean>;
@@ -1,13 +1,14 @@
1
- import { CommitObject, InternalSettings, ResultObject } from "../types/api_types";
1
+ import { CommitMetadata, CommitObject, InternalSettings, ResultObject } from "../types/api_types";
2
2
  import { LogLevelEnum } from "../constants/enums";
3
3
  import { IHttpService } from "../interfaces/services";
4
4
  import { ErrorCode } from "../constants/error_codes";
5
5
  import { StringKeyMap } from "../utilities";
6
6
  export declare class AsynchronousHttpService implements IHttpService {
7
+ readonly reportsRequestCompletion = true;
7
8
  private settings;
8
9
  private error_codes;
9
10
  constructor(settings: InternalSettings, error_codes: ErrorCode);
10
- processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean | undefined, apiLog: (functionName: string, message: any, messageLevel: LogLevelEnum, CMIElement?: string) => void, processListeners: (functionName: string, CMIElement?: string, value?: any) => void): ResultObject;
11
+ processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean | undefined, apiLog: (functionName: string, message: any, messageLevel: LogLevelEnum, CMIElement?: string) => void, processListeners: (functionName: string, CMIElement?: string, value?: any) => void, metadata?: CommitMetadata, onRequestComplete?: () => void): ResultObject;
11
12
  private _performAsyncRequest;
12
13
  private _prepareRequestBody;
13
14
  private performFetch;
@@ -1,4 +1,4 @@
1
- import { LogLevel } from "../types/api_types";
1
+ import { CommitEventContext, LogLevel } from "../types/api_types";
2
2
  import { IEventService, ScormEventCallback } from "../interfaces/services";
3
3
  export declare class EventService implements IEventService {
4
4
  private listenerMap;
@@ -9,7 +9,7 @@ export declare class EventService implements IEventService {
9
9
  on(listenerName: string, callback: ScormEventCallback): void;
10
10
  off(listenerName: string, callback: ScormEventCallback): void;
11
11
  clear(listenerName: string): void;
12
- processListeners(functionName: string, CMIElement?: string, value?: any): void;
12
+ processListeners(functionName: string, CMIElement?: string, value?: any, context?: CommitEventContext): void;
13
13
  reset(): void;
14
14
  }
15
15
  //# sourceMappingURL=EventService.d.ts.map
@@ -1,6 +1,10 @@
1
1
  import { CommitObject, InternalSettings, ResultObject } from "../types/api_types";
2
2
  import { LogLevelEnum } from "../constants/enums";
3
3
  import { ErrorCode } from "../constants/error_codes";
4
+ type OfflineCommitMetadata = {
5
+ isTerminateCommit?: boolean;
6
+ sequence?: number;
7
+ };
4
8
  export declare class OfflineStorageService {
5
9
  private apiLog;
6
10
  private settings;
@@ -14,7 +18,7 @@ export declare class OfflineStorageService {
14
18
  constructor(settings: InternalSettings, error_codes: ErrorCode, apiLog: (functionName: string, message: any, messageLevel: LogLevelEnum, CMIElement?: string) => void);
15
19
  private handleOnlineStatusChange;
16
20
  private handleCustomNetworkStatus;
17
- storeOffline(courseId: string, commitData: CommitObject): ResultObject;
21
+ storeOffline(courseId: string, commitData: CommitObject, metadata?: OfflineCommitMetadata): ResultObject;
18
22
  getOfflineData(courseId: string): Promise<CommitObject | null>;
19
23
  syncOfflineData(): Promise<boolean>;
20
24
  private sendDataToLMS;
@@ -25,4 +29,5 @@ export declare class OfflineStorageService {
25
29
  updateSettings(settings: InternalSettings): void;
26
30
  destroy(): void;
27
31
  }
32
+ export {};
28
33
  //# sourceMappingURL=OfflineStorageService.d.ts.map
@@ -1,4 +1,4 @@
1
- import { CommitObject, InternalSettings, ResultObject } from "../types/api_types";
1
+ import { CommitMetadata, CommitObject, InternalSettings, ResultObject } from "../types/api_types";
2
2
  import { IHttpService } from "../interfaces/services";
3
3
  import { ErrorCode } from "../constants/error_codes";
4
4
  import { StringKeyMap } from "../utilities";
@@ -6,7 +6,7 @@ export declare class SynchronousHttpService implements IHttpService {
6
6
  private settings;
7
7
  private error_codes;
8
8
  constructor(settings: InternalSettings, error_codes: ErrorCode);
9
- processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean | undefined, _apiLog: (functionName: string, message: any, messageLevel: number, CMIElement?: string) => void, _processListeners: (functionName: string, CMIElement?: string, value?: any) => void): ResultObject;
9
+ processHttpRequest(url: string, params: CommitObject | StringKeyMap | Array<any>, immediate: boolean | undefined, _apiLog: (functionName: string, message: any, messageLevel: number, CMIElement?: string) => void, _processListeners: (functionName: string, CMIElement?: string, value?: any) => void, metadata?: CommitMetadata, _onRequestComplete?: () => void): ResultObject;
10
10
  private _handleImmediateRequest;
11
11
  private _performSyncXHR;
12
12
  private _prepareRequestBody;
@@ -1,6 +1,6 @@
1
1
  import { BaseScormValidationError } from "../exceptions";
2
2
  export declare class ValidationService {
3
- validateScore(CMIElement: string, value: string, decimalRegex: string, scoreRange: string | false, invalidTypeCode: number, invalidRangeCode: number, errorClass: typeof BaseScormValidationError): boolean;
3
+ validateScore(CMIElement: string, value: string, decimalRegex: string, scoreRange: string | false, invalidTypeCode: number, invalidRangeCode: number, errorClass: typeof BaseScormValidationError, allowEmptyString?: boolean): boolean;
4
4
  validateScorm12Audio(CMIElement: string, value: string): boolean;
5
5
  validateScorm12Language(CMIElement: string, value: string): boolean;
6
6
  validateScorm12Speed(CMIElement: string, value: string): boolean;
@@ -2,6 +2,19 @@ import { CompletionStatus, LogLevelEnum, SuccessStatus } from "../constants/enum
2
2
  import { StringKeyMap } from "../utilities";
3
3
  import { SequencingSettings } from "./sequencing_types";
4
4
  import type { IHttpService } from "../interfaces/services";
5
+ export type CommitTrigger = "autocommit" | "manual" | "terminate" | "offline-replay";
6
+ export type CommitMetadata = {
7
+ isTerminateCommit: boolean;
8
+ trigger: CommitTrigger;
9
+ sequence?: number;
10
+ };
11
+ export type CommitEventContext = {
12
+ url: string;
13
+ trigger: CommitTrigger;
14
+ isTerminateCommit: boolean;
15
+ sequence?: number;
16
+ errorCode?: number;
17
+ };
5
18
  export type Settings = {
6
19
  autocommit?: boolean | undefined;
7
20
  autocommitSeconds?: number | undefined;
@@ -22,7 +35,10 @@ export type Settings = {
22
35
  fetchMode?: "cors" | "no-cors" | "same-origin" | "navigate" | undefined;
23
36
  responseHandler?: ((response: Response) => Promise<ResultObject>) | undefined;
24
37
  xhrResponseHandler?: ((xhr: XMLHttpRequest) => ResultObject) | undefined;
25
- requestHandler?: ((commitObject: unknown) => unknown) | undefined;
38
+ requestHandler?: ((commitObject: unknown, metadata?: CommitMetadata) => unknown) | undefined;
39
+ terminateCommitParam?: string | undefined;
40
+ terminateCommitPayloadField?: string | undefined;
41
+ includeCommitSequence?: boolean | undefined;
26
42
  onLogMessage?: ((messageLevel: LogLevel, logMessage: string) => void) | undefined;
27
43
  mastery_override?: boolean | undefined;
28
44
  score_overrides_status?: boolean | undefined;
@@ -66,7 +82,10 @@ export type InternalSettings = {
66
82
  fetchMode: "cors" | "no-cors" | "same-origin" | "navigate";
67
83
  responseHandler: (response: Response) => Promise<ResultObject>;
68
84
  xhrResponseHandler: (xhr: XMLHttpRequest) => ResultObject;
69
- requestHandler: (commitObject: unknown) => unknown;
85
+ requestHandler: (commitObject: unknown, metadata?: CommitMetadata) => unknown;
86
+ terminateCommitParam?: string | undefined;
87
+ terminateCommitPayloadField?: string | undefined;
88
+ includeCommitSequence?: boolean | undefined;
70
89
  onLogMessage?: ((messageLevel: LogLevel, logMessage: string) => void) | undefined;
71
90
  mastery_override?: boolean | undefined;
72
91
  score_overrides_status?: boolean | undefined;
@@ -121,6 +140,7 @@ export type CommitObject = {
121
140
  sessionId?: string;
122
141
  activityId?: string;
123
142
  attempt?: number;
143
+ commitSequence?: number;
124
144
  };
125
145
  export type CommitObjectWithScore = CommitObject & {
126
146
  score: ScoreObject;
@@ -1,4 +1,5 @@
1
1
  export * from "./core";
2
+ export { appendQueryParam } from "./url";
2
3
  export { PlayerEventAdapter } from "./PlayerEventAdapter";
3
4
  export type { NavigationState, ScoStatus, CourseProgress, ScoDelivery, SessionEndReason, SessionEndData, PlayerEventAdapterCallbacks, PlayerEventAdapterConfig, } from "./PlayerEventAdapter";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export declare const appendQueryParam: (url: string, name: string, value: string | number | boolean) => string;
2
+ //# sourceMappingURL=url.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scorm-again",
3
- "version": "3.0.4",
3
+ "version": "3.1.0",
4
4
  "description": "A modern SCORM JavaScript run-time library for SCORM 1.2 and SCORM 2004",
5
5
  "main": "dist/scorm-again.js",
6
6
  "types": "index.d.ts",
@@ -90,46 +90,47 @@
90
90
  "test": "test"
91
91
  },
92
92
  "devDependencies": {
93
- "@babel/core": "7.29.0",
94
- "@babel/preset-env": "7.29.2",
93
+ "@babel/core": "<8",
94
+ "@babel/preset-env": "<8",
95
+ "@cyclonedx/cyclonedx-npm": "^5.0.0",
95
96
  "@eslint/js": "10.0.1",
96
97
  "@mo36924/rollup-plugin-cache": "1.6.11",
97
- "@playwright/test": "1.59.1",
98
- "@rollup/plugin-babel": "7.0.0",
98
+ "@playwright/test": "1.61.1",
99
+ "@rollup/plugin-babel": "7.1.0",
99
100
  "@rollup/plugin-terser": "1.0.0",
100
101
  "@rollup/plugin-typescript": "12.3.0",
101
102
  "@types/cors": "^2.8.19",
102
103
  "@types/express": "^5.0.6",
103
- "@vitest/coverage-v8": "4.1.5",
104
- "@vitest/ui": "4.1.5",
104
+ "@vitest/coverage-v8": "4.1.9",
105
+ "@vitest/ui": "4.1.9",
105
106
  "cors": "^2.8.6",
106
- "esbuild": "0.28.0",
107
- "eslint": "10.2.1",
108
- "eslint-plugin-jsdoc": "62.9.0",
107
+ "esbuild": "0.28.1",
108
+ "eslint": "10.6.0",
109
+ "eslint-plugin-jsdoc": "63.0.10",
109
110
  "express": "^5.2.1",
110
111
  "extract-zip": "2.0.1",
111
- "fast-check": "4.7.0",
112
+ "fast-check": "4.8.0",
112
113
  "glob": "13.0.6",
113
- "globals": "17.5.0",
114
- "jsdom": "29.0.2",
115
- "monocart-coverage-reports": "^2.12.11",
116
- "monocart-reporter": "^2.10.1",
117
- "playwright": "1.59.1",
118
- "prettier": "3.8.3",
119
- "rollup": "4.60.2",
114
+ "globals": "17.7.0",
115
+ "jsdom": "29.1.1",
116
+ "monocart-coverage-reports": "^2.12.12",
117
+ "monocart-reporter": "^2.12.1",
118
+ "playwright": "1.61.1",
119
+ "prettier": "3.9.4",
120
+ "rollup": "4.62.2",
120
121
  "rollup-plugin-dts": "6.4.1",
121
122
  "rollup-plugin-esbuild": "6.2.1",
122
123
  "standard-version": "9.5.0",
123
- "terser": "5.46.2",
124
+ "terser": "5.48.0",
124
125
  "tslib": "2.8.1",
125
- "tsx": "4.21.0",
126
+ "tsx": "4.22.5",
126
127
  "typescript": "6.0.3",
127
- "typescript-eslint": "8.59.0",
128
- "vite": "8.0.10",
129
- "vitest": "4.1.5"
128
+ "typescript-eslint": "8.62.1",
129
+ "vite": "8.1.3",
130
+ "vitest": "4.1.9"
130
131
  },
131
132
  "engines": {
132
- "node": ">=20.0.0"
133
+ "node": ">=20.19.0"
133
134
  },
134
135
  "sideEffects": false,
135
136
  "scripts": {
@@ -178,7 +179,21 @@
178
179
  },
179
180
  "keywords": [
180
181
  "scorm",
181
- "cmi"
182
+ "scorm-1-2",
183
+ "scorm-2004",
184
+ "cmi",
185
+ "elearning",
186
+ "e-learning",
187
+ "lms",
188
+ "learning-management-system",
189
+ "edtech",
190
+ "educational-technology",
191
+ "learning-standards",
192
+ "typescript",
193
+ "javascript",
194
+ "browser",
195
+ "cross-frame",
196
+ "offline-first"
182
197
  ],
183
198
  "author": "Jonathan Putney <jonathan@putney.io>",
184
199
  "license": "MIT",
@@ -191,6 +206,12 @@
191
206
  "@actions/github": "^9.0.0",
192
207
  "@actions/http-client": "^4.0.0"
193
208
  },
209
+ "@cyclonedx/cyclonedx-library": {
210
+ "libxmljs2": "npm:noop2@2.0.0"
211
+ },
212
+ "@cyclonedx/cyclonedx-npm": {
213
+ "libxmljs2": "npm:noop2@2.0.0"
214
+ },
194
215
  "ajv": "6.14.0",
195
216
  "nodemailer": ">=8.0.4",
196
217
  "typescript-eslint": {