diff --git a/dist/aicc.js b/dist/aicc.js index d57d6b3..0f5e1cd 100644 --- a/dist/aicc.js +++ b/dist/aicc.js @@ -6658,8 +6658,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va 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; } var scorm12 = { - CMIString256: '^.{0,255}$', - CMIString4096: '^.{0,4096}$', + CMIString256: '^.{0,}$', + CMIString4096: '^.{0,}$', CMITime: '^(?:[01]\\d|2[0123]):(?:[012345]\\d):(?:[012345]\\d)$', // eslint-disable-line CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\.[0-9]{1,2})?$', @@ -6668,8 +6668,8 @@ var scorm12 = { CMISInteger: '^-?([0-9]+)$', CMIDecimal: '^-?([0-9]{0,3})(\.[0-9]*)?$', // eslint-disable-line - CMIIdentifier: "^[\\u0021-\\u007E\\s]{0,255}$", - CMIFeedback: '^.{0,255}$', + CMIIdentifier: "^[\\u0021-\\u007E\\s]{0,}$", + CMIFeedback: '^.{0,}$', // This must be redefined CMIIndex: '[._](\\d+).', // Vocabulary Data Type Definition diff --git a/dist/aicc.js.map b/dist/aicc.js.map index 500319c..c7ee823 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 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,}$',\n CMIString4096: '^.{0,}$',\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,}$',\n CMIFeedback: '^.{0,}$', // 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 diff --git a/dist/aicc.min.js b/dist/aicc.min.js index 4db99b0..d1d16b2 100644 --- a/dist/aicc.min.js +++ b/dist/aicc.min.js @@ -28,7 +28,7 @@ \**************************************/function(e,t,n){"use strict";function o(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 r(r){for(var e=1;e\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 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,}$',\n CMIString4096: '^.{0,}$',\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,}$',\n CMIFeedback: '^.{0,}$', // 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 diff --git a/dist/scorm-again.min.js b/dist/scorm-again.min.js index 411a7aa..f778cff 100644 --- a/dist/scorm-again.min.js +++ b/dist/scorm-again.min.js @@ -37,7 +37,7 @@ \*********************************************/function(e,t,n){"use strict";n.r(t);t.default={aa:"aa",ab:"ab",ae:"ae",af:"af",ak:"ak",am:"am",an:"an",ar:"ar",as:"as",av:"av",ay:"ay",az:"az",ba:"ba",be:"be",bg:"bg",bh:"bh",bi:"bi",bm:"bm",bn:"bn",bo:"bo",br:"br",bs:"bs",ca:"ca",ce:"ce",ch:"ch",co:"co",cr:"cr",cs:"cs",cu:"cu",cv:"cv",cy:"cy",da:"da",de:"de",dv:"dv",dz:"dz",ee:"ee",el:"el",en:"en",eo:"eo",es:"es",et:"et",eu:"eu",fa:"fa",ff:"ff",fi:"fi",fj:"fj",fo:"fo",fr:"fr",fy:"fy",ga:"ga",gd:"gd",gl:"gl",gn:"gn",gu:"gu",gv:"gv",ha:"ha",he:"he",hi:"hi",ho:"ho",hr:"hr",ht:"ht",hu:"hu",hy:"hy",hz:"hz",ia:"ia",id:"id",ie:"ie",ig:"ig",ii:"ii",ik:"ik",io:"io",is:"is",it:"it",iu:"iu",ja:"ja",jv:"jv",ka:"ka",kg:"kg",ki:"ki",kj:"kj",kk:"kk",kl:"kl",km:"km",kn:"kn",ko:"ko",kr:"kr",ks:"ks",ku:"ku",kv:"kv",kw:"kw",ky:"ky",la:"la",lb:"lb",lg:"lg",li:"li",ln:"ln",lo:"lo",lt:"lt",lu:"lu",lv:"lv",mg:"mg",mh:"mh",mi:"mi",mk:"mk",ml:"ml",mn:"mn",mo:"mo",mr:"mr",ms:"ms",mt:"mt",my:"my",na:"na",nb:"nb",nd:"nd",ne:"ne",ng:"ng",nl:"nl",nn:"nn",no:"no",nr:"nr",nv:"nv",ny:"ny",oc:"oc",oj:"oj",om:"om",or:"or",os:"os",pa:"pa",pi:"pi",pl:"pl",ps:"ps",pt:"pt",qu:"qu",rm:"rm",rn:"rn",ro:"ro",ru:"ru",rw:"rw",sa:"sa",sc:"sc",sd:"sd",se:"se",sg:"sg",sh:"sh",si:"si",sk:"sk",sl:"sl",sm:"sm",sn:"sn",so:"so",sq:"sq",sr:"sr",ss:"ss",st:"st",su:"su",sv:"sv",sw:"sw",ta:"ta",te:"te",tg:"tg",th:"th",ti:"ti",tk:"tk",tl:"tl",tn:"tn",to:"to",tr:"tr",ts:"ts",tt:"tt",tw:"tw",ty:"ty",ug:"ug",uk:"uk",ur:"ur",uz:"uz",ve:"ve",vi:"vi",vo:"vo",wa:"wa",wo:"wo",xh:"xh",yi:"yi",yo:"yo",za:"za",zh:"zh",zu:"zu",aar:"aar",abk:"abk",ave:"ave",afr:"afr",aka:"aka",amh:"amh",arg:"arg",ara:"ara",asm:"asm",ava:"ava",aym:"aym",aze:"aze",bak:"bak",bel:"bel",bul:"bul",bih:"bih",bis:"bis",bam:"bam",ben:"ben",tib:"tib",bod:"bod",bre:"bre",bos:"bos",cat:"cat",che:"che",cha:"cha",cos:"cos",cre:"cre",cze:"cze",ces:"ces",chu:"chu",chv:"chv",wel:"wel",cym:"cym",dan:"dan",ger:"ger",deu:"deu",div:"div",dzo:"dzo",ewe:"ewe",gre:"gre",ell:"ell",eng:"eng",epo:"epo",spa:"spa",est:"est",baq:"baq",eus:"eus",per:"per",fas:"fas",ful:"ful",fin:"fin",fij:"fij",fao:"fao",fre:"fre",fra:"fra",fry:"fry",gle:"gle",gla:"gla",glg:"glg",grn:"grn",guj:"guj",glv:"glv",hau:"hau",heb:"heb",hin:"hin",hmo:"hmo",hrv:"hrv",hat:"hat",hun:"hun",arm:"arm",hye:"hye",her:"her",ina:"ina",ind:"ind",ile:"ile",ibo:"ibo",iii:"iii",ipk:"ipk",ido:"ido",ice:"ice",isl:"isl",ita:"ita",iku:"iku",jpn:"jpn",jav:"jav",geo:"geo",kat:"kat",kon:"kon",kik:"kik",kua:"kua",kaz:"kaz",kal:"kal",khm:"khm",kan:"kan",kor:"kor",kau:"kau",kas:"kas",kur:"kur",kom:"kom",cor:"cor",kir:"kir",lat:"lat",ltz:"ltz",lug:"lug",lim:"lim",lin:"lin",lao:"lao",lit:"lit",lub:"lub",lav:"lav",mlg:"mlg",mah:"mah",mao:"mao",mri:"mri",mac:"mac",mkd:"mkd",mal:"mal",mon:"mon",mol:"mol",mar:"mar",may:"may",msa:"msa",mlt:"mlt",bur:"bur",mya:"mya",nau:"nau",nob:"nob",nde:"nde",nep:"nep",ndo:"ndo",dut:"dut",nld:"nld",nno:"nno",nor:"nor",nbl:"nbl",nav:"nav",nya:"nya",oci:"oci",oji:"oji",orm:"orm",ori:"ori",oss:"oss",pan:"pan",pli:"pli",pol:"pol",pus:"pus",por:"por",que:"que",roh:"roh",run:"run",rum:"rum",ron:"ron",rus:"rus",kin:"kin",san:"san",srd:"srd",snd:"snd",sme:"sme",sag:"sag",slo:"slo",sin:"sin",slk:"slk",slv:"slv",smo:"smo",sna:"sna",som:"som",alb:"alb",sqi:"sqi",srp:"srp",ssw:"ssw",sot:"sot",sun:"sun",swe:"swe",swa:"swa",tam:"tam",tel:"tel",tgk:"tgk",tha:"tha",tir:"tir",tuk:"tuk",tgl:"tgl",tsn:"tsn",ton:"ton",tur:"tur",tso:"tso",tat:"tat",twi:"twi",tah:"tah",uig:"uig",ukr:"ukr",urd:"urd",uzb:"uzb",ven:"ven",vie:"vie",vol:"vol",wln:"wln",wol:"wol",xho:"xho",yid:"yid",yor:"yor",zha:"zha",chi:"chi",zho:"zho",zul:"zul"}},"./src/constants/regex.js": /*!********************************!*\ !*** ./src/constants/regex.js ***! - \********************************/function(e,t,n){"use strict";function o(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 r(r){for(var e=1;e\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 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,}$',\n CMIString4096: '^.{0,}$',\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,}$',\n CMIFeedback: '^.{0,}$', // 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 diff --git a/dist/scorm12.min.js b/dist/scorm12.min.js index 883d40f..732a872 100644 --- a/dist/scorm12.min.js +++ b/dist/scorm12.min.js @@ -22,7 +22,7 @@ \**************************************/function(e,t,r){"use strict";function o(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 n(n){for(var e=1;e\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":"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","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 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,}$',\n CMIString4096: '^.{0,}$',\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,}$',\n CMIFeedback: '^.{0,}$', // 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 diff --git a/dist/scorm2004.min.js b/dist/scorm2004.min.js index e4df3dd..12af441 100644 --- a/dist/scorm2004.min.js +++ b/dist/scorm2004.min.js @@ -25,7 +25,7 @@ \*********************************************/function(e,t,r){"use strict";r.r(t);t.default={aa:"aa",ab:"ab",ae:"ae",af:"af",ak:"ak",am:"am",an:"an",ar:"ar",as:"as",av:"av",ay:"ay",az:"az",ba:"ba",be:"be",bg:"bg",bh:"bh",bi:"bi",bm:"bm",bn:"bn",bo:"bo",br:"br",bs:"bs",ca:"ca",ce:"ce",ch:"ch",co:"co",cr:"cr",cs:"cs",cu:"cu",cv:"cv",cy:"cy",da:"da",de:"de",dv:"dv",dz:"dz",ee:"ee",el:"el",en:"en",eo:"eo",es:"es",et:"et",eu:"eu",fa:"fa",ff:"ff",fi:"fi",fj:"fj",fo:"fo",fr:"fr",fy:"fy",ga:"ga",gd:"gd",gl:"gl",gn:"gn",gu:"gu",gv:"gv",ha:"ha",he:"he",hi:"hi",ho:"ho",hr:"hr",ht:"ht",hu:"hu",hy:"hy",hz:"hz",ia:"ia",id:"id",ie:"ie",ig:"ig",ii:"ii",ik:"ik",io:"io",is:"is",it:"it",iu:"iu",ja:"ja",jv:"jv",ka:"ka",kg:"kg",ki:"ki",kj:"kj",kk:"kk",kl:"kl",km:"km",kn:"kn",ko:"ko",kr:"kr",ks:"ks",ku:"ku",kv:"kv",kw:"kw",ky:"ky",la:"la",lb:"lb",lg:"lg",li:"li",ln:"ln",lo:"lo",lt:"lt",lu:"lu",lv:"lv",mg:"mg",mh:"mh",mi:"mi",mk:"mk",ml:"ml",mn:"mn",mo:"mo",mr:"mr",ms:"ms",mt:"mt",my:"my",na:"na",nb:"nb",nd:"nd",ne:"ne",ng:"ng",nl:"nl",nn:"nn",no:"no",nr:"nr",nv:"nv",ny:"ny",oc:"oc",oj:"oj",om:"om",or:"or",os:"os",pa:"pa",pi:"pi",pl:"pl",ps:"ps",pt:"pt",qu:"qu",rm:"rm",rn:"rn",ro:"ro",ru:"ru",rw:"rw",sa:"sa",sc:"sc",sd:"sd",se:"se",sg:"sg",sh:"sh",si:"si",sk:"sk",sl:"sl",sm:"sm",sn:"sn",so:"so",sq:"sq",sr:"sr",ss:"ss",st:"st",su:"su",sv:"sv",sw:"sw",ta:"ta",te:"te",tg:"tg",th:"th",ti:"ti",tk:"tk",tl:"tl",tn:"tn",to:"to",tr:"tr",ts:"ts",tt:"tt",tw:"tw",ty:"ty",ug:"ug",uk:"uk",ur:"ur",uz:"uz",ve:"ve",vi:"vi",vo:"vo",wa:"wa",wo:"wo",xh:"xh",yi:"yi",yo:"yo",za:"za",zh:"zh",zu:"zu",aar:"aar",abk:"abk",ave:"ave",afr:"afr",aka:"aka",amh:"amh",arg:"arg",ara:"ara",asm:"asm",ava:"ava",aym:"aym",aze:"aze",bak:"bak",bel:"bel",bul:"bul",bih:"bih",bis:"bis",bam:"bam",ben:"ben",tib:"tib",bod:"bod",bre:"bre",bos:"bos",cat:"cat",che:"che",cha:"cha",cos:"cos",cre:"cre",cze:"cze",ces:"ces",chu:"chu",chv:"chv",wel:"wel",cym:"cym",dan:"dan",ger:"ger",deu:"deu",div:"div",dzo:"dzo",ewe:"ewe",gre:"gre",ell:"ell",eng:"eng",epo:"epo",spa:"spa",est:"est",baq:"baq",eus:"eus",per:"per",fas:"fas",ful:"ful",fin:"fin",fij:"fij",fao:"fao",fre:"fre",fra:"fra",fry:"fry",gle:"gle",gla:"gla",glg:"glg",grn:"grn",guj:"guj",glv:"glv",hau:"hau",heb:"heb",hin:"hin",hmo:"hmo",hrv:"hrv",hat:"hat",hun:"hun",arm:"arm",hye:"hye",her:"her",ina:"ina",ind:"ind",ile:"ile",ibo:"ibo",iii:"iii",ipk:"ipk",ido:"ido",ice:"ice",isl:"isl",ita:"ita",iku:"iku",jpn:"jpn",jav:"jav",geo:"geo",kat:"kat",kon:"kon",kik:"kik",kua:"kua",kaz:"kaz",kal:"kal",khm:"khm",kan:"kan",kor:"kor",kau:"kau",kas:"kas",kur:"kur",kom:"kom",cor:"cor",kir:"kir",lat:"lat",ltz:"ltz",lug:"lug",lim:"lim",lin:"lin",lao:"lao",lit:"lit",lub:"lub",lav:"lav",mlg:"mlg",mah:"mah",mao:"mao",mri:"mri",mac:"mac",mkd:"mkd",mal:"mal",mon:"mon",mol:"mol",mar:"mar",may:"may",msa:"msa",mlt:"mlt",bur:"bur",mya:"mya",nau:"nau",nob:"nob",nde:"nde",nep:"nep",ndo:"ndo",dut:"dut",nld:"nld",nno:"nno",nor:"nor",nbl:"nbl",nav:"nav",nya:"nya",oci:"oci",oji:"oji",orm:"orm",ori:"ori",oss:"oss",pan:"pan",pli:"pli",pol:"pol",pus:"pus",por:"por",que:"que",roh:"roh",run:"run",rum:"rum",ron:"ron",rus:"rus",kin:"kin",san:"san",srd:"srd",snd:"snd",sme:"sme",sag:"sag",slo:"slo",sin:"sin",slk:"slk",slv:"slv",smo:"smo",sna:"sna",som:"som",alb:"alb",sqi:"sqi",srp:"srp",ssw:"ssw",sot:"sot",sun:"sun",swe:"swe",swa:"swa",tam:"tam",tel:"tel",tgk:"tgk",tha:"tha",tir:"tir",tuk:"tuk",tgl:"tgl",tsn:"tsn",ton:"ton",tur:"tur",tso:"tso",tat:"tat",twi:"twi",tah:"tah",uig:"uig",ukr:"ukr",urd:"urd",uzb:"uzb",ven:"ven",vie:"vie",vol:"vol",wln:"wln",wol:"wol",xho:"xho",yid:"yid",yor:"yor",zha:"zha",chi:"chi",zho:"zho",zul:"zul"}},"./src/constants/regex.js": /*!********************************!*\ !*** ./src/constants/regex.js ***! - \********************************/function(e,t,r){"use strict";function o(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 n(n){for(var e=1;e { - expect(() => eval(`${fieldName} = 'x'.repeat(${limit + 1})`)). - to.throw().with.property('errorCode', expectedError); - }); + // We removed all character limits + // it(`Should fail to write more than ${limit} characters to ${fieldName}`, + // () => { + // expect(() => eval(`${fieldName} = 'x'.repeat(${limit + 1})`)). + // to.throw().with.property('errorCode', expectedError); + // }); }); };