From b5c21ea86fcdcaa4967274d96276e1fe7b4d1a0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Herrero?= Date: Wed, 16 Feb 2022 11:37:26 +0100 Subject: [PATCH] Use `fetch` with `keepalive: true` instead of `navigator.sendBeacon` This allows customizing the headers of the request. It has the same semantics as `navigator.sendBeacon` and it's the recommended alternative to `sendBeacon` for customizing the request: https://www.w3.org/TR/beacon/#introduction This commit also fixes `settings.requestHandler` not being called when using `settings.sendBeaconCommit`. --- dist/aicc.js | 31 ++++++++++++------------------- dist/aicc.js.map | 2 +- dist/aicc.min.js | 8 ++++---- dist/scorm-again.js | 31 ++++++++++++------------------- dist/scorm-again.js.map | 2 +- dist/scorm-again.min.js | 8 ++++---- dist/scorm12.js | 31 ++++++++++++------------------- dist/scorm12.js.map | 2 +- dist/scorm12.min.js | 6 +++--- dist/scorm2004.js | 31 ++++++++++++------------------- dist/scorm2004.js.map | 2 +- dist/scorm2004.min.js | 2 +- src/BaseAPI.js | 30 +++++++++++++----------------- 13 files changed, 77 insertions(+), 109 deletions(-) diff --git a/dist/aicc.js b/dist/aicc.js index 6489bdf..5421130 100644 --- a/dist/aicc.js +++ b/dist/aicc.js @@ -1795,26 +1795,19 @@ var BaseAPI = /*#__PURE__*/function () { } } else { try { - var headers = { - type: settings.commitRequestDataType - }; - var blob; - - if (params instanceof Array) { - blob = new Blob([params.join('&')], headers); - } else { - blob = new Blob([JSON.stringify(params)], headers); - } - + params = settings.requestHandler(params); + fetch(url, { + method: 'POST', + body: params instanceof Array ? params.join('&') : JSON.stringify(params), + headers: _objectSpread(_objectSpread({}, settings.xhrHeaders), {}, { + 'Content-Type': settings.commitRequestDataType + }), + credentials: settings.xhrWithCredentials ? 'include' : undefined, + keepalive: true + }); result = {}; - - if (navigator.sendBeacon(url, blob)) { - result.result = global_constants.SCORM_TRUE; - result.errorCode = 0; - } else { - result.result = global_constants.SCORM_FALSE; - result.errorCode = 101; - } + result.result = global_constants.SCORM_TRUE; + result.errorCode = 0; } catch (e) { console.error(e); api.processListeners('CommitError'); diff --git a/dist/aicc.js.map b/dist/aicc.js.map index 74710c5..960ff23 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 const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import AICC from '../AICC';\n\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","Regex","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","TYPE_MISMATCH","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","interactions","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","_count","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"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 diff --git a/dist/aicc.min.js b/dist/aicc.min.js index 5707134..e68920c 100644 --- a/dist/aicc.min.js +++ b/dist/aicc.min.js @@ -7,19 +7,19 @@ \*********************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return d}});var e=t(/*! ./Scorm12API */"./src/Scorm12API.js"),o=t(/*! ./cmi/aicc_cmi */"./src/cmi/aicc_cmi.js"),f=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function a(r){for(var e=1;ee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&h(t.prototype,e),n&&h(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": /*!*****************************!*\ !*** ./src/cmi/aicc_cmi.js ***! - \*****************************/function(t,n,h){"use strict";h.r(n),h.d(n,{CMI:function(){return C},CMIStudentDemographics:function(){return K},CMIPaths:function(){return Q},CMIPathsObject:function(){return ae},CMITries:function(){return se},CMITriesObject:function(){return ue},CMIAttemptRecords:function(){return fe},CMIAttemptRecordsObject:function(){return de},CMIEvaluationCommentsObject:function(){return ge}});var d=h(/*! ./scorm12_cmi */"./src/cmi/scorm12_cmi.js"),r=h(/*! ./common */"./src/cmi/common.js"),n=h(/*! ../constants/api_constants */"./src/constants/api_constants.js"),p=h(/*! ../constants/regex */"./src/constants/regex.js"),m=h(/*! ../constants/error_codes */"./src/constants/error_codes.js"),y=h(/*! ../exceptions */"./src/exceptions.js");function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t,n){var r=e;if(t.has(r))throw new TypeError("Cannot initialize the same private elements twice on an object");t.set(e,n)}function o(e,t,n){var t=_(e,t,"set"),r=n;if(t.set)t.set.call(e,r);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=r}return n}function e(e,t){t=_(e,t,"get");return t.get?t.get.call(e):t.value}function _(e,t,n){if(!t.has(e))throw new TypeError("attempted to "+n+" private field on non-instance");return t.get(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,T=new WeakMap,j=function(){function r(){var e,t,n;if(v(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,h(this,C,{writable:!0,value:!1}),h(this,T,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),r}(),k=new WeakMap,p=new WeakMap,R=new WeakMap,m=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,j);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return v(this,u),h(f(t=l.call(this)),k,{writable:!0,value:void 0}),h(f(t),p,{writable:!0,value:void 0}),h(f(t),R,{writable:!0,value:void 0}),h(f(t),m,{writable:!0,value:void 0}),h(f(t),y,{writable:!0,value:void 0}),h(f(t),g,{writable:!0,value:void 0}),h(f(t),_,{writable:!0,value:void 0}),h(f(t),L,{writable:!0,value:""}),h(f(t),A,{writable:!0,value:""}),h(f(t),N,{writable:!0,value:void 0}),d(f(t),k,n||M.score_children),d(f(t),p,!!r&&w.score_range),d(f(t),N,i||""===i?i:"100"),d(f(t),R,o||O.INVALID_SET_VALUE),d(f(t),m,a||O.TYPE_MISMATCH),d(f(t),y,s||O.VALUE_OUT_OF_RANGE),d(f(t),g,c||w.CMIDecimal),d(f(t),_,e),t}return b(u,[{key:"_children",get:function(){return t(this,k)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,V=new WeakMap,F=new WeakMap,x=function(){a(o,j);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return v(this,o),h(f(t=i.call(this)),P,{writable:!0,value:void 0}),h(f(t),V,{writable:!0,value:void 0}),h(f(t),F,{writable:!0,value:void 0}),d(f(t),F,n),d(f(t),P,r),d(f(t),V,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,T=new WeakMap,j=function(){function r(){var e,t,n;if(v(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,h(this,C,{writable:!0,value:!1}),h(this,T,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,T,(new Date).getTime())}}]),r}(),k=new WeakMap,p=new WeakMap,R=new WeakMap,m=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,j);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return v(this,u),h(f(t=l.call(this)),k,{writable:!0,value:void 0}),h(f(t),p,{writable:!0,value:void 0}),h(f(t),R,{writable:!0,value:void 0}),h(f(t),m,{writable:!0,value:void 0}),h(f(t),y,{writable:!0,value:void 0}),h(f(t),g,{writable:!0,value:void 0}),h(f(t),_,{writable:!0,value:void 0}),h(f(t),L,{writable:!0,value:""}),h(f(t),A,{writable:!0,value:""}),h(f(t),N,{writable:!0,value:void 0}),d(f(t),k,n||M.score_children),d(f(t),p,!!r&&w.score_range),d(f(t),N,i||""===i?i:"100"),d(f(t),R,o||O.INVALID_SET_VALUE),d(f(t),m,a||O.TYPE_MISMATCH),d(f(t),y,s||O.VALUE_OUT_OF_RANGE),d(f(t),g,c||w.CMIDecimal),d(f(t),_,e),t}return b(u,[{key:"_children",get:function(){return t(this,k)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!S(e,t(this,g),t(this,m),t(this,_))||t(this,p)&&!I(e,t(this,p),t(this,y),t(this,_))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,V=new WeakMap,x=new WeakMap,F=function(){a(o,j);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return v(this,o),h(f(t=i.call(this)),P,{writable:!0,value:void 0}),h(f(t),V,{writable:!0,value:void 0}),h(f(t),x,{writable:!0,value:void 0}),d(f(t),x,n),d(f(t),P,r),d(f(t),V,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,x)},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,V).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport Scorm12API from './Scorm12API';\nimport {\n CMI,\n CMIAttemptRecordsObject,\n CMIEvaluationCommentsObject,\n CMITriesObject,\n} from './cmi/aicc_cmi';\nimport {NAV} from './cmi/scorm12_cmi';\n\n/**\n * The AICC API class\n */\nexport default class AICC extends Scorm12API {\n /**\n * Constructor to create AICC API object\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild = super.getChildElement(CMIElement, value, foundFirstIndex);\n\n if (!newChild) {\n if (this.stringMatches(CMIElement, 'cmi\\\\.evaluation\\\\.comments\\\\.\\\\d+')) {\n newChild = new CMIEvaluationCommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.tries\\\\.\\\\d+')) {\n newChild = new CMITriesObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.student_data\\\\.attempt_records\\\\.\\\\d+')) {\n newChild = new CMIAttemptRecordsObject();\n }\n }\n\n return newChild;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {AICC} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.nav = newAPI.nav;\n }\n}\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, checkValidFormat, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {AICCValidationError} from '../exceptions';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst aicc_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new AICCValidationError(aicc_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction checkAICCValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n aicc_error_codes.TYPE_MISMATCH,\n AICCValidationError,\n allowEmptyString\n );\n}\n\n/**\n * CMI Class for AICC\n */\nexport class CMI extends Scorm12CMI.CMI {\n /**\n * Constructor for AICC CMI object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super(aicc_constants.cmi_children);\n\n if (initialized) this.initialize();\n\n this.student_preference = new AICCStudentPreferences();\n this.student_data = new AICCCMIStudentData();\n this.student_demographics = new CMIStudentDemographics();\n this.evaluation = new CMIEvaluation();\n this.paths = new CMIPaths();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.student_preference?.initialize();\n this.student_data?.initialize();\n this.student_demographics?.initialize();\n this.evaluation?.initialize();\n this.paths?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions,\n * paths: CMIPaths\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'student_demographics': this.student_demographics,\n 'interactions': this.interactions,\n 'evaluation': this.evaluation,\n 'paths': this.paths,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * AICC Evaluation object\n */\nclass CMIEvaluation extends BaseCMI {\n /**\n * Constructor for AICC Evaluation object\n */\n constructor() {\n super();\n\n this.comments = new CMIEvaluationComments();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.comments?.initialize();\n }\n\n /**\n * toJSON for cmi.evaluation object\n * @return {{comments: CMIEvaluationComments}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments': this.comments,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing AICC's cmi.evaluation.comments object\n */\nclass CMIEvaluationComments extends CMIArray {\n /**\n * Constructor for AICC Evaluation Comments object\n */\n constructor() {\n super({\n children: aicc_constants.comments_children,\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n });\n }\n}\n\n/**\n * StudentPreferences class for AICC\n */\nclass AICCStudentPreferences extends Scorm12CMI.CMIStudentPreference {\n /**\n * Constructor for AICC Student Preferences object\n */\n constructor() {\n super(aicc_constants.student_preference_children);\n\n this.windows = new CMIArray({\n errorCode: aicc_error_codes.INVALID_SET_VALUE,\n errorClass: AICCValidationError,\n children: '',\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.windows?.initialize();\n }\n\n #lesson_type = '';\n #text_color = '';\n #text_location = '';\n #text_size = '';\n #video = '';\n\n /**\n * Getter for #lesson_type\n * @return {string}\n */\n get lesson_type(): string {\n return this.#lesson_type;\n }\n\n /**\n * Setter for #lesson_type\n * @param {string} lesson_type\n */\n set lesson_type(lesson_type: string) {\n if (checkAICCValidFormat(lesson_type, aicc_regex.CMIString256)) {\n this.#lesson_type = lesson_type;\n }\n }\n\n /**\n * Getter for #text_color\n * @return {string}\n */\n get text_color(): string {\n return this.#text_color;\n }\n\n /**\n * Setter for #text_color\n * @param {string} text_color\n */\n set text_color(text_color: string) {\n if (checkAICCValidFormat(text_color, aicc_regex.CMIString256)) {\n this.#text_color = text_color;\n }\n }\n\n /**\n * Getter for #text_location\n * @return {string}\n */\n get text_location(): string {\n return this.#text_location;\n }\n\n /**\n * Setter for #text_location\n * @param {string} text_location\n */\n set text_location(text_location: string) {\n if (checkAICCValidFormat(text_location, aicc_regex.CMIString256)) {\n this.#text_location = text_location;\n }\n }\n\n /**\n * Getter for #text_size\n * @return {string}\n */\n get text_size(): string {\n return this.#text_size;\n }\n\n /**\n * Setter for #text_size\n * @param {string} text_size\n */\n set text_size(text_size: string) {\n if (checkAICCValidFormat(text_size, aicc_regex.CMIString256)) {\n this.#text_size = text_size;\n }\n }\n\n /**\n * Getter for #video\n * @return {string}\n */\n get video(): string {\n return this.#video;\n }\n\n /**\n * Setter for #video\n * @param {string} video\n */\n set video(video: string) {\n if (checkAICCValidFormat(video, aicc_regex.CMIString256)) {\n this.#video = video;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'lesson_type': this.lesson_type,\n 'speed': this.speed,\n 'text': this.text,\n 'text_color': this.text_color,\n 'text_location': this.text_location,\n 'text_size': this.text_size,\n 'video': this.video,\n 'windows': this.windows,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * StudentData class for AICC\n */\nclass AICCCMIStudentData extends Scorm12CMI.CMIStudentData {\n /**\n * Constructor for AICC StudentData object\n */\n constructor() {\n super(aicc_constants.student_data_children);\n\n this.tries = new CMITries();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.tries?.initialize();\n }\n\n #tries_during_lesson = '';\n\n /**\n * Getter for tries_during_lesson\n * @return {string}\n */\n get tries_during_lesson() {\n return this.#tries_during_lesson;\n }\n\n /**\n * Setter for #tries_during_lesson. Sets an error if trying to set after\n * initialization.\n * @param {string} tries_during_lesson\n */\n set tries_during_lesson(tries_during_lesson) {\n !this.initialized ?\n this.#tries_during_lesson = tries_during_lesson :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data object\n * @return {\n * {\n * mastery_score: string,\n * max_time_allowed: string,\n * time_limit_action: string,\n * tries: CMITries\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n 'tries': this.tries,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_demographics object\n */\nexport class CMIStudentDemographics extends BaseCMI {\n /**\n * Constructor for AICC StudentDemographics object\n */\n constructor() {\n super();\n }\n\n #_children = aicc_constants.student_demographics_children;\n #city = '';\n #class = '';\n #company = '';\n #country = '';\n #experience = '';\n #familiar_name = '';\n #instructor_name = '';\n #title = '';\n #native_language = '';\n #state = '';\n #street_address = '';\n #telephone = '';\n #years_experience = '';\n\n /**\n * Getter for _children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Getter for city\n * @return {string}\n */\n get city() {\n return this.#city;\n }\n\n /**\n * Setter for #city. Sets an error if trying to set after\n * initialization.\n * @param {string} city\n */\n set city(city) {\n !this.initialized ?\n this.#city = city :\n throwReadOnlyError();\n }\n\n /**\n * Getter for class\n * @return {string}\n */\n get class() {\n return this.#class;\n }\n\n /**\n * Setter for #class. Sets an error if trying to set after\n * initialization.\n * @param {string} clazz\n */\n set class(clazz) {\n !this.initialized ?\n this.#class = clazz :\n throwReadOnlyError();\n }\n\n /**\n * Getter for company\n * @return {string}\n */\n get company() {\n return this.#company;\n }\n\n /**\n * Setter for #company. Sets an error if trying to set after\n * initialization.\n * @param {string} company\n */\n set company(company) {\n !this.initialized ?\n this.#company = company :\n throwReadOnlyError();\n }\n\n /**\n * Getter for country\n * @return {string}\n */\n get country() {\n return this.#country;\n }\n\n /**\n * Setter for #country. Sets an error if trying to set after\n * initialization.\n * @param {string} country\n */\n set country(country) {\n !this.initialized ?\n this.#country = country :\n throwReadOnlyError();\n }\n\n /**\n * Getter for experience\n * @return {string}\n */\n get experience() {\n return this.#experience;\n }\n\n /**\n * Setter for #experience. Sets an error if trying to set after\n * initialization.\n * @param {string} experience\n */\n set experience(experience) {\n !this.initialized ?\n this.#experience = experience :\n throwReadOnlyError();\n }\n\n /**\n * Getter for familiar_name\n * @return {string}\n */\n get familiar_name() {\n return this.#familiar_name;\n }\n\n /**\n * Setter for #familiar_name. Sets an error if trying to set after\n * initialization.\n * @param {string} familiar_name\n */\n set familiar_name(familiar_name) {\n !this.initialized ?\n this.#familiar_name = familiar_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for instructor_name\n * @return {string}\n */\n get instructor_name() {\n return this.#instructor_name;\n }\n\n /**\n * Setter for #instructor_name. Sets an error if trying to set after\n * initialization.\n * @param {string} instructor_name\n */\n set instructor_name(instructor_name) {\n !this.initialized ?\n this.#instructor_name = instructor_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for title\n * @return {string}\n */\n get title() {\n return this.#title;\n }\n\n /**\n * Setter for #title. Sets an error if trying to set after\n * initialization.\n * @param {string} title\n */\n set title(title) {\n !this.initialized ?\n this.#title = title :\n throwReadOnlyError();\n }\n\n /**\n * Getter for native_language\n * @return {string}\n */\n get native_language() {\n return this.#native_language;\n }\n\n /**\n * Setter for #native_language. Sets an error if trying to set after\n * initialization.\n * @param {string} native_language\n */\n set native_language(native_language) {\n !this.initialized ?\n this.#native_language = native_language :\n throwReadOnlyError();\n }\n\n /**\n * Getter for state\n * @return {string}\n */\n get state() {\n return this.#state;\n }\n\n /**\n * Setter for #state. Sets an error if trying to set after\n * initialization.\n * @param {string} state\n */\n set state(state) {\n !this.initialized ?\n this.#state = state :\n throwReadOnlyError();\n }\n\n /**\n * Getter for street_address\n * @return {string}\n */\n get street_address() {\n return this.#street_address;\n }\n\n /**\n * Setter for #street_address. Sets an error if trying to set after\n * initialization.\n * @param {string} street_address\n */\n set street_address(street_address) {\n !this.initialized ?\n this.#street_address = street_address :\n throwReadOnlyError();\n }\n\n /**\n * Getter for telephone\n * @return {string}\n */\n get telephone() {\n return this.#telephone;\n }\n\n /**\n * Setter for #telephone. Sets an error if trying to set after\n * initialization.\n * @param {string} telephone\n */\n set telephone(telephone) {\n !this.initialized ?\n this.#telephone = telephone :\n throwReadOnlyError();\n }\n\n /**\n * Getter for years_experience\n * @return {string}\n */\n get years_experience() {\n return this.#years_experience;\n }\n\n /**\n * Setter for #years_experience. Sets an error if trying to set after\n * initialization.\n * @param {string} years_experience\n */\n set years_experience(years_experience) {\n !this.initialized ?\n this.#years_experience = years_experience :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_demographics object\n * @return {\n * {\n * city: string,\n * class: string,\n * company: string,\n * country: string,\n * experience: string,\n * familiar_name: string,\n * instructor_name: string,\n * title: string,\n * native_language: string,\n * state: string,\n * street_address: string,\n * telephone: string,\n * years_experience: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'city': this.city,\n 'class': this.class,\n 'company': this.company,\n 'country': this.country,\n 'experience': this.experience,\n 'familiar_name': this.familiar_name,\n 'instructor_name': this.instructor_name,\n 'title': this.title,\n 'native_language': this.native_language,\n 'state': this.state,\n 'street_address': this.street_address,\n 'telephone': this.telephone,\n 'years_experience': this.years_experience,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.paths object\n */\nexport class CMIPaths extends CMIArray {\n /**\n * Constructor for inline Paths Array class\n */\n constructor() {\n super({children: aicc_constants.paths_children});\n }\n}\n\n/**\n * Class for AICC Paths\n */\nexport class CMIPathsObject extends BaseCMI {\n /**\n * Constructor for AICC Paths objects\n */\n constructor() {\n super();\n }\n\n #location_id = '';\n #date = '';\n #time = '';\n #status = '';\n #why_left = '';\n #time_in_element = '';\n\n /**\n * Getter for #location_id\n * @return {string}\n */\n get location_id() {\n return this.#location_id;\n }\n\n /**\n * Setter for #location_id\n * @param {string} location_id\n */\n set location_id(location_id) {\n if (checkAICCValidFormat(location_id, aicc_regex.CMIString256)) {\n this.#location_id = location_id;\n }\n }\n\n /**\n * Getter for #date\n * @return {string}\n */\n get date() {\n return this.#date;\n }\n\n /**\n * Setter for #date\n * @param {string} date\n */\n set date(date) {\n if (checkAICCValidFormat(date, aicc_regex.CMIString256)) {\n this.#date = date;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #why_left\n * @return {string}\n */\n get why_left() {\n return this.#why_left;\n }\n\n /**\n * Setter for #why_left\n * @param {string} why_left\n */\n set why_left(why_left) {\n if (checkAICCValidFormat(why_left, aicc_regex.CMIString256)) {\n this.#why_left = why_left;\n }\n }\n\n /**\n * Getter for #time_in_element\n * @return {string}\n */\n get time_in_element() {\n return this.#time_in_element;\n }\n\n /**\n * Setter for #time_in_element\n * @param {string} time_in_element\n */\n set time_in_element(time_in_element) {\n if (checkAICCValidFormat(time_in_element, aicc_regex.CMITime)) {\n this.#time_in_element = time_in_element;\n }\n }\n\n /**\n * toJSON for cmi.paths.n object\n * @return {\n * {\n * location_id: string,\n * date: string,\n * time: string,\n * status: string,\n * why_left: string,\n * time_in_element: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'location_id': this.location_id,\n 'date': this.date,\n 'time': this.time,\n 'status': this.status,\n 'why_left': this.why_left,\n 'time_in_element': this.time_in_element,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing the AICC cmi.student_data.tries object\n */\nexport class CMITries extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.tries_children});\n }\n}\n\n/**\n * Class for AICC Tries\n */\nexport class CMITriesObject extends BaseCMI {\n /**\n * Constructor for AICC Tries object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #status = '';\n #time = '';\n\n /**\n * Getter for #status\n * @return {string}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.student_data.tries.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'status': this.status,\n 'time': this.time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for cmi.student_data.attempt_records array\n */\nexport class CMIAttemptRecords extends CMIArray {\n /**\n * Constructor for inline Tries Array class\n */\n constructor() {\n super({children: aicc_constants.attempt_records_children});\n }\n}\n\n/**\n * Class for AICC Attempt Records\n */\nexport class CMIAttemptRecordsObject extends BaseCMI {\n /**\n * Constructor for AICC Attempt Records object\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: aicc_constants.score_children,\n score_range: aicc_regex.score_range,\n invalidErrorCode: aicc_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: aicc_error_codes.TYPE_MISMATCH,\n invalidRangeCode: aicc_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: AICCValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #lesson_status = '';\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n\n /**\n * toJSON for cmi.student_data.attempt_records.n object\n * @return {\n * {\n * status: string,\n * time: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'lesson_status': this.lesson_status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Evaluation Comments\n */\nexport class CMIEvaluationCommentsObject extends BaseCMI {\n /**\n * Constructor for Evaluation Comments\n */\n constructor() {\n super();\n }\n\n #content = '';\n #location = '';\n #time = '';\n\n /**\n * Getter for #content\n * @return {string}\n */\n get content() {\n return this.#content;\n }\n\n /**\n * Setter for #content\n * @param {string} content\n */\n set content(content) {\n if (checkAICCValidFormat(content, aicc_regex.CMIString256)) {\n this.#content = content;\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (checkAICCValidFormat(location, aicc_regex.CMIString256)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #time\n * @return {string}\n */\n get time() {\n return this.#time;\n }\n\n /**\n * Setting for #time\n * @param {string} time\n */\n set time(time) {\n if (checkAICCValidFormat(time, aicc_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * toJSON for cmi.evaulation.comments.n object\n * @return {\n * {\n * content: string,\n * location: string,\n * time: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'content': this.content,\n 'location': this.location,\n 'time': this.time,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\nimport Scorm12API from '../Scorm12API';\nimport AICC from '../AICC';\n\nwindow.Scorm12API = Scorm12API;\nwindow.Scorm2004API = Scorm2004API;\nwindow.AICC = AICC;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","Scorm12API","CMI","CMIAttemptRecordsObject","CMIEvaluationCommentsObject","CMITriesObject","NAV","AICC","settings","finalSettings","mastery_override","cmi","nav","CMIElement","foundFirstIndex","newChild","stringMatches","newAPI","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","scorm12_constants","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","ADL","CMICommentsObject","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","correct_response","current_index","found","count","_count","adl","Initialize","Terminate","lmsTerminate","GetValue","SetValue","Commit","GetLastError","GetErrorString","GetDiagnostic","request","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","mode","completion_threshold","progress_measure","completion_status","scaled_passing_score","scaled","success_status","navRequest","encodeURIComponent","Scorm12CMI","BaseCMI","checkValidFormat","CMIScore","AICCValidationError","aicc_constants","aicc","aicc_regex","aicc_error_codes","throwReadOnlyError","checkAICCValidFormat","regexPattern","allowEmptyString","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","CMIEvaluationComments","children","comments_children","INVALID_SET_VALUE","errorClass","student_preference_children","windows","lesson_type","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","student_data_children","tries","CMITries","tries_during_lesson","max_time_allowed","time_limit_action","CMIStudentData","student_demographics_children","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","paths_children","CMIPathsObject","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","tries_children","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","CMIAttemptRecords","attempt_records_children","content","location","scorm12_regex","checkValidRange","rangePattern","ranges","getTime","decimalRegex","CMIDecimal","_children","Scorm12ValidationError","Util","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","CMICore","CMIObjectives","CMIInteractions","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","CMISInteger","audio_range","speed_range","text_range","interactions_children","correct_responses_children","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","NAVEvent","Scorm2004ValidationError","learner_responses","learner","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","CMICommentsFromLMS","CMICStatus","learner_id","learner_name","CMIString1000","progress_range","CMISStatus","CMIString64000","getSecondsAsISODuration","addTwoDurations","audio_level","CMILang","delivery_speed","audio_captioning","CMILongIdentifier","timestamp","learner_response","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","request_valid","ADLNavRequestValid","_target","_","previous","continue","LOG_LEVEL_NONE","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"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,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 diff --git a/dist/scorm-again.min.js b/dist/scorm-again.min.js index c0684b4..ae51a33 100644 --- a/dist/scorm-again.min.js +++ b/dist/scorm-again.min.js @@ -7,7 +7,7 @@ \*********************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return d}});var e=t(/*! ./Scorm12API */"./src/Scorm12API.js"),o=t(/*! ./cmi/aicc_cmi */"./src/cmi/aicc_cmi.js"),h=t(/*! ./cmi/scorm12_cmi */"./src/cmi/scorm12_cmi.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function a(r){for(var e=1;ee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=this.apiLogLevel&&this.settings.onLogMessage(r,n)}},{key:"formatMessage",value:function(e,t,n){for(var r="",i=20-(r+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(n=i.cmi)||void 0===n||null===(r=n.core)||void 0===r?void 0:r.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,n,r,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&f(t.prototype,e),n&&f(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/Scorm2004API.js": @@ -16,16 +16,16 @@ \*****************************/function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return O}});var e=t(/*! ./BaseAPI */"./src/BaseAPI.js"),a=t(/*! ./cmi/scorm2004_cmi */"./src/cmi/scorm2004_cmi.js"),o=t(/*! ./utilities */"./src/utilities.js"),r=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),f=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),d=t(/*! ./constants/response_constants */"./src/constants/response_constants.js"),m=t(/*! ./constants/language_constants */"./src/constants/language_constants.js"),t=t(/*! ./constants/regex */"./src/constants/regex.js");function p(e){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function g(t){for(var e=1;ee.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var n=e.correct_responses._count;if("choice"===e.type)for(var r=0;rNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&r.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,n,r=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(n=i.adl)||void 0===n||null===(t=n.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),r=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===l.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(n=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),r&&void 0!==n.navRequest&&""!==n.navRequest&&Function('"use strict";(() => { '.concat(n.navRequest," })()"))(),n):l.SCORM_TRUE}}])&&v(t.prototype,e),n&&v(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/aicc_cmi.js": /*!*****************************!*\ !*** ./src/cmi/aicc_cmi.js ***! - \*****************************/function(t,n,f){"use strict";f.r(n),f.d(n,{CMI:function(){return C},CMIStudentDemographics:function(){return K},CMIPaths:function(){return Q},CMIPathsObject:function(){return ae},CMITries:function(){return se},CMITriesObject:function(){return ue},CMIAttemptRecords:function(){return he},CMIAttemptRecordsObject:function(){return de},CMIEvaluationCommentsObject:function(){return ge}});var d=f(/*! ./scorm12_cmi */"./src/cmi/scorm12_cmi.js"),r=f(/*! ./common */"./src/cmi/common.js"),n=f(/*! ../constants/api_constants */"./src/constants/api_constants.js"),m=f(/*! ../constants/regex */"./src/constants/regex.js"),p=f(/*! ../constants/error_codes */"./src/constants/error_codes.js"),y=f(/*! ../exceptions */"./src/exceptions.js");function g(e){return(g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t,n){var r=e;if(t.has(r))throw new TypeError("Cannot initialize the same private elements twice on an object");t.set(e,n)}function o(e,t,n){var t=v(e,t,"set"),r=n;if(t.set)t.set.call(e,r);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=r}return n}function e(e,t){t=v(e,t,"get");return t.get?t.get.call(e):t.value}function v(e,t,n){if(!t.has(e))throw new TypeError("attempted to "+n+" private field on non-instance");return t.get(e)}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _(e,t){for(var n=0;n=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new r.prototype.constructor(n)}throw new r.prototype.constructor(n)}var C=new WeakMap,k=new WeakMap,T=function(){function r(){var e,t,n;if(_(this,r),n=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,f(this,C,{writable:!0,value:!1}),f(this,k,{writable:!0,value:void 0}),(this instanceof r?this.constructor:void 0)===r)throw new TypeError("Cannot construct BaseCMI instances directly")}return b(r,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,k)}},{key:"initialize",value:function(){d(this,C,!0)}},{key:"setStartTime",value:function(){d(this,k,(new Date).getTime())}}]),r}(),j=new WeakMap,m=new WeakMap,R=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,v=new WeakMap,L=new WeakMap,A=new WeakMap,N=new WeakMap,D=function(){a(u,T);var l=c(u);function u(e){var t,n=e.score_children,r=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return _(this,u),f(h(t=l.call(this)),j,{writable:!0,value:void 0}),f(h(t),m,{writable:!0,value:void 0}),f(h(t),R,{writable:!0,value:void 0}),f(h(t),p,{writable:!0,value:void 0}),f(h(t),y,{writable:!0,value:void 0}),f(h(t),g,{writable:!0,value:void 0}),f(h(t),v,{writable:!0,value:void 0}),f(h(t),L,{writable:!0,value:""}),f(h(t),A,{writable:!0,value:""}),f(h(t),N,{writable:!0,value:void 0}),d(h(t),j,n||M.score_children),d(h(t),m,!!r&&E.score_range),d(h(t),N,i||""===i?i:"100"),d(h(t),R,o||S.INVALID_SET_VALUE),d(h(t),p,a||S.TYPE_MISMATCH),d(h(t),y,s||S.VALUE_OUT_OF_RANGE),d(h(t),g,c||E.CMIDecimal),d(h(t),v,e),t}return b(u,[{key:"_children",get:function(){return t(this,j)},set:function(e){throw new(t(this,v).prototype.constructor)(t(this,R))}},{key:"raw",get:function(){return t(this,L)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,L,e)}},{key:"min",get:function(){return t(this,A)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,A,e)}},{key:"max",get:function(){return t(this,N)},set:function(e){!I(e,t(this,g),t(this,p),t(this,v))||t(this,m)&&!O(e,t(this,m),t(this,y),t(this,v))||d(this,N,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),P=new WeakMap,z=new WeakMap,V=new WeakMap,x=function(){a(o,T);var i=c(o);function o(e){var t,n=e.children,r=e.errorCode,e=e.errorClass;return _(this,o),f(h(t=i.call(this)),P,{writable:!0,value:void 0}),f(h(t),z,{writable:!0,value:void 0}),f(h(t),V,{writable:!0,value:void 0}),d(h(t),V,n),d(h(t),P,r),d(h(t),z,e),t.childArray=[],t}return b(o,[{key:"_children",get:function(){return t(this,V)},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,P))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,z).prototype.constructor)(t(this,P))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n CMI,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject, NAV,\n} from './cmi/scorm12_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * API class for SCORM 1.2\n */\nexport default class Scorm12API extends BaseAPI {\n /**\n * Constructor for SCORM 1.2 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm12_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.nav = new NAV();\n\n // Rename functions to match 1.2 Spec and expose to modules\n this.LMSInitialize = this.lmsInitialize;\n this.LMSFinish = this.lmsFinish;\n this.LMSGetValue = this.lmsGetValue;\n this.LMSSetValue = this.lmsSetValue;\n this.LMSCommit = this.lmsCommit;\n this.LMSGetLastError = this.lmsGetLastError;\n this.LMSGetErrorString = this.lmsGetErrorString;\n this.LMSGetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * lmsInitialize function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('LMSInitialize', 'LMS was already initialized!',\n 'LMS is already finished!');\n }\n\n /**\n * LMSFinish function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsFinish() {\n const result = this.terminate('LMSFinish', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.nav.event !== '') {\n if (this.nav.event === 'continue') {\n this.processListeners('SequenceNext');\n } else {\n this.processListeners('SequencePrevious');\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * LMSGetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('LMSGetValue', false, CMIElement);\n }\n\n /**\n * LMSSetValue function from SCORM 1.2 Spec\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('LMSSetValue', 'LMSCommit', false, CMIElement, value);\n }\n\n /**\n * LMSCommit function from SCORM 1.2 Spec\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('LMSCommit', false);\n }\n\n /**\n * LMSGetLastError function from SCORM 1.2 Spec\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('LMSGetLastError');\n }\n\n /**\n * LMSGetErrorString function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('LMSGetErrorString', CMIErrorCode);\n }\n\n /**\n * LMSGetDiagnostic function from SCORM 1.2 Spec\n *\n * @param {string} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('LMSGetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('LMSSetValue', false, CMIElement, value);\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('getCMIValue', false, CMIElement);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {*} value\n * @param {boolean} foundFirstIndex\n * @return {object}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n }\n\n return newChild;\n }\n\n /**\n * Validates Correct Response values\n *\n * @param {string} CMIElement\n * @param {*} value\n * @return {boolean}\n */\n validateCorrectResponse(CMIElement, value) {\n return true;\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {*} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = 'No Error';\n let detailMessage = 'No Error';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm12_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm12_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm12_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Replace the whole API with another\n *\n * @param {Scorm12API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.core.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n const originalStatus = this.cmi.core.lesson_status;\n if (originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'completed';\n }\n\n if (this.cmi.core.lesson_mode === 'normal') {\n if (this.cmi.core.credit === 'credit') {\n if (this.settings.mastery_override &&\n this.cmi.student_data.mastery_score !== '' &&\n this.cmi.core.score.raw !== '') {\n if (parseFloat(this.cmi.core.score.raw) >= parseFloat(this.cmi.student_data.mastery_score)) {\n this.cmi.core.lesson_status = 'passed';\n } else {\n this.cmi.core.lesson_status = 'failed';\n }\n }\n }\n } else if (this.cmi.core.lesson_mode === 'browse') {\n if ((this.startingData?.cmi?.core?.lesson_status || '') === '' && originalStatus === 'not attempted') {\n this.cmi.core.lesson_status = 'browsed';\n }\n }\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' + (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject, terminateCommit);\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\nimport {Scorm12ValidationError} from '../exceptions';\nimport * as Utilities from '../utilities';\nimport * as Util from '../utilities';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Helper method for throwing Read Only error\n */\nexport function throwReadOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new Scorm12ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new Scorm12ValidationError(scorm12_error_codes.INVALID_SET_VALUE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm12_error_codes.TYPE_MISMATCH,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function check12ValidRange(\n value: any,\n rangePattern: String,\n allowEmptyString?: boolean) {\n return checkValidRange(\n value,\n rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE,\n Scorm12ValidationError,\n allowEmptyString\n );\n}\n\n/**\n * Class representing the cmi object for SCORM 1.2\n */\nexport class CMI extends BaseCMI {\n #_children = '';\n #_version = '3.4';\n #launch_data = '';\n #comments = '';\n #comments_from_lms = '';\n\n student_data = null;\n\n /**\n * Constructor for the SCORM 1.2 cmi object\n * @param {string} cmi_children\n * @param {(CMIStudentData|AICCCMIStudentData)} student_data\n * @param {boolean} initialized\n */\n constructor(cmi_children, student_data, initialized: boolean) {\n super();\n\n if (initialized) this.initialize();\n\n this.#_children = cmi_children ?\n cmi_children :\n scorm12_constants.cmi_children;\n this.core = new CMICore();\n this.objectives = new CMIObjectives();\n this.student_data = student_data ? student_data : new CMIStudentData();\n this.student_preference = new CMIStudentPreference();\n this.interactions = new CMIInteractions();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.core?.initialize();\n this.objectives?.initialize();\n this.student_data?.initialize();\n this.student_preference?.initialize();\n this.interactions?.initialize();\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * suspend_data: string,\n * launch_data: string,\n * comments: string,\n * comments_from_lms: string,\n * core: CMICore,\n * objectives: CMIObjectives,\n * student_data: CMIStudentData,\n * student_preference: CMIStudentPreference,\n * interactions: CMIInteractions\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'suspend_data': this.suspend_data,\n 'launch_data': this.launch_data,\n 'comments': this.comments,\n 'comments_from_lms': this.comments_from_lms,\n 'core': this.core,\n 'objectives': this.objectives,\n 'student_data': this.student_data,\n 'student_preference': this.student_preference,\n 'interactions': this.interactions,\n };\n delete this.jsonString;\n return result;\n }\n\n /**\n * Getter for #_version\n * @return {string}\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n */\n set _version(_version) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.core?.suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (this.core) {\n this.core.suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #comments\n * @return {string}\n */\n get comments() {\n return this.#comments;\n }\n\n /**\n * Setter for #comments\n * @param {string} comments\n */\n set comments(comments) {\n if (check12ValidFormat(comments, scorm12_regex.CMIString4096, true)) {\n this.#comments = comments;\n }\n }\n\n /**\n * Getter for #comments_from_lms\n * @return {string}\n */\n get comments_from_lms() {\n return this.#comments_from_lms;\n }\n\n /**\n * Setter for #comments_from_lms. Can only be called before initialization.\n * @param {string} comments_from_lms\n */\n set comments_from_lms(comments_from_lms) {\n !this.initialized ?\n this.#comments_from_lms = comments_from_lms :\n throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string}\n */\n getCurrentTotalTime() {\n return this.core.getCurrentTotalTime(this.start_time);\n }\n}\n\n/**\n * Class representing the cmi.core object\n * @extends BaseCMI\n */\nclass CMICore extends BaseCMI {\n /**\n * Constructor for cmi.core\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n #_children = scorm12_constants.core_children;\n #student_id = '';\n #student_name = '';\n #lesson_location = '';\n #credit = '';\n #lesson_status = 'not attempted';\n #entry = '';\n #total_time = '';\n #lesson_mode = 'normal';\n #exit = '';\n #session_time = '00:00:00';\n #suspend_data = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #student_id\n * @return {string}\n */\n get student_id() {\n return this.#student_id;\n }\n\n /**\n * Setter for #student_id. Can only be called before initialization.\n * @param {string} student_id\n */\n set student_id(student_id) {\n !this.initialized ? this.#student_id = student_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #student_name\n * @return {string}\n */\n get student_name() {\n return this.#student_name;\n }\n\n /**\n * Setter for #student_name. Can only be called before initialization.\n * @param {string} student_name\n */\n set student_name(student_name) {\n !this.initialized ?\n this.#student_name = student_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_location\n * @return {string}\n */\n get lesson_location() {\n return this.#lesson_location;\n }\n\n /**\n * Setter for #lesson_location\n * @param {string} lesson_location\n */\n set lesson_location(lesson_location) {\n if (check12ValidFormat(lesson_location, scorm12_regex.CMIString256, true)) {\n this.#lesson_location = lesson_location;\n }\n }\n\n /**\n * Getter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_status\n * @return {string}\n */\n get lesson_status() {\n return this.#lesson_status;\n }\n\n /**\n * Setter for #lesson_status\n * @param {string} lesson_status\n */\n set lesson_status(lesson_status) {\n if (this.initialized) {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\n }\n } else {\n if (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus2)) {\n this.#lesson_status = lesson_status;\n }\n }\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Getter for #lesson_mode\n * @return {string}\n */\n get lesson_mode() {\n return this.#lesson_mode;\n }\n\n /**\n * Setter for #lesson_mode. Can only be called before initialization.\n * @param {string} lesson_mode\n */\n set lesson_mode(lesson_mode) {\n !this.initialized ? this.#lesson_mode = lesson_mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {*}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Setter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check12ValidFormat(exit, scorm12_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {*}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check12ValidFormat(session_time, scorm12_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check12ValidFormat(suspend_data, scorm12_regex.CMIString4096, true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Adds the current session time to the existing total time.\n * @param {Number} start_time\n * @return {string}\n */\n getCurrentTotalTime(start_time: Number) {\n let sessionTime = this.#session_time;\n const startTime = start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsHHMMSS(seconds / 1000);\n }\n\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n sessionTime,\n new RegExp(scorm12_regex.CMITimespan),\n );\n }\n\n /**\n * toJSON for cmi.core\n *\n * @return {\n * {\n * student_name: string,\n * entry: string,\n * exit: string,\n * score: CMIScore,\n * student_id: string,\n * lesson_mode: string,\n * lesson_location: string,\n * lesson_status: string,\n * credit: string,\n * session_time: *\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'student_id': this.student_id,\n 'student_name': this.student_name,\n 'lesson_location': this.lesson_location,\n 'credit': this.credit,\n 'lesson_status': this.lesson_status,\n 'entry': this.entry,\n 'lesson_mode': this.lesson_mode,\n 'exit': this.exit,\n 'session_time': this.session_time,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives object\n * @extends CMIArray\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives\n */\n constructor() {\n super({\n children: scorm12_constants.objectives_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_data object\n * @extends BaseCMI\n */\nexport class CMIStudentData extends BaseCMI {\n #_children;\n #mastery_score = '';\n #max_time_allowed = '';\n #time_limit_action = '';\n\n /**\n * Constructor for cmi.student_data\n * @param {string} student_data_children\n */\n constructor(student_data_children) {\n super();\n\n this.#_children = student_data_children ?\n student_data_children :\n scorm12_constants.student_data_children;\n }\n\n /**\n * Getter for #_children\n * @return {*}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #master_score\n * @return {string}\n */\n get mastery_score() {\n return this.#mastery_score;\n }\n\n /**\n * Setter for #master_score. Can only be called before initialization.\n * @param {string} mastery_score\n */\n set mastery_score(mastery_score) {\n !this.initialized ?\n this.#mastery_score = mastery_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * toJSON for cmi.student_data\n *\n * @return {\n * {\n * max_time_allowed: string,\n * time_limit_action: string,\n * mastery_score: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'mastery_score': this.mastery_score,\n 'max_time_allowed': this.max_time_allowed,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.student_preference object\n * @extends BaseCMI\n */\nexport class CMIStudentPreference extends BaseCMI {\n #_children;\n\n /**\n * Constructor for cmi.student_preference\n * @param {string} student_preference_children\n */\n constructor(student_preference_children) {\n super();\n\n this.#_children = student_preference_children ?\n student_preference_children :\n scorm12_constants.student_preference_children;\n }\n\n #audio = '';\n #language = '';\n #speed = '';\n #text = '';\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwInvalidValueError();\n }\n\n /**\n * Getter for #audio\n * @return {string}\n */\n get audio() {\n return this.#audio;\n }\n\n /**\n * Setter for #audio\n * @param {string} audio\n */\n set audio(audio) {\n if (check12ValidFormat(audio, scorm12_regex.CMISInteger) &&\n check12ValidRange(audio, scorm12_regex.audio_range)) {\n this.#audio = audio;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check12ValidFormat(language, scorm12_regex.CMIString256)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #speed\n * @return {string}\n */\n get speed() {\n return this.#speed;\n }\n\n /**\n * Setter for #speed\n * @param {string} speed\n */\n set speed(speed) {\n if (check12ValidFormat(speed, scorm12_regex.CMISInteger) &&\n check12ValidRange(speed, scorm12_regex.speed_range)) {\n this.#speed = speed;\n }\n }\n\n /**\n * Getter for #text\n * @return {string}\n */\n get text() {\n return this.#text;\n }\n\n /**\n * Setter for #text\n * @param {string} text\n */\n set text(text) {\n if (check12ValidFormat(text, scorm12_regex.CMISInteger) &&\n check12ValidRange(text, scorm12_regex.text_range)) {\n this.#text = text;\n }\n }\n\n /**\n * toJSON for cmi.student_preference\n *\n * @return {\n * {\n * audio: string,\n * language: string,\n * speed: string,\n * text: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio': this.audio,\n 'language': this.language,\n 'speed': this.speed,\n 'text': this.text,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions object\n * @extends BaseCMI\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.interactions\n */\n constructor() {\n super({\n children: scorm12_constants.interactions_children,\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n object\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\n errorClass: Scorm12ValidationError,\n children: scorm12_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n #id = '';\n #time = '';\n #type = '';\n #weighting = '';\n #student_response = '';\n #result = '';\n #latency = '';\n\n /**\n * Getter for #id. Should only be called during JSON export.\n * @return {*}\n */\n get id() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #time. Should only be called during JSON export.\n * @return {*}\n */\n get time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#time;\n }\n\n /**\n * Setter for #time\n * @param {string} time\n */\n set time(time) {\n if (check12ValidFormat(time, scorm12_regex.CMITime)) {\n this.#time = time;\n }\n }\n\n /**\n * Getter for #type. Should only be called during JSON export.\n * @return {*}\n */\n get type() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (check12ValidFormat(type, scorm12_regex.CMIType)) {\n this.#type = type;\n }\n }\n\n /**\n * Getter for #weighting. Should only be called during JSON export.\n * @return {*}\n */\n get weighting() {\n return (!this.jsonString) ?\n throwWriteOnlyError() :\n this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (check12ValidFormat(weighting, scorm12_regex.CMIDecimal) &&\n check12ValidRange(weighting, scorm12_regex.weighting_range)) {\n this.#weighting = weighting;\n }\n }\n\n /**\n * Getter for #student_response. Should only be called during JSON export.\n * @return {*}\n */\n get student_response() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#student_response;\n }\n\n /**\n * Setter for #student_response\n * @param {string} student_response\n */\n set student_response(student_response) {\n if (check12ValidFormat(student_response, scorm12_regex.CMIFeedback, true)) {\n this.#student_response = student_response;\n }\n }\n\n /**\n * Getter for #result. Should only be called during JSON export.\n * @return {*}\n */\n get result() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check12ValidFormat(result, scorm12_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency. Should only be called during JSON export.\n * @return {*}\n */\n get latency() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (check12ValidFormat(latency, scorm12_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * time: string,\n * type: string,\n * weighting: string,\n * student_response: string,\n * result: string,\n * latency: string,\n * objectives: CMIArray,\n * correct_responses: CMIArray\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'time': this.time,\n 'type': this.type,\n 'weighting': this.weighting,\n 'student_response': this.student_response,\n 'result': this.result,\n 'latency': this.latency,\n 'objectives': this.objectives,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new CMIScore(\n {\n score_children: scorm12_constants.score_children,\n score_range: scorm12_regex.score_range,\n invalidErrorCode: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\n errorClass: Scorm12ValidationError,\n });\n }\n\n #id = '';\n #status = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #status\n * @return {\"\"}\n */\n get status() {\n return this.#status;\n }\n\n /**\n * Setter for #status\n * @param {string} status\n */\n set status(status) {\n if (check12ValidFormat(status, scorm12_regex.CMIStatus2)) {\n this.#status = status;\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n * @return {\n * {\n * id: string,\n * status: string,\n * score: CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'status': this.status,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.n.objectives.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n #id = '';\n\n /**\n * Getter for #id\n * @return {\"\"}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check12ValidFormat(id, scorm12_regex.CMIIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 1.2's cmi.interactions.correct_responses.n object\n * @extends BaseCMI\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n /**\n * Constructor for cmi.interactions.correct_responses.n\n */\n constructor() {\n super();\n }\n\n #pattern = '';\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check12ValidFormat(pattern, scorm12_regex.CMIFeedback, true)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON for cmi.interactions.correct_responses.n\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for AICC Navigation object\n */\nexport class NAV extends BaseCMI {\n /**\n * Constructor for NAV object\n */\n constructor() {\n super();\n }\n\n #event = '';\n\n /**\n * Getter for #event\n * @return {string}\n */\n get event() {\n return this.#event;\n }\n\n /**\n * Setter for #event\n * @param {string} event\n */\n set event(event) {\n if (check12ValidFormat(event, scorm12_regex.NAVEvent)) {\n this.#event = event;\n }\n }\n\n /**\n * toJSON for nav object\n * @return {\n * {\n * event: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'event': this.event,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm12API from '../Scorm12API';\n\nwindow.Scorm12API = Scorm12API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","CMI","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","NAV","Utilities","scorm12_constants","Scorm12API","finalSettings","mastery_override","nav","LMSInitialize","lmsInitialize","LMSFinish","lmsFinish","LMSGetValue","lmsGetValue","LMSSetValue","lmsSetValue","LMSCommit","lmsCommit","LMSGetLastError","lmsGetLastError","LMSGetErrorString","lmsGetErrorString","LMSGetDiagnostic","lmsGetDiagnostic","terminate","event","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","core","total_time","getCurrentTotalTime","flattened","flatten","originalStatus","lesson_status","lesson_mode","credit","student_data","mastery_score","score","raw","parseFloat","renderCommitCMI","processHttpRequest","Regex","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","formatRegex","RegExp","matches","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","TYPE_MISMATCH","VALUE_OUT_OF_RANGE","CMIDecimal","_children","jsonString","children","_count","Scorm12ValidationError","Util","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidFormat","check12ValidRange","cmi_children","CMICore","objectives","CMIObjectives","CMIStudentData","student_preference","CMIStudentPreference","interactions","CMIInteractions","suspend_data","launch_data","comments","comments_from_lms","_version","CMIString4096","start_time","core_children","student_id","student_name","lesson_location","CMIString256","CMIStatus","CMIStatus2","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","student_data_children","max_time_allowed","time_limit_action","student_preference_children","audio","CMISInteger","audio_range","language","speed","speed_range","text","text_range","interactions_children","correct_responses","correct_responses_children","id","CMIIdentifier","CMITime","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","pattern","NAVEvent","LOG_LEVEL_NONE","comments_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_SET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","DEPENDENCY_NOT_ESTABLISHED","MULTIPLE_TERMINATIONS","CMIInteger","CMIIndex","CMIString200","CMIString250","CMIString1000","CMIString4000","CMIString64000","CMILang","CMILangString250","CMILangcr","CMILangString250cr","CMILangString4000","CMIShortIdentifier","CMILongIdentifier","CMIIndexStore","CMICStatus","CMISStatus","NAVBoolean","NAVTarget","scaled_range","progress_range","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","AICCValidationError","Scorm2004ValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","parts","getDurationAsSeconds","durationRegex","exec","years","months","days","addTwoDurations","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"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,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 diff --git a/dist/scorm12.min.js b/dist/scorm12.min.js index 866a56d..4f5868b 100644 --- a/dist/scorm12.min.js +++ b/dist/scorm12.min.js @@ -4,16 +4,16 @@ \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _(){return d.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,f="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,d=t||f||Function("return this")(),h=Object.prototype.toString,b=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&h.call(e)==i;var t}function v(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=c.test(e);return t||l.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(f,r,e){var n,i,o,a,s,c,l=0,d=!1,u=!1,t=!0;if("function"!=typeof f)throw new TypeError("Expected a function");function h(e){var t=n,r=i;return n=i=void 0,l=e,a=f.apply(r,t)}function m(e){var t=e-c;return void 0===c||r<=t||t<0||u&&o<=e-l}function p(){var e,t=_();if(m(t))return y(t);s=setTimeout(p,(e=r-((t=t)-c),u?M(e,o-(t-l)):e))}function y(e){return s=void 0,t&&n?h(e):(n=i=void 0,a)}function g(){var e=_(),t=m(e);if(n=arguments,i=this,c=e,t){if(void 0===s)return l=e=c,s=setTimeout(p,r),d?h(e):a;if(u)return s=setTimeout(p,r),h(c)}return void 0===s&&(s=setTimeout(p,r)),a}return r=v(r)||0,E(e)&&(d=!!e.leading,u="maxWait"in e,o=u?b(v(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),g.cancel=function(){void 0!==s&&clearTimeout(s),n=c=i=s=void(l=0)},g.flush=function(){return void 0===s?a:y(_())},g}},"./src/BaseAPI.js": /*!************************!*\ !*** ./src/BaseAPI.js ***! - \************************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return T}});var p=t(/*! ./cmi/common */"./src/cmi/common.js"),c=t(/*! ./exceptions */"./src/exceptions.js"),e=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),l=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),u=t(/*! ./utilities */"./src/utilities.js"),f=t(/*! lodash.debounce */"./node_modules/lodash.debounce/index.js"),y=t.n(f);function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o=[],a=!0,s=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return _(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;o=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed"):"browse"===this.cmi.core.lesson_mode&&""===((null===(i=this.startingData)||void 0===i||null===(r=i.cmi)||void 0===r||null===(n=r.core)||void 0===n?void 0:n.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed"));var t,r,n,i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.apiLogLevel===u.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?this.processHttpRequest(this.settings.lmsCommitUrl,i,e):u.SCORM_TRUE}}])&&d(t.prototype,e),r&&d(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": /*!***************************!*\ !*** ./src/cmi/common.js ***! - \***************************/function(r,n,e){"use strict";e.r(n),e.d(n,{checkValidFormat:function(){return O},checkValidRange:function(){return I},BaseCMI:function(){return L},CMIScore:function(){return D},CMIArray:function(){return x}});var n=e(/*! ../constants/api_constants */"./src/constants/api_constants.js"),i=e(/*! ../constants/error_codes */"./src/constants/error_codes.js"),e=e(/*! ../constants/regex */"./src/constants/regex.js");function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s(e,t)}function s(e,t){return(s=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(r){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}();return function(){var e,t=l(r),t=(e=n?(e=l(this).constructor,Reflect.construct(t,arguments,e)):t.apply(this,arguments),this);if(e&&("object"===o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return f(t)}}function f(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function l(e){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,L=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,d(this,C,{writable:!0,value:!1}),d(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return v(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){h(this,C,!0)}},{key:"setStartTime",value:function(){h(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,A=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,j=new WeakMap,N=new WeakMap,k=new WeakMap,D=function(){a(u,L);var l=c(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return E(this,u),d(f(t=l.call(this)),R,{writable:!0,value:void 0}),d(f(t),m,{writable:!0,value:void 0}),d(f(t),A,{writable:!0,value:void 0}),d(f(t),p,{writable:!0,value:void 0}),d(f(t),y,{writable:!0,value:void 0}),d(f(t),g,{writable:!0,value:void 0}),d(f(t),_,{writable:!0,value:void 0}),d(f(t),j,{writable:!0,value:""}),d(f(t),N,{writable:!0,value:""}),d(f(t),k,{writable:!0,value:void 0}),h(f(t),R,r||M.score_children),h(f(t),m,!!n&&w.score_range),h(f(t),k,i||""===i?i:"100"),h(f(t),A,o||S.INVALID_SET_VALUE),h(f(t),p,a||S.TYPE_MISMATCH),h(f(t),y,s||S.VALUE_OUT_OF_RANGE),h(f(t),g,c||w.CMIDecimal),h(f(t),_,e),t}return v(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,A))}},{key:"raw",get:function(){return t(this,j)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,j,e)}},{key:"min",get:function(){return t(this,N)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,N,e)}},{key:"max",get:function(){return t(this,k)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,k,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),V=new WeakMap,P=new WeakMap,F=new WeakMap,x=function(){a(o,L);var i=c(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),d(f(t=i.call(this)),V,{writable:!0,value:void 0}),d(f(t),P,{writable:!0,value:void 0}),d(f(t),F,{writable:!0,value:void 0}),h(f(t),F,r),h(f(t),V,n),h(f(t),P,e),t.childArray=[],t}return v(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=t[0]){if("*"===t[1]||e<=t[1])return!0;throw new n.prototype.constructor(r)}throw new n.prototype.constructor(r)}var C=new WeakMap,T=new WeakMap,L=function(){function n(){var e,t,r;if(E(this,n),r=!(t="jsonString"),t in(e=this)?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,d(this,C,{writable:!0,value:!1}),d(this,T,{writable:!0,value:void 0}),(this instanceof n?this.constructor:void 0)===n)throw new TypeError("Cannot construct BaseCMI instances directly")}return v(n,[{key:"initialized",get:function(){return t(this,C)}},{key:"start_time",get:function(){return t(this,T)}},{key:"initialize",value:function(){h(this,C,!0)}},{key:"setStartTime",value:function(){h(this,T,(new Date).getTime())}}]),n}(),R=new WeakMap,m=new WeakMap,j=new WeakMap,p=new WeakMap,y=new WeakMap,g=new WeakMap,_=new WeakMap,A=new WeakMap,N=new WeakMap,k=new WeakMap,D=function(){a(u,L);var l=c(u);function u(e){var t,r=e.score_children,n=e.score_range,i=e.max,o=e.invalidErrorCode,a=e.invalidTypeCode,s=e.invalidRangeCode,c=e.decimalRegex,e=e.errorClass;return E(this,u),d(f(t=l.call(this)),R,{writable:!0,value:void 0}),d(f(t),m,{writable:!0,value:void 0}),d(f(t),j,{writable:!0,value:void 0}),d(f(t),p,{writable:!0,value:void 0}),d(f(t),y,{writable:!0,value:void 0}),d(f(t),g,{writable:!0,value:void 0}),d(f(t),_,{writable:!0,value:void 0}),d(f(t),A,{writable:!0,value:""}),d(f(t),N,{writable:!0,value:""}),d(f(t),k,{writable:!0,value:void 0}),h(f(t),R,r||M.score_children),h(f(t),m,!!n&&w.score_range),h(f(t),k,i||""===i?i:"100"),h(f(t),j,o||S.INVALID_SET_VALUE),h(f(t),p,a||S.TYPE_MISMATCH),h(f(t),y,s||S.VALUE_OUT_OF_RANGE),h(f(t),g,c||w.CMIDecimal),h(f(t),_,e),t}return v(u,[{key:"_children",get:function(){return t(this,R)},set:function(e){throw new(t(this,_).prototype.constructor)(t(this,j))}},{key:"raw",get:function(){return t(this,A)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,A,e)}},{key:"min",get:function(){return t(this,N)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,N,e)}},{key:"max",get:function(){return t(this,k)},set:function(e){!O(e,t(this,g),t(this,p),t(this,_))||t(this,m)&&!I(e,t(this,m),t(this,y),t(this,_))||h(this,k,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),u}(),V=new WeakMap,P=new WeakMap,F=new WeakMap,x=function(){a(o,L);var i=c(o);function o(e){var t,r=e.children,n=e.errorCode,e=e.errorClass;return E(this,o),d(f(t=i.call(this)),V,{writable:!0,value:void 0}),d(f(t),P,{writable:!0,value:void 0}),d(f(t),F,{writable:!0,value:void 0}),h(f(t),F,r),h(f(t),V,n),h(f(t),P,e),t.childArray=[],t}return v(o,[{key:"_children",get:function(){return t(this,F)},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new(t(this,P).prototype.constructor)(t(this,V))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","// @flow\nimport {CMIArray} from './cmi/common';\nimport {ValidationError} from './exceptions';\nimport ErrorCodes from './constants/error_codes';\nimport APIConstants from './constants/api_constants';\nimport {unflatten} from './utilities';\nimport debounce from 'lodash.debounce';\n\nconst global_constants = APIConstants.global;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Base API class for AICC, SCORM 1.2, and SCORM 2004. Should be considered\n * abstract, and never initialized on it's own.\n */\nexport default class BaseAPI {\n #timeout;\n #error_codes;\n #settings = {\n autocommit: false,\n autocommitSeconds: 10,\n asyncCommit: false,\n sendBeaconCommit: false,\n lmsCommitUrl: false,\n dataCommitFormat: 'json', // valid formats are 'json' or 'flattened', 'params'\n commitRequestDataType: 'application/json;charset=UTF-8',\n autoProgress: false,\n logLevel: global_constants.LOG_LEVEL_ERROR,\n selfReportSessionTime: false,\n alwaysSendTotalTime: false,\n strict_errors: true,\n xhrHeaders: {},\n xhrWithCredentials: false,\n responseHandler: function(xhr) {\n let result;\n if (typeof xhr !== 'undefined') {\n result = JSON.parse(xhr.responseText);\n if (result === null || !{}.hasOwnProperty.call(result, 'result')) {\n result = {};\n if (xhr.status === 200) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n }\n }\n return result;\n },\n requestHandler: function(commitObject) {\n return commitObject;\n },\n onLogMessage: function(messageLevel, logMessage) {\n switch (messageLevel) {\n case global_constants.LOG_LEVEL_ERROR:\n console.error(logMessage);\n break;\n case global_constants.LOG_LEVEL_WARNING:\n console.warn(logMessage);\n break;\n case global_constants.LOG_LEVEL_INFO:\n console.info(logMessage);\n break;\n case global_constants.LOG_LEVEL_DEBUG:\n if (console.debug) {\n console.debug(logMessage);\n } else {\n console.log(logMessage);\n }\n break;\n }\n },\n };\n cmi;\n startingData: {};\n\n /**\n * Constructor for Base API class. Sets some shared API fields, as well as\n * sets up options for the API.\n * @param {object} error_codes\n * @param {object} settings\n */\n constructor(error_codes, settings) {\n if (new.target === BaseAPI) {\n throw new TypeError('Cannot construct BaseAPI instances directly');\n }\n this.currentState = global_constants.STATE_NOT_INITIALIZED;\n this.lastErrorCode = 0;\n this.listenerArray = [];\n\n this.#timeout = null;\n this.#error_codes = error_codes;\n\n this.settings = settings;\n this.apiLogLevel = this.settings.logLevel;\n this.selfReportSessionTime = this.settings.selfReportSessionTime;\n }\n\n /**\n * Initialize the API\n * @param {string} callbackName\n * @param {string} initializeMessage\n * @param {string} terminationMessage\n * @return {string}\n */\n initialize(\n callbackName: String,\n initializeMessage?: String,\n terminationMessage?: String) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.isInitialized()) {\n this.throwSCORMError(this.#error_codes.INITIALIZED, initializeMessage);\n } else if (this.isTerminated()) {\n this.throwSCORMError(this.#error_codes.TERMINATED, terminationMessage);\n } else {\n if (this.selfReportSessionTime) {\n this.cmi.setStartTime();\n }\n\n this.currentState = global_constants.STATE_INITIALIZED;\n this.lastErrorCode = 0;\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Getter for #error_codes\n * @return {object}\n */\n get error_codes() {\n return this.#error_codes;\n }\n\n /**\n * Getter for #settings\n * @return {object}\n */\n get settings() {\n return this.#settings;\n }\n\n /**\n * Setter for #settings\n * @param {object} settings\n */\n set settings(settings: Object) {\n this.#settings = {...this.#settings, ...settings};\n }\n\n /**\n * Terminates the current run of the API\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n terminate(\n callbackName: String,\n checkTerminated: boolean) {\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.TERMINATION_BEFORE_INIT,\n this.#error_codes.MULTIPLE_TERMINATION)) {\n this.currentState = global_constants.STATE_TERMINATED;\n\n const result = this.storeData(true);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n typeof result.errorCode !== 'undefined' && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n returnValue = global_constants.SCORM_TRUE;\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Get the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @return {string}\n */\n getValue(\n callbackName: String,\n checkTerminated: boolean,\n CMIElement: String) {\n let returnValue;\n\n if (this.checkState(checkTerminated,\n this.#error_codes.RETRIEVE_BEFORE_INIT,\n this.#error_codes.RETRIEVE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.getCMIValue(CMIElement);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement);\n }\n\n this.apiLog(callbackName, CMIElement, ': returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Sets the value of the CMIElement.\n *\n * @param {string} callbackName\n * @param {string} commitCallback\n * @param {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: String,\n commitCallback: String,\n checkTerminated: boolean,\n CMIElement,\n value) {\n if (value !== undefined) {\n value = String(value);\n }\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.STORE_BEFORE_INIT,\n this.#error_codes.STORE_AFTER_TERM)) {\n if (checkTerminated) this.lastErrorCode = 0;\n try {\n returnValue = this.setCMIValue(CMIElement, value);\n } catch (e) {\n if (e instanceof ValidationError) {\n this.lastErrorCode = e.errorCode;\n returnValue = global_constants.SCORM_FALSE;\n } else {\n if (e.message) {\n console.error(e.message);\n } else {\n console.error(e);\n }\n this.throwSCORMError(this.#error_codes.GENERAL);\n }\n }\n this.processListeners(callbackName, CMIElement, value);\n }\n\n if (returnValue === undefined) {\n returnValue = global_constants.SCORM_FALSE;\n }\n\n // If we didn't have any errors while setting the data, go ahead and\n // schedule a commit, if autocommit is turned on\n if (String(this.lastErrorCode) === '0') {\n if (this.settings.autocommit && !this.#timeout) {\n this.scheduleCommit(this.settings.autocommitSeconds * 1000, commitCallback);\n }\n }\n\n this.apiLog(callbackName, CMIElement,\n ': ' + value + ': result: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Orders LMS to store all content parameters\n * @param {string} callbackName\n * @param {boolean} checkTerminated\n * @return {string}\n */\n commit(\n callbackName: String,\n checkTerminated: boolean) {\n this.clearScheduledCommit();\n\n let returnValue = global_constants.SCORM_FALSE;\n\n if (this.checkState(checkTerminated, this.#error_codes.COMMIT_BEFORE_INIT,\n this.#error_codes.COMMIT_AFTER_TERM)) {\n const result = this.storeData(false);\n if (!this.settings.sendBeaconCommit && !this.settings.asyncCommit &&\n result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = (typeof result !== 'undefined' && result.result) ?\n result.result : global_constants.SCORM_FALSE;\n\n this.apiLog(callbackName, 'HttpRequest', ' Result: ' + returnValue,\n global_constants.LOG_LEVEL_DEBUG);\n\n if (checkTerminated) this.lastErrorCode = 0;\n\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n this.clearSCORMError(returnValue);\n\n return returnValue;\n }\n\n /**\n * Returns last error code\n * @param {string} callbackName\n * @return {string}\n */\n getLastError(callbackName: String) {\n const returnValue = String(this.lastErrorCode);\n\n this.processListeners(callbackName);\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getErrorString(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {string} callbackName\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n getDiagnostic(callbackName: String, CMIErrorCode) {\n let returnValue = '';\n\n if (CMIErrorCode !== null && CMIErrorCode !== '') {\n returnValue = this.getLmsErrorMessageDetails(CMIErrorCode, true);\n this.processListeners(callbackName);\n }\n\n this.apiLog(callbackName, null, 'returned: ' + returnValue,\n global_constants.LOG_LEVEL_INFO);\n\n return returnValue;\n }\n\n /**\n * Checks the LMS state and ensures it has been initialized.\n *\n * @param {boolean} checkTerminated\n * @param {number} beforeInitError\n * @param {number} afterTermError\n * @return {boolean}\n */\n checkState(\n checkTerminated: boolean,\n beforeInitError: number,\n afterTermError?: number) {\n if (this.isNotInitialized()) {\n this.throwSCORMError(beforeInitError);\n return false;\n } else if (checkTerminated && this.isTerminated()) {\n this.throwSCORMError(afterTermError);\n return false;\n }\n\n return true;\n }\n\n /**\n * Logging for all SCORM actions\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} logMessage\n * @param {number}messageLevel\n */\n apiLog(\n functionName: String,\n CMIElement: String,\n logMessage: String,\n messageLevel: number) {\n logMessage = this.formatMessage(functionName, CMIElement, logMessage);\n\n if (messageLevel >= this.apiLogLevel) {\n this.settings.onLogMessage(messageLevel, logMessage);\n }\n }\n\n /**\n * Formats the SCORM messages for easy reading\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {string} message\n * @return {string}\n */\n formatMessage(functionName: String, CMIElement: String, message: String) {\n const baseLength = 20;\n let messageString = '';\n\n messageString += functionName;\n\n let fillChars = baseLength - messageString.length;\n\n for (let i = 0; i < fillChars; i++) {\n messageString += ' ';\n }\n\n messageString += ': ';\n\n if (CMIElement) {\n const CMIElementBaseLength = 70;\n\n messageString += CMIElement;\n\n fillChars = CMIElementBaseLength - messageString.length;\n\n for (let j = 0; j < fillChars; j++) {\n messageString += ' ';\n }\n }\n\n if (message) {\n messageString += message;\n }\n\n return messageString;\n }\n\n /**\n * Checks to see if {str} contains {tester}\n *\n * @param {string} str String to check against\n * @param {string} tester String to check for\n * @return {boolean}\n */\n stringMatches(str: String, tester: String) {\n return str && tester && str.match(tester);\n }\n\n /**\n * Check to see if the specific object has the given property\n * @param {*} refObject\n * @param {string} attribute\n * @return {boolean}\n * @private\n */\n _checkObjectHasProperty(refObject, attribute: String) {\n return Object.hasOwnProperty.call(refObject, attribute) ||\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(refObject), attribute) ||\n (attribute in refObject);\n }\n\n /**\n * Returns the message that corresponds to errorNumber\n * APIs that inherit BaseAPI should override this function\n *\n * @param {(string|number)} _errorNumber\n * @param {boolean} _detail\n * @return {string}\n * @abstract\n */\n getLmsErrorMessageDetails(_errorNumber, _detail) {\n throw new Error(\n 'The getLmsErrorMessageDetails method has not been implemented');\n }\n\n /**\n * Gets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @return {string}\n * @abstract\n */\n getCMIValue(_CMIElement) {\n throw new Error('The getCMIValue method has not been implemented');\n }\n\n /**\n * Sets the value for the specific element.\n * APIs that inherit BaseAPI should override this function\n *\n * @param {string} _CMIElement\n * @param {any} _value\n * @return {string}\n * @abstract\n */\n setCMIValue(_CMIElement, _value) {\n throw new Error('The setCMIValue method has not been implemented');\n }\n\n /**\n * Shared API method to set a valid for a given element.\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n _commonSetCMIValue(\n methodName: String, scorm2004: boolean, CMIElement, value) {\n if (!CMIElement || CMIElement === '') {\n return global_constants.SCORM_FALSE;\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let returnValue = global_constants.SCORM_FALSE;\n let foundFirstIndex = false;\n\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n const attribute = structure[i];\n\n if (i === structure.length - 1) {\n if (scorm2004 && (attribute.substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n this.throwSCORMError(this.#error_codes.READ_ONLY_ELEMENT);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (this.isInitialized() &&\n this.stringMatches(CMIElement, '\\\\.correct_responses\\\\.\\\\d+')) {\n this.validateCorrectResponse(CMIElement, value);\n }\n\n if (!scorm2004 || this.lastErrorCode === 0) {\n refObject[attribute] = value;\n returnValue = global_constants.SCORM_TRUE;\n }\n }\n } else {\n refObject = refObject[attribute];\n if (!refObject) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n foundFirstIndex = true;\n } else {\n const newChild = this.getChildElement(CMIElement, value,\n foundFirstIndex);\n foundFirstIndex = true;\n\n if (!newChild) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n } else {\n if (refObject.initialized) newChild.initialize();\n\n refObject.childArray.push(newChild);\n refObject = newChild;\n }\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n }\n\n if (returnValue === global_constants.SCORM_FALSE) {\n this.apiLog(methodName, null,\n `There was an error setting the value for: ${CMIElement}, value of: ${value}`,\n global_constants.LOG_LEVEL_WARNING);\n }\n\n return returnValue;\n }\n\n /**\n * Abstract method for validating that a response is correct.\n *\n * @param {string} _CMIElement\n * @param {*} _value\n */\n validateCorrectResponse(_CMIElement, _value) {\n // just a stub method\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n * APIs that inherit BaseAPI should override this method.\n *\n * @param {string} _CMIElement - unused\n * @param {*} _value - unused\n * @param {boolean} _foundFirstIndex - unused\n * @return {*}\n * @abstract\n */\n getChildElement(_CMIElement, _value, _foundFirstIndex) {\n throw new Error('The getChildElement method has not been implemented');\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} methodName\n * @param {boolean} scorm2004\n * @param {string} CMIElement\n * @return {*}\n */\n _commonGetCMIValue(methodName: String, scorm2004: boolean, CMIElement) {\n if (!CMIElement || CMIElement === '') {\n return '';\n }\n\n const structure = CMIElement.split('.');\n let refObject = this;\n let attribute = null;\n\n const uninitializedErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) has not been initialized.`;\n const invalidErrorMessage = `The data model element passed to ${methodName} (${CMIElement}) is not a valid SCORM data model element.`;\n const invalidErrorCode = scorm2004 ?\n this.#error_codes.UNDEFINED_DATA_MODEL :\n this.#error_codes.GENERAL;\n\n for (let i = 0; i < structure.length; i++) {\n attribute = structure[i];\n\n if (!scorm2004) {\n if (i === structure.length - 1) {\n if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n } else {\n if ((String(attribute).substr(0, 8) === '{target=') &&\n (typeof refObject._isTargetValid == 'function')) {\n const target = String(attribute).substr(8, String(attribute).length - 9);\n return refObject._isTargetValid(target);\n } else if (!this._checkObjectHasProperty(refObject, attribute)) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n return;\n }\n }\n\n refObject = refObject[attribute];\n if (refObject === undefined) {\n this.throwSCORMError(invalidErrorCode, invalidErrorMessage);\n break;\n }\n\n if (refObject instanceof CMIArray) {\n const index = parseInt(structure[i + 1], 10);\n\n // SCO is trying to set an item on an array\n if (!isNaN(index)) {\n const item = refObject.childArray[index];\n\n if (item) {\n refObject = item;\n } else {\n this.throwSCORMError(this.#error_codes.VALUE_NOT_INITIALIZED,\n uninitializedErrorMessage);\n break;\n }\n\n // Have to update i value to skip the array position\n i++;\n }\n }\n }\n\n if (refObject === null || refObject === undefined) {\n if (!scorm2004) {\n if (attribute === '_children') {\n this.throwSCORMError(scorm12_error_codes.CHILDREN_ERROR);\n } else if (attribute === '_count') {\n this.throwSCORMError(scorm12_error_codes.COUNT_ERROR);\n }\n }\n } else {\n return refObject;\n }\n }\n\n /**\n * Returns true if the API's current state is STATE_INITIALIZED\n *\n * @return {boolean}\n */\n isInitialized() {\n return this.currentState === global_constants.STATE_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_NOT_INITIALIZED\n *\n * @return {boolean}\n */\n isNotInitialized() {\n return this.currentState === global_constants.STATE_NOT_INITIALIZED;\n }\n\n /**\n * Returns true if the API's current state is STATE_TERMINATED\n *\n * @return {boolean}\n */\n isTerminated() {\n return this.currentState === global_constants.STATE_TERMINATED;\n }\n\n /**\n * Provides a mechanism for attaching to a specific SCORM event\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n on(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray.push({\n functionName: functionName,\n CMIElement: CMIElement,\n callback: callback,\n });\n\n this.apiLog('on', functionName, `Added event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n\n /**\n * Provides a mechanism for detaching a specific SCORM event listener\n *\n * @param {string} listenerName\n * @param {function} callback\n */\n off(listenerName: String, callback: function) {\n if (!callback) return;\n\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n const removeIndex = this.listenerArray.findIndex((obj) =>\n obj.functionName === functionName &&\n obj.CMIElement === CMIElement &&\n obj.callback === callback,\n );\n if (removeIndex !== -1) {\n this.listenerArray.splice(removeIndex, 1);\n this.apiLog('off', functionName, `Removed event listener: ${this.listenerArray.length}`, global_constants.LOG_LEVEL_INFO);\n }\n }\n }\n\n /**\n * Provides a mechanism for clearing all listeners from a specific SCORM event\n *\n * @param {string} listenerName\n */\n clear(listenerName: String) {\n const listenerFunctions = listenerName.split(' ');\n for (let i = 0; i < listenerFunctions.length; i++) {\n const listenerSplit = listenerFunctions[i].split('.');\n if (listenerSplit.length === 0) return;\n\n const functionName = listenerSplit[0];\n\n let CMIElement = null;\n if (listenerSplit.length > 1) {\n CMIElement = listenerName.replace(functionName + '.', '');\n }\n\n this.listenerArray = this.listenerArray.filter((obj) =>\n obj.functionName !== functionName &&\n obj.CMIElement !== CMIElement,\n );\n }\n }\n\n /**\n * Processes any 'on' listeners that have been created\n *\n * @param {string} functionName\n * @param {string} CMIElement\n * @param {*} value\n */\n processListeners(functionName: String, CMIElement: String, value: any) {\n this.apiLog(functionName, CMIElement, value);\n for (let i = 0; i < this.listenerArray.length; i++) {\n const listener = this.listenerArray[i];\n const functionsMatch = listener.functionName === functionName;\n const listenerHasCMIElement = !!listener.CMIElement;\n let CMIElementsMatch = false;\n if (CMIElement && listener.CMIElement &&\n listener.CMIElement.substring(listener.CMIElement.length - 1) ===\n '*') {\n CMIElementsMatch = CMIElement.indexOf(listener.CMIElement.substring(0,\n listener.CMIElement.length - 1)) === 0;\n } else {\n CMIElementsMatch = listener.CMIElement === CMIElement;\n }\n\n if (functionsMatch && (!listenerHasCMIElement || CMIElementsMatch)) {\n listener.callback(CMIElement, value);\n }\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} errorNumber\n * @param {string} message\n */\n throwSCORMError(errorNumber: number, message: String) {\n if (!message) {\n message = this.getLmsErrorMessageDetails(errorNumber);\n }\n\n this.apiLog('throwSCORMError', null, errorNumber + ': ' + message,\n global_constants.LOG_LEVEL_ERROR);\n\n this.lastErrorCode = String(errorNumber);\n }\n\n /**\n * Clears the last SCORM error code on success.\n *\n * @param {string} success\n */\n clearSCORMError(success: String) {\n if (success !== undefined && success !== global_constants.SCORM_FALSE) {\n this.lastErrorCode = 0;\n }\n }\n\n /**\n * Attempts to store the data to the LMS, logs data if no LMS configured\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _calculateTotalTime\n * @return {string}\n * @abstract\n */\n storeData(_calculateTotalTime) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Load the CMI from a flattened JSON object\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromFlattenedJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromFlattenedJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n /**\n * Test match pattern.\n *\n * @param {string} a\n * @param {string} c\n * @param {RegExp} a_pattern\n * @return {number}\n */\n function testPattern(a, c, a_pattern) {\n const a_match = a.match(a_pattern);\n\n let c_match;\n if (a_match !== null && (c_match = c.match(a_pattern)) !== null) {\n const a_num = Number(a_match[2]);\n const c_num = Number(c_match[2]);\n if (a_num === c_num) {\n if (a_match[3] === 'id') {\n return -1;\n } else if (a_match[3] === 'type') {\n if (c_match[3] === 'id') {\n return 1;\n } else {\n return -1;\n }\n } else {\n return 1;\n }\n }\n return a_num - c_num;\n }\n\n return null;\n }\n\n const int_pattern = /^(cmi\\.interactions\\.)(\\d+)\\.(.*)$/;\n const obj_pattern = /^(cmi\\.objectives\\.)(\\d+)\\.(.*)$/;\n\n const result = Object.keys(json).map(function(key) {\n return [String(key), json[key]];\n });\n\n // CMI interactions need to have id and type loaded before any other fields\n result.sort(function([a, b], [c, d]) {\n let test;\n if ((test = testPattern(a, c, int_pattern)) !== null) {\n return test;\n }\n if ((test = testPattern(a, c, obj_pattern)) !== null) {\n return test;\n }\n\n if (a < c) {\n return -1;\n }\n if (a > c) {\n return 1;\n }\n return 0;\n });\n\n let obj;\n result.forEach((element) => {\n obj = {};\n obj[element[0]] = element[1];\n this.loadFromJSON(unflatten(obj), CMIElement);\n });\n }\n\n /**\n * Loads CMI data from a JSON object.\n *\n * @param {object} json\n * @param {string} CMIElement\n */\n loadFromJSON(json, CMIElement) {\n if (!this.isNotInitialized()) {\n console.error(\n 'loadFromJSON can only be called before the call to lmsInitialize.');\n return;\n }\n\n CMIElement = CMIElement !== undefined ? CMIElement : 'cmi';\n\n this.startingData = json;\n\n // could this be refactored down to flatten(json) then setCMIValue on each?\n for (const key in json) {\n if ({}.hasOwnProperty.call(json, key) && json[key]) {\n const currentCMIElement = (CMIElement ? CMIElement + '.' : '') + key;\n const value = json[key];\n\n if (value['childArray']) {\n for (let i = 0; i < value['childArray'].length; i++) {\n this.loadFromJSON(value['childArray'][i],\n currentCMIElement + '.' + i);\n }\n } else if (value.constructor === Object) {\n this.loadFromJSON(value, currentCMIElement);\n } else {\n this.setCMIValue(currentCMIElement, value);\n }\n }\n }\n }\n\n /**\n * Render the CMI object to JSON for sending to an LMS.\n *\n * @return {string}\n */\n renderCMIToJSONString() {\n const cmi = this.cmi;\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.stringify({cmi});\n }\n\n /**\n * Returns a JS object representing the current cmi\n * @return {object}\n */\n renderCMIToJSONObject() {\n // Do we want/need to return fields that have no set value?\n // return JSON.stringify({ cmi }, (k, v) => v === undefined ? null : v, 2);\n return JSON.parse(this.renderCMIToJSONString());\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n * APIs that inherit BaseAPI should override this function\n *\n * @param {boolean} _terminateCommit\n * @return {*}\n * @abstract\n */\n renderCommitCMI(_terminateCommit) {\n throw new Error(\n 'The storeData method has not been implemented');\n }\n\n /**\n * Send the request to the LMS\n * @param {string} url\n * @param {object|Array} params\n * @param {boolean} immediate\n * @return {object}\n */\n processHttpRequest(url: String, params, immediate = false) {\n const api = this;\n const process = function(url, params, settings, error_codes) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': error_codes.GENERAL,\n };\n\n let result;\n if (!settings.sendBeaconCommit) {\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, settings.asyncCommit);\n\n if (Object.keys(settings.xhrHeaders).length) {\n Object.keys(settings.xhrHeaders).forEach((header) => {\n httpReq.setRequestHeader(header, settings.xhrHeaders[header]);\n });\n }\n\n httpReq.withCredentials = settings.xhrWithCredentials;\n\n if (settings.asyncCommit) {\n httpReq.onload = function(e) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n };\n }\n try {\n params = settings.requestHandler(params);\n if (params instanceof Array) {\n httpReq.setRequestHeader('Content-Type',\n 'application/x-www-form-urlencoded');\n httpReq.send(params.join('&'));\n } else {\n httpReq.setRequestHeader('Content-Type',\n settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n\n if (!settings.asyncCommit) {\n if (typeof settings.responseHandler === 'function') {\n result = settings.responseHandler(httpReq);\n } else {\n result = JSON.parse(httpReq.responseText);\n }\n } else {\n result = {};\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n api.processListeners('CommitSuccess');\n return result;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n } else {\n try {\n const headers = {\n type: settings.commitRequestDataType,\n };\n let blob;\n if (params instanceof Array) {\n blob = new Blob([params.join('&')], headers);\n } else {\n blob = new Blob([JSON.stringify(params)], headers);\n }\n\n result = {};\n if (navigator.sendBeacon(url, blob)) {\n result.result = global_constants.SCORM_TRUE;\n result.errorCode = 0;\n } else {\n result.result = global_constants.SCORM_FALSE;\n result.errorCode = 101;\n }\n } catch (e) {\n console.error(e);\n api.processListeners('CommitError');\n return genericError;\n }\n }\n\n if (typeof result === 'undefined') {\n api.processListeners('CommitError');\n return genericError;\n }\n\n if (result.result === true ||\n result.result === global_constants.SCORM_TRUE) {\n api.processListeners('CommitSuccess');\n } else {\n api.processListeners('CommitError');\n }\n\n return result;\n };\n\n if (typeof debounce !== 'undefined') {\n const debounced = debounce(process, 500);\n debounced(url, params, this.settings, this.error_codes);\n\n // if we're terminating, go ahead and commit immediately\n if (immediate) {\n debounced.flush();\n }\n\n return {\n result: global_constants.SCORM_TRUE,\n errorCode: 0,\n };\n } else {\n return process(url, params, this.settings, this.error_codes);\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n * @param {string} callback - the name of the commit event callback\n */\n scheduleCommit(when: number, callback: string) {\n this.#timeout = new ScheduledCommit(this, when, callback);\n this.apiLog('scheduleCommit', '', 'scheduled',\n global_constants.LOG_LEVEL_DEBUG);\n }\n\n /**\n * Clears and cancels any currently scheduled commits\n */\n clearScheduledCommit() {\n if (this.#timeout) {\n this.#timeout.cancel();\n this.#timeout = null;\n this.apiLog('clearScheduledCommit', '', 'cleared',\n global_constants.LOG_LEVEL_DEBUG);\n }\n }\n}\n\n/**\n * Private class that wraps a timeout call to the commit() function\n */\nclass ScheduledCommit {\n #API;\n #cancelled = false;\n #timeout;\n #callback;\n\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n * @param {string} callback\n */\n constructor(API: any, when: number, callback: string) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\n this.#callback = callback;\n }\n\n /**\n * Cancel any currently scheduled commit\n */\n cancel() {\n this.#cancelled = true;\n if (this.#timeout) {\n clearTimeout(this.#timeout);\n }\n }\n\n /**\n * Wrap the API commit call to check if the call has already been cancelled\n */\n wrapper() {\n if (!this.#cancelled) {\n this.#API.commit(this.#callback);\n }\n }\n}\n","// @flow\nimport BaseAPI from './BaseAPI';\nimport {\n ADL,\n CMI,\n CMICommentsObject,\n CMIInteractionsCorrectResponsesObject,\n CMIInteractionsObject,\n CMIInteractionsObjectivesObject,\n CMIObjectivesObject,\n} from './cmi/scorm2004_cmi';\nimport * as Utilities from './utilities';\nimport APIConstants from './constants/api_constants';\nimport ErrorCodes from './constants/error_codes';\nimport Responses from './constants/response_constants';\nimport ValidLanguages from './constants/language_constants';\nimport Regex from './constants/regex';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst global_constants = APIConstants.global;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst correct_responses = Responses.correct;\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * API class for SCORM 2004\n */\nexport default class Scorm2004API extends BaseAPI {\n #version: '1.0';\n\n /**\n * Constructor for SCORM 2004 API\n * @param {object} settings\n */\n constructor(settings: {}) {\n const finalSettings = {\n ...{\n mastery_override: false,\n }, ...settings,\n };\n\n super(scorm2004_error_codes, finalSettings);\n\n this.cmi = new CMI();\n this.adl = new ADL();\n\n // Rename functions to match 2004 Spec and expose to modules\n this.Initialize = this.lmsInitialize;\n this.Terminate = this.lmsTerminate;\n this.GetValue = this.lmsGetValue;\n this.SetValue = this.lmsSetValue;\n this.Commit = this.lmsCommit;\n this.GetLastError = this.lmsGetLastError;\n this.GetErrorString = this.lmsGetErrorString;\n this.GetDiagnostic = this.lmsGetDiagnostic;\n }\n\n /**\n * Getter for #version\n * @return {string}\n */\n get version() {\n return this.#version;\n }\n\n /**\n * @return {string} bool\n */\n lmsInitialize() {\n this.cmi.initialize();\n return this.initialize('Initialize');\n }\n\n /**\n * @return {string} bool\n */\n lmsTerminate() {\n const result = this.terminate('Terminate', true);\n\n if (result === global_constants.SCORM_TRUE) {\n if (this.adl.nav.request !== '_none_') {\n switch (this.adl.nav.request) {\n case 'continue':\n this.processListeners('SequenceNext');\n break;\n case 'previous':\n this.processListeners('SequencePrevious');\n break;\n case 'choice':\n this.processListeners('SequenceChoice');\n break;\n case 'exit':\n this.processListeners('SequenceExit');\n break;\n case 'exitAll':\n this.processListeners('SequenceExitAll');\n break;\n case 'abandon':\n this.processListeners('SequenceAbandon');\n break;\n case 'abandonAll':\n this.processListeners('SequenceAbandonAll');\n break;\n }\n } else if (this.settings.autoProgress) {\n this.processListeners('SequenceNext');\n }\n }\n\n return result;\n }\n\n /**\n * @param {string} CMIElement\n * @return {string}\n */\n lmsGetValue(CMIElement) {\n return this.getValue('GetValue', true, CMIElement);\n }\n\n /**\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n lmsSetValue(CMIElement, value) {\n return this.setValue('SetValue', 'Commit', true, CMIElement, value);\n }\n\n /**\n * Orders LMS to store all content parameters\n *\n * @return {string} bool\n */\n lmsCommit() {\n return this.commit('Commit');\n }\n\n /**\n * Returns last error code\n *\n * @return {string}\n */\n lmsGetLastError() {\n return this.getLastError('GetLastError');\n }\n\n /**\n * Returns the errorNumber error description\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetErrorString(CMIErrorCode) {\n return this.getErrorString('GetErrorString', CMIErrorCode);\n }\n\n /**\n * Returns a comprehensive description of the errorNumber error.\n *\n * @param {(string|number)} CMIErrorCode\n * @return {string}\n */\n lmsGetDiagnostic(CMIErrorCode) {\n return this.getDiagnostic('GetDiagnostic', CMIErrorCode);\n }\n\n /**\n * Sets a value on the CMI Object\n *\n * @param {string} CMIElement\n * @param {any} value\n * @return {string}\n */\n setCMIValue(CMIElement, value) {\n return this._commonSetCMIValue('SetValue', true, CMIElement, value);\n }\n\n /**\n * Gets or builds a new child element to add to the array.\n *\n * @param {string} CMIElement\n * @param {any} value\n * @param {boolean} foundFirstIndex\n * @return {any}\n */\n getChildElement(CMIElement, value, foundFirstIndex) {\n let newChild;\n\n if (this.stringMatches(CMIElement, 'cmi\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIObjectivesObject();\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.correct_responses\\\\.\\\\d+')) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const interaction = this.cmi.interactions.childArray[index];\n if (this.isInitialized()) {\n if (!interaction.type) {\n this.throwSCORMError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (response_type) {\n this.checkValidResponseType(response_type, value, interaction.type);\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction.type);\n }\n }\n }\n if (this.lastErrorCode === 0) {\n newChild = new CMIInteractionsCorrectResponsesObject();\n }\n } else if (foundFirstIndex && this.stringMatches(CMIElement,\n 'cmi\\\\.interactions\\\\.\\\\d+\\\\.objectives\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObjectivesObject();\n } else if (!foundFirstIndex &&\n this.stringMatches(CMIElement, 'cmi\\\\.interactions\\\\.\\\\d+')) {\n newChild = new CMIInteractionsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_learner\\\\.\\\\d+')) {\n newChild = new CMICommentsObject();\n } else if (this.stringMatches(CMIElement,\n 'cmi\\\\.comments_from_lms\\\\.\\\\d+')) {\n newChild = new CMICommentsObject(true);\n }\n\n return newChild;\n }\n\n /**\n * Checks for valid response types\n * @param {object} response_type\n * @param {any} value\n * @param {string} interaction_type\n */\n checkValidResponseType(response_type, value, interaction_type) {\n let nodes = [];\n if (response_type?.delimiter) {\n nodes = String(value).split(response_type.delimiter);\n } else {\n nodes[0] = value;\n }\n\n if (nodes.length > 0 && nodes.length <= response_type.max) {\n this.checkCorrectResponseValue(interaction_type, nodes, value);\n } else if (nodes.length > response_type.max) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Too Long');\n }\n }\n\n /**\n * Checks for duplicate 'choice' responses.\n * @param {CMIInteractionsObject} interaction\n * @param {any} value\n */\n checkDuplicateChoiceResponse(interaction, value) {\n const interaction_count = interaction.correct_responses._count;\n if (interaction.type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode ===\n 0; i++) {\n const response = interaction.correct_responses.childArray[i];\n if (response.pattern === value) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n }\n }\n }\n\n /**\n * Validate correct response.\n * @param {string} CMIElement\n * @param {*} value\n */\n validateCorrectResponse(CMIElement, value) {\n const parts = CMIElement.split('.');\n const index = Number(parts[2]);\n const pattern_index = Number(parts[4]);\n const interaction = this.cmi.interactions.childArray[index];\n\n const interaction_count = interaction.correct_responses._count;\n this.checkDuplicateChoiceResponse(interaction, value);\n\n const response_type = correct_responses[interaction.type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\n this.checkValidResponseType(response_type, value, interaction.type);\n\n if (this.lastErrorCode === 0 &&\n (!response_type.duplicate ||\n !this.checkDuplicatedPattern(interaction.correct_responses,\n pattern_index, value)) ||\n (this.lastErrorCode === 0 && value === '')) {\n // do nothing, we want the inverse\n } else {\n if (this.lastErrorCode === 0) {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Pattern Already Exists');\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Data Model Element Collection Limit Reached');\n }\n }\n\n /**\n * Gets a value from the CMI Object\n *\n * @param {string} CMIElement\n * @return {*}\n */\n getCMIValue(CMIElement) {\n return this._commonGetCMIValue('GetValue', true, CMIElement);\n }\n\n /**\n * Returns the message that corresponds to errorNumber.\n *\n * @param {(string|number)} errorNumber\n * @param {boolean} detail\n * @return {string}\n */\n getLmsErrorMessageDetails(errorNumber, detail) {\n let basicMessage = '';\n let detailMessage = '';\n\n // Set error number to string since inconsistent from modules if string or number\n errorNumber = String(errorNumber);\n if (scorm2004_constants.error_descriptions[errorNumber]) {\n basicMessage = scorm2004_constants.error_descriptions[errorNumber].basicMessage;\n detailMessage = scorm2004_constants.error_descriptions[errorNumber].detailMessage;\n }\n\n return detail ? detailMessage : basicMessage;\n }\n\n /**\n * Check to see if a correct_response value has been duplicated\n * @param {CMIArray} correct_response\n * @param {number} current_index\n * @param {*} value\n * @return {boolean}\n */\n checkDuplicatedPattern = (correct_response, current_index, value) => {\n let found = false;\n const count = correct_response._count;\n for (let i = 0; i < count && !found; i++) {\n if (i !== current_index && correct_response.childArray[i] === value) {\n found = true;\n }\n }\n return found;\n };\n\n /**\n * Checks for a valid correct_response value\n * @param {string} interaction_type\n * @param {Array} nodes\n * @param {*} value\n */\n checkCorrectResponseValue(interaction_type, nodes, value) {\n const response = correct_responses[interaction_type];\n const formatRegex = new RegExp(response.format);\n for (let i = 0; i < nodes.length && this.lastErrorCode === 0; i++) {\n if (interaction_type.match(\n '^(fill-in|long-fill-in|matching|performance|sequencing)$')) {\n nodes[i] = this.removeCorrectResponsePrefixes(nodes[i]);\n }\n\n if (response?.delimiter2) {\n const values = nodes[i].split(response.delimiter2);\n if (values.length === 2) {\n const matches = values[0].match(formatRegex);\n if (!matches) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (!values[1].match(new RegExp(response.format2))) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n } else {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n const matches = nodes[i].match(formatRegex);\n if ((!matches && value !== '') ||\n (!matches && interaction_type === 'true-false')) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n } else {\n if (interaction_type === 'numeric' && nodes.length > 1) {\n if (Number(nodes[0]) > Number(nodes[1])) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n } else {\n if (nodes[i] !== '' && response.unique) {\n for (let j = 0; j < i && this.lastErrorCode === 0; j++) {\n if (nodes[i] === nodes[j]) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Remove prefixes from correct_response\n * @param {string} node\n * @return {*}\n */\n removeCorrectResponsePrefixes(node) {\n let seenOrder = false;\n let seenCase = false;\n let seenLang = false;\n\n const prefixRegex = new RegExp(\n '^({(lang|case_matters|order_matters)=([^}]+)})');\n let matches = node.match(prefixRegex);\n let langMatches = null;\n while (matches) {\n switch (matches[2]) {\n case 'lang':\n langMatches = node.match(scorm2004_regex.CMILangcr);\n if (langMatches) {\n const lang = langMatches[3];\n if (lang !== undefined && lang.length > 0) {\n if (ValidLanguages[lang.toLowerCase()] === undefined) {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n }\n seenLang = true;\n break;\n case 'case_matters':\n if (!seenLang && !seenOrder && !seenCase) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenCase = true;\n break;\n case 'order_matters':\n if (!seenCase && !seenLang && !seenOrder) {\n if (matches[3] !== 'true' && matches[3] !== 'false') {\n this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);\n }\n }\n\n seenOrder = true;\n break;\n default:\n break;\n }\n node = node.substr(matches[1].length);\n matches = node.match(prefixRegex);\n }\n\n return node;\n }\n\n /**\n * Replace the whole API with another\n * @param {Scorm2004API} newAPI\n */\n replaceWithAnotherScormAPI(newAPI) {\n // Data Model\n this.cmi = newAPI.cmi;\n this.adl = newAPI.adl;\n }\n\n /**\n * Render the cmi object to the proper format for LMS commit\n *\n * @param {boolean} terminateCommit\n * @return {object|Array}\n */\n renderCommitCMI(terminateCommit: boolean) {\n const cmiExport = this.renderCMIToJSONObject();\n\n if (terminateCommit) {\n cmiExport.cmi.total_time = this.cmi.getCurrentTotalTime();\n }\n\n const result = [];\n const flattened = Utilities.flatten(cmiExport);\n switch (this.settings.dataCommitFormat) {\n case 'flattened':\n return Utilities.flatten(cmiExport);\n case 'params':\n for (const item in flattened) {\n if ({}.hasOwnProperty.call(flattened, item)) {\n result.push(`${item}=${flattened[item]}`);\n }\n }\n return result;\n case 'json':\n default:\n return cmiExport;\n }\n }\n\n /**\n * Attempts to store the data to the LMS\n *\n * @param {boolean} terminateCommit\n * @return {string}\n */\n storeData(terminateCommit: boolean) {\n if (terminateCommit) {\n if (this.cmi.mode === 'normal') {\n if (this.cmi.credit === 'credit') {\n if (this.cmi.completion_threshold && this.cmi.progress_measure) {\n if (this.cmi.progress_measure >= this.cmi.completion_threshold) {\n console.debug('Setting Completion Status: Completed');\n this.cmi.completion_status = 'completed';\n } else {\n console.debug('Setting Completion Status: Incomplete');\n this.cmi.completion_status = 'incomplete';\n }\n }\n if (this.cmi.scaled_passing_score && this.cmi.score.scaled) {\n if (this.cmi.score.scaled >= this.cmi.scaled_passing_score) {\n console.debug('Setting Success Status: Passed');\n this.cmi.success_status = 'passed';\n } else {\n console.debug('Setting Success Status: Failed');\n this.cmi.success_status = 'failed';\n }\n }\n }\n }\n }\n\n let navRequest = false;\n if (this.adl.nav.request !== (this.startingData?.adl?.nav?.request) &&\n this.adl.nav.request !== '_none_') {\n this.adl.nav.request = encodeURIComponent(this.adl.nav.request);\n navRequest = true;\n }\n\n const commitObject = this.renderCommitCMI(terminateCommit ||\n this.settings.alwaysSendTotalTime);\n\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n if (this.settings.lmsCommitUrl) {\n const result = this.processHttpRequest(this.settings.lmsCommitUrl,\n commitObject, terminateCommit);\n\n // check if this is a sequencing call, and then call the necessary JS\n {\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\n }\n }\n return result;\n } else {\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","// @flow\nimport APIConstants from '../constants/api_constants';\nimport ErrorCodes from '../constants/error_codes';\nimport Regex from '../constants/regex';\n\nconst scorm12_constants = APIConstants.scorm12;\nconst scorm12_regex = Regex.scorm12;\nconst scorm12_error_codes = ErrorCodes.scorm12;\n\n/**\n * Check if the value matches the proper format. If not, throw proper error code.\n *\n * @param {string} value\n * @param {string} regexPattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\n errorClass: function,\n allowEmptyString?: boolean) {\n const formatRegex = new RegExp(regexPattern);\n const matches = value.match(formatRegex);\n if (allowEmptyString && value === '') {\n return true;\n }\n if (value === undefined || !matches || matches[0] === '') {\n throw new errorClass.prototype.constructor(errorCode);\n }\n return true;\n}\n\n/**\n * Check if the value matches the proper range. If not, throw proper error code.\n *\n * @param {*} value\n * @param {string} rangePattern\n * @param {number} errorCode\n * @param {class} errorClass\n * @return {boolean}\n */\nexport function checkValidRange(\n value: any,\n rangePattern: String,\n errorCode: number,\n errorClass: function) {\n const ranges = rangePattern.split('#');\n value = value * 1.0;\n if (value >= ranges[0]) {\n if ((ranges[1] === '*') || (value <= ranges[1])) {\n return true;\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n } else {\n throw new errorClass.prototype.constructor(errorCode);\n }\n}\n\n/**\n * Base class for API cmi objects\n */\nexport class BaseCMI {\n jsonString = false;\n #initialized = false;\n #start_time;\n\n /**\n * Constructor for BaseCMI, just marks the class as abstract\n */\n constructor() {\n if (new.target === BaseCMI) {\n throw new TypeError('Cannot construct BaseCMI instances directly');\n }\n }\n\n /**\n * Getter for #initialized\n * @return {boolean}\n */\n get initialized() {\n return this.#initialized;\n }\n\n /**\n * Getter for #start_time\n * @return {Number}\n */\n get start_time() {\n return this.#start_time;\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\n }\n\n /**\n * Called when the player should override the 'session_time' provided by\n * the module\n */\n setStartTime() {\n this.#start_time = new Date().getTime();\n }\n}\n\n/**\n * Base class for cmi *.score objects\n */\nexport class CMIScore extends BaseCMI {\n /**\n * Constructor for *.score\n * @param {string} score_children\n * @param {string} score_range\n * @param {string} max\n * @param {number} invalidErrorCode\n * @param {number} invalidTypeCode\n * @param {number} invalidRangeCode\n * @param {string} decimalRegex\n * @param {class} errorClass\n */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\n errorClass,\n }) {\n super();\n\n this.#_children = score_children ||\n scorm12_constants.score_children;\n this.#_score_range = !score_range ? false : scorm12_regex.score_range;\n this.#max = (max || max === '') ? max : '100';\n this.#_invalid_error_code = invalidErrorCode ||\n scorm12_error_codes.INVALID_SET_VALUE;\n this.#_invalid_type_code = invalidTypeCode ||\n scorm12_error_codes.TYPE_MISMATCH;\n this.#_invalid_range_code = invalidRangeCode ||\n scorm12_error_codes.VALUE_OUT_OF_RANGE;\n this.#_decimal_regex = decimalRegex ||\n scorm12_regex.CMIDecimal;\n this.#_error_class = errorClass;\n }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\n #_error_class;\n #raw = '';\n #min = '';\n #max;\n\n /**\n * Getter for _children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throw new this.#_error_class.prototype.constructor(this.#_invalid_error_code);\n }\n\n /**\n * Getter for #raw\n * @return {string}\n */\n get raw() {\n return this.#raw;\n }\n\n /**\n * Setter for #raw\n * @param {string} raw\n */\n set raw(raw) {\n if (checkValidFormat(raw, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#raw = raw;\n }\n }\n\n /**\n * Getter for #min\n * @return {string}\n */\n get min() {\n return this.#min;\n }\n\n /**\n * Setter for #min\n * @param {string} min\n */\n set min(min) {\n if (checkValidFormat(min, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#min = min;\n }\n }\n\n /**\n * Getter for #max\n * @return {string}\n */\n get max() {\n return this.#max;\n }\n\n /**\n * Setter for #max\n * @param {string} max\n */\n set max(max) {\n if (checkValidFormat(max, this.#_decimal_regex, this.#_invalid_type_code, this.#_error_class) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range, this.#_invalid_range_code, this.#_error_class))) {\n this.#max = max;\n }\n }\n\n /**\n * toJSON for *.score\n * @return {{min: string, max: string, raw: string}}\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'raw': this.raw,\n 'min': this.min,\n 'max': this.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Base class for cmi *.n objects\n */\nexport class CMIArray extends BaseCMI {\n /**\n * Constructor cmi *.n arrays\n * @param {string} children\n * @param {number} errorCode\n * @param {class} errorClass\n */\n constructor({children, errorCode, errorClass}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.#errorClass = errorClass;\n this.childArray = [];\n }\n\n #errorCode;\n #errorClass;\n #_children;\n\n /**\n * Getter for _children\n * @return {*}\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for _children. Just throws an error.\n * @param {string} _children\n */\n set _children(_children) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * Getter for _count\n * @return {number}\n */\n get _count() {\n return this.childArray.length;\n }\n\n /**\n * Setter for _count. Just throws an error.\n * @param {number} _count\n */\n set _count(_count) {\n throw new this.#errorClass.prototype.constructor(this.#errorCode);\n }\n\n /**\n * toJSON for *.n arrays\n * @return {object}\n */\n toJSON() {\n this.jsonString = true;\n const result = {};\n for (let i = 0; i < this.childArray.length; i++) {\n result[i + ''] = this.childArray[i];\n }\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\nimport {\n BaseCMI,\n checkValidFormat,\n checkValidRange,\n CMIArray,\n CMIScore,\n} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport Responses from '../constants/response_constants';\nimport {Scorm2004ValidationError} from '../exceptions';\nimport * as Util from '../utilities';\n\nconst scorm2004_constants = APIConstants.scorm2004;\nconst scorm2004_error_codes = ErrorCodes.scorm2004;\nconst learner_responses = Responses.learner;\n\nconst scorm2004_regex = Regex.scorm2004;\n\n/**\n * Helper method for throwing Read Only error\n */\nfunction throwReadOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwDependencyNotEstablishedError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n}\n\n/**\n * Helper method for throwing Dependency Not Established error\n */\nfunction throwGeneralSetError() {\n throw new Scorm2004ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} regexPattern\n * @param {boolean} allowEmptyString\n * @return {boolean}\n */\nfunction check2004ValidFormat(\n value: String,\n regexPattern: String,\n allowEmptyString?: boolean) {\n return checkValidFormat(\n value,\n regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH,\n Scorm2004ValidationError,\n allowEmptyString,\n );\n}\n\n/**\n * Helper method, no reason to have to pass the same error codes every time\n * @param {*} value\n * @param {string} rangePattern\n * @return {boolean}\n */\nfunction check2004ValidRange(value: any, rangePattern: String) {\n return checkValidRange(\n value,\n rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n Scorm2004ValidationError,\n );\n}\n\n/**\n * Class representing cmi object for SCORM 2004\n */\nexport class CMI extends BaseCMI {\n /**\n * Constructor for the SCORM 2004 cmi object\n * @param {boolean} initialized\n */\n constructor(initialized: boolean) {\n super();\n\n this.learner_preference = new CMILearnerPreference();\n this.score = new Scorm2004CMIScore();\n this.comments_from_learner = new CMICommentsFromLearner();\n this.comments_from_lms = new CMICommentsFromLMS();\n this.interactions = new CMIInteractions();\n this.objectives = new CMIObjectives();\n\n if (initialized) this.initialize();\n }\n\n #_version = '1.0';\n #_children = scorm2004_constants.cmi_children;\n #completion_status = 'unknown';\n #completion_threshold = '';\n #credit = 'credit';\n #entry = '';\n #exit = '';\n #launch_data = '';\n #learner_id = '';\n #learner_name = '';\n #location = '';\n #max_time_allowed = '';\n #mode = 'normal';\n #progress_measure = '';\n #scaled_passing_score = '';\n #session_time = 'PT0H0M0S';\n #success_status = 'unknown';\n #suspend_data = '';\n #time_limit_action = 'continue,no message';\n #total_time = '';\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.learner_preference?.initialize();\n this.score?.initialize();\n this.comments_from_learner?.initialize();\n this.comments_from_lms?.initialize();\n this.interactions?.initialize();\n this.objectives?.initialize();\n }\n\n /**\n * Getter for #_version\n * @return {string}\n * @private\n */\n get _version() {\n return this.#_version;\n }\n\n /**\n * Setter for #_version. Just throws an error.\n * @param {string} _version\n * @private\n */\n set _version(_version) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {number} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n\n /**\n * Getter for #completion_threshold\n * @return {string}\n */\n get completion_threshold() {\n return this.#completion_threshold;\n }\n\n /**\n * Setter for #completion_threshold. Can only be called before initialization.\n * @param {string} completion_threshold\n */\n set completion_threshold(completion_threshold) {\n !this.initialized ?\n this.#completion_threshold = completion_threshold :\n throwReadOnlyError();\n }\n\n /**\n * Setter for #credit\n * @return {string}\n */\n get credit() {\n return this.#credit;\n }\n\n /**\n * Setter for #credit. Can only be called before initialization.\n * @param {string} credit\n */\n set credit(credit) {\n !this.initialized ? this.#credit = credit : throwReadOnlyError();\n }\n\n /**\n * Getter for #entry\n * @return {string}\n */\n get entry() {\n return this.#entry;\n }\n\n /**\n * Setter for #entry. Can only be called before initialization.\n * @param {string} entry\n */\n set entry(entry) {\n !this.initialized ? this.#entry = entry : throwReadOnlyError();\n }\n\n /**\n * Getter for #exit. Should only be called during JSON export.\n * @return {string}\n */\n get exit() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#exit;\n }\n\n /**\n * Getter for #exit\n * @param {string} exit\n */\n set exit(exit) {\n if (check2004ValidFormat(exit, scorm2004_regex.CMIExit, true)) {\n this.#exit = exit;\n }\n }\n\n /**\n * Getter for #launch_data\n * @return {string}\n */\n get launch_data() {\n return this.#launch_data;\n }\n\n /**\n * Setter for #launch_data. Can only be called before initialization.\n * @param {string} launch_data\n */\n set launch_data(launch_data) {\n !this.initialized ? this.#launch_data = launch_data : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_id\n * @return {string}\n */\n get learner_id() {\n return this.#learner_id;\n }\n\n /**\n * Setter for #learner_id. Can only be called before initialization.\n * @param {string} learner_id\n */\n set learner_id(learner_id) {\n !this.initialized ? this.#learner_id = learner_id : throwReadOnlyError();\n }\n\n /**\n * Getter for #learner_name\n * @return {string}\n */\n get learner_name() {\n return this.#learner_name;\n }\n\n /**\n * Setter for #learner_name. Can only be called before initialization.\n * @param {string} learner_name\n */\n set learner_name(learner_name) {\n !this.initialized ?\n this.#learner_name = learner_name :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString1000)) {\n this.#location = location;\n }\n }\n\n /**\n * Getter for #max_time_allowed\n * @return {string}\n */\n get max_time_allowed() {\n return this.#max_time_allowed;\n }\n\n /**\n * Setter for #max_time_allowed. Can only be called before initialization.\n * @param {string} max_time_allowed\n */\n set max_time_allowed(max_time_allowed) {\n !this.initialized ?\n this.#max_time_allowed = max_time_allowed :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #mode\n * @return {string}\n */\n get mode() {\n return this.#mode;\n }\n\n /**\n * Setter for #mode. Can only be called before initialization.\n * @param {string} mode\n */\n set mode(mode) {\n !this.initialized ? this.#mode = mode : throwReadOnlyError();\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure, scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n\n /**\n * Getter for #scaled_passing_score\n * @return {string}\n */\n get scaled_passing_score() {\n return this.#scaled_passing_score;\n }\n\n /**\n * Setter for #scaled_passing_score. Can only be called before initialization.\n * @param {string} scaled_passing_score\n */\n set scaled_passing_score(scaled_passing_score) {\n !this.initialized ?\n this.#scaled_passing_score = scaled_passing_score :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #session_time. Should only be called during JSON export.\n * @return {string}\n */\n get session_time() {\n return (!this.jsonString) ? throwWriteOnlyError() : this.#session_time;\n }\n\n /**\n * Setter for #session_time\n * @param {string} session_time\n */\n set session_time(session_time) {\n if (check2004ValidFormat(session_time, scorm2004_regex.CMITimespan)) {\n this.#session_time = session_time;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n\n /**\n * Getter for #suspend_data\n * @return {string}\n */\n get suspend_data() {\n return this.#suspend_data;\n }\n\n /**\n * Setter for #suspend_data\n * @param {string} suspend_data\n */\n set suspend_data(suspend_data) {\n if (check2004ValidFormat(suspend_data, scorm2004_regex.CMIString64000,\n true)) {\n this.#suspend_data = suspend_data;\n }\n }\n\n /**\n * Getter for #time_limit_action\n * @return {string}\n */\n get time_limit_action() {\n return this.#time_limit_action;\n }\n\n /**\n * Setter for #time_limit_action. Can only be called before initialization.\n * @param {string} time_limit_action\n */\n set time_limit_action(time_limit_action) {\n !this.initialized ?\n this.#time_limit_action = time_limit_action :\n throwReadOnlyError();\n }\n\n /**\n * Getter for #total_time\n * @return {string}\n */\n get total_time() {\n return this.#total_time;\n }\n\n /**\n * Setter for #total_time. Can only be called before initialization.\n * @param {string} total_time\n */\n set total_time(total_time) {\n !this.initialized ? this.#total_time = total_time : throwReadOnlyError();\n }\n\n /**\n * Adds the current session time to the existing total time.\n *\n * @return {string} ISO8601 Duration\n */\n getCurrentTotalTime() {\n let sessionTime = this.#session_time;\n const startTime = this.start_time;\n\n if (typeof startTime !== 'undefined' && startTime !== null) {\n const seconds = new Date().getTime() - startTime;\n sessionTime = Util.getSecondsAsISODuration(seconds / 1000);\n }\n\n return Util.addTwoDurations(\n this.#total_time,\n sessionTime,\n scorm2004_regex.CMITimespan,\n );\n }\n\n /**\n * toJSON for cmi\n *\n * @return {\n * {\n * comments_from_learner: CMICommentsFromLearner,\n * comments_from_lms: CMICommentsFromLMS,\n * completion_status: string,\n * completion_threshold: string,\n * credit: string,\n * entry: string,\n * exit: string,\n * interactions: CMIInteractions,\n * launch_data: string,\n * learner_id: string,\n * learner_name: string,\n * learner_preference: CMILearnerPreference,\n * location: string,\n * max_time_allowed: string,\n * mode: string,\n * objectives: CMIObjectives,\n * progress_measure: string,\n * scaled_passing_score: string,\n * score: Scorm2004CMIScore,\n * session_time: string,\n * success_status: string,\n * suspend_data: string,\n * time_limit_action: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comments_from_learner': this.comments_from_learner,\n 'comments_from_lms': this.comments_from_lms,\n 'completion_status': this.completion_status,\n 'completion_threshold': this.completion_threshold,\n 'credit': this.credit,\n 'entry': this.entry,\n 'exit': this.exit,\n 'interactions': this.interactions,\n 'launch_data': this.launch_data,\n 'learner_id': this.learner_id,\n 'learner_name': this.learner_name,\n 'learner_preference': this.learner_preference,\n 'location': this.location,\n 'max_time_allowed': this.max_time_allowed,\n 'mode': this.mode,\n 'objectives': this.objectives,\n 'progress_measure': this.progress_measure,\n 'scaled_passing_score': this.scaled_passing_score,\n 'score': this.score,\n 'session_time': this.session_time,\n 'success_status': this.success_status,\n 'suspend_data': this.suspend_data,\n 'time_limit_action': this.time_limit_action,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.learner_preference object\n */\nclass CMILearnerPreference extends BaseCMI {\n #_children = scorm2004_constants.student_preference_children;\n #audio_level = '1';\n #language = '';\n #delivery_speed = '1';\n #audio_captioning = '0';\n\n /**\n * Constructor for cmi.learner_preference\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #_children\n * @return {string}\n * @private\n */\n get _children() {\n return this.#_children;\n }\n\n /**\n * Setter for #_children. Just throws an error.\n * @param {string} _children\n * @private\n */\n set _children(_children) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #audio_level\n * @return {string}\n */\n get audio_level() {\n return this.#audio_level;\n }\n\n /**\n * Setter for #audio_level\n * @param {string} audio_level\n */\n set audio_level(audio_level) {\n if (check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(audio_level, scorm2004_regex.audio_range)) {\n this.#audio_level = audio_level;\n }\n }\n\n /**\n * Getter for #language\n * @return {string}\n */\n get language() {\n return this.#language;\n }\n\n /**\n * Setter for #language\n * @param {string} language\n */\n set language(language) {\n if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {\n this.#language = language;\n }\n }\n\n /**\n * Getter for #delivery_speed\n * @return {string}\n */\n get delivery_speed() {\n return this.#delivery_speed;\n }\n\n /**\n * Setter for #delivery_speed\n * @param {string} delivery_speed\n */\n set delivery_speed(delivery_speed) {\n if (check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)) {\n this.#delivery_speed = delivery_speed;\n }\n }\n\n /**\n * Getter for #audio_captioning\n * @return {string}\n */\n get audio_captioning() {\n return this.#audio_captioning;\n }\n\n /**\n * Setter for #audio_captioning\n * @param {string} audio_captioning\n */\n set audio_captioning(audio_captioning) {\n if (check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&\n check2004ValidRange(audio_captioning, scorm2004_regex.text_range)) {\n this.#audio_captioning = audio_captioning;\n }\n }\n\n /**\n * toJSON for cmi.learner_preference\n *\n * @return {\n * {\n * audio_level: string,\n * language: string,\n * delivery_speed: string,\n * audio_captioning: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'audio_level': this.audio_level,\n 'language': this.language,\n 'delivery_speed': this.delivery_speed,\n 'audio_captioning': this.audio_captioning,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions object\n */\nclass CMIInteractions extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.interactions_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.objectives object\n */\nclass CMIObjectives extends CMIArray {\n /**\n * Constructor for cmi.objectives Array\n */\n constructor() {\n super({\n children: scorm2004_constants.objectives_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_lms object\n */\nclass CMICommentsFromLMS extends CMIArray {\n /**\n * Constructor for cmi.comments_from_lms Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner object\n */\nclass CMICommentsFromLearner extends CMIArray {\n /**\n * Constructor for cmi.comments_from_learner Array\n */\n constructor() {\n super({\n children: scorm2004_constants.comments_children,\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n });\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.interaction.n object\n */\nexport class CMIInteractionsObject extends BaseCMI {\n #id = '';\n #type = '';\n #timestamp = '';\n #weighting = '';\n #learner_response = '';\n #result = '';\n #latency = '';\n #description = '';\n\n /**\n * Constructor for cmi.interaction.n\n */\n constructor() {\n super();\n\n this.objectives = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n errorClass: Scorm2004ValidationError,\n children: scorm2004_constants.correct_responses_children,\n });\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.objectives?.initialize();\n this.correct_responses?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #type\n * @return {string}\n */\n get type() {\n return this.#type;\n }\n\n /**\n * Setter for #type\n * @param {string} type\n */\n set type(type) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * Getter for #weighting\n * @return {string}\n */\n get weighting() {\n return this.#weighting;\n }\n\n /**\n * Setter for #weighting\n * @param {string} weighting\n */\n set weighting(weighting) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\n }\n }\n }\n\n /**\n * Getter for #learner_response\n * @return {string}\n */\n get learner_response() {\n return this.#learner_response;\n }\n\n /**\n * Setter for #learner_response. Does type validation to make sure response\n * matches SCORM 2004's spec\n * @param {string} learner_response\n */\n set learner_response(learner_response) {\n if (this.initialized && (this.#type === '' || this.#id === '')) {\n throwDependencyNotEstablishedError();\n } else {\n let nodes = [];\n const response_type = learner_responses[this.type];\n if (response_type) {\n if (response_type?.delimiter) {\n nodes = learner_response.split(response_type.delimiter);\n } else {\n nodes[0] = learner_response;\n }\n\n if ((nodes.length > 0) && (nodes.length <= response_type.max)) {\n const formatRegex = new RegExp(response_type.format);\n for (let i = 0; i < nodes.length; i++) {\n if (response_type?.delimiter2) {\n const values = nodes[i].split(response_type.delimiter2);\n if (values.length === 2) {\n if (!values[0].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (!values[1].match(new RegExp(response_type.format2))) {\n throwTypeMismatchError();\n }\n }\n } else {\n throwTypeMismatchError();\n }\n } else {\n if (!nodes[i].match(formatRegex)) {\n throwTypeMismatchError();\n } else {\n if (nodes[i] !== '' && response_type.unique) {\n for (let j = 0; j < i; j++) {\n if (nodes[i] === nodes[j]) {\n throwTypeMismatchError();\n }\n }\n }\n }\n }\n }\n } else {\n throwGeneralSetError();\n }\n\n this.#learner_response = learner_response;\n } else {\n throwTypeMismatchError();\n }\n }\n }\n\n /**\n * Getter for #result\n * @return {string}\n */\n get result() {\n return this.#result;\n }\n\n /**\n * Setter for #result\n * @param {string} result\n */\n set result(result) {\n if (check2004ValidFormat(result, scorm2004_regex.CMIResult)) {\n this.#result = result;\n }\n }\n\n /**\n * Getter for #latency\n * @return {string}\n */\n get latency() {\n return this.#latency;\n }\n\n /**\n * Setter for #latency\n * @param {string} latency\n */\n set latency(latency) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.interactions.n\n *\n * @return {\n * {\n * id: string,\n * type: string,\n * objectives: CMIArray,\n * timestamp: string,\n * correct_responses: CMIArray,\n * weighting: string,\n * learner_response: string,\n * result: string,\n * latency: string,\n * description: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'type': this.type,\n 'objectives': this.objectives,\n 'timestamp': this.timestamp,\n 'weighting': this.weighting,\n 'learner_response': this.learner_response,\n 'result': this.result,\n 'latency': this.latency,\n 'description': this.description,\n 'correct_responses': this.correct_responses,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi.objectives.n object\n */\nexport class CMIObjectivesObject extends BaseCMI {\n #id = '';\n #success_status = 'unknown';\n #completion_status = 'unknown';\n #progress_measure = '';\n #description = '';\n\n /**\n * Constructor for cmi.objectives.n\n */\n constructor() {\n super();\n\n this.score = new Scorm2004CMIScore();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.score?.initialize();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * Getter for #success_status\n * @return {string}\n */\n get success_status() {\n return this.#success_status;\n }\n\n /**\n * Setter for #success_status\n * @param {string} success_status\n */\n set success_status(success_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\n }\n }\n }\n\n /**\n * Getter for #completion_status\n * @return {string}\n */\n get completion_status() {\n return this.#completion_status;\n }\n\n /**\n * Setter for #completion_status\n * @param {string} completion_status\n */\n set completion_status(completion_status) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\n }\n }\n }\n\n /**\n * Getter for #progress_measure\n * @return {string}\n */\n get progress_measure() {\n return this.#progress_measure;\n }\n\n /**\n * Setter for #progress_measure\n * @param {string} progress_measure\n */\n set progress_measure(progress_measure) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(progress_measure, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(progress_measure,\n scorm2004_regex.progress_range)) {\n this.#progress_measure = progress_measure;\n }\n }\n }\n\n /**\n * Getter for #description\n * @return {string}\n */\n get description() {\n return this.#description;\n }\n\n /**\n * Setter for #description\n * @param {string} description\n */\n set description(description) {\n if (this.initialized && this.#id === '') {\n throwDependencyNotEstablishedError();\n } else {\n if (check2004ValidFormat(description, scorm2004_regex.CMILangString250,\n true)) {\n this.#description = description;\n }\n }\n }\n\n /**\n * toJSON for cmi.objectives.n\n *\n * @return {\n * {\n * id: string,\n * success_status: string,\n * completion_status: string,\n * progress_measure: string,\n * description: string,\n * score: Scorm2004CMIScore\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n 'success_status': this.success_status,\n 'completion_status': this.completion_status,\n 'progress_measure': this.progress_measure,\n 'description': this.description,\n 'score': this.score,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class for SCORM 2004's cmi *.score object\n */\nclass Scorm2004CMIScore extends CMIScore {\n #scaled = '';\n\n /**\n * Constructor for cmi *.score\n */\n constructor() {\n super(\n {\n score_children: scorm2004_constants.score_children,\n max: '',\n invalidErrorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\n invalidTypeCode: scorm2004_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm2004_error_codes.VALUE_OUT_OF_RANGE,\n decimalRegex: scorm2004_regex.CMIDecimal,\n errorClass: Scorm2004ValidationError,\n });\n }\n\n /**\n * Getter for #scaled\n * @return {string}\n */\n get scaled() {\n return this.#scaled;\n }\n\n /**\n * Setter for #scaled\n * @param {string} scaled\n */\n set scaled(scaled) {\n if (check2004ValidFormat(scaled, scorm2004_regex.CMIDecimal) &&\n check2004ValidRange(scaled, scorm2004_regex.scaled_range)) {\n this.#scaled = scaled;\n }\n }\n\n /**\n * toJSON for cmi *.score\n *\n * @return {\n * {\n * scaled: string,\n * raw: string,\n * min: string,\n * max: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'scaled': this.scaled,\n 'raw': super.raw,\n 'min': super.min,\n 'max': super.max,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object\n */\nexport class CMICommentsObject extends BaseCMI {\n #comment = '';\n #location = '';\n #timestamp = '';\n #readOnlyAfterInit;\n\n /**\n * Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n\n * @param {boolean} readOnlyAfterInit\n */\n constructor(readOnlyAfterInit = false) {\n super();\n this.#comment = '';\n this.#location = '';\n this.#timestamp = '';\n this.#readOnlyAfterInit = readOnlyAfterInit;\n }\n\n /**\n * Getter for #comment\n * @return {string}\n */\n get comment() {\n return this.#comment;\n }\n\n /**\n * Setter for #comment\n * @param {string} comment\n */\n set comment(comment) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(comment, scorm2004_regex.CMILangString4000,\n true)) {\n this.#comment = comment;\n }\n }\n }\n\n /**\n * Getter for #location\n * @return {string}\n */\n get location() {\n return this.#location;\n }\n\n /**\n * Setter for #location\n * @param {string} location\n */\n set location(location) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {\n this.#location = location;\n }\n }\n }\n\n /**\n * Getter for #timestamp\n * @return {string}\n */\n get timestamp() {\n return this.#timestamp;\n }\n\n /**\n * Setter for #timestamp\n * @param {string} timestamp\n */\n set timestamp(timestamp) {\n if (this.initialized && this.#readOnlyAfterInit) {\n throwReadOnlyError();\n } else {\n if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\n }\n }\n }\n\n /**\n * toJSON for cmi.comments_from_learner.n object\n * @return {\n * {\n * comment: string,\n * location: string,\n * timestamp: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'comment': this.comment,\n 'location': this.location,\n 'timestamp': this.timestamp,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.objectives.n object\n */\nexport class CMIInteractionsObjectivesObject extends BaseCMI {\n #id = '';\n\n /**\n * Constructor for cmi.interactions.n.objectives.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #id\n * @return {string}\n */\n get id() {\n return this.#id;\n }\n\n /**\n * Setter for #id\n * @param {string} id\n */\n set id(id) {\n if (check2004ValidFormat(id, scorm2004_regex.CMILongIdentifier)) {\n this.#id = id;\n }\n }\n\n /**\n * toJSON for cmi.interactions.n.objectives.n\n * @return {\n * {\n * id: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'id': this.id,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's cmi.interactions.n.correct_responses.n object\n */\nexport class CMIInteractionsCorrectResponsesObject extends BaseCMI {\n #pattern = '';\n\n /**\n * Constructor for cmi.interactions.n.correct_responses.n\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #pattern\n * @return {string}\n */\n get pattern() {\n return this.#pattern;\n }\n\n /**\n * Setter for #pattern\n * @param {string} pattern\n */\n set pattern(pattern) {\n if (check2004ValidFormat(pattern, scorm2004_regex.CMIFeedback)) {\n this.#pattern = pattern;\n }\n }\n\n /**\n * toJSON cmi.interactions.n.correct_responses.n object\n * @return {\n * {\n * pattern: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'pattern': this.pattern,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl object\n */\nexport class ADL extends BaseCMI {\n /**\n * Constructor for adl\n */\n constructor() {\n super();\n\n this.nav = new ADLNav();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.nav?.initialize();\n }\n\n /**\n * toJSON for adl\n * @return {\n * {\n * nav: {\n * request: string\n * }\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'nav': this.nav,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav object\n */\nclass ADLNav extends BaseCMI {\n #request = '_none_';\n\n /**\n * Constructor for adl.nav\n */\n constructor() {\n super();\n\n this.request_valid = new ADLNavRequestValid();\n }\n\n /**\n * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n super.initialize();\n this.request_valid?.initialize();\n }\n\n /**\n * Getter for #request\n * @return {string}\n */\n get request() {\n return this.#request;\n }\n\n /**\n * Setter for #request\n * @param {string} request\n */\n set request(request) {\n if (check2004ValidFormat(request, scorm2004_regex.NAVEvent)) {\n this.#request = request;\n }\n }\n\n /**\n * toJSON for adl.nav\n *\n * @return {\n * {\n * request: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'request': this.request,\n };\n delete this.jsonString;\n return result;\n }\n}\n\n/**\n * Class representing SCORM 2004's adl.nav.request_valid object\n */\nclass ADLNavRequestValid extends BaseCMI {\n #continue = 'unknown';\n #previous = 'unknown';\n choice = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n jump = class {\n /**\n * Check if target is valid\n * @param {*} _target\n * @return {string}\n */\n _isTargetValid = (_target) => 'unknown';\n };\n\n /**\n * Constructor for adl.nav.request_valid\n */\n constructor() {\n super();\n }\n\n /**\n * Getter for #continue\n * @return {string}\n */\n get continue() {\n return this.#continue;\n }\n\n /**\n * Setter for #continue. Just throws an error.\n * @param {*} _\n */\n set continue(_) {\n throwReadOnlyError();\n }\n\n /**\n * Getter for #previous\n * @return {string}\n */\n get previous() {\n return this.#previous;\n }\n\n /**\n * Setter for #previous. Just throws an error.\n * @param {*} _\n */\n set previous(_) {\n throwReadOnlyError();\n }\n\n /**\n * toJSON for adl.nav.request_valid\n *\n * @return {\n * {\n * previous: string,\n * continue: string\n * }\n * }\n */\n toJSON() {\n this.jsonString = true;\n const result = {\n 'previous': this.previous,\n 'continue': this.continue,\n };\n delete this.jsonString;\n return result;\n }\n}\n","// @flow\n\nconst global = {\n SCORM_TRUE: 'true',\n SCORM_FALSE: 'false',\n STATE_NOT_INITIALIZED: 0,\n STATE_INITIALIZED: 1,\n STATE_TERMINATED: 2,\n LOG_LEVEL_DEBUG: 1,\n LOG_LEVEL_INFO: 2,\n LOG_LEVEL_WARNING: 3,\n LOG_LEVEL_ERROR: 4,\n LOG_LEVEL_NONE: 5,\n};\n\nconst scorm12 = {\n // Children lists\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions',\n core_children: 'student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,lesson_mode,exit,session_time',\n score_children: 'raw,min,max',\n comments_children: 'content,location,time',\n objectives_children: 'id,score,status',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio,language,speed,text',\n interactions_children: 'id,objectives,time,type,correct_responses,weighting,student_response,result,latency',\n\n error_descriptions: {\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use LMSGetDiagnostic for more information',\n },\n '201': {\n basicMessage: 'Invalid argument error',\n detailMessage: 'Indicates that an argument represents an invalid data model element or is otherwise incorrect.',\n },\n '202': {\n basicMessage: 'Element cannot have children',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_children\" for a data model element that does not support the \"_children\" suffix.',\n },\n '203': {\n basicMessage: 'Element not an array - cannot have count',\n detailMessage: 'Indicates that LMSGetValue was called with a data model element name that ends in \"_count\" for a data model element that does not support the \"_count\" suffix.',\n },\n '301': {\n basicMessage: 'Not initialized',\n detailMessage: 'Indicates that an API call was made before the call to lmsInitialize.',\n },\n '401': {\n basicMessage: 'Not implemented error',\n detailMessage: 'The data model element indicated in a call to LMSGetValue or LMSSetValue is valid, but was not implemented by this LMS. SCORM 1.2 defines a set of data model elements as being optional for an LMS to implement.',\n },\n '402': {\n basicMessage: 'Invalid set value, element is a keyword',\n detailMessage: 'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in \"_children\" and \"_count\").',\n },\n '403': {\n basicMessage: 'Element is read only',\n detailMessage: 'LMSSetValue was called with a data model element that can only be read.',\n },\n '404': {\n basicMessage: 'Element is write only',\n detailMessage: 'LMSGetValue was called on a data model element that can only be written to.',\n },\n '405': {\n basicMessage: 'Incorrect Data Type',\n detailMessage: 'LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst aicc = {\n ...scorm12, ...{\n cmi_children: 'core,suspend_data,launch_data,comments,objectives,student_data,student_preference,interactions,evaluation',\n student_preference_children: 'audio,language,lesson_type,speed,text,text_color,text_location,text_size,video,windows',\n student_data_children: 'attempt_number,tries,mastery_score,max_time_allowed,time_limit_action',\n student_demographics_children: 'city,class,company,country,experience,familiar_name,instructor_name,title,native_language,state,street_address,telephone,years_experience',\n tries_children: 'time,status,score',\n attempt_records_children: 'score,lesson_status',\n paths_children: 'location_id,date,time,status,why_left,time_in_element',\n },\n};\n\nconst scorm2004 = {\n // Children lists\n cmi_children: '_version,comments_from_learner,comments_from_lms,completion_status,credit,entry,exit,interactions,launch_data,learner_id,learner_name,learner_preference,location,max_time_allowed,mode,objectives,progress_measure,scaled_passing_score,score,session_time,success_status,suspend_data,time_limit_action,total_time',\n comments_children: 'comment,timestamp,location',\n score_children: 'max,raw,scaled,min',\n objectives_children: 'progress_measure,completion_status,success_status,description,score,id',\n correct_responses_children: 'pattern',\n student_data_children: 'mastery_score,max_time_allowed,time_limit_action',\n student_preference_children: 'audio_level,audio_captioning,delivery_speed,language',\n interactions_children: 'id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description',\n\n error_descriptions: {\n '0': {\n basicMessage: 'No Error',\n detailMessage: 'No error occurred, the previous API call was successful.',\n },\n '101': {\n basicMessage: 'General Exception',\n detailMessage: 'No specific error code exists to describe the error. Use GetDiagnostic for more information.',\n },\n '102': {\n basicMessage: 'General Initialization Failure',\n detailMessage: 'Call to Initialize failed for an unknown reason.',\n },\n '103': {\n basicMessage: 'Already Initialized',\n detailMessage: 'Call to Initialize failed because Initialize was already called.',\n },\n '104': {\n basicMessage: 'Content Instance Terminated',\n detailMessage: 'Call to Initialize failed because Terminate was already called.',\n },\n '111': {\n basicMessage: 'General Termination Failure',\n detailMessage: 'Call to Terminate failed for an unknown reason.',\n },\n '112': {\n basicMessage: 'Termination Before Initialization',\n detailMessage: 'Call to Terminate failed because it was made before the call to Initialize.',\n },\n '113': {\n basicMessage: 'Termination After Termination',\n detailMessage: 'Call to Terminate failed because Terminate was already called.',\n },\n '122': {\n basicMessage: 'Retrieve Data Before Initialization',\n detailMessage: 'Call to GetValue failed because it was made before the call to Initialize.',\n },\n '123': {\n basicMessage: 'Retrieve Data After Termination',\n detailMessage: 'Call to GetValue failed because it was made after the call to Terminate.',\n },\n '132': {\n basicMessage: 'Store Data Before Initialization',\n detailMessage: 'Call to SetValue failed because it was made before the call to Initialize.',\n },\n '133': {\n basicMessage: 'Store Data After Termination',\n detailMessage: 'Call to SetValue failed because it was made after the call to Terminate.',\n },\n '142': {\n basicMessage: 'Commit Before Initialization',\n detailMessage: 'Call to Commit failed because it was made before the call to Initialize.',\n },\n '143': {\n basicMessage: 'Commit After Termination',\n detailMessage: 'Call to Commit failed because it was made after the call to Terminate.',\n },\n '201': {\n basicMessage: 'General Argument Error',\n detailMessage: 'An invalid argument was passed to an API method (usually indicates that Initialize, Commit or Terminate did not receive the expected empty string argument.',\n },\n '301': {\n basicMessage: 'General Get Failure',\n detailMessage: 'Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '351': {\n basicMessage: 'General Set Failure',\n detailMessage: 'Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '391': {\n basicMessage: 'General Commit Failure',\n detailMessage: 'Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information.',\n },\n '401': {\n basicMessage: 'Undefined Data Model Element',\n detailMessage: 'The data model element name passed to GetValue or SetValue is not a valid SCORM data model element.',\n },\n '402': {\n basicMessage: 'Unimplemented Data Model Element',\n detailMessage: 'The data model element indicated in a call to GetValue or SetValue is valid, but was not implemented by this LMS. In SCORM 2004, this error would indicate an LMS that is not fully SCORM conformant.',\n },\n '403': {\n basicMessage: 'Data Model Element Value Not Initialized',\n detailMessage: 'Attempt to read a data model element that has not been initialized by the LMS or through a SetValue call. This error condition is often reached during normal execution of a SCO.',\n },\n '404': {\n basicMessage: 'Data Model Element Is Read Only',\n detailMessage: 'SetValue was called with a data model element that can only be read.',\n },\n '405': {\n basicMessage: 'Data Model Element Is Write Only',\n detailMessage: 'GetValue was called on a data model element that can only be written to.',\n },\n '406': {\n basicMessage: 'Data Model Element Type Mismatch',\n detailMessage: 'SetValue was called with a value that is not consistent with the data format of the supplied data model element.',\n },\n '407': {\n basicMessage: 'Data Model Element Value Out Of Range',\n detailMessage: 'The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element.',\n },\n '408': {\n basicMessage: 'Data Model Dependency Not Established',\n detailMessage: 'Some data model elements cannot be set until another data model element was set. This error condition indicates that the prerequisite element was not set before the dependent element.',\n },\n },\n};\n\nconst APIConstants = {\n global: global,\n scorm12: scorm12,\n aicc: aicc,\n scorm2004: scorm2004,\n};\n\nexport default APIConstants;\n","// @flow\nconst global = {\n GENERAL: 101,\n INITIALIZATION_FAILED: 101,\n INITIALIZED: 101,\n TERMINATED: 101,\n TERMINATION_FAILURE: 101,\n TERMINATION_BEFORE_INIT: 101,\n MULTIPLE_TERMINATION: 101,\n RETRIEVE_BEFORE_INIT: 101,\n RETRIEVE_AFTER_TERM: 101,\n STORE_BEFORE_INIT: 101,\n STORE_AFTER_TERM: 101,\n COMMIT_BEFORE_INIT: 101,\n COMMIT_AFTER_TERM: 101,\n ARGUMENT_ERROR: 101,\n CHILDREN_ERROR: 101,\n COUNT_ERROR: 101,\n GENERAL_GET_FAILURE: 101,\n GENERAL_SET_FAILURE: 101,\n GENERAL_COMMIT_FAILURE: 101,\n UNDEFINED_DATA_MODEL: 101,\n UNIMPLEMENTED_ELEMENT: 101,\n VALUE_NOT_INITIALIZED: 101,\n INVALID_SET_VALUE: 101,\n READ_ONLY_ELEMENT: 101,\n WRITE_ONLY_ELEMENT: 101,\n TYPE_MISMATCH: 101,\n VALUE_OUT_OF_RANGE: 101,\n DEPENDENCY_NOT_ESTABLISHED: 101,\n};\n\nconst scorm12 = {\n ...global, ...{\n RETRIEVE_BEFORE_INIT: 301,\n STORE_BEFORE_INIT: 301,\n COMMIT_BEFORE_INIT: 301,\n ARGUMENT_ERROR: 201,\n CHILDREN_ERROR: 202,\n COUNT_ERROR: 203,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 401,\n VALUE_NOT_INITIALIZED: 301,\n INVALID_SET_VALUE: 402,\n READ_ONLY_ELEMENT: 403,\n WRITE_ONLY_ELEMENT: 404,\n TYPE_MISMATCH: 405,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst scorm2004 = {\n ...global, ...{\n INITIALIZATION_FAILED: 102,\n INITIALIZED: 103,\n TERMINATED: 104,\n TERMINATION_FAILURE: 111,\n TERMINATION_BEFORE_INIT: 112,\n MULTIPLE_TERMINATIONS: 113,\n RETRIEVE_BEFORE_INIT: 122,\n RETRIEVE_AFTER_TERM: 123,\n STORE_BEFORE_INIT: 132,\n STORE_AFTER_TERM: 133,\n COMMIT_BEFORE_INIT: 142,\n COMMIT_AFTER_TERM: 143,\n ARGUMENT_ERROR: 201,\n GENERAL_GET_FAILURE: 301,\n GENERAL_SET_FAILURE: 351,\n GENERAL_COMMIT_FAILURE: 391,\n UNDEFINED_DATA_MODEL: 401,\n UNIMPLEMENTED_ELEMENT: 402,\n VALUE_NOT_INITIALIZED: 403,\n READ_ONLY_ELEMENT: 404,\n WRITE_ONLY_ELEMENT: 405,\n TYPE_MISMATCH: 406,\n VALUE_OUT_OF_RANGE: 407,\n DEPENDENCY_NOT_ESTABLISHED: 408,\n },\n};\n\nconst ErrorCodes = {\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default ErrorCodes;\n","const ValidLanguages = {\n 'aa': 'aa', 'ab': 'ab', 'ae': 'ae', 'af': 'af', 'ak': 'ak', 'am': 'am',\n 'an': 'an', 'ar': 'ar', 'as': 'as', 'av': 'av', 'ay': 'ay', 'az': 'az',\n 'ba': 'ba', 'be': 'be', 'bg': 'bg', 'bh': 'bh', 'bi': 'bi', 'bm': 'bm',\n 'bn': 'bn', 'bo': 'bo', 'br': 'br', 'bs': 'bs', 'ca': 'ca', 'ce': 'ce',\n 'ch': 'ch', 'co': 'co', 'cr': 'cr', 'cs': 'cs', 'cu': 'cu', 'cv': 'cv',\n 'cy': 'cy', 'da': 'da', 'de': 'de', 'dv': 'dv', 'dz': 'dz', 'ee': 'ee',\n 'el': 'el', 'en': 'en', 'eo': 'eo', 'es': 'es', 'et': 'et', 'eu': 'eu',\n 'fa': 'fa', 'ff': 'ff', 'fi': 'fi', 'fj': 'fj', 'fo': 'fo', 'fr': 'fr',\n 'fy': 'fy', 'ga': 'ga', 'gd': 'gd', 'gl': 'gl', 'gn': 'gn', 'gu': 'gu',\n 'gv': 'gv', 'ha': 'ha', 'he': 'he', 'hi': 'hi', 'ho': 'ho', 'hr': 'hr',\n 'ht': 'ht', 'hu': 'hu', 'hy': 'hy', 'hz': 'hz', 'ia': 'ia', 'id': 'id',\n 'ie': 'ie', 'ig': 'ig', 'ii': 'ii', 'ik': 'ik', 'io': 'io', 'is': 'is',\n 'it': 'it', 'iu': 'iu', 'ja': 'ja', 'jv': 'jv', 'ka': 'ka', 'kg': 'kg',\n 'ki': 'ki', 'kj': 'kj', 'kk': 'kk', 'kl': 'kl', 'km': 'km', 'kn': 'kn',\n 'ko': 'ko', 'kr': 'kr', 'ks': 'ks', 'ku': 'ku', 'kv': 'kv', 'kw': 'kw',\n 'ky': 'ky', 'la': 'la', 'lb': 'lb', 'lg': 'lg', 'li': 'li', 'ln': 'ln',\n 'lo': 'lo', 'lt': 'lt', 'lu': 'lu', 'lv': 'lv', 'mg': 'mg', 'mh': 'mh',\n 'mi': 'mi', 'mk': 'mk', 'ml': 'ml', 'mn': 'mn', 'mo': 'mo', 'mr': 'mr',\n 'ms': 'ms', 'mt': 'mt', 'my': 'my', 'na': 'na', 'nb': 'nb', 'nd': 'nd',\n 'ne': 'ne', 'ng': 'ng', 'nl': 'nl', 'nn': 'nn', 'no': 'no', 'nr': 'nr',\n 'nv': 'nv', 'ny': 'ny', 'oc': 'oc', 'oj': 'oj', 'om': 'om', 'or': 'or',\n 'os': 'os', 'pa': 'pa', 'pi': 'pi', 'pl': 'pl', 'ps': 'ps', 'pt': 'pt',\n 'qu': 'qu', 'rm': 'rm', 'rn': 'rn', 'ro': 'ro', 'ru': 'ru', 'rw': 'rw',\n 'sa': 'sa', 'sc': 'sc', 'sd': 'sd', 'se': 'se', 'sg': 'sg', 'sh': 'sh',\n 'si': 'si', 'sk': 'sk', 'sl': 'sl', 'sm': 'sm', 'sn': 'sn', 'so': 'so',\n 'sq': 'sq', 'sr': 'sr', 'ss': 'ss', 'st': 'st', 'su': 'su', 'sv': 'sv',\n 'sw': 'sw', 'ta': 'ta', 'te': 'te', 'tg': 'tg', 'th': 'th', 'ti': 'ti',\n 'tk': 'tk', 'tl': 'tl', 'tn': 'tn', 'to': 'to', 'tr': 'tr', 'ts': 'ts',\n 'tt': 'tt', 'tw': 'tw', 'ty': 'ty', 'ug': 'ug', 'uk': 'uk', 'ur': 'ur',\n 'uz': 'uz', 've': 've', 'vi': 'vi', 'vo': 'vo', 'wa': 'wa', 'wo': 'wo',\n 'xh': 'xh', 'yi': 'yi', 'yo': 'yo', 'za': 'za', 'zh': 'zh', 'zu': 'zu',\n 'aar': 'aar', 'abk': 'abk', 'ave': 'ave', 'afr': 'afr', 'aka': 'aka',\n 'amh': 'amh', 'arg': 'arg', 'ara': 'ara', 'asm': 'asm', 'ava': 'ava',\n 'aym': 'aym', 'aze': 'aze', 'bak': 'bak', 'bel': 'bel', 'bul': 'bul',\n 'bih': 'bih', 'bis': 'bis', 'bam': 'bam', 'ben': 'ben', 'tib': 'tib',\n 'bod': 'bod', 'bre': 'bre', 'bos': 'bos', 'cat': 'cat', 'che': 'che',\n 'cha': 'cha', 'cos': 'cos', 'cre': 'cre', 'cze': 'cze', 'ces': 'ces',\n 'chu': 'chu', 'chv': 'chv', 'wel': 'wel', 'cym': 'cym', 'dan': 'dan',\n 'ger': 'ger', 'deu': 'deu', 'div': 'div', 'dzo': 'dzo', 'ewe': 'ewe',\n 'gre': 'gre', 'ell': 'ell', 'eng': 'eng', 'epo': 'epo', 'spa': 'spa',\n 'est': 'est', 'baq': 'baq', 'eus': 'eus', 'per': 'per', 'fas': 'fas',\n 'ful': 'ful', 'fin': 'fin', 'fij': 'fij', 'fao': 'fao', 'fre': 'fre',\n 'fra': 'fra', 'fry': 'fry', 'gle': 'gle', 'gla': 'gla', 'glg': 'glg',\n 'grn': 'grn', 'guj': 'guj', 'glv': 'glv', 'hau': 'hau', 'heb': 'heb',\n 'hin': 'hin', 'hmo': 'hmo', 'hrv': 'hrv', 'hat': 'hat', 'hun': 'hun',\n 'arm': 'arm', 'hye': 'hye', 'her': 'her', 'ina': 'ina', 'ind': 'ind',\n 'ile': 'ile', 'ibo': 'ibo', 'iii': 'iii', 'ipk': 'ipk', 'ido': 'ido',\n 'ice': 'ice', 'isl': 'isl', 'ita': 'ita', 'iku': 'iku', 'jpn': 'jpn',\n 'jav': 'jav', 'geo': 'geo', 'kat': 'kat', 'kon': 'kon', 'kik': 'kik',\n 'kua': 'kua', 'kaz': 'kaz', 'kal': 'kal', 'khm': 'khm', 'kan': 'kan',\n 'kor': 'kor', 'kau': 'kau', 'kas': 'kas', 'kur': 'kur', 'kom': 'kom',\n 'cor': 'cor', 'kir': 'kir', 'lat': 'lat', 'ltz': 'ltz', 'lug': 'lug',\n 'lim': 'lim', 'lin': 'lin', 'lao': 'lao', 'lit': 'lit', 'lub': 'lub',\n 'lav': 'lav', 'mlg': 'mlg', 'mah': 'mah', 'mao': 'mao', 'mri': 'mri',\n 'mac': 'mac', 'mkd': 'mkd', 'mal': 'mal', 'mon': 'mon', 'mol': 'mol',\n 'mar': 'mar', 'may': 'may', 'msa': 'msa', 'mlt': 'mlt', 'bur': 'bur',\n 'mya': 'mya', 'nau': 'nau', 'nob': 'nob', 'nde': 'nde', 'nep': 'nep',\n 'ndo': 'ndo', 'dut': 'dut', 'nld': 'nld', 'nno': 'nno', 'nor': 'nor',\n 'nbl': 'nbl', 'nav': 'nav', 'nya': 'nya', 'oci': 'oci', 'oji': 'oji',\n 'orm': 'orm', 'ori': 'ori', 'oss': 'oss', 'pan': 'pan', 'pli': 'pli',\n 'pol': 'pol', 'pus': 'pus', 'por': 'por', 'que': 'que', 'roh': 'roh',\n 'run': 'run', 'rum': 'rum', 'ron': 'ron', 'rus': 'rus', 'kin': 'kin',\n 'san': 'san', 'srd': 'srd', 'snd': 'snd', 'sme': 'sme', 'sag': 'sag',\n 'slo': 'slo', 'sin': 'sin', 'slk': 'slk', 'slv': 'slv', 'smo': 'smo',\n 'sna': 'sna', 'som': 'som', 'alb': 'alb', 'sqi': 'sqi', 'srp': 'srp',\n 'ssw': 'ssw', 'sot': 'sot', 'sun': 'sun', 'swe': 'swe', 'swa': 'swa',\n 'tam': 'tam', 'tel': 'tel', 'tgk': 'tgk', 'tha': 'tha', 'tir': 'tir',\n 'tuk': 'tuk', 'tgl': 'tgl', 'tsn': 'tsn', 'ton': 'ton', 'tur': 'tur',\n 'tso': 'tso', 'tat': 'tat', 'twi': 'twi', 'tah': 'tah', 'uig': 'uig',\n 'ukr': 'ukr', 'urd': 'urd', 'uzb': 'uzb', 'ven': 'ven', 'vie': 'vie',\n 'vol': 'vol', 'wln': 'wln', 'wol': 'wol', 'xho': 'xho', 'yid': 'yid',\n 'yor': 'yor', 'zha': 'zha', 'chi': 'chi', 'zho': 'zho', 'zul': 'zul',\n};\n\nexport default ValidLanguages;\n","// @flow\n\nconst scorm12 = {\n CMIString256: '^.{0,255}$',\n CMIString4096: '^.{0,4096}$',\n CMITime: '^(?:[01]\\\\d|2[0123]):(?:[012345]\\\\d):(?:[012345]\\\\d)$', // eslint-disable-line\n CMITimespan: '^([0-9]{2,}):([0-9]{2}):([0-9]{2})(\\.[0-9]{1,2})?$', // eslint-disable-line\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{0,3})(\\.[0-9]*)?$', // eslint-disable-line\n CMIIdentifier: '^[\\\\u0021-\\\\u007E\\\\s]{0,255}$',\n CMIFeedback: '^.{0,255}$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMIStatus: '^(passed|completed|failed|incomplete|browsed)$',\n CMIStatus2: '^(passed|completed|failed|incomplete|browsed|not attempted)$',\n CMIExit: '^(time-out|suspend|logout|)$',\n CMIType: '^(true-false|choice|fill-in|matching|performance|sequencing|likert|numeric)$',\n CMIResult: '^(correct|wrong|unanticipated|neutral|([0-9]{0,3})?(\\\\.[0-9]*)?)$', // eslint-disable-line\n NAVEvent: '^(previous|continue)$',\n\n // Data ranges\n score_range: '0#100',\n audio_range: '-1#100',\n speed_range: '-100#100',\n weighting_range: '-100#100',\n text_range: '-1#1',\n};\n\nconst aicc = {\n ...scorm12, ...{\n CMIIdentifier: '^\\\\w{1,255}$',\n },\n};\n\nconst scorm2004 = {\n CMIString200: '^[\\\\u0000-\\\\uFFFF]{0,200}$',\n CMIString250: '^[\\\\u0000-\\\\uFFFF]{0,250}$',\n CMIString1000: '^[\\\\u0000-\\\\uFFFF]{0,1000}$',\n CMIString4000: '^[\\\\u0000-\\\\uFFFF]{0,4000}$',\n CMIString64000: '^[\\\\u0000-\\\\uFFFF]{0,64000}$',\n CMILang: '^([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?$|^$', // eslint-disable-line\n CMILangString250: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,250}$)?$', // eslint-disable-line\n CMILangcr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\}))(.*?)$', // eslint-disable-line\n CMILangString250cr: '^((\\{lang=([a-zA-Z]{2,3}|i|x)?(\\-[a-zA-Z0-9\\-]{2,8})?\\})?(.{0,250})?)?$', // eslint-disable-line\n CMILangString4000: '^(\\{lang=([a-zA-Z]{2,3}|i|x)(\\-[a-zA-Z0-9\\-]{2,8})?\\})?((?!\\{.*$).{0,4000}$)?$', // eslint-disable-line\n CMITime: '^(19[7-9]{1}[0-9]{1}|20[0-2]{1}[0-9]{1}|203[0-8]{1})((-(0[1-9]{1}|1[0-2]{1}))((-(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1}))(T([0-1]{1}[0-9]{1}|2[0-3]{1})((:[0-5]{1}[0-9]{1})((:[0-5]{1}[0-9]{1})((\\\\.[0-9]{1,2})((Z|([+|-]([0-1]{1}[0-9]{1}|2[0-3]{1})))(:[0-5]{1}[0-9]{1})?)?)?)?)?)?)?)?$',\n CMITimespan: '^P(?:([.,\\\\d]+)Y)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)W)?(?:([.,\\\\d]+)D)?(?:T?(?:([.,\\\\d]+)H)?(?:([.,\\\\d]+)M)?(?:([.,\\\\d]+)S)?)?$',\n CMIInteger: '^\\\\d+$',\n CMISInteger: '^-?([0-9]+)$',\n CMIDecimal: '^-?([0-9]{1,5})(\\\\.[0-9]{1,18})?$',\n CMIIdentifier: '^\\\\S{1,250}[a-zA-Z0-9]$',\n CMIShortIdentifier: '^[\\\\w\\\\.\\\\-\\\\_]{1,250}$', // eslint-disable-line\n CMILongIdentifier: '^(?:(?!urn:)\\\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\\\S{1,4000}|.{1,4000})$', // need to re-examine this\n CMIFeedback: '^.*$', // This must be redefined\n CMIIndex: '[._](\\\\d+).',\n CMIIndexStore: '.N(\\\\d+).',\n\n // Vocabulary Data Type Definition\n CMICStatus: '^(completed|incomplete|not attempted|unknown)$',\n CMISStatus: '^(passed|failed|unknown)$',\n CMIExit: '^(time-out|suspend|logout|normal)$',\n CMIType: '^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$',\n CMIResult: '^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\\\.[0-9]{1,18})?)$',\n NAVEvent: '^(previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|\\{target=\\\\S{0,200}[a-zA-Z0-9]\\}choice|jump)$', // eslint-disable-line\n NAVBoolean: '^(unknown|true|false$)',\n NAVTarget: '^(previous|continue|choice.{target=\\\\S{0,200}[a-zA-Z0-9]})$',\n\n // Data ranges\n scaled_range: '-1#1',\n audio_range: '0#*',\n speed_range: '0#*',\n text_range: '-1#1',\n progress_range: '0#1',\n};\n\nconst Regex = {\n aicc: aicc,\n scorm12: scorm12,\n scorm2004: scorm2004,\n};\n\nexport default Regex;\n","// @flow\nimport Regex from './regex';\n\nconst scorm2004_regex = Regex.scorm2004;\n\nconst learner = {\n 'true-false': {\n format: '^true$|^false$',\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'choice': {\n format: scorm2004_regex.CMILongIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: true,\n },\n 'fill-in': {\n format: scorm2004_regex.CMILangString250,\n max: 10,\n delimiter: '[,]',\n unique: false,\n },\n 'long-fill-in': {\n format: scorm2004_regex.CMILangString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'matching': {\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'performance': {\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n },\n 'sequencing': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 36,\n delimiter: '[,]',\n unique: false,\n },\n 'likert': {\n format: scorm2004_regex.CMIShortIdentifier,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'numeric': {\n format: scorm2004_regex.CMIDecimal,\n max: 1,\n delimiter: '',\n unique: false,\n },\n 'other': {\n format: scorm2004_regex.CMIString4000,\n max: 1,\n delimiter: '',\n unique: false,\n },\n};\n\nconst correct = {\n 'true-false': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: '^true$|^false$',\n limit: 1,\n },\n 'choice': {\n max: 36,\n delimiter: '[,]',\n unique: true,\n duplicate: false,\n format: scorm2004_regex.CMILongIdentifier,\n },\n 'fill-in': {\n max: 10,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMILangString250cr,\n },\n 'long-fill-in': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: true,\n format: scorm2004_regex.CMILangString4000,\n },\n 'matching': {\n max: 36,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIShortIdentifier,\n },\n 'performance': {\n max: 250,\n delimiter: '[,]',\n delimiter2: '[.]',\n unique: false,\n duplicate: false,\n format: '^$|' + scorm2004_regex.CMIShortIdentifier,\n format2: scorm2004_regex.CMIDecimal + '|^$|' +\n scorm2004_regex.CMIShortIdentifier,\n },\n 'sequencing': {\n max: 36,\n delimiter: '[,]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n },\n 'likert': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIShortIdentifier,\n limit: 1,\n },\n 'numeric': {\n max: 2,\n delimiter: '[:]',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIDecimal,\n limit: 1,\n },\n 'other': {\n max: 1,\n delimiter: '',\n unique: false,\n duplicate: false,\n format: scorm2004_regex.CMIString4000,\n limit: 1,\n },\n};\n\nconst Responses = {\n learner: learner,\n correct: correct,\n};\n\nexport default Responses;\n","// @flow\n\nimport APIConstants from './constants/api_constants';\n\nconst scorm12_errors = APIConstants.scorm12.error_descriptions;\nconst aicc_errors = APIConstants.aicc.error_descriptions;\nconst scorm2004_errors = APIConstants.scorm2004.error_descriptions;\n\n/**\n * Base Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n * @param {string} errorMessage\n * @param {string} detailedMessage\n */\n constructor(errorCode: number, errorMessage: String, detailedMessage: String) {\n super(errorMessage);\n this.#errorCode = errorCode;\n this.#errorMessage = errorMessage;\n this.#detailedMessage = detailedMessage;\n }\n\n #errorCode;\n #errorMessage;\n #detailedMessage;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Getter for #errorMessage\n * @return {string}\n */\n get errorMessage() {\n return this.#errorMessage;\n }\n\n /**\n * Getter for #detailedMessage\n * @return {string}\n */\n get detailedMessage() {\n return this.#detailedMessage;\n }\n}\n\n/**\n * SCORM 1.2 Validation Error\n */\nexport class Scorm12ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm12_errors, String(errorCode))) {\n super(errorCode, scorm12_errors[String(errorCode)].basicMessage, scorm12_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm12_errors['101'].basicMessage, scorm12_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * AICC Validation Error\n */\nexport class AICCValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(aicc_errors, String(errorCode))) {\n super(errorCode, aicc_errors[String(errorCode)].basicMessage, aicc_errors[String(errorCode)].detailMessage);\n } else {\n super(101, aicc_errors['101'].basicMessage, aicc_errors['101'].detailMessage);\n }\n }\n}\n\n/**\n * SCORM 2004 Validation Error\n */\nexport class Scorm2004ValidationError extends ValidationError {\n /**\n * Constructor to take in an error code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n if ({}.hasOwnProperty.call(scorm2004_errors, String(errorCode))) {\n super(errorCode, scorm2004_errors[String(errorCode)].basicMessage, scorm2004_errors[String(errorCode)].detailMessage);\n } else {\n super(101, scorm2004_errors['101'].basicMessage, scorm2004_errors['101'].detailMessage);\n }\n }\n}\n","// @flow\nexport const SECONDS_PER_SECOND = 1.0;\nexport const SECONDS_PER_MINUTE = 60;\nexport const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE;\nexport const SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR;\n\nconst designations = [\n ['D', SECONDS_PER_DAY],\n ['H', SECONDS_PER_HOUR],\n ['M', SECONDS_PER_MINUTE],\n ['S', SECONDS_PER_SECOND],\n];\n\n/**\n * Converts a Number to a String of HH:MM:SS\n *\n * @param {Number} totalSeconds\n * @return {string}\n */\nexport function getSecondsAsHHMMSS(totalSeconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!totalSeconds || totalSeconds <= 0) {\n return '00:00:00';\n }\n\n const hours = Math.floor(totalSeconds / SECONDS_PER_HOUR);\n\n const dateObj = new Date(totalSeconds * 1000);\n const minutes = dateObj.getUTCMinutes();\n // make sure we add any possible decimal value\n const seconds = dateObj.getSeconds();\n const ms = totalSeconds % 1.0;\n let msStr = '';\n if (countDecimals(ms) > 0) {\n if (countDecimals(ms) > 2) {\n msStr = ms.toFixed(2);\n } else {\n msStr = String(ms);\n }\n msStr = '.' + msStr.split('.')[1];\n }\n\n return (hours + ':' + minutes + ':' + seconds).replace(/\\b\\d\\b/g,\n '0$&') + msStr;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {Number} seconds\n * @return {String}\n */\nexport function getSecondsAsISODuration(seconds: Number) {\n // SCORM spec does not deal with negative durations, give zero back\n if (!seconds || seconds <= 0) {\n return 'PT0S';\n }\n\n let duration = 'P';\n let remainder = seconds;\n\n designations.forEach(([sign, current_seconds]) => {\n let value = Math.floor(remainder / current_seconds);\n\n remainder = remainder % current_seconds;\n if (countDecimals(remainder) > 2) {\n remainder = Number(Number(remainder).toFixed(2));\n }\n // If we have anything left in the remainder, and we're currently adding\n // seconds to the duration, go ahead and add the decimal to the seconds\n if (sign === 'S' && remainder > 0) {\n value += remainder;\n }\n\n if (value) {\n if ((duration.indexOf('D') > 0 ||\n sign === 'H' || sign === 'M' || sign === 'S') &&\n duration.indexOf('T') === -1) {\n duration += 'T';\n }\n duration += `${value}${sign}`;\n }\n });\n\n return duration;\n}\n\n/**\n * Calculate the number of seconds from HH:MM:SS.DDDDDD\n *\n * @param {string} timeString\n * @param {RegExp} timeRegex\n * @return {number}\n */\nexport function getTimeAsSeconds(timeString: String, timeRegex: RegExp) {\n if (!timeString || typeof timeString !== 'string' ||\n !timeString.match(timeRegex)) {\n return 0;\n }\n const parts = timeString.split(':');\n const hours = Number(parts[0]);\n const minutes = Number(parts[1]);\n const seconds = Number(parts[2]);\n return (hours * 3600) + (minutes * 60) + seconds;\n}\n\n/**\n * Calculate the number of seconds from ISO 8601 Duration\n *\n * @param {string} duration\n * @param {RegExp} durationRegex\n * @return {number}\n */\nexport function getDurationAsSeconds(duration: String, durationRegex: RegExp) {\n if (!duration || !duration.match(durationRegex)) {\n return 0;\n }\n\n const [, years, months, , days, hours, minutes, seconds] = new RegExp(\n durationRegex).exec(duration) || [];\n\n let result = 0.0;\n\n result += (Number(seconds) * 1.0 || 0.0);\n result += (Number(minutes) * 60.0 || 0.0);\n result += (Number(hours) * 3600.0 || 0.0);\n result += (Number(days) * (60 * 60 * 24.0) || 0.0);\n result += (Number(years) * (60 * 60 * 24 * 365.0) || 0.0);\n\n return result;\n}\n\n/**\n * Adds together two ISO8601 Duration strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} durationRegex\n * @return {string}\n */\nexport function addTwoDurations(\n first: String,\n second: String,\n durationRegex: RegExp) {\n return getSecondsAsISODuration(\n getDurationAsSeconds(first, durationRegex) +\n getDurationAsSeconds(second, durationRegex),\n );\n}\n\n/**\n * Add together two HH:MM:SS.DD strings\n *\n * @param {string} first\n * @param {string} second\n * @param {RegExp} timeRegex\n * @return {string}\n */\nexport function addHHMMSSTimeStrings(\n first: String,\n second: String,\n timeRegex: RegExp) {\n return getSecondsAsHHMMSS(\n getTimeAsSeconds(first, timeRegex) +\n getTimeAsSeconds(\n second, timeRegex),\n );\n}\n\n/**\n * Flatten a JSON object down to string paths for each values\n * @param {object} data\n * @return {object}\n */\nexport function flatten(data) {\n const result = {};\n\n /**\n * Recurse through the object\n * @param {*} cur\n * @param {*} prop\n */\n function recurse(cur, prop) {\n if (Object(cur) !== cur) {\n result[prop] = cur;\n } else if (Array.isArray(cur)) {\n for (let i = 0, l = cur.length; i < l; i++) {\n recurse(cur[i], prop + '[' + i + ']');\n if (l === 0) result[prop] = [];\n }\n } else {\n let isEmpty = true;\n for (const p in cur) {\n if ({}.hasOwnProperty.call(cur, p)) {\n isEmpty = false;\n recurse(cur[p], prop ? prop + '.' + p : p);\n }\n }\n if (isEmpty && prop) result[prop] = {};\n }\n }\n\n recurse(data, '');\n return result;\n}\n\n/**\n * Un-flatten a flat JSON object\n * @param {object} data\n * @return {object}\n */\nexport function unflatten(data) {\n 'use strict';\n if (Object(data) !== data || Array.isArray(data)) return data;\n const regex = /\\.?([^.[\\]]+)|\\[(\\d+)]/g;\n const result = {};\n for (const p in data) {\n if ({}.hasOwnProperty.call(data, p)) {\n let cur = result;\n let prop = '';\n let m = regex.exec(p);\n while (m) {\n cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));\n prop = m[2] || m[1];\n m = regex.exec(p);\n }\n cur[prop] = data[p];\n }\n }\n return result[''] || result;\n}\n\n/**\n * Counts the number of decimal places\n * @param {number} num\n * @return {number}\n */\nexport function countDecimals(num: number) {\n if (Math.floor(num) === num || String(num).indexOf('.') < 0) return 0;\n const parts = num.toString().split('.')[1];\n return parts.length || 0;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Scorm2004API from '../Scorm2004API';\n\nwindow.Scorm2004API = Scorm2004API;\n"],"names":["FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","objectToString","toString","nativeMax","Math","max","nativeMin","min","now","Date","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","toNumber","isObject","invokeFunc","time","args","thisArg","undefined","apply","leadingEdge","setTimeout","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","clearTimeout","flush","debounced","isInvoking","arguments","value","type","isObjectLike","isSymbol","call","other","valueOf","replace","isBinary","test","slice","module","exports","CMIArray","ValidationError","ErrorCodes","APIConstants","unflatten","global_constants","scorm12_error_codes","scorm12","BaseAPI","error_codes","settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","strict_errors","xhrHeaders","xhrWithCredentials","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","requestHandler","commitObject","onLogMessage","messageLevel","logMessage","console","error","LOG_LEVEL_WARNING","warn","LOG_LEVEL_INFO","info","LOG_LEVEL_DEBUG","debug","log","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","INITIALIZED","isTerminated","TERMINATED","cmi","setStartTime","STATE_INITIALIZED","processListeners","apiLog","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","CMIElement","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","e","message","GENERAL","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","formatMessage","baseLength","messageString","fillChars","length","i","CMIElementBaseLength","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","foundFirstIndex","invalidErrorMessage","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","stringMatches","validateCorrectResponse","index","isNaN","item","childArray","newChild","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","removeIndex","findIndex","obj","splice","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","a_match","c_match","a_num","Number","c_num","int_pattern","obj_pattern","keys","map","key","sort","b","d","forEach","element","loadFromJSON","startingData","currentCMIElement","constructor","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","httpReq","XMLHttpRequest","open","header","setRequestHeader","withCredentials","onload","Array","send","join","headers","blob","Blob","navigator","sendBeacon","when","ScheduledCommit","API","wrapper","bind","commit","ADL","CMI","CMICommentsObject","CMIInteractionsCorrectResponsesObject","CMIInteractionsObject","CMIInteractionsObjectivesObject","CMIObjectivesObject","Utilities","Responses","ValidLanguages","Regex","scorm2004_constants","scorm2004_error_codes","correct_responses","correct","scorm2004_regex","Scorm2004API","finalSettings","mastery_override","correct_response","current_index","found","count","_count","adl","Initialize","lmsInitialize","Terminate","lmsTerminate","GetValue","lmsGetValue","SetValue","lmsSetValue","Commit","lmsCommit","GetLastError","lmsGetLastError","GetErrorString","lmsGetErrorString","GetDiagnostic","lmsGetDiagnostic","terminate","nav","request","getValue","setValue","getLastError","getErrorString","getDiagnostic","_commonSetCMIValue","parts","interaction","interactions","DEPENDENCY_NOT_ESTABLISHED","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","_commonGetCMIValue","detail","basicMessage","detailMessage","error_descriptions","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","TYPE_MISMATCH","format2","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","toLowerCase","newAPI","terminateCommit","cmiExport","renderCMIToJSONObject","total_time","getCurrentTotalTime","flattened","flatten","mode","credit","completion_threshold","progress_measure","completion_status","scaled_passing_score","score","scaled","success_status","navRequest","encodeURIComponent","renderCommitCMI","processHttpRequest","scorm12_constants","scorm12_regex","checkValidFormat","regexPattern","errorClass","allowEmptyString","checkValidRange","rangePattern","ranges","BaseCMI","getTime","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","decimalRegex","INVALID_SET_VALUE","VALUE_OUT_OF_RANGE","CMIDecimal","_children","raw","jsonString","children","Scorm2004ValidationError","Util","learner_responses","learner","throwReadOnlyError","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwTypeMismatchError","throwDependencyNotEstablishedError","throwGeneralSetError","check2004ValidFormat","check2004ValidRange","cmi_children","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","comments_from_lms","CMICommentsFromLMS","CMIInteractions","objectives","CMIObjectives","_version","CMICStatus","entry","exit","CMIExit","launch_data","learner_id","learner_name","location","CMIString1000","max_time_allowed","progress_range","session_time","CMITimespan","CMISStatus","suspend_data","CMIString64000","time_limit_action","sessionTime","startTime","start_time","seconds","getSecondsAsISODuration","addTwoDurations","student_preference_children","audio_level","audio_range","language","CMILang","delivery_speed","speed_range","audio_captioning","CMISInteger","text_range","interactions_children","objectives_children","comments_children","correct_responses_children","id","CMILongIdentifier","CMIType","timestamp","CMITime","weighting","learner_response","CMIResult","latency","description","CMILangString250","scaled_range","readOnlyAfterInit","comment","CMILangString4000","CMIString250","CMIFeedback","ADLNav","request_valid","ADLNavRequestValid","NAVEvent","_target","_","previous","continue","LOG_LEVEL_NONE","core_children","student_data_children","aicc","student_demographics_children","tries_children","attempt_records_children","paths_children","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","CMIString256","CMIString4096","CMIInteger","CMIIdentifier","CMIIndex","CMIStatus","CMIStatus2","weighting_range","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","scorm12_errors","aicc_errors","scorm2004_errors","errorMessage","detailedMessage","Scorm12ValidationError","AICCValidationError","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_HOUR","SECONDS_PER_DAY","designations","getSecondsAsHHMMSS","totalSeconds","hours","floor","dateObj","minutes","getUTCMinutes","getSeconds","ms","msStr","countDecimals","toFixed","duration","remainder","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","months","days","first","second","addHHMMSSTimeStrings","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","window"],"sourceRoot":""} \ No newline at end of file +{"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,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 diff --git a/dist/scorm2004.min.js b/dist/scorm2004.min.js index 159dbe0..8f4d2ce 100644 --- a/dist/scorm2004.min.js +++ b/dist/scorm2004.min.js @@ -4,7 +4,7 @@ \***********************************************/function(e,s,t){function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function v(){return f.Date.now()}var n=NaN,i="[object Symbol]",o=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt,t="object"==(void 0===t.g?"undefined":r(t.g))&&t.g&&t.g.Object===Object&&t.g,h="object"==("undefined"==typeof self?"undefined":r(self))&&self&&self.Object===Object&&self,f=t||h||Function("return this")(),d=Object.prototype.toString,b=Math.max,M=Math.min;function E(e){var t=r(e);return e&&("object"==t||"function"==t)}function m(e){return"symbol"==r(e)||!!(t=e)&&"object"==r(t)&&d.call(e)==i;var t}function _(e){if("number"==typeof e)return e;if(m(e))return n;if("string"!=typeof(e=E(e)?E(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(o,"");var t=l.test(e);return t||c.test(e)?u(e.slice(2),t?2:8):a.test(e)?n:+e}e.exports=function(h,r,e){var n,i,o,a,s,l,c=0,f=!1,u=!1,t=!0;if("function"!=typeof h)throw new TypeError("Expected a function");function d(e){var t=n,r=i;return n=i=void 0,c=e,a=h.apply(r,t)}function m(e){var t=e-l;return void 0===l||r<=t||t<0||u&&o<=e-c}function p(){var e,t=v();if(m(t))return g(t);s=setTimeout(p,(e=r-((t=t)-l),u?M(e,o-(t-c)):e))}function g(e){return s=void 0,t&&n?d(e):(n=i=void 0,a)}function y(){var e=v(),t=m(e);if(n=arguments,i=this,l=e,t){if(void 0===s)return c=e=l,s=setTimeout(p,r),f?d(e):a;if(u)return s=setTimeout(p,r),d(l)}return void 0===s&&(s=setTimeout(p,r)),a}return r=_(r)||0,E(e)&&(f=!!e.leading,u="maxWait"in e,o=u?b(_(e.maxWait)||0,r):o,t="trailing"in e?!!e.trailing:t),y.cancel=function(){void 0!==s&&clearTimeout(s),n=l=i=s=void(c=0)},y.flush=function(){return void 0===s?a:g(v())},y}},"./src/BaseAPI.js": /*!************************!*\ !*** ./src/BaseAPI.js ***! - \************************/function(r,e,t){"use strict";t.r(e),t.d(e,{default:function(){return T}});var p=t(/*! ./cmi/common */"./src/cmi/common.js"),l=t(/*! ./exceptions */"./src/exceptions.js"),e=t(/*! ./constants/error_codes */"./src/constants/error_codes.js"),c=t(/*! ./constants/api_constants */"./src/constants/api_constants.js"),u=t(/*! ./utilities */"./src/utilities.js"),h=t(/*! lodash.debounce */"./node_modules/lodash.debounce/index.js"),g=t.n(h);function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,o=[],a=!0,s=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);a=!0);}catch(e){s=!0,i=e}finally{try{a||null==r.return||r.return()}finally{if(s)throw i}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?v(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=this.apiLogLevel&&this.settings.onLogMessage(n,r)}},{key:"formatMessage",value:function(e,t,r){for(var n="",i=20-(n+=e).length,o=0;oe.max&&this.throwSCORMError(u.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}},{key:"checkDuplicateChoiceResponse",value:function(e,t){var r=e.correct_responses._count;if("choice"===e.type)for(var n=0;nNumber(t[1])&&this.throwSCORMError(u.TYPE_MISMATCH);else if(""!==t[o]&&n.unique)for(var s=0;s=this.cmi.completion_threshold?(console.debug("Setting Completion Status: Completed"),this.cmi.completion_status="completed"):(console.debug("Setting Completion Status: Incomplete"),this.cmi.completion_status="incomplete")),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.score.scaled>=this.cmi.scaled_passing_score?(console.debug("Setting Success Status: Passed"),this.cmi.success_status="passed"):(console.debug("Setting Success Status: Failed"),this.cmi.success_status="failed")));var t,r,n=!1,i=(this.adl.nav.request!==(null===(i=this.startingData)||void 0===i||null===(r=i.adl)||void 0===r||null===(t=r.nav)||void 0===t?void 0:t.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),n=!0),this.renderCommitCMI(e||this.settings.alwaysSendTotalTime));return this.apiLogLevel===c.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i)),this.settings.lmsCommitUrl?(r=this.processHttpRequest(this.settings.lmsCommitUrl,i,e),n&&void 0!==r.navRequest&&""!==r.navRequest&&Function('"use strict";(() => { '.concat(r.navRequest," })()"))(),r):c.SCORM_TRUE}}])&&v(t.prototype,e),r&&v(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(e.default)},"./src/cmi/common.js": diff --git a/src/BaseAPI.js b/src/BaseAPI.js index 86591f0..a6eb520 100644 --- a/src/BaseAPI.js +++ b/src/BaseAPI.js @@ -1150,24 +1150,20 @@ export default class BaseAPI { } } else { try { - const headers = { - type: settings.commitRequestDataType, - }; - let blob; - if (params instanceof Array) { - blob = new Blob([params.join('&')], headers); - } else { - blob = new Blob([JSON.stringify(params)], headers); - } - + params = settings.requestHandler(params); + fetch(url, { + method: 'POST', + body: params instanceof Array ? params.join('&') : JSON.stringify(params), + headers: { + ...settings.xhrHeaders, + 'Content-Type': settings.commitRequestDataType, + }, + credentials: settings.xhrWithCredentials ? 'include' : undefined, + keepalive: true, + }); result = {}; - if (navigator.sendBeacon(url, blob)) { - result.result = global_constants.SCORM_TRUE; - result.errorCode = 0; - } else { - result.result = global_constants.SCORM_FALSE; - result.errorCode = 101; - } + result.result = global_constants.SCORM_TRUE; + result.errorCode = 0; } catch (e) { console.error(e); api.processListeners('CommitError');