diff --git a/dist/aicc.js b/dist/aicc.js index 5421130..d57d6b3 100644 --- a/dist/aicc.js +++ b/dist/aicc.js @@ -428,13 +428,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } +function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } @@ -444,7 +444,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -1993,7 +1993,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } @@ -2003,7 +2003,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -2362,14 +2362,14 @@ var Scorm12API = /*#__PURE__*/function (_BaseAPI) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "CMI": function() { return /* binding */ CMI; }, -/* harmony export */ "CMIStudentDemographics": function() { return /* binding */ CMIStudentDemographics; }, -/* harmony export */ "CMIPaths": function() { return /* binding */ CMIPaths; }, -/* harmony export */ "CMIPathsObject": function() { return /* binding */ CMIPathsObject; }, -/* harmony export */ "CMITries": function() { return /* binding */ CMITries; }, -/* harmony export */ "CMITriesObject": function() { return /* binding */ CMITriesObject; }, /* harmony export */ "CMIAttemptRecords": function() { return /* binding */ CMIAttemptRecords; }, /* harmony export */ "CMIAttemptRecordsObject": function() { return /* binding */ CMIAttemptRecordsObject; }, -/* harmony export */ "CMIEvaluationCommentsObject": function() { return /* binding */ CMIEvaluationCommentsObject; } +/* harmony export */ "CMIEvaluationCommentsObject": function() { return /* binding */ CMIEvaluationCommentsObject; }, +/* harmony export */ "CMIPaths": function() { return /* binding */ CMIPaths; }, +/* harmony export */ "CMIPathsObject": function() { return /* binding */ CMIPathsObject; }, +/* harmony export */ "CMIStudentDemographics": function() { return /* binding */ CMIStudentDemographics; }, +/* harmony export */ "CMITries": function() { return /* binding */ CMITries; }, +/* harmony export */ "CMITriesObject": function() { return /* binding */ CMITriesObject; } /* harmony export */ }); /* harmony import */ var _scorm12_cmi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scorm12_cmi */ "./src/cmi/scorm12_cmi.js"); /* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common */ "./src/cmi/common.js"); @@ -2399,13 +2399,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } +function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } @@ -2415,7 +2415,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -3988,11 +3988,11 @@ var CMIEvaluationCommentsObject = /*#__PURE__*/function (_BaseCMI6) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "checkValidFormat": function() { return /* binding */ checkValidFormat; }, -/* harmony export */ "checkValidRange": function() { return /* binding */ checkValidRange; }, /* harmony export */ "BaseCMI": function() { return /* binding */ BaseCMI; }, +/* harmony export */ "CMIArray": function() { return /* binding */ CMIArray; }, /* harmony export */ "CMIScore": function() { return /* binding */ CMIScore; }, -/* harmony export */ "CMIArray": function() { return /* binding */ CMIArray; } +/* harmony export */ "checkValidFormat": function() { return /* binding */ checkValidFormat; }, +/* harmony export */ "checkValidRange": function() { return /* binding */ checkValidRange; } /* harmony export */ }); /* harmony import */ var _constants_api_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/api_constants */ "./src/constants/api_constants.js"); /* harmony import */ var _constants_error_codes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/error_codes */ "./src/constants/error_codes.js"); @@ -4001,7 +4001,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" = function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } @@ -4011,7 +4011,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -4518,18 +4518,18 @@ var CMIArray = /*#__PURE__*/function (_BaseCMI2) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "throwReadOnlyError": function() { return /* binding */ throwReadOnlyError; }, -/* harmony export */ "throwWriteOnlyError": function() { return /* binding */ throwWriteOnlyError; }, -/* harmony export */ "check12ValidFormat": function() { return /* binding */ check12ValidFormat; }, -/* harmony export */ "check12ValidRange": function() { return /* binding */ check12ValidRange; }, /* harmony export */ "CMI": function() { return /* binding */ CMI; }, +/* harmony export */ "CMIInteractionsCorrectResponsesObject": function() { return /* binding */ CMIInteractionsCorrectResponsesObject; }, +/* harmony export */ "CMIInteractionsObject": function() { return /* binding */ CMIInteractionsObject; }, +/* harmony export */ "CMIInteractionsObjectivesObject": function() { return /* binding */ CMIInteractionsObjectivesObject; }, +/* harmony export */ "CMIObjectivesObject": function() { return /* binding */ CMIObjectivesObject; }, /* harmony export */ "CMIStudentData": function() { return /* binding */ CMIStudentData; }, /* harmony export */ "CMIStudentPreference": function() { return /* binding */ CMIStudentPreference; }, -/* harmony export */ "CMIInteractionsObject": function() { return /* binding */ CMIInteractionsObject; }, -/* harmony export */ "CMIObjectivesObject": function() { return /* binding */ CMIObjectivesObject; }, -/* harmony export */ "CMIInteractionsObjectivesObject": function() { return /* binding */ CMIInteractionsObjectivesObject; }, -/* harmony export */ "CMIInteractionsCorrectResponsesObject": function() { return /* binding */ CMIInteractionsCorrectResponsesObject; }, -/* harmony export */ "NAV": function() { return /* binding */ NAV; } +/* harmony export */ "NAV": function() { return /* binding */ NAV; }, +/* harmony export */ "check12ValidFormat": function() { return /* binding */ check12ValidFormat; }, +/* harmony export */ "check12ValidRange": function() { return /* binding */ check12ValidRange; }, +/* harmony export */ "throwReadOnlyError": function() { return /* binding */ throwReadOnlyError; }, +/* harmony export */ "throwWriteOnlyError": function() { return /* binding */ throwWriteOnlyError; } /* harmony export */ }); /* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common */ "./src/cmi/common.js"); /* harmony import */ var _constants_api_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants/api_constants */ "./src/constants/api_constants.js"); @@ -4545,13 +4545,13 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } +function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } @@ -4561,7 +4561,7 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -6757,10 +6757,10 @@ var Regex = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ValidationError": function() { return /* binding */ ValidationError; }, -/* harmony export */ "Scorm12ValidationError": function() { return /* binding */ Scorm12ValidationError; }, /* harmony export */ "AICCValidationError": function() { return /* binding */ AICCValidationError; }, -/* harmony export */ "Scorm2004ValidationError": function() { return /* binding */ Scorm2004ValidationError; } +/* harmony export */ "Scorm12ValidationError": function() { return /* binding */ Scorm12ValidationError; }, +/* harmony export */ "Scorm2004ValidationError": function() { return /* binding */ Scorm2004ValidationError; }, +/* harmony export */ "ValidationError": function() { return /* binding */ ValidationError; } /* harmony export */ }); /* harmony import */ var _constants_api_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants/api_constants */ "./src/constants/api_constants.js"); function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } @@ -6781,15 +6781,15 @@ function _assertThisInitialized(self) { if (self === void 0) { throw new Referen function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); } -function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } +function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } +function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } +function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); } @@ -6994,19 +6994,19 @@ var Scorm2004ValidationError = /*#__PURE__*/function (_ValidationError3) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SECONDS_PER_SECOND": function() { return /* binding */ SECONDS_PER_SECOND; }, -/* harmony export */ "SECONDS_PER_MINUTE": function() { return /* binding */ SECONDS_PER_MINUTE; }, -/* harmony export */ "SECONDS_PER_HOUR": function() { return /* binding */ SECONDS_PER_HOUR; }, /* harmony export */ "SECONDS_PER_DAY": function() { return /* binding */ SECONDS_PER_DAY; }, +/* harmony export */ "SECONDS_PER_HOUR": function() { return /* binding */ SECONDS_PER_HOUR; }, +/* harmony export */ "SECONDS_PER_MINUTE": function() { return /* binding */ SECONDS_PER_MINUTE; }, +/* harmony export */ "SECONDS_PER_SECOND": function() { return /* binding */ SECONDS_PER_SECOND; }, +/* harmony export */ "addHHMMSSTimeStrings": function() { return /* binding */ addHHMMSSTimeStrings; }, +/* harmony export */ "addTwoDurations": function() { return /* binding */ addTwoDurations; }, +/* harmony export */ "countDecimals": function() { return /* binding */ countDecimals; }, +/* harmony export */ "flatten": function() { return /* binding */ flatten; }, +/* harmony export */ "getDurationAsSeconds": function() { return /* binding */ getDurationAsSeconds; }, /* harmony export */ "getSecondsAsHHMMSS": function() { return /* binding */ getSecondsAsHHMMSS; }, /* harmony export */ "getSecondsAsISODuration": function() { return /* binding */ getSecondsAsISODuration; }, /* harmony export */ "getTimeAsSeconds": function() { return /* binding */ getTimeAsSeconds; }, -/* harmony export */ "getDurationAsSeconds": function() { return /* binding */ getDurationAsSeconds; }, -/* harmony export */ "addTwoDurations": function() { return /* binding */ addTwoDurations; }, -/* harmony export */ "addHHMMSSTimeStrings": function() { return /* binding */ addHHMMSSTimeStrings; }, -/* harmony export */ "flatten": function() { return /* binding */ flatten; }, -/* harmony export */ "unflatten": function() { return /* binding */ unflatten; }, -/* harmony export */ "countDecimals": function() { return /* binding */ countDecimals; } +/* harmony export */ "unflatten": function() { return /* binding */ unflatten; } /* harmony export */ }); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } diff --git a/dist/aicc.js.map b/dist/aicc.js.map index 960ff23..9ff9bb5 100644 --- a/dist/aicc.js.map +++ b/dist/aicc.js.map @@ -1 +1 @@ -{"version":3,"file":"aicc.js","mappings":"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","sources":["webpack://scorm-again/./node_modules/lodash.debounce/index.js","webpack://scorm-again/./src/AICC.js","webpack://scorm-again/./src/BaseAPI.js","webpack://scorm-again/./src/Scorm12API.js","webpack://scorm-again/./src/cmi/aicc_cmi.js","webpack://scorm-again/./src/cmi/common.js","webpack://scorm-again/./src/cmi/scorm12_cmi.js","webpack://scorm-again/./src/constants/api_constants.js","webpack://scorm-again/./src/constants/error_codes.js","webpack://scorm-again/./src/constants/regex.js","webpack://scorm-again/./src/exceptions.js","webpack://scorm-again/./src/utilities.js","webpack://scorm-again/webpack/bootstrap","webpack://scorm-again/webpack/runtime/compat get default export","webpack://scorm-again/webpack/runtime/define property getters","webpack://scorm-again/webpack/runtime/global","webpack://scorm-again/webpack/runtime/hasOwnProperty shorthand","webpack://scorm-again/webpack/runtime/make namespace object","webpack://scorm-again/./src/exports/aicc.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport Scorm12API from './Scorm12API';\nimport {\n CMI,\n CMIAttemptRecordsObject,\n CMIEvaluationCommentsObject,\n CMITriesObject,\n} from './cmi/aicc_cmi';\nimport {NAV} from './cmi/scorm12_cmi';\n\n/**\n * The AICC API class\n */\nexport default class AICC extends Scorm12API {\n /**\n * Constructor to create AICC API object\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild = super.getChildElement(CMIElement, value, foundFirstIndex);\n\n if (!newChild) {\n if (this.stringMatches(CMIElement, 'cmi\\\\.evaluation\\\\.comments\\\\.\\\\d+')) {\n newChild = new CMIEvaluationCommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.tries\\\\.\\\\d+')) {\n newChild = new CMITriesObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.attempt_records\\\\.\\\\d+')) {\n newChild = new CMIAttemptRecordsObject();\n }\n }\n\n return newChild;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {AICC} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.nav = newAPI.nav;\n }\n}\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n params = settings.requestHandler(params);\n fetch(url, {\n method: 'POST',\n body: params instanceof Array ? params.join('&') : JSON.stringify(params),\n headers: {\n ...settings.xhrHeaders,\n 'Content-Type': settings.commitRequestDataType,\n },\n credentials: settings.xhrWithCredentials ? 'include' : undefined,\n keepalive: true,\n });\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import AICC from '../AICC';\n\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","fetch","method","body","headers","credentials","keepalive","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","Regex","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","TYPE_MISMATCH","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","interactions","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","_count","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"aicc.js","mappings":"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","sources":["webpack://scorm-again/./node_modules/lodash.debounce/index.js","webpack://scorm-again/./src/AICC.js","webpack://scorm-again/./src/BaseAPI.js","webpack://scorm-again/./src/Scorm12API.js","webpack://scorm-again/./src/cmi/aicc_cmi.js","webpack://scorm-again/./src/cmi/common.js","webpack://scorm-again/./src/cmi/scorm12_cmi.js","webpack://scorm-again/./src/constants/api_constants.js","webpack://scorm-again/./src/constants/error_codes.js","webpack://scorm-again/./src/constants/regex.js","webpack://scorm-again/./src/exceptions.js","webpack://scorm-again/./src/utilities.js","webpack://scorm-again/webpack/bootstrap","webpack://scorm-again/webpack/runtime/compat get default export","webpack://scorm-again/webpack/runtime/define property getters","webpack://scorm-again/webpack/runtime/global","webpack://scorm-again/webpack/runtime/hasOwnProperty shorthand","webpack://scorm-again/webpack/runtime/make namespace object","webpack://scorm-again/./src/exports/aicc.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport Scorm12API from './Scorm12API';\nimport {\n CMI,\n CMIAttemptRecordsObject,\n CMIEvaluationCommentsObject,\n CMITriesObject,\n} from './cmi/aicc_cmi';\nimport {NAV} from './cmi/scorm12_cmi';\n\n/**\n * The AICC API class\n */\nexport default class AICC extends Scorm12API {\n /**\n * Constructor to create AICC API object\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild = super.getChildElement(CMIElement, value, foundFirstIndex);\n\n if (!newChild) {\n if (this.stringMatches(CMIElement, 'cmi\\\\.evaluation\\\\.comments\\\\.\\\\d+')) {\n newChild = new CMIEvaluationCommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.tries\\\\.\\\\d+')) {\n newChild = new CMITriesObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.attempt_records\\\\.\\\\d+')) {\n newChild = new CMIAttemptRecordsObject();\n }\n }\n\n return newChild;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {AICC} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.nav = newAPI.nav;\n }\n}\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import AICC from '../AICC';\n\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","Regex","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","TYPE_MISMATCH","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","interactions","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","_count","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/aicc.min.js b/dist/aicc.min.js index e68920c..a1d1e6f 100644 --- a/dist/aicc.min.js +++ b/dist/aicc.min.js @@ -4,22 +4,22 @@ \***********************************************/function(e,s,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(){return h.Date.now()}var r=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":n(t.g))&&t.g&&t.g.Object===Object&&t.g,f="object"==("undefined"==typeof self?"undefined":n(self))&&self&&self.Object===Object&&self,h=t||f||Function("return this")(),d=Object.prototype.toString,E=Math.max,M=Math.min;function v(e){var t=n(e);return e&&("object"==t||"function"==t)}function p(e){return"symbol"==n(e)||!!(t=e)&&"object"==n(t)&&d.call(e)==i;var t}function b(e){if("number"==typeof e)return e;if(p(e))return r;if("string"!=typeof(e=v(e)?v(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=c.test(e);return t||l.test(e)?u(e.slice(2),t?2:8):a.test(e)?r:+e}e.exports=function(f,n,e){var r,i,o,a,s,c,l=0,h=!1,u=!1,t=!0;if("function"!=typeof f)throw new TypeError("Expected a function");function d(e){var t=r,n=i;return r=i=void 0,l=e,a=f.apply(n,t)}function p(e){var t=e-c;return void 0===c||n<=t||t<0||u&&o<=e-l}function m(){var e,t=_();if(p(t))return y(t);s=setTimeout(m,(e=n-((t=t)-c),u?M(e,o-(t-l)):e))}function y(e){return s=void 0,t&&r?d(e):(r=i=void 0,a)}function g(){var e=_(),t=p(e);if(r=arguments,i=this,c=e,t){if(void 0===s)return l=e=c,s=setTimeout(m,n),h?d(e):a;if(u)return s=setTimeout(m,n),d(c)}return void 0===s&&(s=setTimeout(m,n)),a}return n=b(n)||0,v(e)&&(h=!!e.leading,u="maxWait"in e,o=u?E(b(e.maxWait)||0,n):o,t="trailing"in e?!!e.trailing:t),g.cancel=function(){void 0!==s&&clearTimeout(s),r=c=i=s=void(l=0)},g.flush=function(){return void 0===s?a:y(_())},g}},"./src/AICC.js": /*!*********************!*\ !*** ./src/AICC.js ***! - \*********************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return d}});var e=t(/*! ./Scorm12API */"./src/Scorm12API.js"),o=t(/*! ./cmi/aicc_cmi */"./src/cmi/aicc_cmi.js"),f=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function a(r){for(var e=1;ee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&h(t.prototype,e),n&&h(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": + \***************************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return y}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),o=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js"),a=t(/*! ./utilities */"./src/utilities.js"),n=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),t=t(/*! ./constants/error_codes */"./src/constants/error_codes.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function f(r){for(var e=1;e=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&h(t.prototype,e),n&&h(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": /*!*****************************!*\ !*** ./src/cmi/aicc_cmi.js ***! - \*****************************/function(t,n,h){"use strict";h.r(n),h.d(n,{CMI:function(){return C},CMIStudentDemographics:function(){return K},CMIPaths:function(){return Q},CMIPathsObject:function(){return ae},CMITries:function(){return se},CMITriesObject:function(){return ue},CMIAttemptRecords:function(){return fe},CMIAttemptRecordsObject:function(){return de},CMIEvaluationCommentsObject:function(){return ge}});var d=h(/*! ./scorm12_cmi */"./src/cmi/scorm12_cmi.js"),r=h(/*! ./common */"./src/cmi/common.js"),n=h(/*! ../constants/api_constants */"./src/constants/api_constants.js"),p=h(/*! ../constants/regex */"./src/constants/regex.js"),m=h(/*! ../constants/error_codes */"./src/constants/error_codes.js"),y=h(/*! ../exceptions */"./src/exceptions.js");function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t,n){var r=e;if(t.has(r))throw new TypeError("Cannot initialize the same private elements twice on an object");t.set(e,n)}function o(e,t,n){var t=_(e,t,"set"),r=n;if(t.set)t.set.call(e,r);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=r}return n}function e(e,t){t=_(e,t,"get");return t.get?t.get.call(e):t.value}function _(e,t,n){if(!t.has(e))throw new TypeError("attempted to "+n+" private field on non-instance");return t.get(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,T=new WeakMap,j=function(){function r(){var e,t,n;if(v(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,h(this,C,{writable:!0,value:!1}),h(this,T,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),r}(),k=new WeakMap,p=new WeakMap,R=new WeakMap,m=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,j);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return v(this,u),h(f(t=l.call(this)),k,{writable:!0,value:void 0}),h(f(t),p,{writable:!0,value:void 0}),h(f(t),R,{writable:!0,value:void 0}),h(f(t),m,{writable:!0,value:void 0}),h(f(t),y,{writable:!0,value:void 0}),h(f(t),g,{writable:!0,value:void 0}),h(f(t),_,{writable:!0,value:void 0}),h(f(t),L,{writable:!0,value:""}),h(f(t),A,{writable:!0,value:""}),h(f(t),N,{writable:!0,value:void 0}),d(f(t),k,n||M.score_children),d(f(t),p,!!r&&w.score_range),d(f(t),N,i||""===i?i:"100"),d(f(t),R,o||O.INVALID_SET_VALUE),d(f(t),m,a||O.TYPE_MISMATCH),d(f(t),y,s||O.VALUE_OUT_OF_RANGE),d(f(t),g,c||w.CMIDecimal),d(f(t),_,e),t}return b(u,[{key:"_children",get:function(){return t(this,k)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,V=new WeakMap,x=new WeakMap,F=function(){a(o,j);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return v(this,o),h(f(t=i.call(this)),P,{writable:!0,value:void 0}),h(f(t),V,{writable:!0,value:void 0}),h(f(t),x,{writable:!0,value:void 0}),d(f(t),x,n),d(f(t),P,r),d(f(t),V,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,x)},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,T=new WeakMap,j=function(){function r(){var e,t,n;if(v(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,h(this,C,{writable:!0,value:!1}),h(this,T,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),r}(),k=new WeakMap,p=new WeakMap,R=new WeakMap,m=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,j);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return v(this,u),h(f(t=l.call(this)),k,{writable:!0,value:void 0}),h(f(t),p,{writable:!0,value:void 0}),h(f(t),R,{writable:!0,value:void 0}),h(f(t),m,{writable:!0,value:void 0}),h(f(t),y,{writable:!0,value:void 0}),h(f(t),g,{writable:!0,value:void 0}),h(f(t),_,{writable:!0,value:void 0}),h(f(t),L,{writable:!0,value:""}),h(f(t),A,{writable:!0,value:""}),h(f(t),N,{writable:!0,value:void 0}),d(f(t),k,n||M.score_children),d(f(t),p,!!r&&w.score_range),d(f(t),N,i||""===i?i:"100"),d(f(t),R,o||O.INVALID_SET_VALUE),d(f(t),m,a||O.TYPE_MISMATCH),d(f(t),y,s||O.VALUE_OUT_OF_RANGE),d(f(t),g,c||w.CMIDecimal),d(f(t),_,e),t}return b(u,[{key:"_children",get:function(){return t(this,k)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,V=new WeakMap,F=new WeakMap,x=function(){a(o,j);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return v(this,o),h(f(t=i.call(this)),P,{writable:!0,value:void 0}),h(f(t),V,{writable:!0,value:void 0}),h(f(t),F,{writable:!0,value:void 0}),d(f(t),F,n),d(f(t),P,r),d(f(t),V,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport Scorm12API from './Scorm12API';\nimport {\n CMI,\n CMIAttemptRecordsObject,\n CMIEvaluationCommentsObject,\n CMITriesObject,\n} from './cmi/aicc_cmi';\nimport {NAV} from './cmi/scorm12_cmi';\n\n/**\n * The AICC API class\n */\nexport default class AICC extends Scorm12API {\n /**\n * Constructor to create AICC API object\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild = super.getChildElement(CMIElement, value, foundFirstIndex);\n\n if (!newChild) {\n if (this.stringMatches(CMIElement, 'cmi\\\\.evaluation\\\\.comments\\\\.\\\\d+')) {\n newChild = new CMIEvaluationCommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.tries\\\\.\\\\d+')) {\n newChild = new CMITriesObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.attempt_records\\\\.\\\\d+')) {\n newChild = new CMIAttemptRecordsObject();\n }\n }\n\n return newChild;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {AICC} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.nav = newAPI.nav;\n }\n}\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n params = settings.requestHandler(params);\n fetch(url, {\n method: 'POST',\n body: params instanceof Array ? params.join('&') : JSON.stringify(params),\n headers: {\n ...settings.xhrHeaders,\n 'Content-Type': settings.commitRequestDataType,\n },\n credentials: settings.xhrWithCredentials ? 'include' : undefined,\n keepalive: true,\n });\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\nimport Scorm12API from '../Scorm12API';\nimport AICC from '../AICC';\n\nwindow.Scorm12API = Scorm12API;\nwindow.Scorm2004API = Scorm2004API;\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","fetch","method","body","headers","credentials","keepalive","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","ADL","CMICommentsObject","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","correct_response","current_index","found","count","_count","adl","Initialize","Terminate","lmsTerminate","GetValue","SetValue","Commit","GetLastError","GetErrorString","GetDiagnostic","request","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","mode","completion_threshold","progress_measure","completion_status","scaled_passing_score","scaled","success_status","navRequest","encodeURIComponent","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","NAVEvent","Scorm2004ValidationError","learner_responses","learner","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","CMICommentsFromLMS","CMICStatus","learner_id","learner_name","CMIString1000","progress_range","CMISStatus","CMIString64000","getSecondsAsISODuration","addTwoDurations","audio_level","CMILang","delivery_speed","audio_captioning","CMILongIdentifier","timestamp","learner_response","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","request_valid","ADLNavRequestValid","_target","_","previous","continue","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"scorm-again.js","mappings":"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","sources":["webpack://scorm-again/./node_modules/lodash.debounce/index.js","webpack://scorm-again/./src/AICC.js","webpack://scorm-again/./src/BaseAPI.js","webpack://scorm-again/./src/Scorm12API.js","webpack://scorm-again/./src/Scorm2004API.js","webpack://scorm-again/./src/cmi/aicc_cmi.js","webpack://scorm-again/./src/cmi/common.js","webpack://scorm-again/./src/cmi/scorm12_cmi.js","webpack://scorm-again/./src/cmi/scorm2004_cmi.js","webpack://scorm-again/./src/constants/api_constants.js","webpack://scorm-again/./src/constants/error_codes.js","webpack://scorm-again/./src/constants/language_constants.js","webpack://scorm-again/./src/constants/regex.js","webpack://scorm-again/./src/constants/response_constants.js","webpack://scorm-again/./src/exceptions.js","webpack://scorm-again/./src/utilities.js","webpack://scorm-again/webpack/bootstrap","webpack://scorm-again/webpack/runtime/compat get default export","webpack://scorm-again/webpack/runtime/define property getters","webpack://scorm-again/webpack/runtime/global","webpack://scorm-again/webpack/runtime/hasOwnProperty shorthand","webpack://scorm-again/webpack/runtime/make namespace object","webpack://scorm-again/./src/exports/scorm-again.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport Scorm12API from './Scorm12API';\nimport {\n CMI,\n CMIAttemptRecordsObject,\n CMIEvaluationCommentsObject,\n CMITriesObject,\n} from './cmi/aicc_cmi';\nimport {NAV} from './cmi/scorm12_cmi';\n\n/**\n * The AICC API class\n */\nexport default class AICC extends Scorm12API {\n /**\n * Constructor to create AICC API object\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild = super.getChildElement(CMIElement, value, foundFirstIndex);\n\n if (!newChild) {\n if (this.stringMatches(CMIElement, 'cmi\\\\.evaluation\\\\.comments\\\\.\\\\d+')) {\n newChild = new CMIEvaluationCommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.tries\\\\.\\\\d+')) {\n newChild = new CMITriesObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.attempt_records\\\\.\\\\d+')) {\n newChild = new CMIAttemptRecordsObject();\n }\n }\n\n return newChild;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {AICC} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.nav = newAPI.nav;\n }\n}\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\nimport Scorm12API from '../Scorm12API';\nimport AICC from '../AICC';\n\nwindow.Scorm12API = Scorm12API;\nwindow.Scorm2004API = Scorm2004API;\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","ADL","CMICommentsObject","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","correct_response","current_index","found","count","_count","adl","Initialize","Terminate","lmsTerminate","GetValue","SetValue","Commit","GetLastError","GetErrorString","GetDiagnostic","request","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","mode","completion_threshold","progress_measure","completion_status","scaled_passing_score","scaled","success_status","navRequest","encodeURIComponent","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","NAVEvent","Scorm2004ValidationError","learner_responses","learner","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","CMICommentsFromLMS","CMICStatus","learner_id","learner_name","CMIString1000","progress_range","CMISStatus","CMIString64000","getSecondsAsISODuration","addTwoDurations","audio_level","CMILang","delivery_speed","audio_captioning","CMILongIdentifier","timestamp","learner_response","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","request_valid","ADLNavRequestValid","_target","_","previous","continue","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/scorm-again.min.js b/dist/scorm-again.min.js index ae51a33..c624105 100644 --- a/dist/scorm-again.min.js +++ b/dist/scorm-again.min.js @@ -4,28 +4,28 @@ \***********************************************/function(e,s,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(){return f.Date.now()}var r=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":n(t.g))&&t.g&&t.g.Object===Object&&t.g,h="object"==("undefined"==typeof self?"undefined":n(self))&&self&&self.Object===Object&&self,f=t||h||Function("return this")(),d=Object.prototype.toString,w=Math.max,M=Math.min;function _(e){var t=n(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==n(e)||!!(t=e)&&"object"==n(t)&&d.call(e)==i;var t}function b(e){if("number"==typeof e)return e;if(m(e))return r;if("string"!=typeof(e=_(e)?_(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=c.test(e);return t||l.test(e)?u(e.slice(2),t?2:8):a.test(e)?r:+e}e.exports=function(h,n,e){var r,i,o,a,s,c,l=0,f=!1,u=!1,t=!0;if("function"!=typeof h)throw new TypeError("Expected a function");function d(e){var t=r,n=i;return r=i=void 0,l=e,a=h.apply(n,t)}function m(e){var t=e-c;return void 0===c||n<=t||t<0||u&&o<=e-l}function p(){var e,t=v();if(m(t))return y(t);s=setTimeout(p,(e=n-((t=t)-c),u?M(e,o-(t-l)):e))}function y(e){return s=void 0,t&&r?d(e):(r=i=void 0,a)}function g(){var e=v(),t=m(e);if(r=arguments,i=this,c=e,t){if(void 0===s)return l=e=c,s=setTimeout(p,n),f?d(e):a;if(u)return s=setTimeout(p,n),d(c)}return void 0===s&&(s=setTimeout(p,n)),a}return n=b(n)||0,_(e)&&(f=!!e.leading,u="maxWait"in e,o=u?w(b(e.maxWait)||0,n):o,t="trailing"in e?!!e.trailing:t),g.cancel=function(){void 0!==s&&clearTimeout(s),r=c=i=s=void(l=0)},g.flush=function(){return void 0===s?a:y(v())},g}},"./src/AICC.js": /*!*********************!*\ !*** ./src/AICC.js ***! - \*********************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return d}});var e=t(/*! ./Scorm12API */"./src/Scorm12API.js"),o=t(/*! ./cmi/aicc_cmi */"./src/cmi/aicc_cmi.js"),h=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function a(r){for(var e=1;ee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&f(t.prototype,e),n&&f(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/Scorm2004API.js": + \***************************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return y}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),o=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js"),a=t(/*! ./utilities */"./src/utilities.js"),n=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),t=t(/*! ./constants/error_codes */"./src/constants/error_codes.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function h(r){for(var e=1;e=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&f(t.prototype,e),n&&f(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/Scorm2004API.js": /*!*****************************!*\ !*** ./src/Scorm2004API.js ***! - \*****************************/function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return O}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),a=t(/*! ./cmi/scorm2004_cmi */"./src/cmi/scorm2004_cmi.js"),o=t(/*! ./utilities */"./src/utilities.js"),r=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),f=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),d=t(/*! ./constants/response_constants */"./src/constants/response_constants.js"),m=t(/*! ./constants/language_constants */"./src/constants/language_constants.js"),t=t(/*! ./constants/regex */"./src/constants/regex.js");function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function g(t){for(var e=1;ee.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var n=e.correct_responses._count;if("choice"===e.type)for(var r=0;rNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&r.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,n,r=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(n=i.adl)||void 0===n||null===(t=n.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),r=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===l.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(n=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),r&&void 0!==n.navRequest&&""!==n.navRequest&&Function('"use strict";(() => { '.concat(n.navRequest," })()"))(),n):l.SCORM_TRUE}}])&&v(t.prototype,e),n&&v(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": + \*****************************/function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return I}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),a=t(/*! ./cmi/scorm2004_cmi */"./src/cmi/scorm2004_cmi.js"),o=t(/*! ./utilities */"./src/utilities.js"),r=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),f=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),d=t(/*! ./constants/response_constants */"./src/constants/response_constants.js"),m=t(/*! ./constants/language_constants */"./src/constants/language_constants.js"),t=t(/*! ./constants/regex */"./src/constants/regex.js");function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function g(t){for(var e=1;ee.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var n=e.correct_responses._count;if("choice"===e.type)for(var r=0;rNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&r.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,n,r=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(n=i.adl)||void 0===n||null===(t=n.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),r=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===l.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(n=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),r&&void 0!==n.navRequest&&""!==n.navRequest&&Function('"use strict";(() => { '.concat(n.navRequest," })()"))(),n):l.SCORM_TRUE}}])&&v(t.prototype,e),n&&v(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": /*!*****************************!*\ !*** ./src/cmi/aicc_cmi.js ***! - \*****************************/function(t,n,f){"use strict";f.r(n),f.d(n,{CMI:function(){return C},CMIStudentDemographics:function(){return K},CMIPaths:function(){return Q},CMIPathsObject:function(){return ae},CMITries:function(){return se},CMITriesObject:function(){return ue},CMIAttemptRecords:function(){return he},CMIAttemptRecordsObject:function(){return de},CMIEvaluationCommentsObject:function(){return ge}});var d=f(/*! ./scorm12_cmi */"./src/cmi/scorm12_cmi.js"),r=f(/*! ./common */"./src/cmi/common.js"),n=f(/*! ../constants/api_constants */"./src/constants/api_constants.js"),m=f(/*! ../constants/regex */"./src/constants/regex.js"),p=f(/*! ../constants/error_codes */"./src/constants/error_codes.js"),y=f(/*! ../exceptions */"./src/exceptions.js");function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t,n){var r=e;if(t.has(r))throw new TypeError("Cannot initialize the same private elements twice on an object");t.set(e,n)}function o(e,t,n){var t=v(e,t,"set"),r=n;if(t.set)t.set.call(e,r);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=r}return n}function e(e,t){t=v(e,t,"get");return t.get?t.get.call(e):t.value}function v(e,t,n){if(!t.has(e))throw new TypeError("attempted to "+n+" private field on non-instance");return t.get(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _(e,t){for(var n=0;n=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,k=new WeakMap,T=function(){function r(){var e,t,n;if(_(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,f(this,C,{writable:!0,value:!1}),f(this,k,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,k)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,k,(new Date).getTime())}}]),r}(),j=new WeakMap,m=new WeakMap,R=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,v=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,T);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return _(this,u),f(h(t=l.call(this)),j,{writable:!0,value:void 0}),f(h(t),m,{writable:!0,value:void 0}),f(h(t),R,{writable:!0,value:void 0}),f(h(t),p,{writable:!0,value:void 0}),f(h(t),y,{writable:!0,value:void 0}),f(h(t),g,{writable:!0,value:void 0}),f(h(t),v,{writable:!0,value:void 0}),f(h(t),L,{writable:!0,value:""}),f(h(t),A,{writable:!0,value:""}),f(h(t),N,{writable:!0,value:void 0}),d(h(t),j,n||M.score_children),d(h(t),m,!!r&&E.score_range),d(h(t),N,i||""===i?i:"100"),d(h(t),R,o||S.INVALID_SET_VALUE),d(h(t),p,a||S.TYPE_MISMATCH),d(h(t),y,s||S.VALUE_OUT_OF_RANGE),d(h(t),g,c||E.CMIDecimal),d(h(t),v,e),t}return b(u,[{key:"_children",get:function(){return t(this,j)},set:function(e){throw new(t(this,v).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,z=new WeakMap,V=new WeakMap,x=function(){a(o,T);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return _(this,o),f(h(t=i.call(this)),P,{writable:!0,value:void 0}),f(h(t),z,{writable:!0,value:void 0}),f(h(t),V,{writable:!0,value:void 0}),d(h(t),V,n),d(h(t),P,r),d(h(t),z,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,V)},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,k=new WeakMap,T=function(){function r(){var e,t,n;if(_(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,f(this,C,{writable:!0,value:!1}),f(this,k,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,k)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,k,(new Date).getTime())}}]),r}(),j=new WeakMap,m=new WeakMap,R=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,v=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,P=function(){a(u,T);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return _(this,u),f(h(t=l.call(this)),j,{writable:!0,value:void 0}),f(h(t),m,{writable:!0,value:void 0}),f(h(t),R,{writable:!0,value:void 0}),f(h(t),p,{writable:!0,value:void 0}),f(h(t),y,{writable:!0,value:void 0}),f(h(t),g,{writable:!0,value:void 0}),f(h(t),v,{writable:!0,value:void 0}),f(h(t),L,{writable:!0,value:""}),f(h(t),A,{writable:!0,value:""}),f(h(t),N,{writable:!0,value:void 0}),d(h(t),j,n||M.score_children),d(h(t),m,!!r&&E.score_range),d(h(t),N,i||""===i?i:"100"),d(h(t),R,o||S.INVALID_SET_VALUE),d(h(t),p,a||S.TYPE_MISMATCH),d(h(t),y,s||S.VALUE_OUT_OF_RANGE),d(h(t),g,c||E.CMIDecimal),d(h(t),v,e),t}return b(u,[{key:"_children",get:function(){return t(this,j)},set:function(e){throw new(t(this,v).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!O(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,v))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!O(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,v))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!O(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,v))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),D=new WeakMap,z=new WeakMap,V=new WeakMap,x=function(){a(o,T);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return _(this,o),f(h(t=i.call(this)),D,{writable:!0,value:void 0}),f(h(t),z,{writable:!0,value:void 0}),f(h(t),V,{writable:!0,value:void 0}),d(h(t),V,n),d(h(t),D,r),d(h(t),z,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,V)},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,D))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,D))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n params = settings.requestHandler(params);\n fetch(url, {\n method: 'POST',\n body: params instanceof Array ? params.join('&') : JSON.stringify(params),\n headers: {\n ...settings.xhrHeaders,\n 'Content-Type': settings.commitRequestDataType,\n },\n credentials: settings.xhrWithCredentials ? 'include' : undefined,\n keepalive: true,\n });\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm12API from '../Scorm12API';\n\nwindow.Scorm12API = Scorm12API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","fetch","method","body","headers","credentials","keepalive","when","ScheduledCommit","API","wrapper","bind","commit","CMI","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","NAV","Utilities","scorm12_constants","Scorm12API","finalSettings","mastery_override","nav","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Regex","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","TYPE_MISMATCH","VALUE_OUT_OF_RANGE","CMIDecimal","_children","jsonString","children","_count","Scorm12ValidationError","Util","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","cmi_children","CMICore","objectives","CMIObjectives","CMIStudentData","student_preference","CMIStudentPreference","interactions","CMIInteractions","suspend_data","launch_data","comments","comments_from_lms","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIString256","CMIStatus","CMIStatus2","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","student_data_children","max_time_allowed","time_limit_action","student_preference_children","audio","CMISInteger","audio_range","language","speed","speed_range","text","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMITime","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","comments_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","AICCValidationError","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"scorm12.js","mappings":"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","sources":["webpack://scorm-again/./node_modules/lodash.debounce/index.js","webpack://scorm-again/./src/BaseAPI.js","webpack://scorm-again/./src/Scorm12API.js","webpack://scorm-again/./src/cmi/common.js","webpack://scorm-again/./src/cmi/scorm12_cmi.js","webpack://scorm-again/./src/constants/api_constants.js","webpack://scorm-again/./src/constants/error_codes.js","webpack://scorm-again/./src/constants/regex.js","webpack://scorm-again/./src/exceptions.js","webpack://scorm-again/./src/utilities.js","webpack://scorm-again/webpack/bootstrap","webpack://scorm-again/webpack/runtime/compat get default export","webpack://scorm-again/webpack/runtime/define property getters","webpack://scorm-again/webpack/runtime/global","webpack://scorm-again/webpack/runtime/hasOwnProperty shorthand","webpack://scorm-again/webpack/runtime/make namespace object","webpack://scorm-again/./src/exports/scorm12.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm12API from '../Scorm12API';\n\nwindow.Scorm12API = Scorm12API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMI","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","NAV","Utilities","scorm12_constants","Scorm12API","finalSettings","mastery_override","nav","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Regex","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","TYPE_MISMATCH","VALUE_OUT_OF_RANGE","CMIDecimal","_children","jsonString","children","_count","Scorm12ValidationError","Util","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","cmi_children","CMICore","objectives","CMIObjectives","CMIStudentData","student_preference","CMIStudentPreference","interactions","CMIInteractions","suspend_data","launch_data","comments","comments_from_lms","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIString256","CMIStatus","CMIStatus2","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","student_data_children","max_time_allowed","time_limit_action","student_preference_children","audio","CMISInteger","audio_range","language","speed","speed_range","text","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMITime","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","comments_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","AICCValidationError","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/scorm12.min.js b/dist/scorm12.min.js index 4f5868b..71fb63d 100644 --- a/dist/scorm12.min.js +++ b/dist/scorm12.min.js @@ -1,19 +1,19 @@ !function(){var r={"./node_modules/lodash.debounce/index.js": /*!***********************************************!*\ !*** ./node_modules/lodash.debounce/index.js ***! - \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(){return d.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,f="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,d=t||f||Function("return this")(),h=Object.prototype.toString,b=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&h.call(e)==i;var t}function v(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=c.test(e);return t||l.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(f,r,e){var n,i,o,a,s,c,l=0,d=!1,u=!1,t=!0;if("function"!=typeof f)throw new TypeError("Expected a function");function h(e){var t=n,r=i;return n=i=void 0,l=e,a=f.apply(r,t)}function m(e){var t=e-c;return void 0===c||r<=t||t<0||u&&o<=e-l}function p(){var e,t=_();if(m(t))return y(t);s=setTimeout(p,(e=r-((t=t)-c),u?M(e,o-(t-l)):e))}function y(e){return s=void 0,t&&n?h(e):(n=i=void 0,a)}function g(){var e=_(),t=m(e);if(n=arguments,i=this,c=e,t){if(void 0===s)return l=e=c,s=setTimeout(p,r),d?h(e):a;if(u)return s=setTimeout(p,r),h(c)}return void 0===s&&(s=setTimeout(p,r)),a}return r=v(r)||0,E(e)&&(d=!!e.leading,u="maxWait"in e,o=u?b(v(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),g.cancel=function(){void 0!==s&&clearTimeout(s),n=c=i=s=void(l=0)},g.flush=function(){return void 0===s?a:y(_())},g}},"./src/BaseAPI.js": + \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(){return d.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,f="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,d=t||f||Function("return this")(),h=Object.prototype.toString,v=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&h.call(e)==i;var t}function b(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=c.test(e);return t||l.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(f,r,e){var n,i,o,a,s,c,l=0,d=!1,u=!1,t=!0;if("function"!=typeof f)throw new TypeError("Expected a function");function h(e){var t=n,r=i;return n=i=void 0,l=e,a=f.apply(r,t)}function m(e){var t=e-c;return void 0===c||r<=t||t<0||u&&o<=e-l}function p(){var e,t=_();if(m(t))return y(t);s=setTimeout(p,(e=r-((t=t)-c),u?M(e,o-(t-l)):e))}function y(e){return s=void 0,t&&n?h(e):(n=i=void 0,a)}function g(){var e=_(),t=m(e);if(n=arguments,i=this,c=e,t){if(void 0===s)return l=e=c,s=setTimeout(p,r),d?h(e):a;if(u)return s=setTimeout(p,r),h(c)}return void 0===s&&(s=setTimeout(p,r)),a}return r=b(r)||0,E(e)&&(d=!!e.leading,u="maxWait"in e,o=u?v(b(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),g.cancel=function(){void 0!==s&&clearTimeout(s),n=c=i=s=void(l=0)},g.flush=function(){return void 0===s?a:y(_())},g}},"./src/BaseAPI.js": /*!************************!*\ !*** ./src/BaseAPI.js ***! - \************************/function(t,r,e){"use strict";e.r(r),e.d(r,{default:function(){return T}});var p=e(/*! ./cmi/common */"./src/cmi/common.js"),l=e(/*! ./exceptions */"./src/exceptions.js"),r=e(/*! ./constants/error_codes */"./src/constants/error_codes.js"),u=e(/*! ./constants/api_constants */"./src/constants/api_constants.js"),f=e(/*! ./utilities */"./src/utilities.js"),y=e(/*! lodash.debounce */"./node_modules/lodash.debounce/index.js"),g=e.n(y);function _(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o=[],a=!0,s=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(r=i.cmi)||void 0===r||null===(n=r.core)||void 0===n?void 0:n.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,r,n,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&d(t.prototype,e),r&&d(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": + \***************************/function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return y}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),o=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js"),a=t(/*! ./utilities */"./src/utilities.js"),r=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),t=t(/*! ./constants/error_codes */"./src/constants/error_codes.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(t,e){var r,n=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)),n}function f(n){for(var e=1;e=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(r=i.cmi)||void 0===r||null===(n=r.core)||void 0===n?void 0:n.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,r,n,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&d(t.prototype,e),r&&d(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": /*!***************************!*\ !*** ./src/cmi/common.js ***! - \***************************/function(r,n,e){"use strict";e.r(n),e.d(n,{checkValidFormat:function(){return O},checkValidRange:function(){return I},BaseCMI:function(){return L},CMIScore:function(){return D},CMIArray:function(){return x}});var n=e(/*! ../constants/api_constants */"./src/constants/api_constants.js"),i=e(/*! ../constants/error_codes */"./src/constants/error_codes.js"),e=e(/*! ../constants/regex */"./src/constants/regex.js");function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return(s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(r){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=l(r),t=(e=n?(e=l(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),this);if(e&&("object"===o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return f(t)}}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,L=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,d(this,C,{writable:!0,value:!1}),d(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return v(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){h(this,C,!0)}},{key:"setStartTime",value:function(){h(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,j=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,A=new WeakMap,N=new WeakMap,k=new WeakMap,D=function(){a(u,L);var l=c(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return E(this,u),d(f(t=l.call(this)),R,{writable:!0,value:void 0}),d(f(t),m,{writable:!0,value:void 0}),d(f(t),j,{writable:!0,value:void 0}),d(f(t),p,{writable:!0,value:void 0}),d(f(t),y,{writable:!0,value:void 0}),d(f(t),g,{writable:!0,value:void 0}),d(f(t),_,{writable:!0,value:void 0}),d(f(t),A,{writable:!0,value:""}),d(f(t),N,{writable:!0,value:""}),d(f(t),k,{writable:!0,value:void 0}),h(f(t),R,r||M.score_children),h(f(t),m,!!n&&w.score_range),h(f(t),k,i||""===i?i:"100"),h(f(t),j,o||S.INVALID_SET_VALUE),h(f(t),p,a||S.TYPE_MISMATCH),h(f(t),y,s||S.VALUE_OUT_OF_RANGE),h(f(t),g,c||w.CMIDecimal),h(f(t),_,e),t}return v(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,j))}},{key:"raw",get:function(){return t(this,A)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,A,e)}},{key:"min",get:function(){return t(this,N)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,N,e)}},{key:"max",get:function(){return t(this,k)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,k,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),V=new WeakMap,P=new WeakMap,F=new WeakMap,x=function(){a(o,L);var i=c(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),d(f(t=i.call(this)),V,{writable:!0,value:void 0}),d(f(t),P,{writable:!0,value:void 0}),d(f(t),F,{writable:!0,value:void 0}),h(f(t),F,r),h(f(t),V,n),h(f(t),P,e),t.childArray=[],t}return v(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,L=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,d(this,C,{writable:!0,value:!1}),d(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){h(this,C,!0)}},{key:"setStartTime",value:function(){h(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,j=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,A=new WeakMap,N=new WeakMap,k=new WeakMap,D=function(){a(u,L);var l=c(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return E(this,u),d(f(t=l.call(this)),R,{writable:!0,value:void 0}),d(f(t),m,{writable:!0,value:void 0}),d(f(t),j,{writable:!0,value:void 0}),d(f(t),p,{writable:!0,value:void 0}),d(f(t),y,{writable:!0,value:void 0}),d(f(t),g,{writable:!0,value:void 0}),d(f(t),_,{writable:!0,value:void 0}),d(f(t),A,{writable:!0,value:""}),d(f(t),N,{writable:!0,value:""}),d(f(t),k,{writable:!0,value:void 0}),h(f(t),R,r||M.score_children),h(f(t),m,!!n&&w.score_range),h(f(t),k,i||""===i?i:"100"),h(f(t),j,o||O.INVALID_SET_VALUE),h(f(t),p,a||O.TYPE_MISMATCH),h(f(t),y,s||O.VALUE_OUT_OF_RANGE),h(f(t),g,c||w.CMIDecimal),h(f(t),_,e),t}return b(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,j))}},{key:"raw",get:function(){return t(this,A)},set:function(e){!S(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,A,e)}},{key:"min",get:function(){return t(this,N)},set:function(e){!S(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,N,e)}},{key:"max",get:function(){return t(this,k)},set:function(e){!S(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,k,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),V=new WeakMap,P=new WeakMap,F=new WeakMap,x=function(){a(o,L);var i=c(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),d(f(t=i.call(this)),V,{writable:!0,value:void 0}),d(f(t),P,{writable:!0,value:void 0}),d(f(t),F,{writable:!0,value:void 0}),h(f(t),F,r),h(f(t),V,n),h(f(t),P,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;te.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n params = settings.requestHandler(params);\n fetch(url, {\n method: 'POST',\n body: params instanceof Array ? params.join('&') : JSON.stringify(params),\n headers: {\n ...settings.xhrHeaders,\n 'Content-Type': settings.commitRequestDataType,\n },\n credentials: settings.xhrWithCredentials ? 'include' : undefined,\n keepalive: true,\n });\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\n\nwindow.Scorm2004API = Scorm2004API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","fetch","method","body","headers","credentials","keepalive","when","ScheduledCommit","API","wrapper","bind","commit","ADL","CMI","CMICommentsObject","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","finalSettings","mastery_override","correct_response","current_index","found","count","_count","adl","Initialize","lmsInitialize","Terminate","lmsTerminate","GetValue","lmsGetValue","SetValue","lmsSetValue","Commit","lmsCommit","GetLastError","lmsGetLastError","GetErrorString","lmsGetErrorString","GetDiagnostic","lmsGetDiagnostic","terminate","nav","request","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","total_time","getCurrentTotalTime","flattened","flatten","mode","credit","completion_threshold","progress_measure","completion_status","scaled_passing_score","score","scaled","success_status","navRequest","encodeURIComponent","renderCommitCMI","processHttpRequest","scorm12_constants","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","VALUE_OUT_OF_RANGE","CMIDecimal","_children","raw","jsonString","children","Scorm2004ValidationError","Util","learner_responses","learner","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","cmi_children","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","comments_from_lms","CMICommentsFromLMS","CMIInteractions","objectives","CMIObjectives","_version","CMICStatus","entry","exit","CMIExit","launch_data","learner_id","learner_name","location","CMIString1000","max_time_allowed","progress_range","session_time","CMITimespan","CMISStatus","suspend_data","CMIString64000","time_limit_action","sessionTime","startTime","start_time","seconds","getSecondsAsISODuration","addTwoDurations","student_preference_children","audio_level","audio_range","language","CMILang","delivery_speed","speed_range","audio_captioning","CMISInteger","text_range","interactions_children","objectives_children","comments_children","correct_responses_children","id","CMILongIdentifier","CMIType","timestamp","CMITime","weighting","learner_response","CMIResult","latency","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","CMIFeedback","ADLNav","request_valid","ADLNavRequestValid","NAVEvent","_target","_","previous","continue","LOG_LEVEL_NONE","core_children","student_data_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIString256","CMIString4096","CMIInteger","CMIIdentifier","CMIIndex","CMIStatus","CMIStatus2","weighting_range","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm12ValidationError","AICCValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","getSecondsAsHHMMSS","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","addHHMMSSTimeStrings","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"scorm2004.js","mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAIA,eAAe,GAAG,qBAAtB;AAEA;;AACA,IAAIC,GAAG,GAAG,IAAI,CAAd;AAEA;;AACA,IAAIC,SAAS,GAAG,iBAAhB;AAEA;;AACA,IAAIC,MAAM,GAAG,YAAb;AAEA;;AACA,IAAIC,UAAU,GAAG,oBAAjB;AAEA;;AACA,IAAIC,UAAU,GAAG,YAAjB;AAEA;;AACA,IAAIC,SAAS,GAAG,aAAhB;AAEA;;AACA,IAAIC,YAAY,GAAGC,QAAnB;AAEA;;AACA,IAAIC,UAAU,GAAG,QAAOC,qBAAP,yCAAOA,qBAAP,MAAiB,QAAjB,IAA6BA,qBAA7B,IAAuCA,qBAAM,CAACC,MAAP,KAAkBA,MAAzD,IAAmED,qBAApF;AAEA;;AACA,IAAIE,QAAQ,GAAG,QAAOC,IAAP,yCAAOA,IAAP,MAAe,QAAf,IAA2BA,IAA3B,IAAmCA,IAAI,CAACF,MAAL,KAAgBA,MAAnD,IAA6DE,IAA5E;AAEA;;AACA,IAAIC,IAAI,GAAGL,UAAU,IAAIG,QAAd,IAA0BG,QAAQ,CAAC,aAAD,CAAR,EAArC;AAEA;;AACA,IAAIC,WAAW,GAAGL,MAAM,CAACM,SAAzB;AAEA;AACA;AACA;AACA;AACA;;AACA,IAAIC,cAAc,GAAGF,WAAW,CAACG,QAAjC;AAEA;;AACA,IAAIC,SAAS,GAAGC,IAAI,CAACC,GAArB;AAAA,IACIC,SAAS,GAAGF,IAAI,CAACG,GADrB;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAIC,GAAG,GAAG,SAANA,GAAM,GAAW;EACnB,OAAOX,IAAI,CAACY,IAAL,CAAUD,GAAV,EAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASE,QAAT,CAAkBC,IAAlB,EAAwBC,IAAxB,EAA8BC,OAA9B,EAAuC;EACrC,IAAIC,QAAJ;EAAA,IACIC,QADJ;EAAA,IAEIC,OAFJ;EAAA,IAGIC,MAHJ;EAAA,IAIIC,OAJJ;EAAA,IAKIC,YALJ;EAAA,IAMIC,cAAc,GAAG,CANrB;EAAA,IAOIC,OAAO,GAAG,KAPd;EAAA,IAQIC,MAAM,GAAG,KARb;EAAA,IASIC,QAAQ,GAAG,IATf;;EAWA,IAAI,OAAOZ,IAAP,IAAe,UAAnB,EAA+B;IAC7B,MAAM,IAAIa,SAAJ,CAAczC,eAAd,CAAN;EACD;;EACD6B,IAAI,GAAGa,QAAQ,CAACb,IAAD,CAAR,IAAkB,CAAzB;;EACA,IAAIc,QAAQ,CAACb,OAAD,CAAZ,EAAuB;IACrBQ,OAAO,GAAG,CAAC,CAACR,OAAO,CAACQ,OAApB;IACAC,MAAM,GAAG,aAAaT,OAAtB;IACAG,OAAO,GAAGM,MAAM,GAAGnB,SAAS,CAACsB,QAAQ,CAACZ,OAAO,CAACG,OAAT,CAAR,IAA6B,CAA9B,EAAiCJ,IAAjC,CAAZ,GAAqDI,OAArE;IACAO,QAAQ,GAAG,cAAcV,OAAd,GAAwB,CAAC,CAACA,OAAO,CAACU,QAAlC,GAA6CA,QAAxD;EACD;;EAED,SAASI,UAAT,CAAoBC,IAApB,EAA0B;IACxB,IAAIC,IAAI,GAAGf,QAAX;IAAA,IACIgB,OAAO,GAAGf,QADd;IAGAD,QAAQ,GAAGC,QAAQ,GAAGgB,SAAtB;IACAX,cAAc,GAAGQ,IAAjB;IACAX,MAAM,GAAGN,IAAI,CAACqB,KAAL,CAAWF,OAAX,EAAoBD,IAApB,CAAT;IACA,OAAOZ,MAAP;EACD;;EAED,SAASgB,WAAT,CAAqBL,IAArB,EAA2B;IACzB;IACAR,cAAc,GAAGQ,IAAjB,CAFyB,CAGzB;;IACAV,OAAO,GAAGgB,UAAU,CAACC,YAAD,EAAevB,IAAf,CAApB,CAJyB,CAKzB;;IACA,OAAOS,OAAO,GAAGM,UAAU,CAACC,IAAD,CAAb,GAAsBX,MAApC;EACD;;EAED,SAASmB,aAAT,CAAuBR,IAAvB,EAA6B;IAC3B,IAAIS,iBAAiB,GAAGT,IAAI,GAAGT,YAA/B;IAAA,IACImB,mBAAmB,GAAGV,IAAI,GAAGR,cADjC;IAAA,IAEIH,MAAM,GAAGL,IAAI,GAAGyB,iBAFpB;IAIA,OAAOf,MAAM,GAAGhB,SAAS,CAACW,MAAD,EAASD,OAAO,GAAGsB,mBAAnB,CAAZ,GAAsDrB,MAAnE;EACD;;EAED,SAASsB,YAAT,CAAsBX,IAAtB,EAA4B;IAC1B,IAAIS,iBAAiB,GAAGT,IAAI,GAAGT,YAA/B;IAAA,IACImB,mBAAmB,GAAGV,IAAI,GAAGR,cADjC,CAD0B,CAI1B;IACA;IACA;;IACA,OAAQD,YAAY,KAAKY,SAAjB,IAA+BM,iBAAiB,IAAIzB,IAApD,IACLyB,iBAAiB,GAAG,CADf,IACsBf,MAAM,IAAIgB,mBAAmB,IAAItB,OAD/D;EAED;;EAED,SAASmB,YAAT,GAAwB;IACtB,IAAIP,IAAI,GAAGpB,GAAG,EAAd;;IACA,IAAI+B,YAAY,CAACX,IAAD,CAAhB,EAAwB;MACtB,OAAOY,YAAY,CAACZ,IAAD,CAAnB;IACD,CAJqB,CAKtB;;;IACAV,OAAO,GAAGgB,UAAU,CAACC,YAAD,EAAeC,aAAa,CAACR,IAAD,CAA5B,CAApB;EACD;;EAED,SAASY,YAAT,CAAsBZ,IAAtB,EAA4B;IAC1BV,OAAO,GAAGa,SAAV,CAD0B,CAG1B;IACA;;IACA,IAAIR,QAAQ,IAAIT,QAAhB,EAA0B;MACxB,OAAOa,UAAU,CAACC,IAAD,CAAjB;IACD;;IACDd,QAAQ,GAAGC,QAAQ,GAAGgB,SAAtB;IACA,OAAOd,MAAP;EACD;;EAED,SAASwB,MAAT,GAAkB;IAChB,IAAIvB,OAAO,KAAKa,SAAhB,EAA2B;MACzBW,YAAY,CAACxB,OAAD,CAAZ;IACD;;IACDE,cAAc,GAAG,CAAjB;IACAN,QAAQ,GAAGK,YAAY,GAAGJ,QAAQ,GAAGG,OAAO,GAAGa,SAA/C;EACD;;EAED,SAASY,KAAT,GAAiB;IACf,OAAOzB,OAAO,KAAKa,SAAZ,GAAwBd,MAAxB,GAAiCuB,YAAY,CAAChC,GAAG,EAAJ,CAApD;EACD;;EAED,SAASoC,SAAT,GAAqB;IACnB,IAAIhB,IAAI,GAAGpB,GAAG,EAAd;IAAA,IACIqC,UAAU,GAAGN,YAAY,CAACX,IAAD,CAD7B;IAGAd,QAAQ,GAAGgC,SAAX;IACA/B,QAAQ,GAAG,IAAX;IACAI,YAAY,GAAGS,IAAf;;IAEA,IAAIiB,UAAJ,EAAgB;MACd,IAAI3B,OAAO,KAAKa,SAAhB,EAA2B;QACzB,OAAOE,WAAW,CAACd,YAAD,CAAlB;MACD;;MACD,IAAIG,MAAJ,EAAY;QACV;QACAJ,OAAO,GAAGgB,UAAU,CAACC,YAAD,EAAevB,IAAf,CAApB;QACA,OAAOe,UAAU,CAACR,YAAD,CAAjB;MACD;IACF;;IACD,IAAID,OAAO,KAAKa,SAAhB,EAA2B;MACzBb,OAAO,GAAGgB,UAAU,CAACC,YAAD,EAAevB,IAAf,CAApB;IACD;;IACD,OAAOK,MAAP;EACD;;EACD2B,SAAS,CAACH,MAAV,GAAmBA,MAAnB;EACAG,SAAS,CAACD,KAAV,GAAkBA,KAAlB;EACA,OAAOC,SAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASlB,QAAT,CAAkBqB,KAAlB,EAAyB;EACvB,IAAIC,IAAI,WAAUD,KAAV,CAAR;;EACA,OAAO,CAAC,CAACA,KAAF,KAAYC,IAAI,IAAI,QAAR,IAAoBA,IAAI,IAAI,UAAxC,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,YAAT,CAAsBF,KAAtB,EAA6B;EAC3B,OAAO,CAAC,CAACA,KAAF,IAAW,QAAOA,KAAP,KAAgB,QAAlC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,QAAT,CAAkBH,KAAlB,EAAyB;EACvB,OAAO,QAAOA,KAAP,KAAgB,QAAhB,IACJE,YAAY,CAACF,KAAD,CAAZ,IAAuB9C,cAAc,CAACkD,IAAf,CAAoBJ,KAApB,KAA8B9D,SADxD;AAED;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASwC,QAAT,CAAkBsB,KAAlB,EAAyB;EACvB,IAAI,OAAOA,KAAP,IAAgB,QAApB,EAA8B;IAC5B,OAAOA,KAAP;EACD;;EACD,IAAIG,QAAQ,CAACH,KAAD,CAAZ,EAAqB;IACnB,OAAO/D,GAAP;EACD;;EACD,IAAI0C,QAAQ,CAACqB,KAAD,CAAZ,EAAqB;IACnB,IAAIK,KAAK,GAAG,OAAOL,KAAK,CAACM,OAAb,IAAwB,UAAxB,GAAqCN,KAAK,CAACM,OAAN,EAArC,GAAuDN,KAAnE;IACAA,KAAK,GAAGrB,QAAQ,CAAC0B,KAAD,CAAR,GAAmBA,KAAK,GAAG,EAA3B,GAAiCA,KAAzC;EACD;;EACD,IAAI,OAAOL,KAAP,IAAgB,QAApB,EAA8B;IAC5B,OAAOA,KAAK,KAAK,CAAV,GAAcA,KAAd,GAAsB,CAACA,KAA9B;EACD;;EACDA,KAAK,GAAGA,KAAK,CAACO,OAAN,CAAcpE,MAAd,EAAsB,EAAtB,CAAR;EACA,IAAIqE,QAAQ,GAAGnE,UAAU,CAACoE,IAAX,CAAgBT,KAAhB,CAAf;EACA,OAAQQ,QAAQ,IAAIlE,SAAS,CAACmE,IAAV,CAAeT,KAAf,CAAb,GACHzD,YAAY,CAACyD,KAAK,CAACU,KAAN,CAAY,CAAZ,CAAD,EAAiBF,QAAQ,GAAG,CAAH,GAAO,CAAhC,CADT,GAEFpE,UAAU,CAACqE,IAAX,CAAgBT,KAAhB,IAAyB/D,GAAzB,GAA+B,CAAC+D,KAFrC;AAGD;;AAEDW,MAAM,CAACC,OAAP,GAAiBjD,QAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvXA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMuD,gBAAgB,GAAGF,uEAAzB;AACA,IAAMG,mBAAmB,GAAGJ,sEAA5B;AAEA;AACA;AACA;AACA;;;;;;;;IACqBM;EA8DnB;AACF;AACA;AACA;AACA;AACA;EACE,iBAAYC,WAAZ,EAAyBC,QAAzB,EAAmC;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA,OAjEvB;QACVC,UAAU,EAAE,KADF;QAEVC,iBAAiB,EAAE,EAFT;QAGVC,WAAW,EAAE,KAHH;QAIVC,gBAAgB,EAAE,KAJR;QAKVC,YAAY,EAAE,KALJ;QAMVC,gBAAgB,EAAE,MANR;QAMgB;QAC1BC,qBAAqB,EAAE,gCAPb;QAQVC,YAAY,EAAE,KARJ;QASVC,QAAQ,EAAEd,gBAAgB,CAACe,eATjB;QAUVC,qBAAqB,EAAE,KAVb;QAWVC,mBAAmB,EAAE,KAXX;QAYVC,aAAa,EAAE,IAZL;QAaVC,UAAU,EAAE,EAbF;QAcVC,kBAAkB,EAAE,KAdV;QAeVC,eAAe,EAAE,yBAASC,GAAT,EAAc;UAC7B,IAAItE,MAAJ;;UACA,IAAI,OAAOsE,GAAP,KAAe,WAAnB,EAAgC;YAC9BtE,MAAM,GAAGuE,IAAI,CAACC,KAAL,CAAWF,GAAG,CAACG,YAAf,CAAT;;YACA,IAAIzE,MAAM,KAAK,IAAX,IAAmB,CAAC,GAAG0E,cAAH,CAAkBxC,IAAlB,CAAuBlC,MAAvB,EAA+B,QAA/B,CAAxB,EAAkE;cAChEA,MAAM,GAAG,EAAT;;cACA,IAAIsE,GAAG,CAACK,MAAJ,KAAe,GAAnB,EAAwB;gBACtB3E,MAAM,CAACA,MAAP,GAAgBgD,gBAAgB,CAAC4B,UAAjC;gBACA5E,MAAM,CAAC6E,SAAP,GAAmB,CAAnB;cACD,CAHD,MAGO;gBACL7E,MAAM,CAACA,MAAP,GAAgBgD,gBAAgB,CAAC8B,WAAjC;gBACA9E,MAAM,CAAC6E,SAAP,GAAmB,GAAnB;cACD;YACF;UACF;;UACD,OAAO7E,MAAP;QACD,CA/BS;QAgCV+E,cAAc,EAAE,wBAASC,YAAT,EAAuB;UACrC,OAAOA,YAAP;QACD,CAlCS;QAmCVC,YAAY,EAAE,sBAASC,YAAT,EAAuBC,UAAvB,EAAmC;UAC/C,QAAQD,YAAR;YACE,KAAKlC,gBAAgB,CAACe,eAAtB;cACEqB,OAAO,CAACC,KAAR,CAAcF,UAAd;cACA;;YACF,KAAKnC,gBAAgB,CAACsC,iBAAtB;cACEF,OAAO,CAACG,IAAR,CAAaJ,UAAb;cACA;;YACF,KAAKnC,gBAAgB,CAACwC,cAAtB;cACEJ,OAAO,CAACK,IAAR,CAAaN,UAAb;cACA;;YACF,KAAKnC,gBAAgB,CAAC0C,eAAtB;cACE,IAAIN,OAAO,CAACO,KAAZ,EAAmB;gBACjBP,OAAO,CAACO,KAAR,CAAcR,UAAd;cACD,CAFD,MAEO;gBACLC,OAAO,CAACQ,GAAR,CAAYT,UAAZ;cACD;;cACD;UAhBJ;QAkBD;MAtDS;IAiEuB;;IAAA;;IAAA;;IACjC,IAAI,0DAAehC,OAAnB,EAA4B;MAC1B,MAAM,IAAI5C,SAAJ,CAAc,6CAAd,CAAN;IACD;;IACD,KAAKsF,YAAL,GAAoB7C,gBAAgB,CAAC8C,qBAArC;IACA,KAAKC,aAAL,GAAqB,CAArB;IACA,KAAKC,aAAL,GAAqB,EAArB;;IAEA,sCAAgB,IAAhB;;IACA,0CAAoB5C,WAApB;;IAEA,KAAKC,QAAL,GAAgBA,QAAhB;IACA,KAAK4C,WAAL,GAAmB,KAAK5C,QAAL,CAAcS,QAAjC;IACA,KAAKE,qBAAL,GAA6B,KAAKX,QAAL,CAAcW,qBAA3C;EACD;EAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;WACE,oBACIkC,YADJ,EAEIC,iBAFJ,EAGIC,kBAHJ,EAGiC;MAC/B,IAAIC,WAAW,GAAGrD,gBAAgB,CAAC8B,WAAnC;;MAEA,IAAI,KAAKwB,aAAL,EAAJ,EAA0B;QACxB,KAAKC,eAAL,CAAqB,0CAAkBC,WAAvC,EAAoDL,iBAApD;MACD,CAFD,MAEO,IAAI,KAAKM,YAAL,EAAJ,EAAyB;QAC9B,KAAKF,eAAL,CAAqB,0CAAkBG,UAAvC,EAAmDN,kBAAnD;MACD,CAFM,MAEA;QACL,IAAI,KAAKpC,qBAAT,EAAgC;UAC9B,KAAK2C,GAAL,CAASC,YAAT;QACD;;QAED,KAAKf,YAAL,GAAoB7C,gBAAgB,CAAC6D,iBAArC;QACA,KAAKd,aAAL,GAAqB,CAArB;QACAM,WAAW,GAAGrD,gBAAgB,CAAC4B,UAA/B;QACA,KAAKkC,gBAAL,CAAsBZ,YAAtB;MACD;;MAED,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAEA,KAAKwB,eAAL,CAAqBX,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;;;;SACE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;;;SACE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAahD,QAAb,EAA+B;MAC7B,6FAAqB,IAArB,eAAwCA,QAAxC;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,mBACI6C,YADJ,EAEIe,eAFJ,EAE8B;MAC5B,IAAIZ,WAAW,GAAGrD,gBAAgB,CAAC8B,WAAnC;;MAEA,IAAI,KAAKoC,UAAL,CAAgBD,eAAhB,EACA,0CAAkBE,uBADlB,EAEA,0CAAkBC,oBAFlB,CAAJ,EAE6C;QAC3C,KAAKvB,YAAL,GAAoB7C,gBAAgB,CAACqE,gBAArC;QAEA,IAAMrH,MAAM,GAAG,KAAKsH,SAAL,CAAe,IAAf,CAAf;;QACA,IAAI,CAAC,KAAKjE,QAAL,CAAcI,gBAAf,IAAmC,CAAC,KAAKJ,QAAL,CAAcG,WAAlD,IACF,OAAOxD,MAAM,CAAC6E,SAAd,KAA4B,WAD1B,IACyC7E,MAAM,CAAC6E,SAAP,GAAmB,CADhE,EACmE;UACjE,KAAK0B,eAAL,CAAqBvG,MAAM,CAAC6E,SAA5B;QACD;;QACDwB,WAAW,GAAI,OAAOrG,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACA,MAAzC,GACZA,MAAM,CAACA,MADK,GACIgD,gBAAgB,CAAC8B,WADnC;QAGA,IAAImC,eAAJ,EAAqB,KAAKlB,aAAL,GAAqB,CAArB;QAErBM,WAAW,GAAGrD,gBAAgB,CAAC4B,UAA/B;QACA,KAAKkC,gBAAL,CAAsBZ,YAAtB;MACD;;MAED,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAEA,KAAKwB,eAAL,CAAqBX,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBACIH,YADJ,EAEIe,eAFJ,EAGIM,UAHJ,EAGwB;MACtB,IAAIlB,WAAJ;;MAEA,IAAI,KAAKa,UAAL,CAAgBD,eAAhB,EACA,0CAAkBO,oBADlB,EAEA,0CAAkBC,mBAFlB,CAAJ,EAE4C;QAC1C,IAAIR,eAAJ,EAAqB,KAAKlB,aAAL,GAAqB,CAArB;;QACrB,IAAI;UACFM,WAAW,GAAG,KAAKqB,WAAL,CAAiBH,UAAjB,CAAd;QACD,CAFD,CAEE,OAAOI,CAAP,EAAU;UACV,IAAIA,CAAC,YAAY/E,wDAAjB,EAAkC;YAChC,KAAKmD,aAAL,GAAqB4B,CAAC,CAAC9C,SAAvB;YACAwB,WAAW,GAAGrD,gBAAgB,CAAC8B,WAA/B;UACD,CAHD,MAGO;YACL,IAAI6C,CAAC,CAACC,OAAN,EAAe;cACbxC,OAAO,CAACC,KAAR,CAAcsC,CAAC,CAACC,OAAhB;YACD,CAFD,MAEO;cACLxC,OAAO,CAACC,KAAR,CAAcsC,CAAd;YACD;;YACD,KAAKpB,eAAL,CAAqB,0CAAkBsB,OAAvC;UACD;QACF;;QACD,KAAKf,gBAAL,CAAsBZ,YAAtB,EAAoCqB,UAApC;MACD;;MAED,KAAKR,MAAL,CAAYb,YAAZ,EAA0BqB,UAA1B,EAAsC,iBAAiBlB,WAAvD,EACIrD,gBAAgB,CAACwC,cADrB;MAEA,KAAKwB,eAAL,CAAqBX,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBACIH,YADJ,EAEI4B,cAFJ,EAGIb,eAHJ,EAIIM,UAJJ,EAKIzF,KALJ,EAKW;MACT,IAAIA,KAAK,KAAKhB,SAAd,EAAyB;QACvBgB,KAAK,GAAGiG,MAAM,CAACjG,KAAD,CAAd;MACD;;MACD,IAAIuE,WAAW,GAAGrD,gBAAgB,CAAC8B,WAAnC;;MAEA,IAAI,KAAKoC,UAAL,CAAgBD,eAAhB,EAAiC,0CAAkBe,iBAAnD,EACA,0CAAkBC,gBADlB,CAAJ,EACyC;QACvC,IAAIhB,eAAJ,EAAqB,KAAKlB,aAAL,GAAqB,CAArB;;QACrB,IAAI;UACFM,WAAW,GAAG,KAAK6B,WAAL,CAAiBX,UAAjB,EAA6BzF,KAA7B,CAAd;QACD,CAFD,CAEE,OAAO6F,CAAP,EAAU;UACV,IAAIA,CAAC,YAAY/E,wDAAjB,EAAkC;YAChC,KAAKmD,aAAL,GAAqB4B,CAAC,CAAC9C,SAAvB;YACAwB,WAAW,GAAGrD,gBAAgB,CAAC8B,WAA/B;UACD,CAHD,MAGO;YACL,IAAI6C,CAAC,CAACC,OAAN,EAAe;cACbxC,OAAO,CAACC,KAAR,CAAcsC,CAAC,CAACC,OAAhB;YACD,CAFD,MAEO;cACLxC,OAAO,CAACC,KAAR,CAAcsC,CAAd;YACD;;YACD,KAAKpB,eAAL,CAAqB,0CAAkBsB,OAAvC;UACD;QACF;;QACD,KAAKf,gBAAL,CAAsBZ,YAAtB,EAAoCqB,UAApC,EAAgDzF,KAAhD;MACD;;MAED,IAAIuE,WAAW,KAAKvF,SAApB,EAA+B;QAC7BuF,WAAW,GAAGrD,gBAAgB,CAAC8B,WAA/B;MACD,CA7BQ,CA+BT;MACA;;;MACA,IAAIiD,MAAM,CAAC,KAAKhC,aAAN,CAAN,KAA+B,GAAnC,EAAwC;QACtC,IAAI,KAAK1C,QAAL,CAAcC,UAAd,IAA4B,uBAAC,IAAD,WAAhC,EAAgD;UAC9C,KAAK6E,cAAL,CAAoB,KAAK9E,QAAL,CAAcE,iBAAd,GAAkC,IAAtD,EAA4DuE,cAA5D;QACD;MACF;;MAED,KAAKf,MAAL,CAAYb,YAAZ,EAA0BqB,UAA1B,EACI,OAAOzF,KAAP,GAAe,YAAf,GAA8BuE,WADlC,EAEIrD,gBAAgB,CAACwC,cAFrB;MAGA,KAAKwB,eAAL,CAAqBX,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,gBACIH,YADJ,EAEIe,eAFJ,EAE8B;MAC5B,KAAKmB,oBAAL;MAEA,IAAI/B,WAAW,GAAGrD,gBAAgB,CAAC8B,WAAnC;;MAEA,IAAI,KAAKoC,UAAL,CAAgBD,eAAhB,EAAiC,0CAAkBoB,kBAAnD,EACA,0CAAkBC,iBADlB,CAAJ,EAC0C;QACxC,IAAMtI,MAAM,GAAG,KAAKsH,SAAL,CAAe,KAAf,CAAf;;QACA,IAAI,CAAC,KAAKjE,QAAL,CAAcI,gBAAf,IAAmC,CAAC,KAAKJ,QAAL,CAAcG,WAAlD,IACFxD,MAAM,CAAC6E,SADL,IACkB7E,MAAM,CAAC6E,SAAP,GAAmB,CADzC,EAC4C;UAC1C,KAAK0B,eAAL,CAAqBvG,MAAM,CAAC6E,SAA5B;QACD;;QACDwB,WAAW,GAAI,OAAOrG,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACA,MAAzC,GACZA,MAAM,CAACA,MADK,GACIgD,gBAAgB,CAAC8B,WADnC;QAGA,KAAKiC,MAAL,CAAYb,YAAZ,EAA0B,aAA1B,EAAyC,cAAcG,WAAvD,EACIrD,gBAAgB,CAAC0C,eADrB;QAGA,IAAIuB,eAAJ,EAAqB,KAAKlB,aAAL,GAAqB,CAArB;QAErB,KAAKe,gBAAL,CAAsBZ,YAAtB;MACD;;MAED,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAEA,KAAKwB,eAAL,CAAqBX,WAArB;MAEA,OAAOA,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,sBAAaH,YAAb,EAAmC;MACjC,IAAMG,WAAW,GAAG0B,MAAM,CAAC,KAAKhC,aAAN,CAA1B;MAEA,KAAKe,gBAAL,CAAsBZ,YAAtB;MAEA,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAGA,OAAOa,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,wBAAeH,YAAf,EAAqCqC,YAArC,EAAmD;MACjD,IAAIlC,WAAW,GAAG,EAAlB;;MAEA,IAAIkC,YAAY,KAAK,IAAjB,IAAyBA,YAAY,KAAK,EAA9C,EAAkD;QAChDlC,WAAW,GAAG,KAAKmC,yBAAL,CAA+BD,YAA/B,CAAd;QACA,KAAKzB,gBAAL,CAAsBZ,YAAtB;MACD;;MAED,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAGA,OAAOa,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAAcH,YAAd,EAAoCqC,YAApC,EAAkD;MAChD,IAAIlC,WAAW,GAAG,EAAlB;;MAEA,IAAIkC,YAAY,KAAK,IAAjB,IAAyBA,YAAY,KAAK,EAA9C,EAAkD;QAChDlC,WAAW,GAAG,KAAKmC,yBAAL,CAA+BD,YAA/B,EAA6C,IAA7C,CAAd;QACA,KAAKzB,gBAAL,CAAsBZ,YAAtB;MACD;;MAED,KAAKa,MAAL,CAAYb,YAAZ,EAA0B,IAA1B,EAAgC,eAAeG,WAA/C,EACIrD,gBAAgB,CAACwC,cADrB;MAGA,OAAOa,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,oBACIY,eADJ,EAEIwB,eAFJ,EAGIC,cAHJ,EAG6B;MAC3B,IAAI,KAAKC,gBAAL,EAAJ,EAA6B;QAC3B,KAAKpC,eAAL,CAAqBkC,eAArB;QACA,OAAO,KAAP;MACD,CAHD,MAGO,IAAIxB,eAAe,IAAI,KAAKR,YAAL,EAAvB,EAA4C;QACjD,KAAKF,eAAL,CAAqBmC,cAArB;QACA,OAAO,KAAP;MACD;;MAED,OAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,gBACIE,YADJ,EAEIrB,UAFJ,EAGIpC,UAHJ,EAIID,YAJJ,EAI0B;MACxBC,UAAU,GAAG,KAAK0D,aAAL,CAAmBD,YAAnB,EAAiCrB,UAAjC,EAA6CpC,UAA7C,CAAb;;MAEA,IAAID,YAAY,IAAI,KAAKe,WAAzB,EAAsC;QACpC,KAAK5C,QAAL,CAAc4B,YAAd,CAA2BC,YAA3B,EAAyCC,UAAzC;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAAcyD,YAAd,EAAoCrB,UAApC,EAAwDK,OAAxD,EAAyE;MACvE,IAAMkB,UAAU,GAAG,EAAnB;MACA,IAAIC,aAAa,GAAG,EAApB;MAEAA,aAAa,IAAIH,YAAjB;MAEA,IAAII,SAAS,GAAGF,UAAU,GAAGC,aAAa,CAACE,MAA3C;;MAEA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,SAApB,EAA+BE,CAAC,EAAhC,EAAoC;QAClCH,aAAa,IAAI,GAAjB;MACD;;MAEDA,aAAa,IAAI,IAAjB;;MAEA,IAAIxB,UAAJ,EAAgB;QACd,IAAM4B,oBAAoB,GAAG,EAA7B;QAEAJ,aAAa,IAAIxB,UAAjB;QAEAyB,SAAS,GAAGG,oBAAoB,GAAGJ,aAAa,CAACE,MAAjD;;QAEA,KAAK,IAAIG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,SAApB,EAA+BI,CAAC,EAAhC,EAAoC;UAClCL,aAAa,IAAI,GAAjB;QACD;MACF;;MAED,IAAInB,OAAJ,EAAa;QACXmB,aAAa,IAAInB,OAAjB;MACD;;MAED,OAAOmB,aAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,uBAAcM,GAAd,EAA2BC,MAA3B,EAA2C;MACzC,OAAOD,GAAG,IAAIC,MAAP,IAAiBD,GAAG,CAACE,KAAJ,CAAUD,MAAV,CAAxB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,iCAAwBE,SAAxB,EAAmCC,SAAnC,EAAsD;MACpD,OAAOhL,MAAM,CAACiG,cAAP,CAAsBxC,IAAtB,CAA2BsH,SAA3B,EAAsCC,SAAtC,KACLhL,MAAM,CAACiL,wBAAP,CACIjL,MAAM,CAACkL,cAAP,CAAsBH,SAAtB,CADJ,EACsCC,SADtC,CADK,IAGJA,SAAS,IAAID,SAHhB;IAID;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,mCAA0BI,YAA1B,EAAwCC,OAAxC,EAAiD;MAC/C,MAAM,IAAIC,KAAJ,CACF,+DADE,CAAN;IAED;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAYC,WAAZ,EAAyB;MACvB,MAAM,IAAID,KAAJ,CAAU,iDAAV,CAAN;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAYC,WAAZ,EAAyBC,MAAzB,EAAiC;MAC/B,MAAM,IAAIF,KAAJ,CAAU,iDAAV,CAAN;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BACIG,UADJ,EACwBC,SADxB,EAC4C3C,UAD5C,EACwDzF,KADxD,EAC+D;MAC7D,IAAI,CAACyF,UAAD,IAAeA,UAAU,KAAK,EAAlC,EAAsC;QACpC,OAAOvE,gBAAgB,CAAC8B,WAAxB;MACD;;MAED,IAAMqF,SAAS,GAAG5C,UAAU,CAAC6C,KAAX,CAAiB,GAAjB,CAAlB;MACA,IAAIZ,SAAS,GAAG,IAAhB;MACA,IAAInD,WAAW,GAAGrD,gBAAgB,CAAC8B,WAAnC;MACA,IAAIuF,eAAe,GAAG,KAAtB;MAEA,IAAMC,mBAAmB,8CAAuCL,UAAvC,eAAsD1C,UAAtD,+CAAzB;MACA,IAAMgD,gBAAgB,GAAGL,SAAS,GAChC,0CAAkBM,oBADc,GAEhC,0CAAkB3C,OAFpB;;MAIA,KAAK,IAAIqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,SAAS,CAAClB,MAA9B,EAAsCC,CAAC,EAAvC,EAA2C;QACzC,IAAMO,SAAS,GAAGU,SAAS,CAACjB,CAAD,CAA3B;;QAEA,IAAIA,CAAC,KAAKiB,SAAS,CAAClB,MAAV,GAAmB,CAA7B,EAAgC;UAC9B,IAAIiB,SAAS,IAAKT,SAAS,CAACgB,MAAV,CAAiB,CAAjB,EAAoB,CAApB,MAA2B,UAAzC,IACD,OAAOjB,SAAS,CAACkB,cAAjB,IAAmC,UADtC,EACmD;YACjD,KAAKnE,eAAL,CAAqB,0CAAkBoE,iBAAvC;UACD,CAHD,MAGO,IAAI,CAAC,KAAKC,uBAAL,CAA6BpB,SAA7B,EAAwCC,SAAxC,CAAL,EAAyD;YAC9D,KAAKlD,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;UACD,CAFM,MAEA;YACL,IAAI,KAAKhE,aAAL,MACF,KAAKuE,aAAL,CAAmBtD,UAAnB,EAA+B,6BAA/B,CADF,EACiE;cAC/D,KAAKuD,uBAAL,CAA6BvD,UAA7B,EAAyCzF,KAAzC;YACD;;YAED,IAAI,CAACoI,SAAD,IAAc,KAAKnE,aAAL,KAAuB,CAAzC,EAA4C;cAC1CyD,SAAS,CAACC,SAAD,CAAT,GAAuB3H,KAAvB;cACAuE,WAAW,GAAGrD,gBAAgB,CAAC4B,UAA/B;YACD;UACF;QACF,CAjBD,MAiBO;UACL4E,SAAS,GAAGA,SAAS,CAACC,SAAD,CAArB;;UACA,IAAI,CAACD,SAAL,EAAgB;YACd,KAAKjD,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;YACA;UACD;;UAED,IAAId,SAAS,YAAY7G,iDAAzB,EAAmC;YACjC,IAAMoI,KAAK,GAAGzM,QAAQ,CAAC6L,SAAS,CAACjB,CAAC,GAAG,CAAL,CAAV,EAAmB,EAAnB,CAAtB,CADiC,CAGjC;;YACA,IAAI,CAAC8B,KAAK,CAACD,KAAD,CAAV,EAAmB;cACjB,IAAME,IAAI,GAAGzB,SAAS,CAAC0B,UAAV,CAAqBH,KAArB,CAAb;;cAEA,IAAIE,IAAJ,EAAU;gBACRzB,SAAS,GAAGyB,IAAZ;gBACAZ,eAAe,GAAG,IAAlB;cACD,CAHD,MAGO;gBACL,IAAMc,QAAQ,GAAG,KAAKC,eAAL,CAAqB7D,UAArB,EAAiCzF,KAAjC,EACbuI,eADa,CAAjB;gBAEAA,eAAe,GAAG,IAAlB;;gBAEA,IAAI,CAACc,QAAL,EAAe;kBACb,KAAK5E,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;gBACD,CAFD,MAEO;kBACL,IAAId,SAAS,CAAC6B,WAAd,EAA2BF,QAAQ,CAACG,UAAT;kBAE3B9B,SAAS,CAAC0B,UAAV,CAAqBK,IAArB,CAA0BJ,QAA1B;kBACA3B,SAAS,GAAG2B,QAAZ;gBACD;cACF,CAnBgB,CAqBjB;;;cACAjC,CAAC;YACF;UACF;QACF;MACF;;MAED,IAAI7C,WAAW,KAAKrD,gBAAgB,CAAC8B,WAArC,EAAkD;QAChD,KAAKiC,MAAL,CAAYkD,UAAZ,EAAwB,IAAxB,sDACiD1C,UADjD,yBAC0EzF,KAD1E,GAEIkB,gBAAgB,CAACsC,iBAFrB;MAGD;;MAED,OAAOe,WAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,iCAAwB0D,WAAxB,EAAqCC,MAArC,EAA6C,CAC3C;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBD,WAAhB,EAA6BC,MAA7B,EAAqCwB,gBAArC,EAAuD;MACrD,MAAM,IAAI1B,KAAJ,CAAU,qDAAV,CAAN;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAAmBG,UAAnB,EAAuCC,SAAvC,EAA2D3C,UAA3D,EAAuE;MACrE,IAAI,CAACA,UAAD,IAAeA,UAAU,KAAK,EAAlC,EAAsC;QACpC,OAAO,EAAP;MACD;;MAED,IAAM4C,SAAS,GAAG5C,UAAU,CAAC6C,KAAX,CAAiB,GAAjB,CAAlB;MACA,IAAIZ,SAAS,GAAG,IAAhB;MACA,IAAIC,SAAS,GAAG,IAAhB;MAEA,IAAMgC,yBAAyB,8CAAuCxB,UAAvC,eAAsD1C,UAAtD,gCAA/B;MACA,IAAM+C,mBAAmB,8CAAuCL,UAAvC,eAAsD1C,UAAtD,+CAAzB;MACA,IAAMgD,gBAAgB,GAAGL,SAAS,GAChC,0CAAkBM,oBADc,GAEhC,0CAAkB3C,OAFpB;;MAIA,KAAK,IAAIqB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiB,SAAS,CAAClB,MAA9B,EAAsCC,CAAC,EAAvC,EAA2C;QACzCO,SAAS,GAAGU,SAAS,CAACjB,CAAD,CAArB;;QAEA,IAAI,CAACgB,SAAL,EAAgB;UACd,IAAIhB,CAAC,KAAKiB,SAAS,CAAClB,MAAV,GAAmB,CAA7B,EAAgC;YAC9B,IAAI,CAAC,KAAK2B,uBAAL,CAA6BpB,SAA7B,EAAwCC,SAAxC,CAAL,EAAyD;cACvD,KAAKlD,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;cACA;YACD;UACF;QACF,CAPD,MAOO;UACL,IAAKvC,MAAM,CAAC0B,SAAD,CAAN,CAAkBgB,MAAlB,CAAyB,CAAzB,EAA4B,CAA5B,MAAmC,UAApC,IACD,OAAOjB,SAAS,CAACkB,cAAjB,IAAmC,UADtC,EACmD;YACjD,IAAMgB,MAAM,GAAG3D,MAAM,CAAC0B,SAAD,CAAN,CAAkBgB,MAAlB,CAAyB,CAAzB,EAA4B1C,MAAM,CAAC0B,SAAD,CAAN,CAAkBR,MAAlB,GAA2B,CAAvD,CAAf;YACA,OAAOO,SAAS,CAACkB,cAAV,CAAyBgB,MAAzB,CAAP;UACD,CAJD,MAIO,IAAI,CAAC,KAAKd,uBAAL,CAA6BpB,SAA7B,EAAwCC,SAAxC,CAAL,EAAyD;YAC9D,KAAKlD,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;YACA;UACD;QACF;;QAEDd,SAAS,GAAGA,SAAS,CAACC,SAAD,CAArB;;QACA,IAAID,SAAS,KAAK1I,SAAlB,EAA6B;UAC3B,KAAKyF,eAAL,CAAqBgE,gBAArB,EAAuCD,mBAAvC;UACA;QACD;;QAED,IAAId,SAAS,YAAY7G,iDAAzB,EAAmC;UACjC,IAAMoI,KAAK,GAAGzM,QAAQ,CAAC6L,SAAS,CAACjB,CAAC,GAAG,CAAL,CAAV,EAAmB,EAAnB,CAAtB,CADiC,CAGjC;;UACA,IAAI,CAAC8B,KAAK,CAACD,KAAD,CAAV,EAAmB;YACjB,IAAME,IAAI,GAAGzB,SAAS,CAAC0B,UAAV,CAAqBH,KAArB,CAAb;;YAEA,IAAIE,IAAJ,EAAU;cACRzB,SAAS,GAAGyB,IAAZ;YACD,CAFD,MAEO;cACL,KAAK1E,eAAL,CAAqB,0CAAkBoF,qBAAvC,EACIF,yBADJ;cAEA;YACD,CATgB,CAWjB;;;YACAvC,CAAC;UACF;QACF;MACF;;MAED,IAAIM,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK1I,SAAxC,EAAmD;QACjD,IAAI,CAACoJ,SAAL,EAAgB;UACd,IAAIT,SAAS,KAAK,WAAlB,EAA+B;YAC7B,KAAKlD,eAAL,CAAqBtD,mBAAmB,CAAC2I,cAAzC;UACD,CAFD,MAEO,IAAInC,SAAS,KAAK,QAAlB,EAA4B;YACjC,KAAKlD,eAAL,CAAqBtD,mBAAmB,CAAC4I,WAAzC;UACD;QACF;MACF,CARD,MAQO;QACL,OAAOrC,SAAP;MACD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,yBAAgB;MACd,OAAO,KAAK3D,YAAL,KAAsB7C,gBAAgB,CAAC6D,iBAA9C;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,4BAAmB;MACjB,OAAO,KAAKhB,YAAL,KAAsB7C,gBAAgB,CAAC8C,qBAA9C;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,wBAAe;MACb,OAAO,KAAKD,YAAL,KAAsB7C,gBAAgB,CAACqE,gBAA9C;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,YAAGyE,YAAH,EAAyBC,QAAzB,EAA6C;MAC3C,IAAI,CAACA,QAAL,EAAe;MAEf,IAAMC,iBAAiB,GAAGF,YAAY,CAAC1B,KAAb,CAAmB,GAAnB,CAA1B;;MACA,KAAK,IAAIlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8C,iBAAiB,CAAC/C,MAAtC,EAA8CC,CAAC,EAA/C,EAAmD;QACjD,IAAM+C,aAAa,GAAGD,iBAAiB,CAAC9C,CAAD,CAAjB,CAAqBkB,KAArB,CAA2B,GAA3B,CAAtB;QACA,IAAI6B,aAAa,CAAChD,MAAd,KAAyB,CAA7B,EAAgC;QAEhC,IAAML,YAAY,GAAGqD,aAAa,CAAC,CAAD,CAAlC;QAEA,IAAI1E,UAAU,GAAG,IAAjB;;QACA,IAAI0E,aAAa,CAAChD,MAAd,GAAuB,CAA3B,EAA8B;UAC5B1B,UAAU,GAAGuE,YAAY,CAACzJ,OAAb,CAAqBuG,YAAY,GAAG,GAApC,EAAyC,EAAzC,CAAb;QACD;;QAED,KAAK5C,aAAL,CAAmBuF,IAAnB,CAAwB;UACtB3C,YAAY,EAAEA,YADQ;UAEtBrB,UAAU,EAAEA,UAFU;UAGtBwE,QAAQ,EAAEA;QAHY,CAAxB;QAMA,KAAKhF,MAAL,CAAY,IAAZ,EAAkB6B,YAAlB,kCAAyD,KAAK5C,aAAL,CAAmBiD,MAA5E,GAAsFjG,gBAAgB,CAACwC,cAAvG;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,aAAIsG,YAAJ,EAA0BC,QAA1B,EAA8C;MAAA;;MAC5C,IAAI,CAACA,QAAL,EAAe;MAEf,IAAMC,iBAAiB,GAAGF,YAAY,CAAC1B,KAAb,CAAmB,GAAnB,CAA1B;;MAH4C,2BAInClB,CAJmC;QAK1C,IAAM+C,aAAa,GAAGD,iBAAiB,CAAC9C,CAAD,CAAjB,CAAqBkB,KAArB,CAA2B,GAA3B,CAAtB;QACA,IAAI6B,aAAa,CAAChD,MAAd,KAAyB,CAA7B,EAAgC;UAAA;QAAA;QAEhC,IAAML,YAAY,GAAGqD,aAAa,CAAC,CAAD,CAAlC;QAEA,IAAI1E,UAAU,GAAG,IAAjB;;QACA,IAAI0E,aAAa,CAAChD,MAAd,GAAuB,CAA3B,EAA8B;UAC5B1B,UAAU,GAAGuE,YAAY,CAACzJ,OAAb,CAAqBuG,YAAY,GAAG,GAApC,EAAyC,EAAzC,CAAb;QACD;;QAED,IAAMsD,WAAW,GAAG,KAAI,CAAClG,aAAL,CAAmBmG,SAAnB,CAA6B,UAACC,GAAD;UAAA,OAC/CA,GAAG,CAACxD,YAAJ,KAAqBA,YAArB,IACAwD,GAAG,CAAC7E,UAAJ,KAAmBA,UADnB,IAEA6E,GAAG,CAACL,QAAJ,KAAiBA,QAH8B;QAAA,CAA7B,CAApB;;QAKA,IAAIG,WAAW,KAAK,CAAC,CAArB,EAAwB;UACtB,KAAI,CAAClG,aAAL,CAAmBqG,MAAnB,CAA0BH,WAA1B,EAAuC,CAAvC;;UACA,KAAI,CAACnF,MAAL,CAAY,KAAZ,EAAmB6B,YAAnB,oCAA4D,KAAI,CAAC5C,aAAL,CAAmBiD,MAA/E,GAAyFjG,gBAAgB,CAACwC,cAA1G;QACD;MAvByC;;MAI5C,KAAK,IAAI0D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8C,iBAAiB,CAAC/C,MAAtC,EAA8CC,CAAC,EAA/C,EAAmD;QAAA,iBAA1CA,CAA0C;;QAAA;MAoBlD;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,eAAM4C,YAAN,EAA4B;MAAA;;MAC1B,IAAME,iBAAiB,GAAGF,YAAY,CAAC1B,KAAb,CAAmB,GAAnB,CAA1B;;MAD0B,6BAEjBlB,CAFiB;QAGxB,IAAM+C,aAAa,GAAGD,iBAAiB,CAAC9C,CAAD,CAAjB,CAAqBkB,KAArB,CAA2B,GAA3B,CAAtB;QACA,IAAI6B,aAAa,CAAChD,MAAd,KAAyB,CAA7B,EAAgC;UAAA;QAAA;QAEhC,IAAML,YAAY,GAAGqD,aAAa,CAAC,CAAD,CAAlC;QAEA,IAAI1E,UAAU,GAAG,IAAjB;;QACA,IAAI0E,aAAa,CAAChD,MAAd,GAAuB,CAA3B,EAA8B;UAC5B1B,UAAU,GAAGuE,YAAY,CAACzJ,OAAb,CAAqBuG,YAAY,GAAG,GAApC,EAAyC,EAAzC,CAAb;QACD;;QAED,MAAI,CAAC5C,aAAL,GAAqB,MAAI,CAACA,aAAL,CAAmBsG,MAAnB,CAA0B,UAACF,GAAD;UAAA,OAC7CA,GAAG,CAACxD,YAAJ,KAAqBA,YAArB,IACAwD,GAAG,CAAC7E,UAAJ,KAAmBA,UAF0B;QAAA,CAA1B,CAArB;MAbwB;;MAE1B,KAAK,IAAI2B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8C,iBAAiB,CAAC/C,MAAtC,EAA8CC,CAAC,EAA/C,EAAmD;QAAA,mBAA1CA,CAA0C;;QAAA;MAelD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBN,YAAjB,EAAuCrB,UAAvC,EAA2DzF,KAA3D,EAAuE;MACrE,KAAKiF,MAAL,CAAY6B,YAAZ,EAA0BrB,UAA1B,EAAsCzF,KAAtC;;MACA,KAAK,IAAIoH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKlD,aAAL,CAAmBiD,MAAvC,EAA+CC,CAAC,EAAhD,EAAoD;QAClD,IAAMqD,QAAQ,GAAG,KAAKvG,aAAL,CAAmBkD,CAAnB,CAAjB;QACA,IAAMsD,cAAc,GAAGD,QAAQ,CAAC3D,YAAT,KAA0BA,YAAjD;QACA,IAAM6D,qBAAqB,GAAG,CAAC,CAACF,QAAQ,CAAChF,UAAzC;QACA,IAAImF,gBAAgB,GAAG,KAAvB;;QACA,IAAInF,UAAU,IAAIgF,QAAQ,CAAChF,UAAvB,IACFgF,QAAQ,CAAChF,UAAT,CAAoBoF,SAApB,CAA8BJ,QAAQ,CAAChF,UAAT,CAAoB0B,MAApB,GAA6B,CAA3D,MACA,GAFF,EAEO;UACLyD,gBAAgB,GAAGnF,UAAU,CAACqF,OAAX,CAAmBL,QAAQ,CAAChF,UAAT,CAAoBoF,SAApB,CAA8B,CAA9B,EAClCJ,QAAQ,CAAChF,UAAT,CAAoB0B,MAApB,GAA6B,CADK,CAAnB,MACsB,CADzC;QAED,CALD,MAKO;UACLyD,gBAAgB,GAAGH,QAAQ,CAAChF,UAAT,KAAwBA,UAA3C;QACD;;QAED,IAAIiF,cAAc,KAAK,CAACC,qBAAD,IAA0BC,gBAA/B,CAAlB,EAAoE;UAClEH,QAAQ,CAACR,QAAT,CAAkBxE,UAAlB,EAA8BzF,KAA9B;QACD;MACF;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgB+K,WAAhB,EAAqCjF,OAArC,EAAsD;MACpD,IAAI,CAACA,OAAL,EAAc;QACZA,OAAO,GAAG,KAAKY,yBAAL,CAA+BqE,WAA/B,CAAV;MACD;;MAED,KAAK9F,MAAL,CAAY,iBAAZ,EAA+B,IAA/B,EAAqC8F,WAAW,GAAG,IAAd,GAAqBjF,OAA1D,EACI5E,gBAAgB,CAACe,eADrB;MAGA,KAAKgC,aAAL,GAAqBgC,MAAM,CAAC8E,WAAD,CAA3B;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,yBAAgBC,OAAhB,EAAiC;MAC/B,IAAIA,OAAO,KAAKhM,SAAZ,IAAyBgM,OAAO,KAAK9J,gBAAgB,CAAC8B,WAA1D,EAAuE;QACrE,KAAKiB,aAAL,GAAqB,CAArB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,mBAAUgH,mBAAV,EAA+B;MAC7B,MAAM,IAAIjD,KAAJ,CACF,+CADE,CAAN;IAED;IAED;AACF;AACA;AACA;AACA;;;;WACE,+BAAsBkD,IAAtB,EAA4BzF,UAA5B,EAAwC;MAAA;;MACtC,IAAI,CAAC,KAAKoB,gBAAL,EAAL,EAA8B;QAC5BvD,OAAO,CAACC,KAAR,CACI,4EADJ;QAEA;MACD;MAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;MACI,SAAS4H,WAAT,CAAqBC,CAArB,EAAwBC,CAAxB,EAA2BC,SAA3B,EAAsC;QACpC,IAAMC,OAAO,GAAGH,CAAC,CAAC3D,KAAF,CAAQ6D,SAAR,CAAhB;QAEA,IAAIE,OAAJ;;QACA,IAAID,OAAO,KAAK,IAAZ,IAAoB,CAACC,OAAO,GAAGH,CAAC,CAAC5D,KAAF,CAAQ6D,SAAR,CAAX,MAAmC,IAA3D,EAAiE;UAC/D,IAAMG,KAAK,GAAGC,MAAM,CAACH,OAAO,CAAC,CAAD,CAAR,CAApB;UACA,IAAMI,KAAK,GAAGD,MAAM,CAACF,OAAO,CAAC,CAAD,CAAR,CAApB;;UACA,IAAIC,KAAK,KAAKE,KAAd,EAAqB;YACnB,IAAIJ,OAAO,CAAC,CAAD,CAAP,KAAe,IAAnB,EAAyB;cACvB,OAAO,CAAC,CAAR;YACD,CAFD,MAEO,IAAIA,OAAO,CAAC,CAAD,CAAP,KAAe,MAAnB,EAA2B;cAChC,IAAIC,OAAO,CAAC,CAAD,CAAP,KAAe,IAAnB,EAAyB;gBACvB,OAAO,CAAP;cACD,CAFD,MAEO;gBACL,OAAO,CAAC,CAAR;cACD;YACF,CANM,MAMA;cACL,OAAO,CAAP;YACD;UACF;;UACD,OAAOC,KAAK,GAAGE,KAAf;QACD;;QAED,OAAO,IAAP;MACD;;MAED,IAAMC,WAAW,GAAG,oCAApB;MACA,IAAMC,WAAW,GAAG,kCAApB;MAEA,IAAM3N,MAAM,GAAGvB,MAAM,CAACmP,IAAP,CAAYZ,IAAZ,EAAkBa,GAAlB,CAAsB,UAASC,GAAT,EAAc;QACjD,OAAO,CAAC/F,MAAM,CAAC+F,GAAD,CAAP,EAAcd,IAAI,CAACc,GAAD,CAAlB,CAAP;MACD,CAFc,CAAf,CA5CsC,CAgDtC;;MACA9N,MAAM,CAAC+N,IAAP,CAAY,uBAAyB;QAAA;QAAA,IAAfb,CAAe;QAAA,IAAZc,CAAY;;QAAA;QAAA,IAAPb,CAAO;QAAA,IAAJc,CAAI;;QACnC,IAAI1L,IAAJ;;QACA,IAAI,CAACA,IAAI,GAAG0K,WAAW,CAACC,CAAD,EAAIC,CAAJ,EAAOO,WAAP,CAAnB,MAA4C,IAAhD,EAAsD;UACpD,OAAOnL,IAAP;QACD;;QACD,IAAI,CAACA,IAAI,GAAG0K,WAAW,CAACC,CAAD,EAAIC,CAAJ,EAAOQ,WAAP,CAAnB,MAA4C,IAAhD,EAAsD;UACpD,OAAOpL,IAAP;QACD;;QAED,IAAI2K,CAAC,GAAGC,CAAR,EAAW;UACT,OAAO,CAAC,CAAR;QACD;;QACD,IAAID,CAAC,GAAGC,CAAR,EAAW;UACT,OAAO,CAAP;QACD;;QACD,OAAO,CAAP;MACD,CAhBD;MAkBA,IAAIf,GAAJ;MACApM,MAAM,CAACkO,OAAP,CAAe,UAACC,OAAD,EAAa;QAC1B/B,GAAG,GAAG,EAAN;QACAA,GAAG,CAAC+B,OAAO,CAAC,CAAD,CAAR,CAAH,GAAkBA,OAAO,CAAC,CAAD,CAAzB;;QACA,MAAI,CAACC,YAAL,CAAkBrL,qDAAS,CAACqJ,GAAD,CAA3B,EAAkC7E,UAAlC;MACD,CAJD;IAKD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,sBAAayF,IAAb,EAAmBzF,UAAnB,EAA+B;MAC7B,IAAI,CAAC,KAAKoB,gBAAL,EAAL,EAA8B;QAC5BvD,OAAO,CAACC,KAAR,CACI,mEADJ;QAEA;MACD;;MAEDkC,UAAU,GAAGA,UAAU,KAAKzG,SAAf,GAA2ByG,UAA3B,GAAwC,KAArD;MAEA,KAAK8G,YAAL,GAAoBrB,IAApB,CAT6B,CAW7B;;MACA,KAAK,IAAMc,GAAX,IAAkBd,IAAlB,EAAwB;QACtB,IAAI,GAAGtI,cAAH,CAAkBxC,IAAlB,CAAuB8K,IAAvB,EAA6Bc,GAA7B,KAAqCd,IAAI,CAACc,GAAD,CAA7C,EAAoD;UAClD,IAAMQ,iBAAiB,GAAG,CAAC/G,UAAU,GAAGA,UAAU,GAAG,GAAhB,GAAsB,EAAjC,IAAuCuG,GAAjE;UACA,IAAMhM,KAAK,GAAGkL,IAAI,CAACc,GAAD,CAAlB;;UAEA,IAAIhM,KAAK,CAAC,YAAD,CAAT,EAAyB;YACvB,KAAK,IAAIoH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpH,KAAK,CAAC,YAAD,CAAL,CAAoBmH,MAAxC,EAAgDC,CAAC,EAAjD,EAAqD;cACnD,KAAKkF,YAAL,CAAkBtM,KAAK,CAAC,YAAD,CAAL,CAAoBoH,CAApB,CAAlB,EACIoF,iBAAiB,GAAG,GAApB,GAA0BpF,CAD9B;YAED;UACF,CALD,MAKO,IAAIpH,KAAK,CAACyM,WAAN,KAAsB9P,MAA1B,EAAkC;YACvC,KAAK2P,YAAL,CAAkBtM,KAAlB,EAAyBwM,iBAAzB;UACD,CAFM,MAEA;YACL,KAAKpG,WAAL,CAAiBoG,iBAAjB,EAAoCxM,KAApC;UACD;QACF;MACF;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,iCAAwB;MACtB,IAAM6E,GAAG,GAAG,KAAKA,GAAjB,CADsB,CAEtB;MACA;;MACA,OAAOpC,IAAI,CAACiK,SAAL,CAAe;QAAC7H,GAAG,EAAHA;MAAD,CAAf,CAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,iCAAwB;MACtB;MACA;MACA,OAAOpC,IAAI,CAACC,KAAL,CAAW,KAAKiK,qBAAL,EAAX,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBC,gBAAhB,EAAkC;MAChC,MAAM,IAAI5E,KAAJ,CACF,+CADE,CAAN;IAED;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAAmB6E,GAAnB,EAAgCC,MAAhC,EAA2D;MAAA,IAAnBC,SAAmB,uEAAP,KAAO;MACzD,IAAMC,GAAG,GAAG,IAAZ;;MACA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAASJ,GAAT,EAAcC,MAAd,EAAsBvL,QAAtB,EAAgCD,WAAhC,EAA6C;QAC3D,IAAM4L,YAAY,GAAG;UACnB,UAAUhM,gBAAgB,CAAC8B,WADR;UAEnB,aAAa1B,WAAW,CAACyE;QAFN,CAArB;QAKA,IAAI7H,MAAJ;;QACA,IAAI,CAACqD,QAAQ,CAACI,gBAAd,EAAgC;UAC9B,IAAMwL,OAAO,GAAG,IAAIC,cAAJ,EAAhB;UACAD,OAAO,CAACE,IAAR,CAAa,MAAb,EAAqBR,GAArB,EAA0BtL,QAAQ,CAACG,WAAnC;;UAEA,IAAI/E,MAAM,CAACmP,IAAP,CAAYvK,QAAQ,CAACc,UAArB,EAAiC8E,MAArC,EAA6C;YAC3CxK,MAAM,CAACmP,IAAP,CAAYvK,QAAQ,CAACc,UAArB,EAAiC+J,OAAjC,CAAyC,UAACkB,MAAD,EAAY;cACnDH,OAAO,CAACI,gBAAR,CAAyBD,MAAzB,EAAiC/L,QAAQ,CAACc,UAAT,CAAoBiL,MAApB,CAAjC;YACD,CAFD;UAGD;;UAEDH,OAAO,CAACK,eAAR,GAA0BjM,QAAQ,CAACe,kBAAnC;;UAEA,IAAIf,QAAQ,CAACG,WAAb,EAA0B;YACxByL,OAAO,CAACM,MAAR,GAAiB,UAAS5H,CAAT,EAAY;cAC3B,IAAI,OAAOtE,QAAQ,CAACgB,eAAhB,KAAoC,UAAxC,EAAoD;gBAClDrE,MAAM,GAAGqD,QAAQ,CAACgB,eAAT,CAAyB4K,OAAzB,CAAT;cACD,CAFD,MAEO;gBACLjP,MAAM,GAAGuE,IAAI,CAACC,KAAL,CAAWyK,OAAO,CAACxK,YAAnB,CAAT;cACD;YACF,CAND;UAOD;;UACD,IAAI;YACFmK,MAAM,GAAGvL,QAAQ,CAAC0B,cAAT,CAAwB6J,MAAxB,CAAT;;YACA,IAAIA,MAAM,YAAYY,KAAtB,EAA6B;cAC3BP,OAAO,CAACI,gBAAR,CAAyB,cAAzB,EACI,mCADJ;cAEAJ,OAAO,CAACQ,IAAR,CAAab,MAAM,CAACc,IAAP,CAAY,GAAZ,CAAb;YACD,CAJD,MAIO;cACLT,OAAO,CAACI,gBAAR,CAAyB,cAAzB,EACIhM,QAAQ,CAACO,qBADb;cAEAqL,OAAO,CAACQ,IAAR,CAAalL,IAAI,CAACiK,SAAL,CAAeI,MAAf,CAAb;YACD;;YAED,IAAI,CAACvL,QAAQ,CAACG,WAAd,EAA2B;cACzB,IAAI,OAAOH,QAAQ,CAACgB,eAAhB,KAAoC,UAAxC,EAAoD;gBAClDrE,MAAM,GAAGqD,QAAQ,CAACgB,eAAT,CAAyB4K,OAAzB,CAAT;cACD,CAFD,MAEO;gBACLjP,MAAM,GAAGuE,IAAI,CAACC,KAAL,CAAWyK,OAAO,CAACxK,YAAnB,CAAT;cACD;YACF,CAND,MAMO;cACLzE,MAAM,GAAG,EAAT;cACAA,MAAM,CAACA,MAAP,GAAgBgD,gBAAgB,CAAC4B,UAAjC;cACA5E,MAAM,CAAC6E,SAAP,GAAmB,CAAnB;cACAiK,GAAG,CAAChI,gBAAJ,CAAqB,eAArB;cACA,OAAO9G,MAAP;YACD;UACF,CAzBD,CAyBE,OAAO2H,CAAP,EAAU;YACVvC,OAAO,CAACC,KAAR,CAAcsC,CAAd;YACAmH,GAAG,CAAChI,gBAAJ,CAAqB,aAArB;YACA,OAAOkI,YAAP;UACD;QACF,CAnDD,MAmDO;UACL,IAAI;YACF,IAAMW,OAAO,GAAG;cACd5N,IAAI,EAAEsB,QAAQ,CAACO;YADD,CAAhB;YAGA,IAAIgM,IAAJ;;YACA,IAAIhB,MAAM,YAAYY,KAAtB,EAA6B;cAC3BI,IAAI,GAAG,IAAIC,IAAJ,CAAS,CAACjB,MAAM,CAACc,IAAP,CAAY,GAAZ,CAAD,CAAT,EAA6BC,OAA7B,CAAP;YACD,CAFD,MAEO;cACLC,IAAI,GAAG,IAAIC,IAAJ,CAAS,CAACtL,IAAI,CAACiK,SAAL,CAAeI,MAAf,CAAD,CAAT,EAAmCe,OAAnC,CAAP;YACD;;YAED3P,MAAM,GAAG,EAAT;;YACA,IAAI8P,SAAS,CAACC,UAAV,CAAqBpB,GAArB,EAA0BiB,IAA1B,CAAJ,EAAqC;cACnC5P,MAAM,CAACA,MAAP,GAAgBgD,gBAAgB,CAAC4B,UAAjC;cACA5E,MAAM,CAAC6E,SAAP,GAAmB,CAAnB;YACD,CAHD,MAGO;cACL7E,MAAM,CAACA,MAAP,GAAgBgD,gBAAgB,CAAC8B,WAAjC;cACA9E,MAAM,CAAC6E,SAAP,GAAmB,GAAnB;YACD;UACF,CAnBD,CAmBE,OAAO8C,CAAP,EAAU;YACVvC,OAAO,CAACC,KAAR,CAAcsC,CAAd;YACAmH,GAAG,CAAChI,gBAAJ,CAAqB,aAArB;YACA,OAAOkI,YAAP;UACD;QACF;;QAED,IAAI,OAAOhP,MAAP,KAAkB,WAAtB,EAAmC;UACjC8O,GAAG,CAAChI,gBAAJ,CAAqB,aAArB;UACA,OAAOkI,YAAP;QACD;;QAED,IAAIhP,MAAM,CAACA,MAAP,KAAkB,IAAlB,IACFA,MAAM,CAACA,MAAP,KAAkBgD,gBAAgB,CAAC4B,UADrC,EACiD;UAC/CkK,GAAG,CAAChI,gBAAJ,CAAqB,eAArB;QACD,CAHD,MAGO;UACLgI,GAAG,CAAChI,gBAAJ,CAAqB,aAArB;QACD;;QAED,OAAO9G,MAAP;MACD,CAlGD;;MAoGA,IAAI,OAAOP,wDAAP,KAAoB,WAAxB,EAAqC;QACnC,IAAMkC,SAAS,GAAGlC,sDAAQ,CAACsP,OAAD,EAAU,GAAV,CAA1B;QACApN,SAAS,CAACgN,GAAD,EAAMC,MAAN,EAAc,KAAKvL,QAAnB,EAA6B,KAAKD,WAAlC,CAAT,CAFmC,CAInC;;QACA,IAAIyL,SAAJ,EAAe;UACblN,SAAS,CAACD,KAAV;QACD;;QAED,OAAO;UACL1B,MAAM,EAAEgD,gBAAgB,CAAC4B,UADpB;UAELC,SAAS,EAAE;QAFN,CAAP;MAID,CAbD,MAaO;QACL,OAAOkK,OAAO,CAACJ,GAAD,EAAMC,MAAN,EAAc,KAAKvL,QAAnB,EAA6B,KAAKD,WAAlC,CAAd;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,wBAAe4M,IAAf,EAA6BjE,QAA7B,EAA+C;MAC7C,sCAAgB,IAAIkE,eAAJ,CAAoB,IAApB,EAA0BD,IAA1B,EAAgCjE,QAAhC,CAAhB;;MACA,KAAKhF,MAAL,CAAY,gBAAZ,EAA8B,EAA9B,EAAkC,WAAlC,EACI/D,gBAAgB,CAAC0C,eADrB;IAED;IAED;AACF;AACA;;;;WACE,gCAAuB;MACrB,0BAAI,IAAJ,aAAmB;QACjB,sCAAclE,MAAd;;QACA,sCAAgB,IAAhB;;QACA,KAAKuF,MAAL,CAAY,sBAAZ,EAAoC,EAApC,EAAwC,SAAxC,EACI/D,gBAAgB,CAAC0C,eADrB;MAED;IACF;;;;;AAGH;AACA;AACA;;;;;;;;;;;;;IACMuK;EAMJ;AACF;AACA;AACA;AACA;AACA;EACE,yBAAYC,GAAZ,EAAsBF,IAAtB,EAAoCjE,QAApC,EAAsD;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA,OAVzC;IAUyC;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IACpD,kCAAYmE,GAAZ;;IACA,uCAAgBjP,UAAU,CAAC,KAAKkP,OAAL,CAAaC,IAAb,CAAkB,IAAlB,CAAD,EAA0BJ,IAA1B,CAA1B;;IACA,uCAAiBjE,QAAjB;EACD;EAED;AACF;AACA;;;;;WACE,kBAAS;MACP,wCAAkB,IAAlB;;MACA,0BAAI,IAAJ,cAAmB;QACjBtK,YAAY,uBAAC,IAAD,aAAZ;MACD;IACF;IAED;AACF;AACA;;;;WACE,mBAAU;MACR,IAAI,uBAAC,IAAD,aAAJ,EAAsB;QACpB,kCAAU4O,MAAV,uBAAiB,IAAjB;MACD;IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxvCH;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMY,mBAAmB,GAAGnO,0EAA5B;AACA,IAAME,gBAAgB,GAAGF,uEAAzB;AACA,IAAMoO,qBAAqB,GAAGrO,wEAA9B;AACA,IAAMsO,iBAAiB,GAAGL,6EAA1B;AACA,IAAMO,eAAe,GAAGL,kEAAxB;AAEA;AACA;AACA;;;;IACqBM;;;;;EAGnB;AACF;AACA;AACA;EACE,sBAAYjO,QAAZ,EAA0B;IAAA;;IAAA;;IACxB,IAAMkO,aAAa,mCACd;MACDC,gBAAgB,EAAE;IADjB,CADc,GAGXnO,QAHW,CAAnB;;IAMA,0BAAM6N,qBAAN,EAA6BK,aAA7B;;IAPwB;MAAA;MAAA;IAAA;;IAAA,yEAyTD,UAACE,gBAAD,EAAmBC,aAAnB,EAAkC5P,KAAlC,EAA4C;MACnE,IAAI6P,KAAK,GAAG,KAAZ;MACA,IAAMC,KAAK,GAAGH,gBAAgB,CAACI,MAA/B;;MACA,KAAK,IAAI3I,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0I,KAAJ,IAAa,CAACD,KAA9B,EAAqCzI,CAAC,EAAtC,EAA0C;QACxC,IAAIA,CAAC,KAAKwI,aAAN,IAAuBD,gBAAgB,CAACvG,UAAjB,CAA4BhC,CAA5B,MAAmCpH,KAA9D,EAAqE;UACnE6P,KAAK,GAAG,IAAR;QACD;MACF;;MACD,OAAOA,KAAP;IACD,CAlUyB;;IASxB,MAAKhL,GAAL,GAAW,IAAI4J,mDAAJ,EAAX;IACA,MAAKuB,GAAL,GAAW,IAAIxB,mDAAJ,EAAX,CAVwB,CAYxB;;IACA,MAAKyB,UAAL,GAAkB,MAAKC,aAAvB;IACA,MAAKC,SAAL,GAAiB,MAAKC,YAAtB;IACA,MAAKC,QAAL,GAAgB,MAAKC,WAArB;IACA,MAAKC,QAAL,GAAgB,MAAKC,WAArB;IACA,MAAKC,MAAL,GAAc,MAAKC,SAAnB;IACA,MAAKC,YAAL,GAAoB,MAAKC,eAAzB;IACA,MAAKC,cAAL,GAAsB,MAAKC,iBAA3B;IACA,MAAKC,aAAL,GAAqB,MAAKC,gBAA1B;IApBwB;EAqBzB;EAED;AACF;AACA;AACA;;;;;SACE,eAAc;MACZ,6BAAO,IAAP;IACD;IAED;AACF;AACA;;;;WACE,yBAAgB;MACd,KAAKnM,GAAL,CAAS2E,UAAT;MACA,OAAO,KAAKA,UAAL,CAAgB,YAAhB,CAAP;IACD;IAED;AACF;AACA;;;;WACE,wBAAe;MACb,IAAMtL,MAAM,GAAG,KAAK+S,SAAL,CAAe,WAAf,EAA4B,IAA5B,CAAf;;MAEA,IAAI/S,MAAM,KAAKgD,gBAAgB,CAAC4B,UAAhC,EAA4C;QAC1C,IAAI,KAAKkN,GAAL,CAASkB,GAAT,CAAaC,OAAb,KAAyB,QAA7B,EAAuC;UACrC,QAAQ,KAAKnB,GAAL,CAASkB,GAAT,CAAaC,OAArB;YACE,KAAK,UAAL;cACE,KAAKnM,gBAAL,CAAsB,cAAtB;cACA;;YACF,KAAK,UAAL;cACE,KAAKA,gBAAL,CAAsB,kBAAtB;cACA;;YACF,KAAK,QAAL;cACE,KAAKA,gBAAL,CAAsB,gBAAtB;cACA;;YACF,KAAK,MAAL;cACE,KAAKA,gBAAL,CAAsB,cAAtB;cACA;;YACF,KAAK,SAAL;cACE,KAAKA,gBAAL,CAAsB,iBAAtB;cACA;;YACF,KAAK,SAAL;cACE,KAAKA,gBAAL,CAAsB,iBAAtB;cACA;;YACF,KAAK,YAAL;cACE,KAAKA,gBAAL,CAAsB,oBAAtB;cACA;UArBJ;QAuBD,CAxBD,MAwBO,IAAI,KAAKzD,QAAL,CAAcQ,YAAlB,EAAgC;UACrC,KAAKiD,gBAAL,CAAsB,cAAtB;QACD;MACF;;MAED,OAAO9G,MAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,qBAAYuH,UAAZ,EAAwB;MACtB,OAAO,KAAK2L,QAAL,CAAc,UAAd,EAA0B,IAA1B,EAAgC3L,UAAhC,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,qBAAYA,UAAZ,EAAwBzF,KAAxB,EAA+B;MAC7B,OAAO,KAAKqR,QAAL,CAAc,UAAd,EAA0B,QAA1B,EAAoC,IAApC,EAA0C5L,UAA1C,EAAsDzF,KAAtD,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,qBAAY;MACV,OAAO,KAAKuO,MAAL,CAAY,QAAZ,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,2BAAkB;MAChB,OAAO,KAAK+C,YAAL,CAAkB,cAAlB,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,2BAAkB7K,YAAlB,EAAgC;MAC9B,OAAO,KAAK8K,cAAL,CAAoB,gBAApB,EAAsC9K,YAAtC,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,0BAAiBA,YAAjB,EAA+B;MAC7B,OAAO,KAAK+K,aAAL,CAAmB,eAAnB,EAAoC/K,YAApC,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,qBAAYhB,UAAZ,EAAwBzF,KAAxB,EAA+B;MAC7B,OAAO,KAAKyR,kBAAL,CAAwB,UAAxB,EAAoC,IAApC,EAA0ChM,UAA1C,EAAsDzF,KAAtD,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgByF,UAAhB,EAA4BzF,KAA5B,EAAmCuI,eAAnC,EAAoD;MAClD,IAAIc,QAAJ;;MAEA,IAAI,KAAKN,aAAL,CAAmBtD,UAAnB,EAA+B,yBAA/B,CAAJ,EAA+D;QAC7D4D,QAAQ,GAAG,IAAIyF,mEAAJ,EAAX;MACD,CAFD,MAEO,IAAIvG,eAAe,IAAI,KAAKQ,aAAL,CAAmBtD,UAAnB,EAC1B,sDAD0B,CAAvB,EACsD;QAC3D,IAAMiM,KAAK,GAAGjM,UAAU,CAAC6C,KAAX,CAAiB,GAAjB,CAAd;QACA,IAAMW,KAAK,GAAGyC,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAApB;QACA,IAAMC,WAAW,GAAG,KAAK9M,GAAL,CAAS+M,YAAT,CAAsBxI,UAAtB,CAAiCH,KAAjC,CAApB;;QACA,IAAI,KAAKzE,aAAL,EAAJ,EAA0B;UACxB,IAAI,CAACmN,WAAW,CAAC1R,IAAjB,EAAuB;YACrB,KAAKwE,eAAL,CACI2K,qBAAqB,CAACyC,0BAD1B;UAED,CAHD,MAGO;YACL,KAAKC,4BAAL,CAAkCH,WAAlC,EAA+C3R,KAA/C;YAEA,IAAM+R,aAAa,GAAG1C,iBAAiB,CAACsC,WAAW,CAAC1R,IAAb,CAAvC;;YACA,IAAI8R,aAAJ,EAAmB;cACjB,KAAKC,sBAAL,CAA4BD,aAA5B,EAA2C/R,KAA3C,EAAkD2R,WAAW,CAAC1R,IAA9D;YACD,CAFD,MAEO;cACL,KAAKwE,eAAL,CAAqB2K,qBAAqB,CAAC6C,mBAA3C,EACI,8BAA8BN,WAAW,CAAC1R,IAD9C;YAED;UACF;QACF;;QACD,IAAI,KAAKgE,aAAL,KAAuB,CAA3B,EAA8B;UAC5BoF,QAAQ,GAAG,IAAIsF,qFAAJ,EAAX;QACD;MACF,CAxBM,MAwBA,IAAIpG,eAAe,IAAI,KAAKQ,aAAL,CAAmBtD,UAAnB,EAC1B,+CAD0B,CAAvB,EAC+C;QACpD4D,QAAQ,GAAG,IAAIwF,+EAAJ,EAAX;MACD,CAHM,MAGA,IAAI,CAACtG,eAAD,IACP,KAAKQ,aAAL,CAAmBtD,UAAnB,EAA+B,2BAA/B,CADG,EAC0D;QAC/D4D,QAAQ,GAAG,IAAIuF,qEAAJ,EAAX;MACD,CAHM,MAGA,IAAI,KAAK7F,aAAL,CAAmBtD,UAAnB,EACP,oCADO,CAAJ,EACoC;QACzC4D,QAAQ,GAAG,IAAIqF,iEAAJ,EAAX;MACD,CAHM,MAGA,IAAI,KAAK3F,aAAL,CAAmBtD,UAAnB,EACP,gCADO,CAAJ,EACgC;QACrC4D,QAAQ,GAAG,IAAIqF,iEAAJ,CAAsB,IAAtB,CAAX;MACD;;MAED,OAAOrF,QAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,gCAAuB0I,aAAvB,EAAsC/R,KAAtC,EAA6CkS,gBAA7C,EAA+D;MAC7D,IAAIC,KAAK,GAAG,EAAZ;;MACA,IAAIJ,aAAJ,aAAIA,aAAJ,eAAIA,aAAa,CAAEK,SAAnB,EAA8B;QAC5BD,KAAK,GAAGlM,MAAM,CAACjG,KAAD,CAAN,CAAcsI,KAAd,CAAoByJ,aAAa,CAACK,SAAlC,CAAR;MACD,CAFD,MAEO;QACLD,KAAK,CAAC,CAAD,CAAL,GAAWnS,KAAX;MACD;;MAED,IAAImS,KAAK,CAAChL,MAAN,GAAe,CAAf,IAAoBgL,KAAK,CAAChL,MAAN,IAAgB4K,aAAa,CAACzU,GAAtD,EAA2D;QACzD,KAAK+U,yBAAL,CAA+BH,gBAA/B,EAAiDC,KAAjD,EAAwDnS,KAAxD;MACD,CAFD,MAEO,IAAImS,KAAK,CAAChL,MAAN,GAAe4K,aAAa,CAACzU,GAAjC,EAAsC;QAC3C,KAAKmH,eAAL,CAAqB2K,qBAAqB,CAAC6C,mBAA3C,EACI,qCADJ;MAED;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,sCAA6BN,WAA7B,EAA0C3R,KAA1C,EAAiD;MAC/C,IAAMsS,iBAAiB,GAAGX,WAAW,CAACtC,iBAAZ,CAA8BU,MAAxD;;MACA,IAAI4B,WAAW,CAAC1R,IAAZ,KAAqB,QAAzB,EAAmC;QACjC,KAAK,IAAImH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkL,iBAAJ,IAAyB,KAAKrO,aAAL,KACzC,CADA,EACGmD,CAAC,EADJ,EACQ;UACN,IAAMmL,QAAQ,GAAGZ,WAAW,CAACtC,iBAAZ,CAA8BjG,UAA9B,CAAyChC,CAAzC,CAAjB;;UACA,IAAImL,QAAQ,CAACC,OAAT,KAAqBxS,KAAzB,EAAgC;YAC9B,KAAKyE,eAAL,CAAqB2K,qBAAqB,CAAC6C,mBAA3C;UACD;QACF;MACF;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,iCAAwBxM,UAAxB,EAAoCzF,KAApC,EAA2C;MACzC,IAAM0R,KAAK,GAAGjM,UAAU,CAAC6C,KAAX,CAAiB,GAAjB,CAAd;MACA,IAAMW,KAAK,GAAGyC,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAApB;MACA,IAAMe,aAAa,GAAG/G,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAA5B;MACA,IAAMC,WAAW,GAAG,KAAK9M,GAAL,CAAS+M,YAAT,CAAsBxI,UAAtB,CAAiCH,KAAjC,CAApB;MAEA,IAAMqJ,iBAAiB,GAAGX,WAAW,CAACtC,iBAAZ,CAA8BU,MAAxD;MACA,KAAK+B,4BAAL,CAAkCH,WAAlC,EAA+C3R,KAA/C;MAEA,IAAM+R,aAAa,GAAG1C,iBAAiB,CAACsC,WAAW,CAAC1R,IAAb,CAAvC;;MACA,IAAI,OAAO8R,aAAa,CAACW,KAArB,KAA+B,WAA/B,IAA8CJ,iBAAiB,IAC/DP,aAAa,CAACW,KADlB,EACyB;QACvB,KAAKV,sBAAL,CAA4BD,aAA5B,EAA2C/R,KAA3C,EAAkD2R,WAAW,CAAC1R,IAA9D;;QAEA,IAAI,KAAKgE,aAAL,KAAuB,CAAvB,KACC,CAAC8N,aAAa,CAACY,SAAf,IACG,CAAC,KAAKC,sBAAL,CAA4BjB,WAAW,CAACtC,iBAAxC,EACGoD,aADH,EACkBzS,KADlB,CAFL,KAIC,KAAKiE,aAAL,KAAuB,CAAvB,IAA4BjE,KAAK,KAAK,EAJ3C,EAIgD,CAC9C;QACD,CAND,MAMO;UACL,IAAI,KAAKiE,aAAL,KAAuB,CAA3B,EAA8B;YAC5B,KAAKQ,eAAL,CAAqB2K,qBAAqB,CAAC6C,mBAA3C,EACI,2CADJ;UAED;QACF;MACF,CAhBD,MAgBO;QACL,KAAKxN,eAAL,CAAqB2K,qBAAqB,CAAC6C,mBAA3C,EACI,6CADJ;MAED;IACF;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,qBAAYxM,UAAZ,EAAwB;MACtB,OAAO,KAAKoN,kBAAL,CAAwB,UAAxB,EAAoC,IAApC,EAA0CpN,UAA1C,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,mCAA0BsF,WAA1B,EAAuC+H,MAAvC,EAA+C;MAC7C,IAAIC,YAAY,GAAG,EAAnB;MACA,IAAIC,aAAa,GAAG,EAApB,CAF6C,CAI7C;;MACAjI,WAAW,GAAG9E,MAAM,CAAC8E,WAAD,CAApB;;MACA,IAAIoE,mBAAmB,CAAC8D,kBAApB,CAAuClI,WAAvC,CAAJ,EAAyD;QACvDgI,YAAY,GAAG5D,mBAAmB,CAAC8D,kBAApB,CAAuClI,WAAvC,EAAoDgI,YAAnE;QACAC,aAAa,GAAG7D,mBAAmB,CAAC8D,kBAApB,CAAuClI,WAAvC,EAAoDiI,aAApE;MACD;;MAED,OAAOF,MAAM,GAAGE,aAAH,GAAmBD,YAAhC;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;;IAYE;AACF;AACA;AACA;AACA;AACA;IACE,mCAA0Bb,gBAA1B,EAA4CC,KAA5C,EAAmDnS,KAAnD,EAA0D;MACxD,IAAMuS,QAAQ,GAAGlD,iBAAiB,CAAC6C,gBAAD,CAAlC;MACA,IAAMgB,WAAW,GAAG,IAAIC,MAAJ,CAAWZ,QAAQ,CAACa,MAApB,CAApB;;MACA,KAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+K,KAAK,CAAChL,MAAV,IAAoB,KAAKlD,aAAL,KAAuB,CAA3D,EAA8DmD,CAAC,EAA/D,EAAmE;QACjE,IAAI8K,gBAAgB,CAACzK,KAAjB,CACA,0DADA,CAAJ,EACiE;UAC/D0K,KAAK,CAAC/K,CAAD,CAAL,GAAW,KAAKiM,6BAAL,CAAmClB,KAAK,CAAC/K,CAAD,CAAxC,CAAX;QACD;;QAED,IAAImL,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEe,UAAd,EAA0B;UACxB,IAAMC,MAAM,GAAGpB,KAAK,CAAC/K,CAAD,CAAL,CAASkB,KAAT,CAAeiK,QAAQ,CAACe,UAAxB,CAAf;;UACA,IAAIC,MAAM,CAACpM,MAAP,KAAkB,CAAtB,EAAyB;YACvB,IAAMqM,OAAO,GAAGD,MAAM,CAAC,CAAD,CAAN,CAAU9L,KAAV,CAAgByL,WAAhB,CAAhB;;YACA,IAAI,CAACM,OAAL,EAAc;cACZ,KAAK/O,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;YACD,CAFD,MAEO;cACL,IAAI,CAACF,MAAM,CAAC,CAAD,CAAN,CAAU9L,KAAV,CAAgB,IAAI0L,MAAJ,CAAWZ,QAAQ,CAACmB,OAApB,CAAhB,CAAL,EAAoD;gBAClD,KAAKjP,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;cACD;YACF;UACF,CATD,MASO;YACL,KAAKhP,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;UACD;QACF,CAdD,MAcO;UACL,IAAMD,QAAO,GAAGrB,KAAK,CAAC/K,CAAD,CAAL,CAASK,KAAT,CAAeyL,WAAf,CAAhB;;UACA,IAAK,CAACM,QAAD,IAAYxT,KAAK,KAAK,EAAvB,IACC,CAACwT,QAAD,IAAYtB,gBAAgB,KAAK,YADtC,EACqD;YACnD,KAAKzN,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;UACD,CAHD,MAGO;YACL,IAAIvB,gBAAgB,KAAK,SAArB,IAAkCC,KAAK,CAAChL,MAAN,GAAe,CAArD,EAAwD;cACtD,IAAIuE,MAAM,CAACyG,KAAK,CAAC,CAAD,CAAN,CAAN,GAAmBzG,MAAM,CAACyG,KAAK,CAAC,CAAD,CAAN,CAA7B,EAAyC;gBACvC,KAAK1N,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;cACD;YACF,CAJD,MAIO;cACL,IAAItB,KAAK,CAAC/K,CAAD,CAAL,KAAa,EAAb,IAAmBmL,QAAQ,CAACoB,MAAhC,EAAwC;gBACtC,KAAK,IAAIrM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,CAAJ,IAAS,KAAKnD,aAAL,KAAuB,CAAhD,EAAmDqD,CAAC,EAApD,EAAwD;kBACtD,IAAI6K,KAAK,CAAC/K,CAAD,CAAL,KAAa+K,KAAK,CAAC7K,CAAD,CAAtB,EAA2B;oBACzB,KAAK7C,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;kBACD;gBACF;cACF;YACF;UACF;QACF;MACF;IACF;IAED;AACF;AACA;AACA;AACA;;;;WACE,uCAA8BG,IAA9B,EAAoC;MAClC,IAAIC,SAAS,GAAG,KAAhB;MACA,IAAIC,QAAQ,GAAG,KAAf;MACA,IAAIC,QAAQ,GAAG,KAAf;MAEA,IAAMC,WAAW,GAAG,IAAIb,MAAJ,CAChB,gDADgB,CAApB;MAEA,IAAIK,OAAO,GAAGI,IAAI,CAACnM,KAAL,CAAWuM,WAAX,CAAd;MACA,IAAIC,WAAW,GAAG,IAAlB;;MACA,OAAOT,OAAP,EAAgB;QACd,QAAQA,OAAO,CAAC,CAAD,CAAf;UACE,KAAK,MAAL;YACES,WAAW,GAAGL,IAAI,CAACnM,KAAL,CAAW8H,eAAe,CAAC2E,SAA3B,CAAd;;YACA,IAAID,WAAJ,EAAiB;cACf,IAAME,IAAI,GAAGF,WAAW,CAAC,CAAD,CAAxB;;cACA,IAAIE,IAAI,KAAKnV,SAAT,IAAsBmV,IAAI,CAAChN,MAAL,GAAc,CAAxC,EAA2C;gBACzC,IAAI8H,qEAAc,CAACkF,IAAI,CAACC,WAAL,EAAD,CAAd,KAAuCpV,SAA3C,EAAsD;kBACpD,KAAKyF,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;gBACD;cACF;YACF;;YACDM,QAAQ,GAAG,IAAX;YACA;;UACF,KAAK,cAAL;YACE,IAAI,CAACA,QAAD,IAAa,CAACF,SAAd,IAA2B,CAACC,QAAhC,EAA0C;cACxC,IAAIN,OAAO,CAAC,CAAD,CAAP,KAAe,MAAf,IAAyBA,OAAO,CAAC,CAAD,CAAP,KAAe,OAA5C,EAAqD;gBACnD,KAAK/O,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;cACD;YACF;;YAEDK,QAAQ,GAAG,IAAX;YACA;;UACF,KAAK,eAAL;YACE,IAAI,CAACA,QAAD,IAAa,CAACC,QAAd,IAA0B,CAACF,SAA/B,EAA0C;cACxC,IAAIL,OAAO,CAAC,CAAD,CAAP,KAAe,MAAf,IAAyBA,OAAO,CAAC,CAAD,CAAP,KAAe,OAA5C,EAAqD;gBACnD,KAAK/O,eAAL,CAAqB2K,qBAAqB,CAACqE,aAA3C;cACD;YACF;;YAEDI,SAAS,GAAG,IAAZ;YACA;;UACF;YACE;QAhCJ;;QAkCAD,IAAI,GAAGA,IAAI,CAACjL,MAAL,CAAY6K,OAAO,CAAC,CAAD,CAAP,CAAWrM,MAAvB,CAAP;QACAqM,OAAO,GAAGI,IAAI,CAACnM,KAAL,CAAWuM,WAAX,CAAV;MACD;;MAED,OAAOJ,IAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,oCAA2BS,MAA3B,EAAmC;MACjC;MACA,KAAKxP,GAAL,GAAWwP,MAAM,CAACxP,GAAlB;MACA,KAAKmL,GAAL,GAAWqE,MAAM,CAACrE,GAAlB;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBsE,eAAhB,EAA0C;MACxC,IAAMC,SAAS,GAAG,KAAKC,qBAAL,EAAlB;;MAEA,IAAIF,eAAJ,EAAqB;QACnBC,SAAS,CAAC1P,GAAV,CAAc4P,UAAd,GAA2B,KAAK5P,GAAL,CAAS6P,mBAAT,EAA3B;MACD;;MAED,IAAMxW,MAAM,GAAG,EAAf;MACA,IAAMyW,SAAS,GAAG5F,+CAAA,CAAkBwF,SAAlB,CAAlB;;MACA,QAAQ,KAAKhT,QAAL,CAAcM,gBAAtB;QACE,KAAK,WAAL;UACE,OAAOkN,+CAAA,CAAkBwF,SAAlB,CAAP;;QACF,KAAK,QAAL;UACE,KAAK,IAAMpL,IAAX,IAAmBwL,SAAnB,EAA8B;YAC5B,IAAI,GAAG/R,cAAH,CAAkBxC,IAAlB,CAAuBuU,SAAvB,EAAkCxL,IAAlC,CAAJ,EAA6C;cAC3CjL,MAAM,CAACuL,IAAP,WAAeN,IAAf,cAAuBwL,SAAS,CAACxL,IAAD,CAAhC;YACD;UACF;;UACD,OAAOjL,MAAP;;QACF,KAAK,MAAL;QACA;UACE,OAAOqW,SAAP;MAZJ;IAcD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,mBAAUD,eAAV,EAAoC;MAAA;;MAClC,IAAIA,eAAJ,EAAqB;QACnB,IAAI,KAAKzP,GAAL,CAASgQ,IAAT,KAAkB,QAAtB,EAAgC;UAC9B,IAAI,KAAKhQ,GAAL,CAASiQ,MAAT,KAAoB,QAAxB,EAAkC;YAChC,IAAI,KAAKjQ,GAAL,CAASkQ,oBAAT,IAAiC,KAAKlQ,GAAL,CAASmQ,gBAA9C,EAAgE;cAC9D,IAAI,KAAKnQ,GAAL,CAASmQ,gBAAT,IAA6B,KAAKnQ,GAAL,CAASkQ,oBAA1C,EAAgE;gBAC9DzR,OAAO,CAACO,KAAR,CAAc,sCAAd;gBACA,KAAKgB,GAAL,CAASoQ,iBAAT,GAA6B,WAA7B;cACD,CAHD,MAGO;gBACL3R,OAAO,CAACO,KAAR,CAAc,uCAAd;gBACA,KAAKgB,GAAL,CAASoQ,iBAAT,GAA6B,YAA7B;cACD;YACF;;YACD,IAAI,KAAKpQ,GAAL,CAASqQ,oBAAT,IAAiC,KAAKrQ,GAAL,CAASsQ,KAAT,CAAeC,MAApD,EAA4D;cAC1D,IAAI,KAAKvQ,GAAL,CAASsQ,KAAT,CAAeC,MAAf,IAAyB,KAAKvQ,GAAL,CAASqQ,oBAAtC,EAA4D;gBAC1D5R,OAAO,CAACO,KAAR,CAAc,gCAAd;gBACA,KAAKgB,GAAL,CAASwQ,cAAT,GAA0B,QAA1B;cACD,CAHD,MAGO;gBACL/R,OAAO,CAACO,KAAR,CAAc,gCAAd;gBACA,KAAKgB,GAAL,CAASwQ,cAAT,GAA0B,QAA1B;cACD;YACF;UACF;QACF;MACF;;MAED,IAAIC,UAAU,GAAG,KAAjB;;MACA,IAAI,KAAKtF,GAAL,CAASkB,GAAT,CAAaC,OAAb,4BAA0B,KAAK5E,YAA/B,gFAA0B,mBAAmByD,GAA7C,oFAA0B,sBAAwBkB,GAAlD,2DAA0B,uBAA6BC,OAAvD,KACA,KAAKnB,GAAL,CAASkB,GAAT,CAAaC,OAAb,KAAyB,QAD7B,EACuC;QACrC,KAAKnB,GAAL,CAASkB,GAAT,CAAaC,OAAb,GAAuBoE,kBAAkB,CAAC,KAAKvF,GAAL,CAASkB,GAAT,CAAaC,OAAd,CAAzC;QACAmE,UAAU,GAAG,IAAb;MACD;;MAED,IAAMpS,YAAY,GAAG,KAAKsS,eAAL,CAAqBlB,eAAe,IACrD,KAAK/S,QAAL,CAAcY,mBADG,CAArB;;MAGA,IAAI,KAAKgC,WAAL,KAAqBjD,gBAAgB,CAAC0C,eAA1C,EAA2D;QACzDN,OAAO,CAACO,KAAR,CAAc,0BACPyQ,eAAe,GAAG,KAAH,GAAW,IADnB,IAC2B,KADzC;QAEAhR,OAAO,CAACO,KAAR,CAAcX,YAAd;MACD;;MACD,IAAI,KAAK3B,QAAL,CAAcK,YAAlB,EAAgC;QAC9B,IAAM1D,MAAM,GAAG,KAAKuX,kBAAL,CAAwB,KAAKlU,QAAL,CAAcK,YAAtC,EACXsB,YADW,EACGoR,eADH,CAAf,CAD8B,CAI9B;;QACA;UACE,IAAIgB,UAAU,IAAIpX,MAAM,CAACoX,UAAP,KAAsBtW,SAApC,IACAd,MAAM,CAACoX,UAAP,KAAsB,EAD1B,EAC8B;YAC5BvY,QAAQ,mCAA0BmB,MAAM,CAACoX,UAAjC,WAAR;UACD;QACF;QACD,OAAOpX,MAAP;MACD,CAZD,MAYO;QACL,OAAOgD,gBAAgB,CAAC4B,UAAxB;MACD;IACF;;;;EA/hBuCzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1B1C;AACA;AACA;AAEA,IAAMqU,iBAAiB,GAAG1U,wEAA1B;AACA,IAAM2U,aAAa,GAAGzG,gEAAtB;AACA,IAAM/N,mBAAmB,GAAGJ,sEAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAAS6U,gBAAT,CACH5V,KADG,EAEH6V,YAFG,EAGH9S,SAHG,EAIH+S,UAJG,EAKHC,gBALG,EAKyB;EAC9B,IAAM7C,WAAW,GAAG,IAAIC,MAAJ,CAAW0C,YAAX,CAApB;EACA,IAAMrC,OAAO,GAAGxT,KAAK,CAACyH,KAAN,CAAYyL,WAAZ,CAAhB;;EACA,IAAI6C,gBAAgB,IAAI/V,KAAK,KAAK,EAAlC,EAAsC;IACpC,OAAO,IAAP;EACD;;EACD,IAAIA,KAAK,KAAKhB,SAAV,IAAuB,CAACwU,OAAxB,IAAmCA,OAAO,CAAC,CAAD,CAAP,KAAe,EAAtD,EAA0D;IACxD,MAAM,IAAIsC,UAAU,CAAC7Y,SAAX,CAAqBwP,WAAzB,CAAqC1J,SAArC,CAAN;EACD;;EACD,OAAO,IAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASiT,eAAT,CACHhW,KADG,EAEHiW,YAFG,EAGHlT,SAHG,EAIH+S,UAJG,EAImB;EACxB,IAAMI,MAAM,GAAGD,YAAY,CAAC3N,KAAb,CAAmB,GAAnB,CAAf;EACAtI,KAAK,GAAGA,KAAK,GAAG,GAAhB;;EACA,IAAIA,KAAK,IAAIkW,MAAM,CAAC,CAAD,CAAnB,EAAwB;IACtB,IAAKA,MAAM,CAAC,CAAD,CAAN,KAAc,GAAf,IAAwBlW,KAAK,IAAIkW,MAAM,CAAC,CAAD,CAA3C,EAAiD;MAC/C,OAAO,IAAP;IACD,CAFD,MAEO;MACL,MAAM,IAAIJ,UAAU,CAAC7Y,SAAX,CAAqBwP,WAAzB,CAAqC1J,SAArC,CAAN;IACD;EACF,CAND,MAMO;IACL,MAAM,IAAI+S,UAAU,CAAC7Y,SAAX,CAAqBwP,WAAzB,CAAqC1J,SAArC,CAAN;EACD;AACF;AAED;AACA;AACA;;;;;;AACO,IAAMoT,OAAb;EAKE;AACF;AACA;EACE,mBAAc;IAAA;;IAAA,oCAPD,KAOC;;IAAA;MAAA;MAAA,OANC;IAMD;;IAAA;MAAA;MAAA;IAAA;;IACZ,IAAI,0DAAeA,OAAnB,EAA4B;MAC1B,MAAM,IAAI1X,SAAJ,CAAc,6CAAd,CAAN;IACD;EACF;EAED;AACF;AACA;AACA;;;EAjBA;IAAA;IAAA,KAkBE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;EAzBA;IAAA;IAAA,KA0BE,eAAiB;MACf,6BAAO,IAAP;IACD;IAED;AACF;AACA;;EAhCA;IAAA;IAAA,OAiCE,sBAAa;MACX,0CAAoB,IAApB;IACD;IAED;AACF;AACA;AACA;;EAxCA;IAAA;IAAA,OAyCE,wBAAe;MACb,yCAAmB,IAAIf,IAAJ,GAAW0Y,OAAX,EAAnB;IACD;EA3CH;;EAAA;AAAA;AA8CA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMC,QAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,wBAUO;IAAA;;IAAA,IARDC,cAQC,QARDA,cAQC;IAAA,IAPDC,WAOC,QAPDA,WAOC;IAAA,IANDjZ,GAMC,QANDA,GAMC;IAAA,IALDmL,gBAKC,QALDA,gBAKC;IAAA,IAJD+N,eAIC,QAJDA,eAIC;IAAA,IAHDC,gBAGC,QAHDA,gBAGC;IAAA,IAFDC,YAEC,QAFDA,YAEC;IAAA,IADDZ,UACC,QADDA,UACC;;IAAA;;IACL;;IADK;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA,OAyBA;IAzBA;;IAAA;MAAA;MAAA,OA0BA;IA1BA;;IAAA;MAAA;MAAA;IAAA;;IAGL,iEAAkBQ,cAAc,IAC5BZ,iBAAiB,CAACY,cADtB;;IAEA,mEAAqB,CAACC,WAAD,GAAe,KAAf,GAAuBZ,aAAa,CAACY,WAA1D;;IACA,2DAAajZ,GAAG,IAAIA,GAAG,KAAK,EAAhB,GAAsBA,GAAtB,GAA4B,KAAxC;;IACA,0EAA4BmL,gBAAgB,IACxCtH,mBAAmB,CAACwV,iBADxB;;IAEA,yEAA2BH,eAAe,IACtCrV,mBAAmB,CAACsS,aADxB;;IAEA,0EAA4BgD,gBAAgB,IACxCtV,mBAAmB,CAACyV,kBADxB;;IAEA,qEAAuBF,YAAY,IAC/Bf,aAAa,CAACkB,UADlB;;IAEA,mEAAqBf,UAArB;;IAfK;EAgBN;;EAtCH;IAAA;IAAA;IAmDE;AACF;AACA;AACA;AACA;IACE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;IAhEA;IAAA,KAiEE,aAAcgB,SAAd,EAAyB;MACvB,MAAM,KAAI,0CAAmB7Z,SAAnB,CAA6BwP,WAAjC,wBAA6C,IAA7C,uBAAN;IACD;IAED;AACF;AACA;AACA;;EAxEA;IAAA;IAAA,KAyEE,eAAU;MACR,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAhFA;IAAA,KAiFE,aAAQsK,GAAR,EAAa;MACX,IAAInB,gBAAgB,CAACmB,GAAD,wBAAM,IAAN,yCAA4B,IAA5B,6CAAsD,IAAtD,gBAAhB,KACC,uBAAC,IAAD,mBACGf,eAAe,CAACe,GAAD,wBAAM,IAAN,uCAA0B,IAA1B,8CAAqD,IAArD,gBAFnB,CAAJ,EAEkG;QAChG,kCAAYA,GAAZ;MACD;IACF;IAED;AACF;AACA;AACA;;EA5FA;IAAA;IAAA,KA6FE,eAAU;MACR,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IApGA;IAAA,KAqGE,aAAQvZ,GAAR,EAAa;MACX,IAAIoY,gBAAgB,CAACpY,GAAD,wBAAM,IAAN,yCAA4B,IAA5B,6CAAsD,IAAtD,gBAAhB,KACC,uBAAC,IAAD,mBACGwY,eAAe,CAACxY,GAAD,wBAAM,IAAN,uCAA0B,IAA1B,8CAAqD,IAArD,gBAFnB,CAAJ,EAEkG;QAChG,kCAAYA,GAAZ;MACD;IACF;IAED;AACF;AACA;AACA;;EAhHA;IAAA;IAAA,KAiHE,eAAU;MACR,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAxHA;IAAA,KAyHE,aAAQF,GAAR,EAAa;MACX,IAAIsY,gBAAgB,CAACtY,GAAD,wBAAM,IAAN,yCAA4B,IAA5B,6CAAsD,IAAtD,gBAAhB,KACC,uBAAC,IAAD,mBACG0Y,eAAe,CAAC1Y,GAAD,wBAAM,IAAN,uCAA0B,IAA1B,8CAAqD,IAArD,gBAFnB,CAAJ,EAEkG;QAChG,kCAAYA,GAAZ;MACD;IACF;IAED;AACF;AACA;AACA;;EApIA;IAAA;IAAA,OAqIE,kBAAS;MACP,KAAK0Z,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,OAAO,KAAK6Y,GADC;QAEb,OAAO,KAAKvZ,GAFC;QAGb,OAAO,KAAKF;MAHC,CAAf;MAKA,OAAO,KAAK0Z,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA9IH;;EAAA;AAAA,EAA8BiY,OAA9B;AAiJA;AACA;AACA;;;;;;;;AACO,IAAMtV,QAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;AACA;AACA;EACE,yBAA+C;IAAA;;IAAA,IAAlCoW,QAAkC,SAAlCA,QAAkC;IAAA,IAAxBlU,SAAwB,SAAxBA,SAAwB;IAAA,IAAb+S,UAAa,SAAbA,UAAa;;IAAA;;IAC7C;;IAD6C;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAE7C,kEAAkBmB,QAAlB;;IACA,kEAAkBlU,SAAlB;;IACA,mEAAmB+S,UAAnB;;IACA,OAAK1M,UAAL,GAAkB,EAAlB;IAL6C;EAM9C;;EAbH;IAAA;IAAA;IAmBE;AACF;AACA;AACA;IACE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA9BA;IAAA,KA+BE,aAAc0N,SAAd,EAAyB;MACvB,MAAM,KAAI,yCAAiB7Z,SAAjB,CAA2BwP,WAA/B,wBAA2C,IAA3C,cAAN;IACD;IAED;AACF;AACA;AACA;;EAtCA;IAAA;IAAA,KAuCE,eAAa;MACX,OAAO,KAAKrD,UAAL,CAAgBjC,MAAvB;IACD;IAED;AACF;AACA;AACA;IA9CA;IAAA,KA+CE,aAAW4I,MAAX,EAAmB;MACjB,MAAM,KAAI,yCAAiB9S,SAAjB,CAA2BwP,WAA/B,wBAA2C,IAA3C,cAAN;IACD;IAED;AACF;AACA;AACA;;EAtDA;IAAA;IAAA,OAuDE,kBAAS;MACP,KAAKuK,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG,EAAf;;MACA,KAAK,IAAIkJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKgC,UAAL,CAAgBjC,MAApC,EAA4CC,CAAC,EAA7C,EAAiD;QAC/ClJ,MAAM,CAACkJ,CAAC,GAAG,EAAL,CAAN,GAAiB,KAAKgC,UAAL,CAAgBhC,CAAhB,CAAjB;MACD;;MACD,OAAO,KAAK4P,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA/DH;;EAAA;AAAA,EAA8BiY,OAA9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtQA;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAMhH,mBAAmB,GAAGnO,0EAA5B;AACA,IAAMoO,qBAAqB,GAAGrO,wEAA9B;AACA,IAAMqW,iBAAiB,GAAGpI,6EAA1B;AAEA,IAAMO,eAAe,GAAGL,kEAAxB;AAEA;AACA;AACA;;AACA,SAASoI,kBAAT,GAA8B;EAC5B,MAAM,IAAIJ,iEAAJ,CAA6B9H,qBAAqB,CAACvG,iBAAnD,CAAN;AACD;AAED;AACA;AACA;;;AACA,SAAS0O,mBAAT,GAA+B;EAC7B,MAAM,IAAIL,iEAAJ,CAA6B9H,qBAAqB,CAACoI,kBAAnD,CAAN;AACD;AAED;AACA;AACA;;;AACA,SAASC,sBAAT,GAAkC;EAChC,MAAM,IAAIP,iEAAJ,CAA6B9H,qBAAqB,CAACqE,aAAnD,CAAN;AACD;AAED;AACA;AACA;;;AACA,SAASiE,kCAAT,GAA8C;EAC5C,MAAM,IAAIR,iEAAJ,CAA6B9H,qBAAqB,CAACyC,0BAAnD,CAAN;AACD;AAED;AACA;AACA;;;AACA,SAAS8F,oBAAT,GAAgC;EAC9B,MAAM,IAAIT,iEAAJ,CAA6B9H,qBAAqB,CAAC6C,mBAAnD,CAAN;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2F,oBAAT,CACI5X,KADJ,EAEI6V,YAFJ,EAGIE,gBAHJ,EAGgC;EAC9B,OAAOH,yDAAgB,CACnB5V,KADmB,EAEnB6V,YAFmB,EAGnBzG,qBAAqB,CAACqE,aAHH,EAInByD,iEAJmB,EAKnBnB,gBALmB,CAAvB;AAOD;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS8B,mBAAT,CAA6B7X,KAA7B,EAAyCiW,YAAzC,EAA+D;EAC7D,OAAOD,wDAAe,CAClBhW,KADkB,EAElBiW,YAFkB,EAGlB7G,qBAAqB,CAACwH,kBAHJ,EAIlBM,iEAJkB,CAAtB;AAMD;AAED;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACO,IAAMzI,GAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;EACE,aAAYlF,WAAZ,EAAkC;IAAA;;IAAA;;IAChC;;IADgC;MAAA;MAAA,OAatB;IAbsB;;IAAA;MAAA;MAAA,OAcrB4F,mBAAmB,CAAC2I;IAdC;;IAAA;MAAA;MAAA,OAeb;IAfa;;IAAA;MAAA;MAAA,OAgBV;IAhBU;;IAAA;MAAA;MAAA,OAiBxB;IAjBwB;;IAAA;MAAA;MAAA,OAkBzB;IAlByB;;IAAA;MAAA;MAAA,OAmB1B;IAnB0B;;IAAA;MAAA;MAAA,OAoBnB;IApBmB;;IAAA;MAAA;MAAA,OAqBpB;IArBoB;;IAAA;MAAA;MAAA,OAsBlB;IAtBkB;;IAAA;MAAA;MAAA,OAuBtB;IAvBsB;;IAAA;MAAA;MAAA,OAwBd;IAxBc;;IAAA;MAAA;MAAA,OAyB1B;IAzB0B;;IAAA;MAAA;MAAA,OA0Bd;IA1Bc;;IAAA;MAAA;MAAA,OA2BV;IA3BU;;IAAA;MAAA;MAAA,OA4BlB;IA5BkB;;IAAA;MAAA;MAAA,OA6BhB;IA7BgB;;IAAA;MAAA;MAAA,OA8BlB;IA9BkB;;IAAA;MAAA;MAAA,OA+Bb;IA/Ba;;IAAA;MAAA;MAAA,OAgCpB;IAhCoB;;IAGhC,MAAKC,kBAAL,GAA0B,IAAIC,oBAAJ,EAA1B;IACA,MAAK7C,KAAL,GAAa,IAAI8C,iBAAJ,EAAb;IACA,MAAKC,qBAAL,GAA6B,IAAIC,sBAAJ,EAA7B;IACA,MAAKC,iBAAL,GAAyB,IAAIC,kBAAJ,EAAzB;IACA,MAAKzG,YAAL,GAAoB,IAAI0G,eAAJ,EAApB;IACA,MAAKC,UAAL,GAAkB,IAAIC,aAAJ,EAAlB;IAEA,IAAIjP,WAAJ,EAAiB,MAAKC,UAAL;IAVe;EAWjC;;EAhBH;IAAA;IAAA;IAuCE;AACF;AACA;IACE,sBAAa;MAAA;;MACX;;MACA,8BAAKuO,kBAAL,gFAAyBvO,UAAzB;MACA,oBAAK2L,KAAL,4DAAY3L,UAAZ;MACA,8BAAK0O,qBAAL,gFAA4B1O,UAA5B;MACA,+BAAK4O,iBAAL,kFAAwB5O,UAAxB;MACA,2BAAKoI,YAAL,0EAAmBpI,UAAnB;MACA,yBAAK+O,UAAL,sEAAiB/O,UAAjB;IACD;IAED;AACF;AACA;AACA;AACA;;EAxDA;IAAA;IAAA,KAyDE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;IAjEA;IAAA,KAkEE,aAAaiP,QAAb,EAAuB;MACrBnB,kBAAkB;IACnB;IAED;AACF;AACA;AACA;AACA;;EA1EA;IAAA;IAAA,KA2EE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;IAnFA;IAAA,KAoFE,aAAcR,SAAd,EAAyB;MACvBQ,kBAAkB;IACnB;IAED;AACF;AACA;AACA;;EA3FA;IAAA;IAAA,KA4FE,eAAwB;MACtB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAnGA;IAAA,KAoGE,aAAsBrC,iBAAtB,EAAyC;MACvC,IAAI2C,oBAAoB,CAAC3C,iBAAD,EAAoB1F,eAAe,CAACmJ,UAApC,CAAxB,EAAyE;QACvE,gDAA0BzD,iBAA1B;MACD;IACF;IAED;AACF;AACA;AACA;;EA7GA;IAAA;IAAA,KA8GE,eAA2B;MACzB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IArHA;IAAA,KAsHE,aAAyBF,oBAAzB,EAA+C;MAC7C,CAAC,KAAKxL,WAAN,yBACE,IADF,yBAC+BwL,oBAD/B,IAEEuC,kBAAkB,EAFpB;IAGD;IAED;AACF;AACA;AACA;;EA/HA;IAAA;IAAA,KAgIE,eAAa;MACX,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAvIA;IAAA,KAwIE,aAAWxC,MAAX,EAAmB;MACjB,CAAC,KAAKvL,WAAN,yBAAoB,IAApB,WAAmCuL,MAAnC,IAA4CwC,kBAAkB,EAA9D;IACD;IAED;AACF;AACA;AACA;;EA/IA;IAAA;IAAA,KAgJE,eAAY;MACV,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAvJA;IAAA,KAwJE,aAAUqB,KAAV,EAAiB;MACf,CAAC,KAAKpP,WAAN,yBAAoB,IAApB,UAAkCoP,KAAlC,IAA0CrB,kBAAkB,EAA5D;IACD;IAED;AACF;AACA;AACA;;EA/JA;IAAA;IAAA,KAgKE,eAAW;MACT,OAAQ,CAAC,KAAKN,UAAP,GAAqBO,mBAAmB,EAAxC,yBAA6C,IAA7C,QAAP;IACD;IAED;AACF;AACA;AACA;IAvKA;IAAA,KAwKE,aAASqB,IAAT,EAAe;MACb,IAAIhB,oBAAoB,CAACgB,IAAD,EAAOrJ,eAAe,CAACsJ,OAAvB,EAAgC,IAAhC,CAAxB,EAA+D;QAC7D,mCAAaD,IAAb;MACD;IACF;IAED;AACF;AACA;AACA;;EAjLA;IAAA;IAAA,KAkLE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAzLA;IAAA,KA0LE,aAAgBE,WAAhB,EAA6B;MAC3B,CAAC,KAAKvP,WAAN,yBAAoB,IAApB,gBAAwCuP,WAAxC,IAAsDxB,kBAAkB,EAAxE;IACD;IAED;AACF;AACA;AACA;;EAjMA;IAAA;IAAA,KAkME,eAAiB;MACf,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAzMA;IAAA,KA0ME,aAAeyB,UAAf,EAA2B;MACzB,CAAC,KAAKxP,WAAN,yBAAoB,IAApB,eAAuCwP,UAAvC,IAAoDzB,kBAAkB,EAAtE;IACD;IAED;AACF;AACA;AACA;;EAjNA;IAAA;IAAA,KAkNE,eAAmB;MACjB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAzNA;IAAA,KA0NE,aAAiB0B,YAAjB,EAA+B;MAC7B,CAAC,KAAKzP,WAAN,yBACE,IADF,iBACuByP,YADvB,IAEE1B,kBAAkB,EAFpB;IAGD;IAED;AACF;AACA;AACA;;EAnOA;IAAA;IAAA,KAoOE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA3OA;IAAA,KA4OE,aAAa2B,QAAb,EAAuB;MACrB,IAAIrB,oBAAoB,CAACqB,QAAD,EAAW1J,eAAe,CAAC2J,aAA3B,CAAxB,EAAmE;QACjE,uCAAiBD,QAAjB;MACD;IACF;IAED;AACF;AACA;AACA;;EArPA;IAAA;IAAA,KAsPE,eAAuB;MACrB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA7PA;IAAA,KA8PE,aAAqBE,gBAArB,EAAuC;MACrC,CAAC,KAAK5P,WAAN,yBACE,IADF,qBAC2B4P,gBAD3B,IAEE7B,kBAAkB,EAFpB;IAGD;IAED;AACF;AACA;AACA;;EAvQA;IAAA;IAAA,KAwQE,eAAW;MACT,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA/QA;IAAA,KAgRE,aAASzC,IAAT,EAAe;MACb,CAAC,KAAKtL,WAAN,yBAAoB,IAApB,SAAiCsL,IAAjC,IAAwCyC,kBAAkB,EAA1D;IACD;IAED;AACF;AACA;AACA;;EAvRA;IAAA;IAAA,KAwRE,eAAuB;MACrB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA/RA;IAAA,KAgSE,aAAqBtC,gBAArB,EAAuC;MACrC,IAAI4C,oBAAoB,CAAC5C,gBAAD,EAAmBzF,eAAe,CAACsH,UAAnC,CAApB,IACFgB,mBAAmB,CAAC7C,gBAAD,EAAmBzF,eAAe,CAAC6J,cAAnC,CADrB,EACyE;QACvE,+CAAyBpE,gBAAzB;MACD;IACF;IAED;AACF;AACA;AACA;;EA1SA;IAAA;IAAA,KA2SE,eAA2B;MACzB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAlTA;IAAA,KAmTE,aAAyBE,oBAAzB,EAA+C;MAC7C,CAAC,KAAK3L,WAAN,yBACE,IADF,yBAC+B2L,oBAD/B,IAEEoC,kBAAkB,EAFpB;IAGD;IAED;AACF;AACA;AACA;;EA5TA;IAAA;IAAA,KA6TE,eAAmB;MACjB,OAAQ,CAAC,KAAKN,UAAP,GAAqBO,mBAAmB,EAAxC,yBAA6C,IAA7C,gBAAP;IACD;IAED;AACF;AACA;AACA;IApUA;IAAA,KAqUE,aAAiB8B,YAAjB,EAA+B;MAC7B,IAAIzB,oBAAoB,CAACyB,YAAD,EAAe9J,eAAe,CAAC+J,WAA/B,CAAxB,EAAqE;QACnE,2CAAqBD,YAArB;MACD;IACF;IAED;AACF;AACA;AACA;;EA9UA;IAAA;IAAA,KA+UE,eAAqB;MACnB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAtVA;IAAA,KAuVE,aAAmBhE,cAAnB,EAAmC;MACjC,IAAIuC,oBAAoB,CAACvC,cAAD,EAAiB9F,eAAe,CAACgK,UAAjC,CAAxB,EAAsE;QACpE,6CAAuBlE,cAAvB;MACD;IACF;IAED;AACF;AACA;AACA;;EAhWA;IAAA;IAAA,KAiWE,eAAmB;MACjB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAxWA;IAAA,KAyWE,aAAiBmE,YAAjB,EAA+B;MAC7B,IAAI5B,oBAAoB,CAAC4B,YAAD,EAAejK,eAAe,CAACkK,cAA/B,EACpB,IADoB,CAAxB,EACW;QACT,2CAAqBD,YAArB;MACD;IACF;IAED;AACF;AACA;AACA;;EAnXA;IAAA;IAAA,KAoXE,eAAwB;MACtB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA3XA;IAAA,KA4XE,aAAsBE,iBAAtB,EAAyC;MACvC,CAAC,KAAKnQ,WAAN,yBACE,IADF,sBAC4BmQ,iBAD5B,IAEEpC,kBAAkB,EAFpB;IAGD;IAED;AACF;AACA;AACA;;EArYA;IAAA;IAAA,KAsYE,eAAiB;MACf,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA7YA;IAAA,KA8YE,aAAe7C,UAAf,EAA2B;MACzB,CAAC,KAAKlL,WAAN,yBAAoB,IAApB,eAAuCkL,UAAvC,IAAoD6C,kBAAkB,EAAtE;IACD;IAED;AACF;AACA;AACA;AACA;;EAtZA;IAAA;IAAA,OAuZE,+BAAsB;MACpB,IAAIqC,WAAW,yBAAG,IAAH,gBAAf;;MACA,IAAMC,SAAS,GAAG,KAAKC,UAAvB;;MAEA,IAAI,OAAOD,SAAP,KAAqB,WAArB,IAAoCA,SAAS,KAAK,IAAtD,EAA4D;QAC1D,IAAME,OAAO,GAAG,IAAIpc,IAAJ,GAAW0Y,OAAX,KAAuBwD,SAAvC;QACAD,WAAW,GAAGxC,+DAAA,CAA6B2C,OAAO,GAAG,IAAvC,CAAd;MACD;;MAED,OAAO3C,uDAAA,uBACH,IADG,gBAEHwC,WAFG,EAGHpK,eAAe,CAAC+J,WAHb,CAAP;IAKD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EArcA;IAAA;IAAA,OAscE,kBAAS;MACP,KAAKtC,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,yBAAyB,KAAKga,qBADjB;QAEb,qBAAqB,KAAKE,iBAFb;QAGb,qBAAqB,KAAKnD,iBAHb;QAIb,wBAAwB,KAAKF,oBAJhB;QAKb,UAAU,KAAKD,MALF;QAMb,SAAS,KAAK6D,KAND;QAOb,QAAQ,KAAKC,IAPA;QAQb,gBAAgB,KAAKhH,YARR;QASb,eAAe,KAAKkH,WATP;QAUb,cAAc,KAAKC,UAVN;QAWb,gBAAgB,KAAKC,YAXR;QAYb,sBAAsB,KAAKjB,kBAZd;QAab,YAAY,KAAKkB,QAbJ;QAcb,oBAAoB,KAAKE,gBAdZ;QAeb,QAAQ,KAAKtE,IAfA;QAgBb,cAAc,KAAK0D,UAhBN;QAiBb,oBAAoB,KAAKvD,gBAjBZ;QAkBb,wBAAwB,KAAKE,oBAlBhB;QAmBb,SAAS,KAAKC,KAnBD;QAoBb,gBAAgB,KAAKkE,YApBR;QAqBb,kBAAkB,KAAKhE,cArBV;QAsBb,gBAAgB,KAAKmE,YAtBR;QAuBb,qBAAqB,KAAKE;MAvBb,CAAf;MAyBA,OAAO,KAAK1C,UAAZ;MACA,OAAO9Y,MAAP;IACD;EAneH;;EAAA;AAAA,EAAyBiY,4CAAzB;AAseA;AACA;AACA;;;;;;;;;;;;IACM6B;;;;;EAOJ;AACF;AACA;EACE,gCAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OATD7I,mBAAmB,CAAC8K;IASnB;;IAAA;MAAA;MAAA,OARC;IAQD;;IAAA;MAAA;MAAA,OAPF;IAOE;;IAAA;MAAA;MAAA,OANI;IAMJ;;IAAA;MAAA;MAAA,OALM;IAKN;;IAAA;EAEb;EAED;AACF;AACA;AACA;AACA;;;;;SACE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;;SACE,aAAcnD,SAAd,EAAyB;MACvBQ,kBAAkB;IACnB;IAED;AACF;AACA;AACA;;;;SACE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAgB4C,WAAhB,EAA6B;MAC3B,IAAItC,oBAAoB,CAACsC,WAAD,EAAc3K,eAAe,CAACsH,UAA9B,CAApB,IACFgB,mBAAmB,CAACqC,WAAD,EAAc3K,eAAe,CAAC4K,WAA9B,CADrB,EACiE;QAC/D,0CAAoBD,WAApB;MACD;IACF;IAED;AACF;AACA;AACA;;;;SACE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAaE,QAAb,EAAuB;MACrB,IAAIxC,oBAAoB,CAACwC,QAAD,EAAW7K,eAAe,CAAC8K,OAA3B,CAAxB,EAA6D;QAC3D,uCAAiBD,QAAjB;MACD;IACF;IAED;AACF;AACA;AACA;;;;SACE,eAAqB;MACnB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAmBE,cAAnB,EAAmC;MACjC,IAAI1C,oBAAoB,CAAC0C,cAAD,EAAiB/K,eAAe,CAACsH,UAAjC,CAApB,IACFgB,mBAAmB,CAACyC,cAAD,EAAiB/K,eAAe,CAACgL,WAAjC,CADrB,EACoE;QAClE,6CAAuBD,cAAvB;MACD;IACF;IAED;AACF;AACA;AACA;;;;SACE,eAAuB;MACrB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAqBE,gBAArB,EAAuC;MACrC,IAAI5C,oBAAoB,CAAC4C,gBAAD,EAAmBjL,eAAe,CAACkL,WAAnC,CAApB,IACF5C,mBAAmB,CAAC2C,gBAAD,EAAmBjL,eAAe,CAACmL,UAAnC,CADrB,EACqE;QACnE,+CAAyBF,gBAAzB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBAAS;MACP,KAAKxD,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,eAAe,KAAKgc,WADP;QAEb,YAAY,KAAKE,QAFJ;QAGb,kBAAkB,KAAKE,cAHV;QAIb,oBAAoB,KAAKE;MAJZ,CAAf;MAMA,OAAO,KAAKxD,UAAZ;MACA,OAAO9Y,MAAP;IACD;;;;EAjIgCiY;AAoInC;AACA;AACA;;;IACMmC;;;;;EACJ;AACF;AACA;EACE,2BAAc;IAAA;;IAAA,0BACN;MACJrB,QAAQ,EAAE9H,mBAAmB,CAACwL,qBAD1B;MAEJ5X,SAAS,EAAEqM,qBAAqB,CAACvG,iBAF7B;MAGJiN,UAAU,EAAEoB,iEAAwBA;IAHhC,CADM;EAMb;;;EAV2BrW;AAa9B;AACA;AACA;;;IACM2X;;;;;EACJ;AACF;AACA;EACE,yBAAc;IAAA;;IAAA,0BACN;MACJvB,QAAQ,EAAE9H,mBAAmB,CAACyL,mBAD1B;MAEJ7X,SAAS,EAAEqM,qBAAqB,CAACvG,iBAF7B;MAGJiN,UAAU,EAAEoB,iEAAwBA;IAHhC,CADM;EAMb;;;EAVyBrW;AAa5B;AACA;AACA;;;IACMwX;;;;;EACJ;AACF;AACA;EACE,8BAAc;IAAA;;IAAA,0BACN;MACJpB,QAAQ,EAAE9H,mBAAmB,CAAC0L,iBAD1B;MAEJ9X,SAAS,EAAEqM,qBAAqB,CAACvG,iBAF7B;MAGJiN,UAAU,EAAEoB,iEAAwBA;IAHhC,CADM;EAMb;;;EAV8BrW;AAajC;AACA;AACA;;;IACMsX;;;;;EACJ;AACF;AACA;EACE,kCAAc;IAAA;;IAAA,0BACN;MACJlB,QAAQ,EAAE9H,mBAAmB,CAAC0L,iBAD1B;MAEJ9X,SAAS,EAAEqM,qBAAqB,CAACvG,iBAF7B;MAGJiN,UAAU,EAAEoB,iEAAwBA;IAHhC,CADM;EAMb;;;EAVkCrW;AAarC;AACA;AACA;;;;;;;;;;;;;;;;;;;AACO,IAAM+N,qBAAb;EAAA;;EAAA;;EAUE;AACF;AACA;EACE,iCAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OAZR;IAYQ;;IAAA;MAAA;MAAA,OAXN;IAWM;;IAAA;MAAA;MAAA,OAVD;IAUC;;IAAA;MAAA;MAAA,OATD;IASC;;IAAA;MAAA;MAAA,OARM;IAQN;;IAAA;MAAA;MAAA,OAPJ;IAOI;;IAAA;MAAA;MAAA,OANH;IAMG;;IAAA;MAAA;MAAA,OALC;IAKD;;IAGZ,OAAK2J,UAAL,GAAkB,IAAI1X,6CAAJ,CAAa;MAC7BkC,SAAS,EAAEqM,qBAAqB,CAACvG,iBADJ;MAE7BiN,UAAU,EAAEoB,iEAFiB;MAG7BD,QAAQ,EAAE9H,mBAAmB,CAACyL;IAHD,CAAb,CAAlB;IAKA,OAAKvL,iBAAL,GAAyB,IAAIxO,6CAAJ,CAAa;MACpCkC,SAAS,EAAEqM,qBAAqB,CAACvG,iBADG;MAEpCiN,UAAU,EAAEoB,iEAFwB;MAGpCD,QAAQ,EAAE9H,mBAAmB,CAAC2L;IAHM,CAAb,CAAzB;IARY;EAab;EAED;AACF;AACA;;;EA9BA;IAAA;IAAA,OA+BE,sBAAa;MAAA;;MACX;;MACA,0BAAKvC,UAAL,wEAAiB/O,UAAjB;MACA,8BAAK6F,iBAAL,gFAAwB7F,UAAxB;IACD;IAED;AACF;AACA;AACA;;EAxCA;IAAA;IAAA,KAyCE,eAAS;MACP,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAhDA;IAAA,KAiDE,aAAOuR,EAAP,EAAW;MACT,IAAInD,oBAAoB,CAACmD,EAAD,EAAKxL,eAAe,CAACyL,iBAArB,CAAxB,EAAiE;QAC/D,iCAAWD,EAAX;MACD;IACF;IAED;AACF;AACA;AACA;;EA1DA;IAAA;IAAA,KA2DE,eAAW;MACT,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAlEA;IAAA,KAmEE,aAAS9a,IAAT,EAAe;MACb,IAAI,KAAKsJ,WAAL,IAAoB,qCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC3X,IAAD,EAAOsP,eAAe,CAAC0L,OAAvB,CAAxB,EAAyD;UACvD,mCAAahb,IAAb;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAhFA;IAAA;IAAA,KAiFE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAxFA;IAAA,KAyFE,aAAcib,SAAd,EAAyB;MACvB,IAAI,KAAK3R,WAAL,IAAoB,qCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAACsD,SAAD,EAAY3L,eAAe,CAAC4L,OAA5B,CAAxB,EAA8D;UAC5D,wCAAkBD,SAAlB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAtGA;IAAA;IAAA,KAuGE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA9GA;IAAA,KA+GE,aAAcE,SAAd,EAAyB;MACvB,IAAI,KAAK7R,WAAL,IAAoB,qCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAACwD,SAAD,EAAY7L,eAAe,CAACsH,UAA5B,CAAxB,EAAiE;UAC/D,wCAAkBuE,SAAlB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EA5HA;IAAA;IAAA,KA6HE,eAAuB;MACrB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;AACA;IArIA;IAAA,KAsIE,aAAqBC,gBAArB,EAAuC;MACrC,IAAI,KAAK9R,WAAL,KAAqB,uCAAe,EAAf,IAAqB,qCAAa,EAAvD,CAAJ,EAAgE;QAC9DmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIvF,KAAK,GAAG,EAAZ;QACA,IAAMJ,aAAa,GAAGqF,iBAAiB,CAAC,KAAKnX,IAAN,CAAvC;;QACA,IAAI8R,aAAJ,EAAmB;UACjB,IAAIA,aAAJ,aAAIA,aAAJ,eAAIA,aAAa,CAAEK,SAAnB,EAA8B;YAC5BD,KAAK,GAAGkJ,gBAAgB,CAAC/S,KAAjB,CAAuByJ,aAAa,CAACK,SAArC,CAAR;UACD,CAFD,MAEO;YACLD,KAAK,CAAC,CAAD,CAAL,GAAWkJ,gBAAX;UACD;;UAED,IAAKlJ,KAAK,CAAChL,MAAN,GAAe,CAAhB,IAAuBgL,KAAK,CAAChL,MAAN,IAAgB4K,aAAa,CAACzU,GAAzD,EAA+D;YAC7D,IAAM4V,WAAW,GAAG,IAAIC,MAAJ,CAAWpB,aAAa,CAACqB,MAAzB,CAApB;;YACA,KAAK,IAAIhM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+K,KAAK,CAAChL,MAA1B,EAAkCC,CAAC,EAAnC,EAAuC;cACrC,IAAI2K,aAAJ,aAAIA,aAAJ,eAAIA,aAAa,CAAEuB,UAAnB,EAA+B;gBAC7B,IAAMC,MAAM,GAAGpB,KAAK,CAAC/K,CAAD,CAAL,CAASkB,KAAT,CAAeyJ,aAAa,CAACuB,UAA7B,CAAf;;gBACA,IAAIC,MAAM,CAACpM,MAAP,KAAkB,CAAtB,EAAyB;kBACvB,IAAI,CAACoM,MAAM,CAAC,CAAD,CAAN,CAAU9L,KAAV,CAAgByL,WAAhB,CAAL,EAAmC;oBACjCuE,sBAAsB;kBACvB,CAFD,MAEO;oBACL,IAAI,CAAClE,MAAM,CAAC,CAAD,CAAN,CAAU9L,KAAV,CAAgB,IAAI0L,MAAJ,CAAWpB,aAAa,CAAC2B,OAAzB,CAAhB,CAAL,EAAyD;sBACvD+D,sBAAsB;oBACvB;kBACF;gBACF,CARD,MAQO;kBACLA,sBAAsB;gBACvB;cACF,CAbD,MAaO;gBACL,IAAI,CAACtF,KAAK,CAAC/K,CAAD,CAAL,CAASK,KAAT,CAAeyL,WAAf,CAAL,EAAkC;kBAChCuE,sBAAsB;gBACvB,CAFD,MAEO;kBACL,IAAItF,KAAK,CAAC/K,CAAD,CAAL,KAAa,EAAb,IAAmB2K,aAAa,CAAC4B,MAArC,EAA6C;oBAC3C,KAAK,IAAIrM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,CAApB,EAAuBE,CAAC,EAAxB,EAA4B;sBAC1B,IAAI6K,KAAK,CAAC/K,CAAD,CAAL,KAAa+K,KAAK,CAAC7K,CAAD,CAAtB,EAA2B;wBACzBmQ,sBAAsB;sBACvB;oBACF;kBACF;gBACF;cACF;YACF;UACF,CA9BD,MA8BO;YACLE,oBAAoB;UACrB;;UAED,+CAAyB0D,gBAAzB;QACD,CA1CD,MA0CO;UACL5D,sBAAsB;QACvB;MACF;IACF;IAED;AACF;AACA;AACA;;EA/LA;IAAA;IAAA,KAgME,eAAa;MACX,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAvMA;IAAA,KAwME,aAAWvZ,MAAX,EAAmB;MACjB,IAAI0Z,oBAAoB,CAAC1Z,MAAD,EAASqR,eAAe,CAAC+L,SAAzB,CAAxB,EAA6D;QAC3D,qCAAepd,MAAf;MACD;IACF;IAED;AACF;AACA;AACA;;EAjNA;IAAA;IAAA,KAkNE,eAAc;MACZ,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAzNA;IAAA,KA0NE,aAAYqd,OAAZ,EAAqB;MACnB,IAAI,KAAKhS,WAAL,IAAoB,qCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC2D,OAAD,EAAUhM,eAAe,CAAC+J,WAA1B,CAAxB,EAAgE;UAC9D,sCAAgBiC,OAAhB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAvOA;IAAA;IAAA,KAwOE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA/OA;IAAA,KAgPE,aAAgBC,WAAhB,EAA6B;MAC3B,IAAI,KAAKjS,WAAL,IAAoB,qCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC4D,WAAD,EAAcjM,eAAe,CAACkM,gBAA9B,EACpB,IADoB,CAAxB,EACW;UACT,0CAAoBD,WAApB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EA5QA;IAAA;IAAA,OA6QE,kBAAS;MACP,KAAKxE,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,MAAM,KAAK6c,EADE;QAEb,QAAQ,KAAK9a,IAFA;QAGb,cAAc,KAAKsY,UAHN;QAIb,aAAa,KAAK2C,SAJL;QAKb,aAAa,KAAKE,SALL;QAMb,oBAAoB,KAAKC,gBANZ;QAOb,UAAU,KAAKnd,MAPF;QAQb,WAAW,KAAKqd,OARH;QASb,eAAe,KAAKC,WATP;QAUb,qBAAqB,KAAKnM;MAVb,CAAf;MAYA,OAAO,KAAK2H,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA7RH;;EAAA;AAAA,EAA2CiY,4CAA3C;AAgSA;AACA;AACA;;;;;;;;;;;;AACO,IAAMrH,mBAAb;EAAA;;EAAA;;EAOE;AACF;AACA;EACE,+BAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OATR;IASQ;;IAAA;MAAA;MAAA,OARI;IAQJ;;IAAA;MAAA;MAAA,OAPO;IAOP;;IAAA;MAAA;MAAA,OANM;IAMN;;IAAA;MAAA;MAAA,OALC;IAKD;;IAGZ,OAAKqG,KAAL,GAAa,IAAI8C,iBAAJ,EAAb;IAHY;EAIb;EAED;AACF;AACA;;;EAlBA;IAAA;IAAA,OAmBE,sBAAa;MAAA;;MACX;;MACA,qBAAK9C,KAAL,8DAAY3L,UAAZ;IACD;IAED;AACF;AACA;AACA;;EA3BA;IAAA;IAAA,KA4BE,eAAS;MACP,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAnCA;IAAA,KAoCE,aAAOuR,EAAP,EAAW;MACT,IAAInD,oBAAoB,CAACmD,EAAD,EAAKxL,eAAe,CAACyL,iBAArB,CAAxB,EAAiE;QAC/D,kCAAWD,EAAX;MACD;IACF;IAED;AACF;AACA;AACA;;EA7CA;IAAA;IAAA,KA8CE,eAAqB;MACnB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IArDA;IAAA,KAsDE,aAAmB1F,cAAnB,EAAmC;MACjC,IAAI,KAAK9L,WAAL,IAAoB,sCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAACvC,cAAD,EAAiB9F,eAAe,CAACgK,UAAjC,CAAxB,EAAsE;UACpE,8CAAuBlE,cAAvB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAnEA;IAAA;IAAA,KAoEE,eAAwB;MACtB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA3EA;IAAA,KA4EE,aAAsBJ,iBAAtB,EAAyC;MACvC,IAAI,KAAK1L,WAAL,IAAoB,sCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC3C,iBAAD,EAAoB1F,eAAe,CAACmJ,UAApC,CAAxB,EAAyE;UACvE,iDAA0BzD,iBAA1B;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAzFA;IAAA;IAAA,KA0FE,eAAuB;MACrB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAjGA;IAAA,KAkGE,aAAqBD,gBAArB,EAAuC;MACrC,IAAI,KAAKzL,WAAL,IAAoB,sCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC5C,gBAAD,EAAmBzF,eAAe,CAACsH,UAAnC,CAApB,IACFgB,mBAAmB,CAAC7C,gBAAD,EACfzF,eAAe,CAAC6J,cADD,CADrB,EAEuC;UACrC,gDAAyBpE,gBAAzB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAjHA;IAAA;IAAA,KAkHE,eAAkB;MAChB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IAzHA;IAAA,KA0HE,aAAgBwG,WAAhB,EAA6B;MAC3B,IAAI,KAAKjS,WAAL,IAAoB,sCAAa,EAArC,EAAyC;QACvCmO,kCAAkC;MACnC,CAFD,MAEO;QACL,IAAIE,oBAAoB,CAAC4D,WAAD,EAAcjM,eAAe,CAACkM,gBAA9B,EACpB,IADoB,CAAxB,EACW;UACT,2CAAoBD,WAApB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAlJA;IAAA;IAAA,OAmJE,kBAAS;MACP,KAAKxE,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,MAAM,KAAK6c,EADE;QAEb,kBAAkB,KAAK1F,cAFV;QAGb,qBAAqB,KAAKJ,iBAHb;QAIb,oBAAoB,KAAKD,gBAJZ;QAKb,eAAe,KAAKwG,WALP;QAMb,SAAS,KAAKrG;MAND,CAAf;MAQA,OAAO,KAAK6B,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA/JH;;EAAA;AAAA,EAAyCiY,4CAAzC;AAkKA;AACA;AACA;;;;IACM8B;;;;;EAGJ;AACF;AACA;EACE,6BAAc;IAAA;;IAAA;;IACZ,4BACI;MACE3B,cAAc,EAAEnH,mBAAmB,CAACmH,cADtC;MAEEhZ,GAAG,EAAE,EAFP;MAGEmL,gBAAgB,EAAE2G,qBAAqB,CAACvG,iBAH1C;MAIE2N,eAAe,EAAEpH,qBAAqB,CAACqE,aAJzC;MAKEgD,gBAAgB,EAAErH,qBAAqB,CAACwH,kBAL1C;MAMEF,YAAY,EAAEnH,eAAe,CAACsH,UANhC;MAOEf,UAAU,EAAEoB,iEAAwBA;IAPtC,CADJ;;IADY;MAAA;MAAA,OALJ;IAKI;;IAAA;EAWb;EAED;AACF;AACA;AACA;;;;;SACE,eAAa;MACX,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAW9B,MAAX,EAAmB;MACjB,IAAIwC,oBAAoB,CAACxC,MAAD,EAAS7F,eAAe,CAACsH,UAAzB,CAApB,IACFgB,mBAAmB,CAACzC,MAAD,EAAS7F,eAAe,CAACmM,YAAzB,CADrB,EAC6D;QAC3D,qCAAetG,MAAf;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBAAS;MACP,KAAK4B,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,UAAU,KAAKkX,MADF;QAEb,sEAFa;QAGb,sEAHa;QAIb;MAJa,CAAf;MAMA,OAAO,KAAK4B,UAAZ;MACA,OAAO9Y,MAAP;IACD;;;;EA5D6BmY;AA+DhC;AACA;AACA;;;;;;;;;;;AACO,IAAM3H,iBAAb;EAAA;;EAAA;;EAME;AACF;AACA;AACA;EACE,6BAAuC;IAAA;;IAAA,IAA3BiN,iBAA2B,uEAAP,KAAO;;IAAA;;IACrC;;IADqC;MAAA;MAAA,OAT5B;IAS4B;;IAAA;MAAA;MAAA,OAR3B;IAQ2B;;IAAA;MAAA;MAAA,OAP1B;IAO0B;;IAAA;MAAA;MAAA;IAAA;;IAErC,gEAAgB,EAAhB;;IACA,kEAAiB,EAAjB;;IACA,mEAAkB,EAAlB;;IACA,0EAA0BA,iBAA1B;;IALqC;EAMtC;EAED;AACF;AACA;AACA;;;EArBA;IAAA;IAAA,KAsBE,eAAc;MACZ,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA7BA;IAAA,KA8BE,aAAYC,OAAZ,EAAqB;MACnB,IAAI,KAAKrS,WAAL,0BAAoB,IAApB,qBAAJ,EAAiD;QAC/C+N,kBAAkB;MACnB,CAFD,MAEO;QACL,IAAIM,oBAAoB,CAACgE,OAAD,EAAUrM,eAAe,CAACsM,iBAA1B,EACpB,IADoB,CAAxB,EACW;UACT,sCAAgBD,OAAhB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EA5CA;IAAA;IAAA,KA6CE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IApDA;IAAA,KAqDE,aAAa3C,QAAb,EAAuB;MACrB,IAAI,KAAK1P,WAAL,0BAAoB,IAApB,qBAAJ,EAAiD;QAC/C+N,kBAAkB;MACnB,CAFD,MAEO;QACL,IAAIM,oBAAoB,CAACqB,QAAD,EAAW1J,eAAe,CAACuM,YAA3B,CAAxB,EAAkE;UAChE,wCAAiB7C,QAAjB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;;EAlEA;IAAA;IAAA,KAmEE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IA1EA;IAAA,KA2EE,aAAciC,SAAd,EAAyB;MACvB,IAAI,KAAK3R,WAAL,0BAAoB,IAApB,qBAAJ,EAAiD;QAC/C+N,kBAAkB;MACnB,CAFD,MAEO;QACL,IAAIM,oBAAoB,CAACsD,SAAD,EAAY3L,eAAe,CAAC4L,OAA5B,CAAxB,EAA8D;UAC5D,yCAAkBD,SAAlB;QACD;MACF;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EA9FA;IAAA;IAAA,OA+FE,kBAAS;MACP,KAAKlE,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,WAAW,KAAK0d,OADH;QAEb,YAAY,KAAK3C,QAFJ;QAGb,aAAa,KAAKiC;MAHL,CAAf;MAKA,OAAO,KAAKlE,UAAZ;MACA,OAAO9Y,MAAP;IACD;EAxGH;;EAAA;AAAA,EAAuCiY,4CAAvC;AA2GA;AACA;AACA;;;;AACO,IAAMtH,+BAAb;EAAA;;EAAA;;EAGE;AACF;AACA;EACE,2CAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OALR;IAKQ;;IAAA;EAEb;EAED;AACF;AACA;AACA;;;EAbA;IAAA;IAAA,KAcE,eAAS;MACP,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IArBA;IAAA,KAsBE,aAAOkM,EAAP,EAAW;MACT,IAAInD,oBAAoB,CAACmD,EAAD,EAAKxL,eAAe,CAACyL,iBAArB,CAAxB,EAAiE;QAC/D,kCAAWD,EAAX;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAnCA;IAAA;IAAA,OAoCE,kBAAS;MACP,KAAK/D,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,MAAM,KAAK6c;MADE,CAAf;MAGA,OAAO,KAAK/D,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA3CH;;EAAA;AAAA,EAAqDiY,4CAArD;AA8CA;AACA;AACA;;;;AACO,IAAMxH,qCAAb;EAAA;;EAAA;;EAGE;AACF;AACA;EACE,iDAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OALH;IAKG;;IAAA;EAEb;EAED;AACF;AACA;AACA;;;EAbA;IAAA;IAAA,KAcE,eAAc;MACZ,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;IArBA;IAAA,KAsBE,aAAY6D,OAAZ,EAAqB;MACnB,IAAIoF,oBAAoB,CAACpF,OAAD,EAAUjD,eAAe,CAACwM,WAA1B,CAAxB,EAAgE;QAC9D,sCAAgBvJ,OAAhB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAnCA;IAAA;IAAA,OAoCE,kBAAS;MACP,KAAKwE,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,WAAW,KAAKsU;MADH,CAAf;MAGA,OAAO,KAAKwE,UAAZ;MACA,OAAO9Y,MAAP;IACD;EA3CH;;EAAA;AAAA,EAA2DiY,4CAA3D;AA8CA;AACA;AACA;;AACO,IAAM3H,GAAb;EAAA;;EAAA;;EACE;AACF;AACA;EACE,eAAc;IAAA;;IAAA;;IACZ;IAEA,OAAK0C,GAAL,GAAW,IAAI8K,MAAJ,EAAX;IAHY;EAIb;EAED;AACF;AACA;;;EAZA;IAAA;IAAA,OAaE,sBAAa;MAAA;;MACX;;MACA,kBAAK9K,GAAL,wDAAU1H,UAAV;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EA3BA;IAAA;IAAA,OA4BE,kBAAS;MACP,KAAKwN,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,OAAO,KAAKgT;MADC,CAAf;MAGA,OAAO,KAAK8F,UAAZ;MACA,OAAO9Y,MAAP;IACD;EAnCH;;EAAA;AAAA,EAAyBiY,4CAAzB;AAsCA;AACA;AACA;;;;IACM6F;;;;;EAGJ;AACF;AACA;EACE,kBAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OALH;IAKG;;IAGZ,QAAKC,aAAL,GAAqB,IAAIC,kBAAJ,EAArB;IAHY;EAIb;EAED;AACF;AACA;;;;;WACE,sBAAa;MAAA;;MACX;;MACA,4BAAKD,aAAL,4EAAoBzS,UAApB;IACD;IAED;AACF;AACA;AACA;;;;SACE,eAAc;MACZ,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAY2H,OAAZ,EAAqB;MACnB,IAAIyG,oBAAoB,CAACzG,OAAD,EAAU5B,eAAe,CAAC4M,QAA1B,CAAxB,EAA6D;QAC3D,sCAAgBhL,OAAhB;MACD;IACF;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBAAS;MACP,KAAK6F,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,WAAW,KAAKiT;MADH,CAAf;MAGA,OAAO,KAAK6F,UAAZ;MACA,OAAO9Y,MAAP;IACD;;;;EAtDkBiY;AAyDrB;AACA;AACA;;;;;;;IACM+F;;;;;EAoBJ;AACF;AACA;EACE,8BAAc;IAAA;;IAAA;;IACZ;;IADY;MAAA;MAAA,OAtBF;IAsBE;;IAAA;MAAA;MAAA,OArBF;IAqBE;;IAAA;MAAA;QAAA;;QAAA,wCAdK,UAACE,OAAD;UAAA,OAAa,SAAb;QAAA,CAcL;MAAA;;MAAA;IAAA;;IAAA;MAAA;QAAA;;QAAA,wCANK,UAACA,OAAD;UAAA,OAAa,SAAb;QAAA,CAML;MAAA;;MAAA;IAAA;;IAAA;EAEb;EAED;AACF;AACA;AACA;;;;;SACE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAaC,CAAb,EAAgB;MACd/E,kBAAkB;IACnB;IAED;AACF;AACA;AACA;;;;SACE,eAAe;MACb,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;SACE,aAAa+E,CAAb,EAAgB;MACd/E,kBAAkB;IACnB;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;WACE,kBAAS;MACP,KAAKN,UAAL,GAAkB,IAAlB;MACA,IAAM9Y,MAAM,GAAG;QACb,YAAY,KAAKoe,QADJ;QAEb,YAAY,KAAKC;MAFJ,CAAf;MAIA,OAAO,KAAKvF,UAAZ;MACA,OAAO9Y,MAAP;IACD;;;;EA7E8BiY;;;;;;;;;;;;;;;;;;AC3kDjC,IAAMzZ,MAAM,GAAG;EACboG,UAAU,EAAE,MADC;EAEbE,WAAW,EAAE,OAFA;EAGbgB,qBAAqB,EAAE,CAHV;EAIbe,iBAAiB,EAAE,CAJN;EAKbQ,gBAAgB,EAAE,CALL;EAMb3B,eAAe,EAAE,CANJ;EAObF,cAAc,EAAE,CAPH;EAQbF,iBAAiB,EAAE,CARN;EASbvB,eAAe,EAAE,CATJ;EAUbua,cAAc,EAAE;AAVH,CAAf;AAaA,IAAMpb,OAAO,GAAG;EACd;EACA0W,YAAY,EAAE,gGAFA;EAGd2E,aAAa,EAAE,mHAHD;EAIdnG,cAAc,EAAE,aAJF;EAKduE,iBAAiB,EAAE,uBALL;EAMdD,mBAAmB,EAAE,iBANP;EAOdE,0BAA0B,EAAE,SAPd;EAQd4B,qBAAqB,EAAE,kDART;EASdzC,2BAA2B,EAAE,2BATf;EAUdU,qBAAqB,EAAE,qFAVT;EAYd1H,kBAAkB,EAAE;IAClB,OAAO;MACLF,YAAY,EAAE,mBADT;MAELC,aAAa,EAAE;IAFV,CADW;IAKlB,OAAO;MACLD,YAAY,EAAE,wBADT;MAELC,aAAa,EAAE;IAFV,CALW;IASlB,OAAO;MACLD,YAAY,EAAE,8BADT;MAELC,aAAa,EAAE;IAFV,CATW;IAalB,OAAO;MACLD,YAAY,EAAE,0CADT;MAELC,aAAa,EAAE;IAFV,CAbW;IAiBlB,OAAO;MACLD,YAAY,EAAE,iBADT;MAELC,aAAa,EAAE;IAFV,CAjBW;IAqBlB,OAAO;MACLD,YAAY,EAAE,uBADT;MAELC,aAAa,EAAE;IAFV,CArBW;IAyBlB,OAAO;MACLD,YAAY,EAAE,yCADT;MAELC,aAAa,EAAE;IAFV,CAzBW;IA6BlB,OAAO;MACLD,YAAY,EAAE,sBADT;MAELC,aAAa,EAAE;IAFV,CA7BW;IAiClB,OAAO;MACLD,YAAY,EAAE,uBADT;MAELC,aAAa,EAAE;IAFV,CAjCW;IAqClB,OAAO;MACLD,YAAY,EAAE,qBADT;MAELC,aAAa,EAAE;IAFV,CArCW;IAyClB,OAAO;MACLD,YAAY,EAAE,4BADT;MAELC,aAAa,EAAE;IAFV,CAzCW;IA6ClB,OAAO;MACLD,YAAY,EAAE,uCADT;MAELC,aAAa,EAAE;IAFV;EA7CW;AAZN,CAAhB;;AAgEA,IAAM2J,IAAI,mCACLvb,OADK,GACO;EACb0W,YAAY,EAAE,2GADD;EAEbmC,2BAA2B,EAAE,wFAFhB;EAGbyC,qBAAqB,EAAE,uEAHV;EAIbE,6BAA6B,EAAE,2IAJlB;EAKbC,cAAc,EAAE,mBALH;EAMbC,wBAAwB,EAAE,qBANb;EAObC,cAAc,EAAE;AAPH,CADP,CAAV;;AAYA,IAAM3U,SAAS,GAAG;EAChB;EACA0P,YAAY,EAAE,sTAFE;EAGhB+C,iBAAiB,EAAE,4BAHH;EAIhBvE,cAAc,EAAE,oBAJA;EAKhBsE,mBAAmB,EAAE,wEALL;EAMhBE,0BAA0B,EAAE,SANZ;EAOhB4B,qBAAqB,EAAE,kDAPP;EAQhBzC,2BAA2B,EAAE,sDARb;EAShBU,qBAAqB,EAAE,sGATP;EAWhB1H,kBAAkB,EAAE;IAClB,KAAK;MACHF,YAAY,EAAE,UADX;MAEHC,aAAa,EAAE;IAFZ,CADa;IAKlB,OAAO;MACLD,YAAY,EAAE,mBADT;MAELC,aAAa,EAAE;IAFV,CALW;IASlB,OAAO;MACLD,YAAY,EAAE,gCADT;MAELC,aAAa,EAAE;IAFV,CATW;IAalB,OAAO;MACLD,YAAY,EAAE,qBADT;MAELC,aAAa,EAAE;IAFV,CAbW;IAiBlB,OAAO;MACLD,YAAY,EAAE,6BADT;MAELC,aAAa,EAAE;IAFV,CAjBW;IAqBlB,OAAO;MACLD,YAAY,EAAE,6BADT;MAELC,aAAa,EAAE;IAFV,CArBW;IAyBlB,OAAO;MACLD,YAAY,EAAE,mCADT;MAELC,aAAa,EAAE;IAFV,CAzBW;IA6BlB,OAAO;MACLD,YAAY,EAAE,+BADT;MAELC,aAAa,EAAE;IAFV,CA7BW;IAiClB,OAAO;MACLD,YAAY,EAAE,qCADT;MAELC,aAAa,EAAE;IAFV,CAjCW;IAqClB,OAAO;MACLD,YAAY,EAAE,iCADT;MAELC,aAAa,EAAE;IAFV,CArCW;IAyClB,OAAO;MACLD,YAAY,EAAE,kCADT;MAELC,aAAa,EAAE;IAFV,CAzCW;IA6ClB,OAAO;MACLD,YAAY,EAAE,8BADT;MAELC,aAAa,EAAE;IAFV,CA7CW;IAiDlB,OAAO;MACLD,YAAY,EAAE,8BADT;MAELC,aAAa,EAAE;IAFV,CAjDW;IAqDlB,OAAO;MACLD,YAAY,EAAE,0BADT;MAELC,aAAa,EAAE;IAFV,CArDW;IAyDlB,OAAO;MACLD,YAAY,EAAE,wBADT;MAELC,aAAa,EAAE;IAFV,CAzDW;IA6DlB,OAAO;MACLD,YAAY,EAAE,qBADT;MAELC,aAAa,EAAE;IAFV,CA7DW;IAiElB,OAAO;MACLD,YAAY,EAAE,qBADT;MAELC,aAAa,EAAE;IAFV,CAjEW;IAqElB,OAAO;MACLD,YAAY,EAAE,wBADT;MAELC,aAAa,EAAE;IAFV,CArEW;IAyElB,OAAO;MACLD,YAAY,EAAE,8BADT;MAELC,aAAa,EAAE;IAFV,CAzEW;IA6ElB,OAAO;MACLD,YAAY,EAAE,kCADT;MAELC,aAAa,EAAE;IAFV,CA7EW;IAiFlB,OAAO;MACLD,YAAY,EAAE,0CADT;MAELC,aAAa,EAAE;IAFV,CAjFW;IAqFlB,OAAO;MACLD,YAAY,EAAE,iCADT;MAELC,aAAa,EAAE;IAFV,CArFW;IAyFlB,OAAO;MACLD,YAAY,EAAE,kCADT;MAELC,aAAa,EAAE;IAFV,CAzFW;IA6FlB,OAAO;MACLD,YAAY,EAAE,kCADT;MAELC,aAAa,EAAE;IAFV,CA7FW;IAiGlB,OAAO;MACLD,YAAY,EAAE,uCADT;MAELC,aAAa,EAAE;IAFV,CAjGW;IAqGlB,OAAO;MACLD,YAAY,EAAE,uCADT;MAELC,aAAa,EAAE;IAFV;EArGW;AAXJ,CAAlB;AAuHA,IAAMhS,YAAY,GAAG;EACnBtE,MAAM,EAAEA,MADW;EAEnB0E,OAAO,EAAEA,OAFU;EAGnBub,IAAI,EAAEA,IAHa;EAInBvU,SAAS,EAAEA;AAJQ,CAArB;AAOA,+DAAepH,YAAf;;;;;;;;;;;;;;;;;;ACxNA,IAAMtE,MAAM,GAAG;EACbqJ,OAAO,EAAE,GADI;EAEbiX,qBAAqB,EAAE,GAFV;EAGbtY,WAAW,EAAE,GAHA;EAIbE,UAAU,EAAE,GAJC;EAKbqY,mBAAmB,EAAE,GALR;EAMb5X,uBAAuB,EAAE,GANZ;EAObC,oBAAoB,EAAE,GAPT;EAQbI,oBAAoB,EAAE,GART;EASbC,mBAAmB,EAAE,GATR;EAUbO,iBAAiB,EAAE,GAVN;EAWbC,gBAAgB,EAAE,GAXL;EAYbI,kBAAkB,EAAE,GAZP;EAabC,iBAAiB,EAAE,GAbN;EAcb0W,cAAc,EAAE,GAdH;EAebpT,cAAc,EAAE,GAfH;EAgBbC,WAAW,EAAE,GAhBA;EAiBboT,mBAAmB,EAAE,GAjBR;EAkBblL,mBAAmB,EAAE,GAlBR;EAmBbmL,sBAAsB,EAAE,GAnBX;EAoBb1U,oBAAoB,EAAE,GApBT;EAqBb2U,qBAAqB,EAAE,GArBV;EAsBbxT,qBAAqB,EAAE,GAtBV;EAuBb8M,iBAAiB,EAAE,GAvBN;EAwBb9N,iBAAiB,EAAE,GAxBN;EAyBb2O,kBAAkB,EAAE,GAzBP;EA0Bb/D,aAAa,EAAE,GA1BF;EA2BbmD,kBAAkB,EAAE,GA3BP;EA4Bb/E,0BAA0B,EAAE;AA5Bf,CAAf;;AA+BA,IAAMzQ,OAAO,mCACR1E,MADQ,GACG;EACZgJ,oBAAoB,EAAE,GADV;EAEZQ,iBAAiB,EAAE,GAFP;EAGZK,kBAAkB,EAAE,GAHR;EAIZ2W,cAAc,EAAE,GAJJ;EAKZpT,cAAc,EAAE,GALJ;EAMZC,WAAW,EAAE,GAND;EAOZrB,oBAAoB,EAAE,GAPV;EAQZ2U,qBAAqB,EAAE,GARX;EASZxT,qBAAqB,EAAE,GATX;EAUZ8M,iBAAiB,EAAE,GAVP;EAWZ9N,iBAAiB,EAAE,GAXP;EAYZ2O,kBAAkB,EAAE,GAZR;EAaZ/D,aAAa,EAAE,GAbH;EAcZmD,kBAAkB,EAAE,GAdR;EAeZ/E,0BAA0B,EAAE;AAfhB,CADH,CAAb;;AAoBA,IAAMzJ,SAAS,mCACV1L,MADU,GACC;EACZsgB,qBAAqB,EAAE,GADX;EAEZtY,WAAW,EAAE,GAFD;EAGZE,UAAU,EAAE,GAHA;EAIZqY,mBAAmB,EAAE,GAJT;EAKZ5X,uBAAuB,EAAE,GALb;EAMZiY,qBAAqB,EAAE,GANX;EAOZ5X,oBAAoB,EAAE,GAPV;EAQZC,mBAAmB,EAAE,GART;EASZO,iBAAiB,EAAE,GATP;EAUZC,gBAAgB,EAAE,GAVN;EAWZI,kBAAkB,EAAE,GAXR;EAYZC,iBAAiB,EAAE,GAZP;EAaZ0W,cAAc,EAAE,GAbJ;EAcZC,mBAAmB,EAAE,GAdT;EAeZlL,mBAAmB,EAAE,GAfT;EAgBZmL,sBAAsB,EAAE,GAhBZ;EAiBZ1U,oBAAoB,EAAE,GAjBV;EAkBZ2U,qBAAqB,EAAE,GAlBX;EAmBZxT,qBAAqB,EAAE,GAnBX;EAoBZhB,iBAAiB,EAAE,GApBP;EAqBZ2O,kBAAkB,EAAE,GArBR;EAsBZ/D,aAAa,EAAE,GAtBH;EAuBZmD,kBAAkB,EAAE,GAvBR;EAwBZ/E,0BAA0B,EAAE;AAxBhB,CADD,CAAf;;AA6BA,IAAM9Q,UAAU,GAAG;EACjBK,OAAO,EAAEA,OADQ;EAEjBgH,SAAS,EAAEA;AAFM,CAAnB;AAKA,+DAAerH,UAAf;;;;;;;;;;;;ACtFA,IAAMkO,cAAc,GAAG;EACrB,MAAM,IADe;EACT,MAAM,IADG;EACG,MAAM,IADT;EACe,MAAM,IADrB;EAC2B,MAAM,IADjC;EACuC,MAAM,IAD7C;EAErB,MAAM,IAFe;EAET,MAAM,IAFG;EAEG,MAAM,IAFT;EAEe,MAAM,IAFrB;EAE2B,MAAM,IAFjC;EAEuC,MAAM,IAF7C;EAGrB,MAAM,IAHe;EAGT,MAAM,IAHG;EAGG,MAAM,IAHT;EAGe,MAAM,IAHrB;EAG2B,MAAM,IAHjC;EAGuC,MAAM,IAH7C;EAIrB,MAAM,IAJe;EAIT,MAAM,IAJG;EAIG,MAAM,IAJT;EAIe,MAAM,IAJrB;EAI2B,MAAM,IAJjC;EAIuC,MAAM,IAJ7C;EAKrB,MAAM,IALe;EAKT,MAAM,IALG;EAKG,MAAM,IALT;EAKe,MAAM,IALrB;EAK2B,MAAM,IALjC;EAKuC,MAAM,IAL7C;EAMrB,MAAM,IANe;EAMT,MAAM,IANG;EAMG,MAAM,IANT;EAMe,MAAM,IANrB;EAM2B,MAAM,IANjC;EAMuC,MAAM,IAN7C;EAOrB,MAAM,IAPe;EAOT,MAAM,IAPG;EAOG,MAAM,IAPT;EAOe,MAAM,IAPrB;EAO2B,MAAM,IAPjC;EAOuC,MAAM,IAP7C;EAQrB,MAAM,IARe;EAQT,MAAM,IARG;EAQG,MAAM,IART;EAQe,MAAM,IARrB;EAQ2B,MAAM,IARjC;EAQuC,MAAM,IAR7C;EASrB,MAAM,IATe;EAST,MAAM,IATG;EASG,MAAM,IATT;EASe,MAAM,IATrB;EAS2B,MAAM,IATjC;EASuC,MAAM,IAT7C;EAUrB,MAAM,IAVe;EAUT,MAAM,IAVG;EAUG,MAAM,IAVT;EAUe,MAAM,IAVrB;EAU2B,MAAM,IAVjC;EAUuC,MAAM,IAV7C;EAWrB,MAAM,IAXe;EAWT,MAAM,IAXG;EAWG,MAAM,IAXT;EAWe,MAAM,IAXrB;EAW2B,MAAM,IAXjC;EAWuC,MAAM,IAX7C;EAYrB,MAAM,IAZe;EAYT,MAAM,IAZG;EAYG,MAAM,IAZT;EAYe,MAAM,IAZrB;EAY2B,MAAM,IAZjC;EAYuC,MAAM,IAZ7C;EAarB,MAAM,IAbe;EAaT,MAAM,IAbG;EAaG,MAAM,IAbT;EAae,MAAM,IAbrB;EAa2B,MAAM,IAbjC;EAauC,MAAM,IAb7C;EAcrB,MAAM,IAde;EAcT,MAAM,IAdG;EAcG,MAAM,IAdT;EAce,MAAM,IAdrB;EAc2B,MAAM,IAdjC;EAcuC,MAAM,IAd7C;EAerB,MAAM,IAfe;EAeT,MAAM,IAfG;EAeG,MAAM,IAfT;EAee,MAAM,IAfrB;EAe2B,MAAM,IAfjC;EAeuC,MAAM,IAf7C;EAgBrB,MAAM,IAhBe;EAgBT,MAAM,IAhBG;EAgBG,MAAM,IAhBT;EAgBe,MAAM,IAhBrB;EAgB2B,MAAM,IAhBjC;EAgBuC,MAAM,IAhB7C;EAiBrB,MAAM,IAjBe;EAiBT,MAAM,IAjBG;EAiBG,MAAM,IAjBT;EAiBe,MAAM,IAjBrB;EAiB2B,MAAM,IAjBjC;EAiBuC,MAAM,IAjB7C;EAkBrB,MAAM,IAlBe;EAkBT,MAAM,IAlBG;EAkBG,MAAM,IAlBT;EAkBe,MAAM,IAlBrB;EAkB2B,MAAM,IAlBjC;EAkBuC,MAAM,IAlB7C;EAmBrB,MAAM,IAnBe;EAmBT,MAAM,IAnBG;EAmBG,MAAM,IAnBT;EAmBe,MAAM,IAnBrB;EAmB2B,MAAM,IAnBjC;EAmBuC,MAAM,IAnB7C;EAoBrB,MAAM,IApBe;EAoBT,MAAM,IApBG;EAoBG,MAAM,IApBT;EAoBe,MAAM,IApBrB;EAoB2B,MAAM,IApBjC;EAoBuC,MAAM,IApB7C;EAqBrB,MAAM,IArBe;EAqBT,MAAM,IArBG;EAqBG,MAAM,IArBT;EAqBe,MAAM,IArBrB;EAqB2B,MAAM,IArBjC;EAqBuC,MAAM,IArB7C;EAsBrB,MAAM,IAtBe;EAsBT,MAAM,IAtBG;EAsBG,MAAM,IAtBT;EAsBe,MAAM,IAtBrB;EAsB2B,MAAM,IAtBjC;EAsBuC,MAAM,IAtB7C;EAuBrB,MAAM,IAvBe;EAuBT,MAAM,IAvBG;EAuBG,MAAM,IAvBT;EAuBe,MAAM,IAvBrB;EAuB2B,MAAM,IAvBjC;EAuBuC,MAAM,IAvB7C;EAwBrB,MAAM,IAxBe;EAwBT,MAAM,IAxBG;EAwBG,MAAM,IAxBT;EAwBe,MAAM,IAxBrB;EAwB2B,MAAM,IAxBjC;EAwBuC,MAAM,IAxB7C;EAyBrB,MAAM,IAzBe;EAyBT,MAAM,IAzBG;EAyBG,MAAM,IAzBT;EAyBe,MAAM,IAzBrB;EAyB2B,MAAM,IAzBjC;EAyBuC,MAAM,IAzB7C;EA0BrB,MAAM,IA1Be;EA0BT,MAAM,IA1BG;EA0BG,MAAM,IA1BT;EA0Be,MAAM,IA1BrB;EA0B2B,MAAM,IA1BjC;EA0BuC,MAAM,IA1B7C;EA2BrB,MAAM,IA3Be;EA2BT,MAAM,IA3BG;EA2BG,MAAM,IA3BT;EA2Be,MAAM,IA3BrB;EA2B2B,MAAM,IA3BjC;EA2BuC,MAAM,IA3B7C;EA4BrB,MAAM,IA5Be;EA4BT,MAAM,IA5BG;EA4BG,MAAM,IA5BT;EA4Be,MAAM,IA5BrB;EA4B2B,MAAM,IA5BjC;EA4BuC,MAAM,IA5B7C;EA6BrB,MAAM,IA7Be;EA6BT,MAAM,IA7BG;EA6BG,MAAM,IA7BT;EA6Be,MAAM,IA7BrB;EA6B2B,MAAM,IA7BjC;EA6BuC,MAAM,IA7B7C;EA8BrB,MAAM,IA9Be;EA8BT,MAAM,IA9BG;EA8BG,MAAM,IA9BT;EA8Be,MAAM,IA9BrB;EA8B2B,MAAM,IA9BjC;EA8BuC,MAAM,IA9B7C;EA+BrB,MAAM,IA/Be;EA+BT,MAAM,IA/BG;EA+BG,MAAM,IA/BT;EA+Be,MAAM,IA/BrB;EA+B2B,MAAM,IA/BjC;EA+BuC,MAAM,IA/B7C;EAgCrB,OAAO,KAhCc;EAgCP,OAAO,KAhCA;EAgCO,OAAO,KAhCd;EAgCqB,OAAO,KAhC5B;EAgCmC,OAAO,KAhC1C;EAiCrB,OAAO,KAjCc;EAiCP,OAAO,KAjCA;EAiCO,OAAO,KAjCd;EAiCqB,OAAO,KAjC5B;EAiCmC,OAAO,KAjC1C;EAkCrB,OAAO,KAlCc;EAkCP,OAAO,KAlCA;EAkCO,OAAO,KAlCd;EAkCqB,OAAO,KAlC5B;EAkCmC,OAAO,KAlC1C;EAmCrB,OAAO,KAnCc;EAmCP,OAAO,KAnCA;EAmCO,OAAO,KAnCd;EAmCqB,OAAO,KAnC5B;EAmCmC,OAAO,KAnC1C;EAoCrB,OAAO,KApCc;EAoCP,OAAO,KApCA;EAoCO,OAAO,KApCd;EAoCqB,OAAO,KApC5B;EAoCmC,OAAO,KApC1C;EAqCrB,OAAO,KArCc;EAqCP,OAAO,KArCA;EAqCO,OAAO,KArCd;EAqCqB,OAAO,KArC5B;EAqCmC,OAAO,KArC1C;EAsCrB,OAAO,KAtCc;EAsCP,OAAO,KAtCA;EAsCO,OAAO,KAtCd;EAsCqB,OAAO,KAtC5B;EAsCmC,OAAO,KAtC1C;EAuCrB,OAAO,KAvCc;EAuCP,OAAO,KAvCA;EAuCO,OAAO,KAvCd;EAuCqB,OAAO,KAvC5B;EAuCmC,OAAO,KAvC1C;EAwCrB,OAAO,KAxCc;EAwCP,OAAO,KAxCA;EAwCO,OAAO,KAxCd;EAwCqB,OAAO,KAxC5B;EAwCmC,OAAO,KAxC1C;EAyCrB,OAAO,KAzCc;EAyCP,OAAO,KAzCA;EAyCO,OAAO,KAzCd;EAyCqB,OAAO,KAzC5B;EAyCmC,OAAO,KAzC1C;EA0CrB,OAAO,KA1Cc;EA0CP,OAAO,KA1CA;EA0CO,OAAO,KA1Cd;EA0CqB,OAAO,KA1C5B;EA0CmC,OAAO,KA1C1C;EA2CrB,OAAO,KA3Cc;EA2CP,OAAO,KA3CA;EA2CO,OAAO,KA3Cd;EA2CqB,OAAO,KA3C5B;EA2CmC,OAAO,KA3C1C;EA4CrB,OAAO,KA5Cc;EA4CP,OAAO,KA5CA;EA4CO,OAAO,KA5Cd;EA4CqB,OAAO,KA5C5B;EA4CmC,OAAO,KA5C1C;EA6CrB,OAAO,KA7Cc;EA6CP,OAAO,KA7CA;EA6CO,OAAO,KA7Cd;EA6CqB,OAAO,KA7C5B;EA6CmC,OAAO,KA7C1C;EA8CrB,OAAO,KA9Cc;EA8CP,OAAO,KA9CA;EA8CO,OAAO,KA9Cd;EA8CqB,OAAO,KA9C5B;EA8CmC,OAAO,KA9C1C;EA+CrB,OAAO,KA/Cc;EA+CP,OAAO,KA/CA;EA+CO,OAAO,KA/Cd;EA+CqB,OAAO,KA/C5B;EA+CmC,OAAO,KA/C1C;EAgDrB,OAAO,KAhDc;EAgDP,OAAO,KAhDA;EAgDO,OAAO,KAhDd;EAgDqB,OAAO,KAhD5B;EAgDmC,OAAO,KAhD1C;EAiDrB,OAAO,KAjDc;EAiDP,OAAO,KAjDA;EAiDO,OAAO,KAjDd;EAiDqB,OAAO,KAjD5B;EAiDmC,OAAO,KAjD1C;EAkDrB,OAAO,KAlDc;EAkDP,OAAO,KAlDA;EAkDO,OAAO,KAlDd;EAkDqB,OAAO,KAlD5B;EAkDmC,OAAO,KAlD1C;EAmDrB,OAAO,KAnDc;EAmDP,OAAO,KAnDA;EAmDO,OAAO,KAnDd;EAmDqB,OAAO,KAnD5B;EAmDmC,OAAO,KAnD1C;EAoDrB,OAAO,KApDc;EAoDP,OAAO,KApDA;EAoDO,OAAO,KApDd;EAoDqB,OAAO,KApD5B;EAoDmC,OAAO,KApD1C;EAqDrB,OAAO,KArDc;EAqDP,OAAO,KArDA;EAqDO,OAAO,KArDd;EAqDqB,OAAO,KArD5B;EAqDmC,OAAO,KArD1C;EAsDrB,OAAO,KAtDc;EAsDP,OAAO,KAtDA;EAsDO,OAAO,KAtDd;EAsDqB,OAAO,KAtD5B;EAsDmC,OAAO,KAtD1C;EAuDrB,OAAO,KAvDc;EAuDP,OAAO,KAvDA;EAuDO,OAAO,KAvDd;EAuDqB,OAAO,KAvD5B;EAuDmC,OAAO,KAvD1C;EAwDrB,OAAO,KAxDc;EAwDP,OAAO,KAxDA;EAwDO,OAAO,KAxDd;EAwDqB,OAAO,KAxD5B;EAwDmC,OAAO,KAxD1C;EAyDrB,OAAO,KAzDc;EAyDP,OAAO,KAzDA;EAyDO,OAAO,KAzDd;EAyDqB,OAAO,KAzD5B;EAyDmC,OAAO,KAzD1C;EA0DrB,OAAO,KA1Dc;EA0DP,OAAO,KA1DA;EA0DO,OAAO,KA1Dd;EA0DqB,OAAO,KA1D5B;EA0DmC,OAAO,KA1D1C;EA2DrB,OAAO,KA3Dc;EA2DP,OAAO,KA3DA;EA2DO,OAAO,KA3Dd;EA2DqB,OAAO,KA3D5B;EA2DmC,OAAO,KA3D1C;EA4DrB,OAAO,KA5Dc;EA4DP,OAAO,KA5DA;EA4DO,OAAO,KA5Dd;EA4DqB,OAAO,KA5D5B;EA4DmC,OAAO,KA5D1C;EA6DrB,OAAO,KA7Dc;EA6DP,OAAO,KA7DA;EA6DO,OAAO,KA7Dd;EA6DqB,OAAO,KA7D5B;EA6DmC,OAAO,KA7D1C;EA8DrB,OAAO,KA9Dc;EA8DP,OAAO,KA9DA;EA8DO,OAAO,KA9Dd;EA8DqB,OAAO,KA9D5B;EA8DmC,OAAO,KA9D1C;EA+DrB,OAAO,KA/Dc;EA+DP,OAAO,KA/DA;EA+DO,OAAO,KA/Dd;EA+DqB,OAAO,KA/D5B;EA+DmC,OAAO,KA/D1C;EAgErB,OAAO,KAhEc;EAgEP,OAAO,KAhEA;EAgEO,OAAO,KAhEd;EAgEqB,OAAO,KAhE5B;EAgEmC,OAAO,KAhE1C;EAiErB,OAAO,KAjEc;EAiEP,OAAO,KAjEA;EAiEO,OAAO,KAjEd;EAiEqB,OAAO,KAjE5B;EAiEmC,OAAO,KAjE1C;EAkErB,OAAO,KAlEc;EAkEP,OAAO,KAlEA;EAkEO,OAAO,KAlEd;EAkEqB,OAAO,KAlE5B;EAkEmC,OAAO,KAlE1C;EAmErB,OAAO,KAnEc;EAmEP,OAAO,KAnEA;EAmEO,OAAO,KAnEd;EAmEqB,OAAO,KAnE5B;EAmEmC,OAAO,KAnE1C;EAoErB,OAAO,KApEc;EAoEP,OAAO,KApEA;EAoEO,OAAO,KApEd;EAoEqB,OAAO,KApE5B;EAoEmC,OAAO,KApE1C;EAqErB,OAAO,KArEc;EAqEP,OAAO,KArEA;EAqEO,OAAO,KArEd;EAqEqB,OAAO,KArE5B;EAqEmC,OAAO,KArE1C;EAsErB,OAAO,KAtEc;EAsEP,OAAO,KAtEA;EAsEO,OAAO,KAtEd;EAsEqB,OAAO,KAtE5B;EAsEmC,OAAO,KAtE1C;EAuErB,OAAO,KAvEc;EAuEP,OAAO,KAvEA;EAuEO,OAAO,KAvEd;EAuEqB,OAAO,KAvE5B;EAuEmC,OAAO,KAvE1C;EAwErB,OAAO,KAxEc;EAwEP,OAAO,KAxEA;EAwEO,OAAO,KAxEd;EAwEqB,OAAO,KAxE5B;EAwEmC,OAAO;AAxE1C,CAAvB;AA2EA,+DAAeA,cAAf;;;;;;;;;;;;;;;;;;ACzEA,IAAM7N,OAAO,GAAG;EACdmc,YAAY,EAAE,YADA;EAEdC,aAAa,EAAE,aAFD;EAGdrC,OAAO,EAAE,uDAHK;EAGoD;EAClE7B,WAAW,EAAE,oDAJC;EAIqD;EACnEmE,UAAU,EAAE,QALE;EAMdhD,WAAW,EAAE,cANC;EAOd5D,UAAU,EAAE,6BAPE;EAO6B;EAC3C6G,aAAa,EAAE,+BARD;EASd3B,WAAW,EAAE,YATC;EASa;EAC3B4B,QAAQ,EAAE,aAVI;EAYd;EACAC,SAAS,EAAE,gDAbG;EAcdC,UAAU,EAAE,8DAdE;EAedhF,OAAO,EAAE,8BAfK;EAgBdoC,OAAO,EAAE,8EAhBK;EAiBdK,SAAS,EAAE,mEAjBG;EAiBkE;EAChFa,QAAQ,EAAE,uBAlBI;EAoBd;EACA5F,WAAW,EAAE,OArBC;EAsBd4D,WAAW,EAAE,QAtBC;EAuBdI,WAAW,EAAE,UAvBC;EAwBduD,eAAe,EAAE,UAxBH;EAyBdpD,UAAU,EAAE;AAzBE,CAAhB;;AA4BA,IAAMiC,IAAI,mCACLvb,OADK,GACO;EACbsc,aAAa,EAAE;AADF,CADP,CAAV;;AAMA,IAAMtV,SAAS,GAAG;EAChB2V,YAAY,EAAE,4BADE;EAEhBjC,YAAY,EAAE,4BAFE;EAGhB5C,aAAa,EAAE,6BAHC;EAIhB8E,aAAa,EAAE,6BAJC;EAKhBvE,cAAc,EAAE,8BALA;EAMhBY,OAAO,EAAE,iDANO;EAM4C;EAC5DoB,gBAAgB,EAAE,+EAPF;EAOmF;EACnGvH,SAAS,EAAE,iEARK;EAQ8D;EAC9E+J,kBAAkB,EAAE,yEATJ;EAS+E;EAC/FpC,iBAAiB,EAAE,gFAVH;EAUqF;EACrGV,OAAO,EAAE,0RAXO;EAYhB7B,WAAW,EAAE,4HAZG;EAahBmE,UAAU,EAAE,QAbI;EAchBhD,WAAW,EAAE,cAdG;EAehB5D,UAAU,EAAE,mCAfI;EAgBhB6G,aAAa,EAAE,yBAhBC;EAiBhBQ,kBAAkB,EAAE,yBAjBJ;EAiB+B;EAC/ClD,iBAAiB,EAAE,wEAlBH;EAkB6E;EAC7Fe,WAAW,EAAE,MAnBG;EAmBK;EACrB4B,QAAQ,EAAE,aApBM;EAqBhBQ,aAAa,EAAE,WArBC;EAuBhB;EACAzF,UAAU,EAAE,gDAxBI;EAyBhBa,UAAU,EAAE,2BAzBI;EA0BhBV,OAAO,EAAE,oCA1BO;EA2BhBoC,OAAO,EAAE,iGA3BO;EA4BhBK,SAAS,EAAE,6EA5BK;EA6BhBa,QAAQ,EAAE,8GA7BM;EA6B0G;EAC1HiC,UAAU,EAAE,wBA9BI;EA+BhBC,SAAS,EAAE,6DA/BK;EAiChB;EACA3C,YAAY,EAAE,MAlCE;EAmChBvB,WAAW,EAAE,KAnCG;EAoChBI,WAAW,EAAE,KApCG;EAqChBG,UAAU,EAAE,MArCI;EAsChBtB,cAAc,EAAE;AAtCA,CAAlB;AAyCA,IAAMlK,KAAK,GAAG;EACZyN,IAAI,EAAEA,IADM;EAEZvb,OAAO,EAAEA,OAFG;EAGZgH,SAAS,EAAEA;AAHC,CAAd;AAMA,+DAAe8G,KAAf;;;;;;;;;;;;;AClFA;AAEA,IAAMK,eAAe,GAAGL,wDAAxB;AAEA,IAAMmI,OAAO,GAAG;EACd,cAAc;IACZjE,MAAM,EAAE,gBADI;IAEZ9V,GAAG,EAAE,CAFO;IAGZ8U,SAAS,EAAE,EAHC;IAIZuB,MAAM,EAAE;EAJI,CADA;EAOd,UAAU;IACRP,MAAM,EAAE7D,eAAe,CAACyL,iBADhB;IAER1d,GAAG,EAAE,EAFG;IAGR8U,SAAS,EAAE,KAHH;IAIRuB,MAAM,EAAE;EAJA,CAPI;EAad,WAAW;IACTP,MAAM,EAAE7D,eAAe,CAACkM,gBADf;IAETne,GAAG,EAAE,EAFI;IAGT8U,SAAS,EAAE,KAHF;IAITuB,MAAM,EAAE;EAJC,CAbG;EAmBd,gBAAgB;IACdP,MAAM,EAAE7D,eAAe,CAACsM,iBADV;IAEdve,GAAG,EAAE,CAFS;IAGd8U,SAAS,EAAE,EAHG;IAIduB,MAAM,EAAE;EAJM,CAnBF;EAyBd,YAAY;IACVP,MAAM,EAAE7D,eAAe,CAAC2O,kBADd;IAEVxK,OAAO,EAAEnE,eAAe,CAAC2O,kBAFf;IAGV5gB,GAAG,EAAE,EAHK;IAIV8U,SAAS,EAAE,KAJD;IAKVkB,UAAU,EAAE,KALF;IAMVK,MAAM,EAAE;EANE,CAzBE;EAiCd,eAAe;IACbP,MAAM,EAAE,QAAQ7D,eAAe,CAAC2O,kBADnB;IAEbxK,OAAO,EAAEnE,eAAe,CAACsH,UAAhB,GAA6B,MAA7B,GACLtH,eAAe,CAAC2O,kBAHP;IAIb5gB,GAAG,EAAE,GAJQ;IAKb8U,SAAS,EAAE,KALE;IAMbkB,UAAU,EAAE,KANC;IAObK,MAAM,EAAE;EAPK,CAjCD;EA0Cd,cAAc;IACZP,MAAM,EAAE7D,eAAe,CAAC2O,kBADZ;IAEZ5gB,GAAG,EAAE,EAFO;IAGZ8U,SAAS,EAAE,KAHC;IAIZuB,MAAM,EAAE;EAJI,CA1CA;EAgDd,UAAU;IACRP,MAAM,EAAE7D,eAAe,CAAC2O,kBADhB;IAER5gB,GAAG,EAAE,CAFG;IAGR8U,SAAS,EAAE,EAHH;IAIRuB,MAAM,EAAE;EAJA,CAhDI;EAsDd,WAAW;IACTP,MAAM,EAAE7D,eAAe,CAACsH,UADf;IAETvZ,GAAG,EAAE,CAFI;IAGT8U,SAAS,EAAE,EAHF;IAITuB,MAAM,EAAE;EAJC,CAtDG;EA4Dd,SAAS;IACPP,MAAM,EAAE7D,eAAe,CAACyO,aADjB;IAEP1gB,GAAG,EAAE,CAFE;IAGP8U,SAAS,EAAE,EAHJ;IAIPuB,MAAM,EAAE;EAJD;AA5DK,CAAhB;AAoEA,IAAMrE,OAAO,GAAG;EACd,cAAc;IACZhS,GAAG,EAAE,CADO;IAEZ8U,SAAS,EAAE,EAFC;IAGZuB,MAAM,EAAE,KAHI;IAIZhB,SAAS,EAAE,KAJC;IAKZS,MAAM,EAAE,gBALI;IAMZV,KAAK,EAAE;EANK,CADA;EASd,UAAU;IACRpV,GAAG,EAAE,EADG;IAER8U,SAAS,EAAE,KAFH;IAGRuB,MAAM,EAAE,IAHA;IAIRhB,SAAS,EAAE,KAJH;IAKRS,MAAM,EAAE7D,eAAe,CAACyL;EALhB,CATI;EAgBd,WAAW;IACT1d,GAAG,EAAE,EADI;IAET8U,SAAS,EAAE,KAFF;IAGTuB,MAAM,EAAE,KAHC;IAIThB,SAAS,EAAE,KAJF;IAKTS,MAAM,EAAE7D,eAAe,CAAC0O;EALf,CAhBG;EAuBd,gBAAgB;IACd3gB,GAAG,EAAE,CADS;IAEd8U,SAAS,EAAE,EAFG;IAGduB,MAAM,EAAE,KAHM;IAIdhB,SAAS,EAAE,IAJG;IAKdS,MAAM,EAAE7D,eAAe,CAACsM;EALV,CAvBF;EA8Bd,YAAY;IACVve,GAAG,EAAE,EADK;IAEV8U,SAAS,EAAE,KAFD;IAGVkB,UAAU,EAAE,KAHF;IAIVK,MAAM,EAAE,KAJE;IAKVhB,SAAS,EAAE,KALD;IAMVS,MAAM,EAAE7D,eAAe,CAAC2O,kBANd;IAOVxK,OAAO,EAAEnE,eAAe,CAAC2O;EAPf,CA9BE;EAuCd,eAAe;IACb5gB,GAAG,EAAE,GADQ;IAEb8U,SAAS,EAAE,KAFE;IAGbkB,UAAU,EAAE,KAHC;IAIbK,MAAM,EAAE,KAJK;IAKbhB,SAAS,EAAE,KALE;IAMbS,MAAM,EAAE,QAAQ7D,eAAe,CAAC2O,kBANnB;IAObxK,OAAO,EAAEnE,eAAe,CAACsH,UAAhB,GAA6B,MAA7B,GACLtH,eAAe,CAAC2O;EARP,CAvCD;EAiDd,cAAc;IACZ5gB,GAAG,EAAE,EADO;IAEZ8U,SAAS,EAAE,KAFC;IAGZuB,MAAM,EAAE,KAHI;IAIZhB,SAAS,EAAE,KAJC;IAKZS,MAAM,EAAE7D,eAAe,CAAC2O;EALZ,CAjDA;EAwDd,UAAU;IACR5gB,GAAG,EAAE,CADG;IAER8U,SAAS,EAAE,EAFH;IAGRuB,MAAM,EAAE,KAHA;IAIRhB,SAAS,EAAE,KAJH;IAKRS,MAAM,EAAE7D,eAAe,CAAC2O,kBALhB;IAMRxL,KAAK,EAAE;EANC,CAxDI;EAgEd,WAAW;IACTpV,GAAG,EAAE,CADI;IAET8U,SAAS,EAAE,KAFF;IAGTuB,MAAM,EAAE,KAHC;IAIThB,SAAS,EAAE,KAJF;IAKTS,MAAM,EAAE7D,eAAe,CAACsH,UALf;IAMTnE,KAAK,EAAE;EANE,CAhEG;EAwEd,SAAS;IACPpV,GAAG,EAAE,CADE;IAEP8U,SAAS,EAAE,EAFJ;IAGPuB,MAAM,EAAE,KAHD;IAIPhB,SAAS,EAAE,KAJJ;IAKPS,MAAM,EAAE7D,eAAe,CAACyO,aALjB;IAMPtL,KAAK,EAAE;EANA;AAxEK,CAAhB;AAkFA,IAAM1D,SAAS,GAAG;EAChBqI,OAAO,EAAEA,OADO;EAEhB/H,OAAO,EAAEA;AAFO,CAAlB;AAKA,+DAAeN,SAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9JA;AAEA,IAAMsP,cAAc,GAAGtd,2FAAvB;AACA,IAAMud,WAAW,GAAGvd,wFAApB;AACA,IAAMwd,gBAAgB,GAAGxd,6FAAzB;AAEA;AACA;AACA;;;;;;;;AACO,IAAMF,eAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;AACA;AACA;EACE,yBAAYiC,SAAZ,EAA+B0b,YAA/B,EAAqDC,eAArD,EAA8E;IAAA;;IAAA;;IAC5E,0BAAMD,YAAN;;IAD4E;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAE5E,iEAAkB1b,SAAlB;;IACA,oEAAqB0b,YAArB;;IACA,uEAAwBC,eAAxB;;IAJ4E;EAK7E;;EAZH;IAAA;IAAA;IAkBE;AACF;AACA;AACA;IACE,eAAgB;MACd,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;EA7BA;IAAA;IAAA,KA8BE,eAAmB;MACjB,6BAAO,IAAP;IACD;IAED;AACF;AACA;AACA;;EArCA;IAAA;IAAA,KAsCE,eAAsB;MACpB,6BAAO,IAAP;IACD;EAxCH;;EAAA;AAAA,iCAAqC1W,KAArC;AA2CA;AACA;AACA;;AACO,IAAM2W,sBAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;EACE,gCAAY5b,SAAZ,EAA+B;IAAA;;IAAA;;IAC7B,IAAI,GAAGH,cAAH,CAAkBxC,IAAlB,CAAuBke,cAAvB,EAAuCrY,MAAM,CAAClD,SAAD,CAA7C,CAAJ,EAA+D;MAC7D,4BAAMA,SAAN,EAAiBub,cAAc,CAACrY,MAAM,CAAClD,SAAD,CAAP,CAAd,CAAkCgQ,YAAnD,EAAiEuL,cAAc,CAACrY,MAAM,CAAClD,SAAD,CAAP,CAAd,CAAkCiQ,aAAnG;IACD,CAFD,MAEO;MACL,4BAAM,GAAN,EAAWsL,cAAc,CAAC,KAAD,CAAd,CAAsBvL,YAAjC,EAA+CuL,cAAc,CAAC,KAAD,CAAd,CAAsBtL,aAArE;IACD;;IAL4B;EAM9B;;EAXH;AAAA,EAA4ClS,eAA5C;AAcA;AACA;AACA;;AACO,IAAM8d,mBAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;EACE,6BAAY7b,SAAZ,EAA+B;IAAA;;IAAA;;IAC7B,IAAI,GAAGH,cAAH,CAAkBxC,IAAlB,CAAuBme,WAAvB,EAAoCtY,MAAM,CAAClD,SAAD,CAA1C,CAAJ,EAA4D;MAC1D,4BAAMA,SAAN,EAAiBwb,WAAW,CAACtY,MAAM,CAAClD,SAAD,CAAP,CAAX,CAA+BgQ,YAAhD,EAA8DwL,WAAW,CAACtY,MAAM,CAAClD,SAAD,CAAP,CAAX,CAA+BiQ,aAA7F;IACD,CAFD,MAEO;MACL,4BAAM,GAAN,EAAWuL,WAAW,CAAC,KAAD,CAAX,CAAmBxL,YAA9B,EAA4CwL,WAAW,CAAC,KAAD,CAAX,CAAmBvL,aAA/D;IACD;;IAL4B;EAM9B;;EAXH;AAAA,EAAyClS,eAAzC;AAcA;AACA;AACA;;AACO,IAAMoW,wBAAb;EAAA;;EAAA;;EACE;AACF;AACA;AACA;EACE,kCAAYnU,SAAZ,EAA+B;IAAA;;IAAA;;IAC7B,IAAI,GAAGH,cAAH,CAAkBxC,IAAlB,CAAuBoe,gBAAvB,EAAyCvY,MAAM,CAAClD,SAAD,CAA/C,CAAJ,EAAiE;MAC/D,4BAAMA,SAAN,EAAiByb,gBAAgB,CAACvY,MAAM,CAAClD,SAAD,CAAP,CAAhB,CAAoCgQ,YAArD,EAAmEyL,gBAAgB,CAACvY,MAAM,CAAClD,SAAD,CAAP,CAAhB,CAAoCiQ,aAAvG;IACD,CAFD,MAEO;MACL,4BAAM,GAAN,EAAWwL,gBAAgB,CAAC,KAAD,CAAhB,CAAwBzL,YAAnC,EAAiDyL,gBAAgB,CAAC,KAAD,CAAhB,CAAwBxL,aAAzE;IACD;;IAL4B;EAM9B;;EAXH;AAAA,EAA8ClS,eAA9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FO,IAAM+d,kBAAkB,GAAG,GAA3B;AACA,IAAMC,kBAAkB,GAAG,EAA3B;AACA,IAAMC,gBAAgB,GAAG,KAAKD,kBAA9B;AACA,IAAME,eAAe,GAAG,KAAKD,gBAA7B;AAEP,IAAME,YAAY,GAAG,CACnB,CAAC,GAAD,EAAMD,eAAN,CADmB,EAEnB,CAAC,GAAD,EAAMD,gBAAN,CAFmB,EAGnB,CAAC,GAAD,EAAMD,kBAAN,CAHmB,EAInB,CAAC,GAAD,EAAMD,kBAAN,CAJmB,CAArB;AAOA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASK,kBAAT,CAA4BC,YAA5B,EAAkD;EACvD;EACA,IAAI,CAACA,YAAD,IAAiBA,YAAY,IAAI,CAArC,EAAwC;IACtC,OAAO,UAAP;EACD;;EAED,IAAMC,KAAK,GAAG/hB,IAAI,CAACgiB,KAAL,CAAWF,YAAY,GAAGJ,gBAA1B,CAAd;EAEA,IAAMO,OAAO,GAAG,IAAI5hB,IAAJ,CAASyhB,YAAY,GAAG,IAAxB,CAAhB;EACA,IAAMI,OAAO,GAAGD,OAAO,CAACE,aAAR,EAAhB,CATuD,CAUvD;;EACA,IAAM1F,OAAO,GAAGwF,OAAO,CAACG,UAAR,EAAhB;EACA,IAAMC,EAAE,GAAGP,YAAY,GAAG,GAA1B;EACA,IAAIQ,KAAK,GAAG,EAAZ;;EACA,IAAIC,aAAa,CAACF,EAAD,CAAb,GAAoB,CAAxB,EAA2B;IACzB,IAAIE,aAAa,CAACF,EAAD,CAAb,GAAoB,CAAxB,EAA2B;MACzBC,KAAK,GAAGD,EAAE,CAACG,OAAH,CAAW,CAAX,CAAR;IACD,CAFD,MAEO;MACLF,KAAK,GAAG1Z,MAAM,CAACyZ,EAAD,CAAd;IACD;;IACDC,KAAK,GAAG,MAAMA,KAAK,CAACrX,KAAN,CAAY,GAAZ,EAAiB,CAAjB,CAAd;EACD;;EAED,OAAO,CAAC8W,KAAK,GAAG,GAAR,GAAcG,OAAd,GAAwB,GAAxB,GAA8BzF,OAA/B,EAAwCvZ,OAAxC,CAAgD,SAAhD,EACH,KADG,IACMof,KADb;AAED;AAED;AACA;AACA;AACA;AACA;AACA;;AACO,SAAS5F,uBAAT,CAAiCD,OAAjC,EAAkD;EACvD;EACA,IAAI,CAACA,OAAD,IAAYA,OAAO,IAAI,CAA3B,EAA8B;IAC5B,OAAO,MAAP;EACD;;EAED,IAAIgG,QAAQ,GAAG,GAAf;EACA,IAAIC,SAAS,GAAGjG,OAAhB;EAEAmF,YAAY,CAAC7S,OAAb,CAAqB,gBAA6B;IAAA;IAAA,IAA3B4T,IAA2B;IAAA,IAArBC,eAAqB;;IAChD,IAAIjgB,KAAK,GAAG3C,IAAI,CAACgiB,KAAL,CAAWU,SAAS,GAAGE,eAAvB,CAAZ;IAEAF,SAAS,GAAGA,SAAS,GAAGE,eAAxB;;IACA,IAAIL,aAAa,CAACG,SAAD,CAAb,GAA2B,CAA/B,EAAkC;MAChCA,SAAS,GAAGrU,MAAM,CAACA,MAAM,CAACqU,SAAD,CAAN,CAAkBF,OAAlB,CAA0B,CAA1B,CAAD,CAAlB;IACD,CAN+C,CAOhD;IACA;;;IACA,IAAIG,IAAI,KAAK,GAAT,IAAgBD,SAAS,GAAG,CAAhC,EAAmC;MACjC/f,KAAK,IAAI+f,SAAT;IACD;;IAED,IAAI/f,KAAJ,EAAW;MACT,IAAI,CAAC8f,QAAQ,CAAChV,OAAT,CAAiB,GAAjB,IAAwB,CAAxB,IACDkV,IAAI,KAAK,GADR,IACeA,IAAI,KAAK,GADxB,IAC+BA,IAAI,KAAK,GADzC,KAEAF,QAAQ,CAAChV,OAAT,CAAiB,GAAjB,MAA0B,CAAC,CAF/B,EAEkC;QAChCgV,QAAQ,IAAI,GAAZ;MACD;;MACDA,QAAQ,cAAO9f,KAAP,SAAeggB,IAAf,CAAR;IACD;EACF,CArBD;EAuBA,OAAOF,QAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASI,gBAAT,CAA0BC,UAA1B,EAA8CC,SAA9C,EAAiE;EACtE,IAAI,CAACD,UAAD,IAAe,OAAOA,UAAP,KAAsB,QAArC,IACA,CAACA,UAAU,CAAC1Y,KAAX,CAAiB2Y,SAAjB,CADL,EACkC;IAChC,OAAO,CAAP;EACD;;EACD,IAAM1O,KAAK,GAAGyO,UAAU,CAAC7X,KAAX,CAAiB,GAAjB,CAAd;EACA,IAAM8W,KAAK,GAAG1T,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAApB;EACA,IAAM6N,OAAO,GAAG7T,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAAtB;EACA,IAAMoI,OAAO,GAAGpO,MAAM,CAACgG,KAAK,CAAC,CAAD,CAAN,CAAtB;EACA,OAAQ0N,KAAK,GAAG,IAAT,GAAkBG,OAAO,GAAG,EAA5B,GAAkCzF,OAAzC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASuG,oBAAT,CAA8BP,QAA9B,EAAgDQ,aAAhD,EAAuE;EAC5E,IAAI,CAACR,QAAD,IAAa,CAACA,QAAQ,CAACrY,KAAT,CAAe6Y,aAAf,CAAlB,EAAiD;IAC/C,OAAO,CAAP;EACD;;EAED,YAA2D,IAAInN,MAAJ,CACvDmN,aADuD,EACxCC,IADwC,CACnCT,QADmC,KACtB,EADrC;EAAA;EAAA,IAASU,KAAT;EAAA,IAAgBC,MAAhB;EAAA,IAA0BC,IAA1B;EAAA,IAAgCtB,KAAhC;EAAA,IAAuCG,OAAvC;EAAA,IAAgDzF,OAAhD;;EAGA,IAAI5b,MAAM,GAAG,GAAb;EAEAA,MAAM,IAAKwN,MAAM,CAACoO,OAAD,CAAN,GAAkB,GAAlB,IAAyB,GAApC;EACA5b,MAAM,IAAKwN,MAAM,CAAC6T,OAAD,CAAN,GAAkB,IAAlB,IAA0B,GAArC;EACArhB,MAAM,IAAKwN,MAAM,CAAC0T,KAAD,CAAN,GAAgB,MAAhB,IAA0B,GAArC;EACAlhB,MAAM,IAAKwN,MAAM,CAACgV,IAAD,CAAN,IAAgB,KAAK,EAAL,GAAU,IAA1B,KAAmC,GAA9C;EACAxiB,MAAM,IAAKwN,MAAM,CAAC8U,KAAD,CAAN,IAAiB,KAAK,EAAL,GAAU,EAAV,GAAe,KAAhC,KAA0C,GAArD;EAEA,OAAOtiB,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAAS8b,eAAT,CACH2G,KADG,EAEHC,MAFG,EAGHN,aAHG,EAGoB;EACzB,OAAOvG,uBAAuB,CAC1BsG,oBAAoB,CAACM,KAAD,EAAQL,aAAR,CAApB,GACAD,oBAAoB,CAACO,MAAD,EAASN,aAAT,CAFM,CAA9B;AAID;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASO,oBAAT,CACHF,KADG,EAEHC,MAFG,EAGHR,SAHG,EAGgB;EACrB,OAAOlB,kBAAkB,CACrBgB,gBAAgB,CAACS,KAAD,EAAQP,SAAR,CAAhB,GACAF,gBAAgB,CACZU,MADY,EACJR,SADI,CAFK,CAAzB;AAKD;AAED;AACA;AACA;AACA;AACA;;AACO,SAASxL,OAAT,CAAiBkM,IAAjB,EAAuB;EAC5B,IAAM5iB,MAAM,GAAG,EAAf;EAEA;AACF;AACA;AACA;AACA;;EACE,SAAS6iB,OAAT,CAAiBC,GAAjB,EAAsBC,IAAtB,EAA4B;IAC1B,IAAItkB,MAAM,CAACqkB,GAAD,CAAN,KAAgBA,GAApB,EAAyB;MACvB9iB,MAAM,CAAC+iB,IAAD,CAAN,GAAeD,GAAf;IACD,CAFD,MAEO,IAAItT,KAAK,CAACwT,OAAN,CAAcF,GAAd,CAAJ,EAAwB;MAC7B,KAAK,IAAI5Z,CAAC,GAAG,CAAR,EAAW+Z,CAAC,GAAGH,GAAG,CAAC7Z,MAAxB,EAAgCC,CAAC,GAAG+Z,CAApC,EAAuC/Z,CAAC,EAAxC,EAA4C;QAC1C2Z,OAAO,CAACC,GAAG,CAAC5Z,CAAD,CAAJ,EAAS6Z,IAAI,GAAG,GAAP,GAAa7Z,CAAb,GAAiB,GAA1B,CAAP;QACA,IAAI+Z,CAAC,KAAK,CAAV,EAAajjB,MAAM,CAAC+iB,IAAD,CAAN,GAAe,EAAf;MACd;IACF,CALM,MAKA;MACL,IAAIG,OAAO,GAAG,IAAd;;MACA,KAAK,IAAMC,CAAX,IAAgBL,GAAhB,EAAqB;QACnB,IAAI,GAAGpe,cAAH,CAAkBxC,IAAlB,CAAuB4gB,GAAvB,EAA4BK,CAA5B,CAAJ,EAAoC;UAClCD,OAAO,GAAG,KAAV;UACAL,OAAO,CAACC,GAAG,CAACK,CAAD,CAAJ,EAASJ,IAAI,GAAGA,IAAI,GAAG,GAAP,GAAaI,CAAhB,GAAoBA,CAAjC,CAAP;QACD;MACF;;MACD,IAAID,OAAO,IAAIH,IAAf,EAAqB/iB,MAAM,CAAC+iB,IAAD,CAAN,GAAe,EAAf;IACtB;EACF;;EAEDF,OAAO,CAACD,IAAD,EAAO,EAAP,CAAP;EACA,OAAO5iB,MAAP;AACD;AAED;AACA;AACA;AACA;AACA;;AACO,SAAS+C,SAAT,CAAmB6f,IAAnB,EAAyB;EAC9B;;EACA,IAAInkB,MAAM,CAACmkB,IAAD,CAAN,KAAiBA,IAAjB,IAAyBpT,KAAK,CAACwT,OAAN,CAAcJ,IAAd,CAA7B,EAAkD,OAAOA,IAAP;EAClD,IAAMQ,KAAK,GAAG,yBAAd;EACA,IAAMpjB,MAAM,GAAG,EAAf;;EACA,KAAK,IAAMmjB,CAAX,IAAgBP,IAAhB,EAAsB;IACpB,IAAI,GAAGle,cAAH,CAAkBxC,IAAlB,CAAuB0gB,IAAvB,EAA6BO,CAA7B,CAAJ,EAAqC;MACnC,IAAIL,GAAG,GAAG9iB,MAAV;MACA,IAAI+iB,IAAI,GAAG,EAAX;MACA,IAAIM,CAAC,GAAGD,KAAK,CAACf,IAAN,CAAWc,CAAX,CAAR;;MACA,OAAOE,CAAP,EAAU;QACRP,GAAG,GAAGA,GAAG,CAACC,IAAD,CAAH,KAAcD,GAAG,CAACC,IAAD,CAAH,GAAaM,CAAC,CAAC,CAAD,CAAD,GAAO,EAAP,GAAY,EAAvC,CAAN;QACAN,IAAI,GAAGM,CAAC,CAAC,CAAD,CAAD,IAAQA,CAAC,CAAC,CAAD,CAAhB;QACAA,CAAC,GAAGD,KAAK,CAACf,IAAN,CAAWc,CAAX,CAAJ;MACD;;MACDL,GAAG,CAACC,IAAD,CAAH,GAAYH,IAAI,CAACO,CAAD,CAAhB;IACD;EACF;;EACD,OAAOnjB,MAAM,CAAC,EAAD,CAAN,IAAcA,MAArB;AACD;AAED;AACA;AACA;AACA;AACA;;AACO,SAAS0hB,aAAT,CAAuB4B,GAAvB,EAAoC;EACzC,IAAInkB,IAAI,CAACgiB,KAAL,CAAWmC,GAAX,MAAoBA,GAApB,IAA2Bvb,MAAM,CAACub,GAAD,CAAN,CAAY1W,OAAZ,CAAoB,GAApB,IAA2B,CAA1D,EAA6D,OAAO,CAAP;EAC7D,IAAM4G,KAAK,GAAG8P,GAAG,CAACrkB,QAAJ,GAAemL,KAAf,CAAqB,GAArB,EAA0B,CAA1B,CAAd;EACA,OAAOoJ,KAAK,CAACvK,MAAN,IAAgB,CAAvB;AACD;;;;;;UCjPD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA,eAAe,4BAA4B;WAC3C,eAAe;WACf,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;ACNA;AAEAsa,MAAM,CAACjS,YAAP,GAAsBA,qDAAtB,C","sources":["webpack://scorm-again/./node_modules/lodash.debounce/index.js","webpack://scorm-again/./src/BaseAPI.js","webpack://scorm-again/./src/Scorm2004API.js","webpack://scorm-again/./src/cmi/common.js","webpack://scorm-again/./src/cmi/scorm2004_cmi.js","webpack://scorm-again/./src/constants/api_constants.js","webpack://scorm-again/./src/constants/error_codes.js","webpack://scorm-again/./src/constants/language_constants.js","webpack://scorm-again/./src/constants/regex.js","webpack://scorm-again/./src/constants/response_constants.js","webpack://scorm-again/./src/exceptions.js","webpack://scorm-again/./src/utilities.js","webpack://scorm-again/webpack/bootstrap","webpack://scorm-again/webpack/runtime/compat get default export","webpack://scorm-again/webpack/runtime/define property getters","webpack://scorm-again/webpack/runtime/global","webpack://scorm-again/webpack/runtime/hasOwnProperty shorthand","webpack://scorm-again/webpack/runtime/make namespace object","webpack://scorm-again/./src/exports/scorm2004.js"],"sourcesContent":["/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\n\nwindow.Scorm2004API = Scorm2004API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","ADL","CMI","CMICommentsObject","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","finalSettings","mastery_override","correct_response","current_index","found","count","_count","adl","Initialize","lmsInitialize","Terminate","lmsTerminate","GetValue","lmsGetValue","SetValue","lmsSetValue","Commit","lmsCommit","GetLastError","lmsGetLastError","GetErrorString","lmsGetErrorString","GetDiagnostic","lmsGetDiagnostic","terminate","nav","request","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","total_time","getCurrentTotalTime","flattened","flatten","mode","credit","completion_threshold","progress_measure","completion_status","scaled_passing_score","score","scaled","success_status","navRequest","encodeURIComponent","renderCommitCMI","processHttpRequest","scorm12_constants","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","VALUE_OUT_OF_RANGE","CMIDecimal","_children","raw","jsonString","children","Scorm2004ValidationError","Util","learner_responses","learner","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","cmi_children","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","comments_from_lms","CMICommentsFromLMS","CMIInteractions","objectives","CMIObjectives","_version","CMICStatus","entry","exit","CMIExit","launch_data","learner_id","learner_name","location","CMIString1000","max_time_allowed","progress_range","session_time","CMITimespan","CMISStatus","suspend_data","CMIString64000","time_limit_action","sessionTime","startTime","start_time","seconds","getSecondsAsISODuration","addTwoDurations","student_preference_children","audio_level","audio_range","language","CMILang","delivery_speed","speed_range","audio_captioning","CMISInteger","text_range","interactions_children","objectives_children","comments_children","correct_responses_children","id","CMILongIdentifier","CMIType","timestamp","CMITime","weighting","learner_response","CMIResult","latency","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","CMIFeedback","ADLNav","request_valid","ADLNavRequestValid","NAVEvent","_target","_","previous","continue","LOG_LEVEL_NONE","core_children","student_data_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIString256","CMIString4096","CMIInteger","CMIIdentifier","CMIIndex","CMIStatus","CMIStatus2","weighting_range","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm12ValidationError","AICCValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","getSecondsAsHHMMSS","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","addHHMMSSTimeStrings","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/scorm2004.min.js b/dist/scorm2004.min.js index 8f4d2ce..d854494 100644 --- a/dist/scorm2004.min.js +++ b/dist/scorm2004.min.js @@ -1,19 +1,19 @@ !function(){var r={"./node_modules/lodash.debounce/index.js": /*!***********************************************!*\ !*** ./node_modules/lodash.debounce/index.js ***! - \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(){return f.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,h="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=t||h||Function("return this")(),d=Object.prototype.toString,b=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&d.call(e)==i;var t}function _(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=l.test(e);return t||c.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(h,r,e){var n,i,o,a,s,l,c=0,f=!1,u=!1,t=!0;if("function"!=typeof h)throw new TypeError("Expected a function");function d(e){var t=n,r=i;return n=i=void 0,c=e,a=h.apply(r,t)}function m(e){var t=e-l;return void 0===l||r<=t||t<0||u&&o<=e-c}function p(){var e,t=v();if(m(t))return g(t);s=setTimeout(p,(e=r-((t=t)-l),u?M(e,o-(t-c)):e))}function g(e){return s=void 0,t&&n?d(e):(n=i=void 0,a)}function y(){var e=v(),t=m(e);if(n=arguments,i=this,l=e,t){if(void 0===s)return c=e=l,s=setTimeout(p,r),f?d(e):a;if(u)return s=setTimeout(p,r),d(l)}return void 0===s&&(s=setTimeout(p,r)),a}return r=_(r)||0,E(e)&&(f=!!e.leading,u="maxWait"in e,o=u?b(_(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),y.cancel=function(){void 0!==s&&clearTimeout(s),n=l=i=s=void(c=0)},y.flush=function(){return void 0===s?a:g(v())},y}},"./src/BaseAPI.js": + \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(){return f.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,h="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=t||h||Function("return this")(),d=Object.prototype.toString,_=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&d.call(e)==i;var t}function b(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=l.test(e);return t||c.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(h,r,e){var n,i,o,a,s,l,c=0,f=!1,u=!1,t=!0;if("function"!=typeof h)throw new TypeError("Expected a function");function d(e){var t=n,r=i;return n=i=void 0,c=e,a=h.apply(r,t)}function m(e){var t=e-l;return void 0===l||r<=t||t<0||u&&o<=e-c}function p(){var e,t=v();if(m(t))return g(t);s=setTimeout(p,(e=r-((t=t)-l),u?M(e,o-(t-c)):e))}function g(e){return s=void 0,t&&n?d(e):(n=i=void 0,a)}function y(){var e=v(),t=m(e);if(n=arguments,i=this,l=e,t){if(void 0===s)return c=e=l,s=setTimeout(p,r),f?d(e):a;if(u)return s=setTimeout(p,r),d(l)}return void 0===s&&(s=setTimeout(p,r)),a}return r=b(r)||0,E(e)&&(f=!!e.leading,u="maxWait"in e,o=u?_(b(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),y.cancel=function(){void 0!==s&&clearTimeout(s),n=l=i=s=void(c=0)},y.flush=function(){return void 0===s?a:g(v())},y}},"./src/BaseAPI.js": /*!************************!*\ !*** ./src/BaseAPI.js ***! - \************************/function(t,r,e){"use strict";e.r(r),e.d(r,{default:function(){return T}});var p=e(/*! ./cmi/common */"./src/cmi/common.js"),c=e(/*! ./exceptions */"./src/exceptions.js"),r=e(/*! ./constants/error_codes */"./src/constants/error_codes.js"),u=e(/*! ./constants/api_constants */"./src/constants/api_constants.js"),h=e(/*! ./utilities */"./src/utilities.js"),g=e(/*! lodash.debounce */"./node_modules/lodash.debounce/index.js"),y=e.n(g);function v(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o=[],a=!0,s=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?E(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var r=e.correct_responses._count;if("choice"===e.type)for(var n=0;nNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&n.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,r,n=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(r=i.adl)||void 0===r||null===(t=r.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),n=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===c.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(r=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),n&&void 0!==r.navRequest&&""!==r.navRequest&&Function('"use strict";(() => { '.concat(r.navRequest," })()"))(),r):c.SCORM_TRUE}}])&&v(t.prototype,e),r&&v(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": + \*****************************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return I}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),a=t(/*! ./cmi/scorm2004_cmi */"./src/cmi/scorm2004_cmi.js"),o=t(/*! ./utilities */"./src/utilities.js"),n=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),f=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),d=t(/*! ./constants/response_constants */"./src/constants/response_constants.js"),m=t(/*! ./constants/language_constants */"./src/constants/language_constants.js"),t=t(/*! ./constants/regex */"./src/constants/regex.js");function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function g(t,e){var r,n=Object.keys(t);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(t),e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)),n}function y(t){for(var e=1;ee.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var r=e.correct_responses._count;if("choice"===e.type)for(var n=0;nNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&n.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,r,n=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(r=i.adl)||void 0===r||null===(t=r.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),n=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===c.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(r=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),n&&void 0!==r.navRequest&&""!==r.navRequest&&Function('"use strict";(() => { '.concat(r.navRequest," })()"))(),r):c.SCORM_TRUE}}])&&v(t.prototype,e),r&&v(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": /*!***************************!*\ !*** ./src/cmi/common.js ***! - \***************************/function(r,n,e){"use strict";e.r(n),e.d(n,{checkValidFormat:function(){return I},checkValidRange:function(){return O},BaseCMI:function(){return k},CMIScore:function(){return D},CMIArray:function(){return z}});var n=e(/*! ../constants/api_constants */"./src/constants/api_constants.js"),i=e(/*! ../constants/error_codes */"./src/constants/error_codes.js"),e=e(/*! ../constants/regex */"./src/constants/regex.js");function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return(s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function l(r){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=c(r),t=(e=n?(e=c(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),this);if(e&&("object"===o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return h(t)}}function h(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function c(e){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,k=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,f(this,C,{writable:!0,value:!1}),f(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return _(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,L=new WeakMap,p=new WeakMap,g=new WeakMap,y=new WeakMap,v=new WeakMap,j=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,k);var c=l(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,l=e.decimalRegex,e=e.errorClass;return E(this,u),f(h(t=c.call(this)),R,{writable:!0,value:void 0}),f(h(t),m,{writable:!0,value:void 0}),f(h(t),L,{writable:!0,value:void 0}),f(h(t),p,{writable:!0,value:void 0}),f(h(t),g,{writable:!0,value:void 0}),f(h(t),y,{writable:!0,value:void 0}),f(h(t),v,{writable:!0,value:void 0}),f(h(t),j,{writable:!0,value:""}),f(h(t),A,{writable:!0,value:""}),f(h(t),N,{writable:!0,value:void 0}),d(h(t),R,r||M.score_children),d(h(t),m,!!n&&w.score_range),d(h(t),N,i||""===i?i:"100"),d(h(t),L,o||S.INVALID_SET_VALUE),d(h(t),p,a||S.TYPE_MISMATCH),d(h(t),g,s||S.VALUE_OUT_OF_RANGE),d(h(t),y,l||w.CMIDecimal),d(h(t),v,e),t}return _(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,v).prototype.constructor)(t(this,L))}},{key:"raw",get:function(){return t(this,j)},set:function(e){!I(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,g),t(this,v))||d(this,j,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!I(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,g),t(this,v))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!I(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,g),t(this,v))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,x=new WeakMap,V=new WeakMap,z=function(){a(o,k);var i=l(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),f(h(t=i.call(this)),P,{writable:!0,value:void 0}),f(h(t),x,{writable:!0,value:void 0}),f(h(t),V,{writable:!0,value:void 0}),d(h(t),V,r),d(h(t),P,n),d(h(t),x,e),t.childArray=[],t}return _(o,[{key:"_children",get:function(){return t(this,V)},set:function(e){throw new(t(this,x).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,x).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,k=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,f(this,C,{writable:!0,value:!1}),f(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,L=new WeakMap,p=new WeakMap,g=new WeakMap,y=new WeakMap,v=new WeakMap,j=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,k);var c=l(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,l=e.decimalRegex,e=e.errorClass;return E(this,u),f(h(t=c.call(this)),R,{writable:!0,value:void 0}),f(h(t),m,{writable:!0,value:void 0}),f(h(t),L,{writable:!0,value:void 0}),f(h(t),p,{writable:!0,value:void 0}),f(h(t),g,{writable:!0,value:void 0}),f(h(t),y,{writable:!0,value:void 0}),f(h(t),v,{writable:!0,value:void 0}),f(h(t),j,{writable:!0,value:""}),f(h(t),A,{writable:!0,value:""}),f(h(t),N,{writable:!0,value:void 0}),d(h(t),R,r||M.score_children),d(h(t),m,!!n&&w.score_range),d(h(t),N,i||""===i?i:"100"),d(h(t),L,o||S.INVALID_SET_VALUE),d(h(t),p,a||S.TYPE_MISMATCH),d(h(t),g,s||S.VALUE_OUT_OF_RANGE),d(h(t),y,l||w.CMIDecimal),d(h(t),v,e),t}return b(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,v).prototype.constructor)(t(this,L))}},{key:"raw",get:function(){return t(this,j)},set:function(e){!O(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,g),t(this,v))||d(this,j,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!O(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,g),t(this,v))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!O(e,t(this,y),t(this,p),t(this,v))||t(this,m)&&!I(e,t(this,m),t(this,g),t(this,v))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,x=new WeakMap,V=new WeakMap,z=function(){a(o,k);var i=l(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),f(h(t=i.call(this)),P,{writable:!0,value:void 0}),f(h(t),x,{writable:!0,value:void 0}),f(h(t),V,{writable:!0,value:void 0}),d(h(t),V,r),d(h(t),P,n),d(h(t),x,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,V)},set:function(e){throw new(t(this,x).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,x).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;te.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=5", "@sinonjs/fake-timers@^9.0.0": +"@sinonjs/fake-timers@>=5": version "9.1.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.0.tgz#8c92c56f195e0bed4c893ba59c8e3d55831ca0df" integrity sha512-M8vapsv9qQupMdzrVzkn5rb9jG7aUTEPAZdMtME2PuBaefksFZVE2C1g4LBRTkF/k3nRDNbDc5tp5NFC1PEYxA== dependencies: "@sinonjs/commons" "^1.7.0" +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@sinonjs/samsam@^6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-6.1.1.tgz#627f7f4cbdb56e6419fa2c1a3e4751ce4f6a00b1" @@ -1411,12 +1500,12 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== -"@types/chai@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" - integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== +"@types/chai@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== -"@types/eslint-scope@^3.7.0": +"@types/eslint-scope@^3.7.3": version "3.7.3" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== @@ -1440,16 +1529,11 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": +"@types/estree@*", "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -1478,10 +1562,10 @@ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== -"@types/mocha@^9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" - integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== +"@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*": version "17.0.17" @@ -1614,22 +1698,22 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== -"@webpack-cli/info@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1654,10 +1738,10 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: version "1.8.2" @@ -1678,11 +1762,16 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1, acorn@^8.7.0: +acorn@^8.4.1: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@^8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1844,13 +1933,13 @@ babel-eslint@^11.0.0-beta.2: eslint-visitor-keys "^1.1.0" semver "^6.3.0" -babel-loader@^8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" - integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== +babel-loader@^8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: find-cache-dir "^3.3.1" - loader-utils "^1.4.0" + loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" @@ -1933,6 +2022,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2106,6 +2202,16 @@ browserslist@^4.17.5, browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.20.2, browserslist@^4.20.4: + version "4.21.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe" + integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA== + dependencies: + caniuse-lite "^1.0.30001358" + electron-to-chromium "^1.4.164" + node-releases "^2.0.5" + update-browserslist-db "^1.0.0" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2198,6 +2304,11 @@ caniuse-lite@^1.0.30001286: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz#0e690039f62e91c3ea581673d716890512e7ec52" integrity sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ== +caniuse-lite@^1.0.30001358: + version "1.0.30001358" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz#473d35dabf5e448b463095cab7924e96ccfb8c00" + integrity sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw== + catharsis@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.9.0.tgz#40382a168be0e6da308c277d3a2b3eb40c7d2121" @@ -2446,7 +2557,7 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" -core-js-compat@^3.20.0, core-js-compat@^3.20.2: +core-js-compat@^3.20.0: version "3.20.2" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.2.tgz#d1ff6936c7330959b46b2e08b122a8b14e26140b" integrity sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg== @@ -2454,10 +2565,18 @@ core-js-compat@^3.20.0, core-js-compat@^3.20.2: browserslist "^4.19.1" semver "7.0.0" -core-js@^3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.2.tgz#46468d8601eafc8b266bd2dd6bf9dee622779581" - integrity sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw== +core-js-compat@^3.22.1: + version "3.23.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.2.tgz#5cbf8a9c8812d665392845b85ae91b5bcc7b615c" + integrity sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA== + dependencies: + browserslist "^4.20.4" + semver "7.0.0" + +core-js@^3.22.1: + version "3.23.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.2.tgz#e07a60ca8b14dd129cabdc3d2551baf5a01c76f0" + integrity sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ== core-util-is@~1.0.0: version "1.0.2" @@ -2541,10 +2660,10 @@ dateformat@^4.5.1: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -2699,6 +2818,11 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.740.tgz#e38b7d2b848f632191b643e6dabca51be2162922" integrity sha512-Mi2m55JrX2BFbNZGKYR+2ItcGnR4O5HhrvgoRRyZQlaMGQULqDhoGkLWHzJoshSzi7k1PUofxcDbNhlFrDZNhg== +electron-to-chromium@^1.4.164: + version "1.4.166" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.166.tgz#83cd596e59c1a192425b99e6ecc64d9ffff50aff" + integrity sha512-ZPLdq3kcATkD6dwne5M4SgJBHw21t90BqTGzf3AceJwj3cE/ICv6jyDwHYyJoF4JNuXM3pzRxlaRmpO7pdwmcg== + electron-to-chromium@^1.4.17: version "1.4.39" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.39.tgz#19c8e8ff712fe62bfdd4f3fe1c3b3fb4aa179ebb" @@ -2734,10 +2858,10 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.8.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz#49ac24953ac8452ed8fed2ef1340fc8e043667ee" - integrity sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA== +enhanced-resolve@^5.9.3: + version "5.9.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" + integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2862,32 +2986,32 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-module-utils@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129" - integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg== +eslint-module-utils@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== dependencies: debug "^3.2.7" find-up "^2.1.0" -eslint-plugin-import@^2.25.4: - version "2.25.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" - integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: array-includes "^3.1.4" array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.2" + eslint-module-utils "^2.7.3" has "^1.0.3" - is-core-module "^2.8.0" + is-core-module "^2.8.1" is-glob "^4.0.3" - minimatch "^3.0.4" + minimatch "^3.1.2" object.values "^1.1.5" - resolve "^1.20.0" - tsconfig-paths "^3.12.0" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" eslint-scope@5.0.0: version "5.0.0" @@ -2905,10 +3029,10 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" - integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2930,15 +3054,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint-visitor-keys@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" - integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== - -eslint-visitor-keys@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" - integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint-webpack-plugin@^3.1.1: version "3.1.1" @@ -2951,12 +3070,12 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^3.1.1" -eslint@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d" - integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== +eslint@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" + integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== dependencies: - "@eslint/eslintrc" "^1.0.5" + "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" @@ -2964,17 +3083,17 @@ eslint@^8.8.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" + eslint-scope "^7.1.1" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.2.0" - espree "^9.3.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" - globals "^13.6.0" + globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -2983,7 +3102,7 @@ eslint@^8.8.0: json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" regexpp "^3.2.0" @@ -2992,14 +3111,14 @@ eslint@^8.8.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.2.0, espree@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" - integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0: version "4.0.1" @@ -3053,21 +3172,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3318,11 +3422,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -3379,17 +3478,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0: - version "13.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" - integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== - dependencies: - type-fest "^0.20.2" - -globals@^13.9.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== +globals@^13.15.0: + version "13.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== dependencies: type-fest "^0.20.2" @@ -3403,11 +3495,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -3508,11 +3595,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -3523,11 +3605,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -3667,7 +3744,7 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.8.0: +is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -3986,10 +4063,10 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -4020,6 +4097,11 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -4077,14 +4159,14 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" - json5 "^1.0.1" + json5 "^2.1.2" locate-path@^2.0.0: version "2.0.0" @@ -4287,11 +4369,6 @@ mime-types@^2.1.27: dependencies: mime-db "1.51.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -4302,17 +4379,31 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mississippi@^3.0.0: version "3.0.0" @@ -4358,40 +4449,38 @@ mocha-junit-reporter@^2.0.2: strip-ansi "^6.0.1" xml "^1.0.0" -mocha@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.0.tgz#2bfba73d46e392901f877ab9a47b7c9c5d0275cc" - integrity sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q== +mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" - debug "4.3.3" + debug "4.3.4" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.2.0" - growl "1.10.5" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "3.0.4" + minimatch "5.0.1" ms "2.1.3" - nanoid "3.2.0" + nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" + workerpool "6.2.1" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" -mochawesome-report-generator@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-6.0.1.tgz#7314f43c3e61247b0ea48ce2dda0813ca6fdd705" - integrity sha512-/+RoE/lD7QTJBh7VsymdQOTqS8QuB94xKJCJXxZ3fy3JsDdPNgTBgUlEOR99r+2W1zPgEWVhRBU1Tl9fe6kI+w== +mochawesome-report-generator@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz#65a30a11235ba7a68e1cf0ca1df80d764b93ae78" + integrity sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg== dependencies: chalk "^4.1.2" dateformat "^4.5.1" @@ -4406,10 +4495,10 @@ mochawesome-report-generator@^6.0.1: validator "^13.6.0" yargs "^17.2.1" -mochawesome@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-7.0.1.tgz#c7c65350232bed7c3ae5f6bb79a2d55b71f51baa" - integrity sha512-2FTU7KVNDiKohi4IG3IVmJ2OTy0Nm0Q2RjueK9hsj7blbkcrpFVH209cP8P4egi+LBidKdX+QmtN3thJde2yiQ== +mochawesome@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-7.1.3.tgz#07b358138f37f5b07b51a1b255d84babfa36fa83" + integrity sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ== dependencies: chalk "^4.1.2" diff "^5.0.0" @@ -4418,7 +4507,7 @@ mochawesome@^7.0.1: lodash.isfunction "^3.0.9" lodash.isobject "^3.0.2" lodash.isstring "^4.0.1" - mochawesome-report-generator "^6.0.1" + mochawesome-report-generator "^6.2.0" strip-ansi "^6.0.1" uuid "^8.3.2" @@ -4470,10 +4559,10 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== natural-compare@^1.4.0: version "1.4.0" @@ -4504,11 +4593,6 @@ node-environment-flags@^1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - node-preload@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" @@ -4526,18 +4610,16 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - nyc@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" @@ -4626,13 +4708,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" @@ -4795,12 +4870,12 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -4853,13 +4928,6 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - pirates@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" @@ -5052,6 +5120,13 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -5059,7 +5134,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -5069,10 +5144,10 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== dependencies: "@babel/runtime" "^7.8.4" @@ -5093,11 +5168,28 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + regjsparser@^0.6.4: version "0.6.7" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" @@ -5105,6 +5197,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + release-zalgo@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" @@ -5154,6 +5253,15 @@ resolve@^1.1.4, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.4. is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -5297,9 +5405,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== side-channel@^1.0.4: version "1.0.4" @@ -5315,23 +5423,18 @@ signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== -sinon@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-13.0.1.tgz#2a568beca2084c48985dd98e276e065c81738e3c" - integrity sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ== +sinon@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-14.0.0.tgz#203731c116d3a2d58dc4e3cbe1f443ba9382a031" + integrity sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw== dependencies: "@sinonjs/commons" "^1.8.3" - "@sinonjs/fake-timers" "^9.0.0" + "@sinonjs/fake-timers" "^9.1.2" "@sinonjs/samsam" "^6.1.1" diff "^5.0.0" nise "^5.1.1" @@ -5537,11 +5640,6 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5575,6 +5673,11 @@ supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" @@ -5670,14 +5773,14 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tsconfig-paths@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" - integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" tty-browserify@0.0.1: @@ -5780,6 +5883,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -5788,16 +5896,34 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -5817,6 +5943,14 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +update-browserslist-db@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.3.tgz#6c47cb996f34afb363e924748e2f6e4d983c6fc1" + integrity sha512-ufSazemeh9Gty0qiWtoRpJ9F5Q5W3xdIPm1UZQqYQv/q0Nyb9EMHUB2lu+O9x1re9WsorpMAUu4Y6Lxcs5n+XQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -5896,18 +6030,18 @@ watchpack@^2.3.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" - integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== +webpack-cli@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.1.1" - "@webpack-cli/info" "^1.4.1" - "@webpack-cli/serve" "^1.6.1" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" colorette "^2.0.14" commander "^7.0.0" - execa "^5.0.0" + cross-spawn "^7.0.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" interpret "^2.2.0" @@ -5935,13 +6069,13 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.68.0: - version "5.68.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.68.0.tgz#a653a58ed44280062e47257f260117e4be90d560" - integrity sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g== +webpack@^5.73.0: + version "5.73.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" + integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" @@ -5949,13 +6083,13 @@ webpack@^5.68.0: acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.3" + enhanced-resolve "^5.9.3" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" graceful-fs "^4.2.9" - json-parse-better-errors "^1.0.2" + json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" @@ -5994,7 +6128,7 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@2.0.2, which@^2.0.1: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -6018,10 +6152,10 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.2.0: version "6.2.0"