diff --git a/dist/scorm-again.js b/dist/scorm-again.js index 11ba869..0781d7c 100644 --- a/dist/scorm-again.js +++ b/dist/scorm-again.js @@ -424,7 +424,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -1942,7 +1942,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -2340,7 +2340,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -3021,7 +3021,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -4594,7 +4594,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -5119,7 +5119,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -6927,7 +6927,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } @@ -10211,7 +10211,7 @@ function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); } -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } +function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } diff --git a/dist/scorm-again.js.map b/dist/scorm-again.js.map index fd562d7..a5c819f 100644 --- a/dist/scorm-again.js.map +++ b/dist/scorm-again.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/lodash.debounce/index.js","src/AICC.js","src/BaseAPI.js","src/Scorm12API.js","src/Scorm2004API.js","src/cmi/aicc_cmi.js","src/cmi/common.js","src/cmi/scorm12_cmi.js","src/cmi/scorm2004_cmi.js","src/constants/api_constants.js","src/constants/error_codes.js","src/constants/language_constants.js","src/constants/regex.js","src/constants/response_constants.js","src/exceptions.js","src/exports.js","src/utilities.js"],"names":["debounce","func","wait","options","invokeFunc","time","args","lastArgs","thisArg","lastThis","undefined","lastInvokeTime","result","apply","leadingEdge","timerId","setTimeout","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","clearTimeout","flush","debounced","isInvoking","arguments","this","TypeError","FUNC_ERROR_TEXT","toNumber","isObject","nativeMax","value","type","isObjectLike","isSymbol","objectToString","call","symbolTag","NAN","other","valueOf","replace","reTrim","isBinary","reIsBinary","test","reIsOctal","freeParseInt","slice","reIsBadHex","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","toString","Math","max","min","Date","module","exports","_Scorm12API2","_interopRequireDefault","require","_aicc_cmi","_scorm12_cmi","AICC","settings","_this","_classCallCheck","finalSettings","_objectSpread","mastery_override","_super","cmi","CMI","nav","NAV","CMIElement","foundFirstIndex","newChild","_get","_getPrototypeOf","stringMatches","CMIEvaluationCommentsObject","CMITriesObject","CMIAttemptRecordsObject","newAPI","Scorm12API","_common","_exceptions","_error_codes2","_api_constants","_utilities","_lodash","global_constants","APIConstants","scorm12_error_codes","ErrorCodes","scorm12","BaseAPI","error_codes","_timeout","set","writable","_error_codes","_settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","_defineProperty","constructor","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","_classPrivateFieldSet","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","_classPrivateFieldGet","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","LOG_LEVEL_INFO","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","e","ValidationError","message","console","error","GENERAL","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","LOG_LEVEL_DEBUG","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","logMessage","messageLevel","formatMessage","LOG_LEVEL_WARNING","warn","info","debug","log","messageString","fillChars","length","i","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","concat","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","CMIArray","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","_ret","v","removeIndex","findIndex","obj","splice","_typeof","_this2","_ret2","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","c_match","a_match","a_num","Number","c_num","_this3","int_pattern","obj_pattern","keys","map","key","sort","_ref","_ref2","_ref3","_slicedToArray","_ref4","forEach","element","loadFromJSON","unflatten","startingData","currentCMIElement","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","blob","headers","Array","Blob","join","navigator","sendBeacon","httpReq","XMLHttpRequest","open","onload","setRequestHeader","send","when","ScheduledCommit","API","_API","_cancelled","_timeout2","_callback","wrapper","bind","commit","_BaseAPI2","Utilities","_interopRequireWildcard","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","CMIObjectivesObject","CMIInteractionsCorrectResponsesObject","CMIInteractionsObjectivesObject","CMIInteractionsObject","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","_this$startingData","_this$startingData$cm","_this$startingData$cm2","commitObject","renderCommitCMI","processHttpRequest","_scorm2004_cmi","_response_constants","_language_constants","_regex","scorm2004_constants","scorm2004_error_codes","correct_responses","Responses","correct","scorm2004_regex","Regex","Scorm2004API","_version","_assertThisInitialized","correct_response","current_index","found","count","_count","adl","ADL","Initialize","Terminate","lmsTerminate","GetValue","SetValue","Commit","GetLastError","GetErrorString","GetDiagnostic","request","parts","interaction","interactions","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","DEPENDENCY_NOT_ESTABLISHED","CMICommentsObject","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","format2","TYPE_MISMATCH","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","ValidLanguages","toLowerCase","_this$startingData$ad","_this$startingData$ad2","mode","completion_threshold","progress_measure","completion_status","scaled_passing_score","scaled","success_status","navRequest","encodeURIComponent","Scorm12CMI","aicc_constants","aicc","aicc_regex","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","_this$student_prefere","_this$student_data","_this$student_demogra","_this$evaluation","_this$paths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","_super2","CMIEvaluationComments","_this$comments","BaseCMI","_super3","comments_children","INVALID_SET_VALUE","_super4","student_preference_children","_lesson_type","_text_color","_text_location","_text_size","_video","windows","children","_this$windows","lesson_type","check12ValidFormat","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","_this4","_super5","student_data_children","_tries_during_lesson","tries","CMITries","_this$tries","tries_during_lesson","throwReadOnlyError","max_time_allowed","time_limit_action","CMIStudentData","_this5","_super6","_children","student_demographics_children","_city","_class","_company","_country","_experience","_familiar_name","_instructor_name","_title","_native_language","_state","_street_address","_telephone","_years_experience","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","_super7","paths_children","CMIPathsObject","_this6","_super8","_location_id","_date","_time","_status","_why_left","_time_in_element","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","_super9","tries_children","_this7","_super10","_status2","_time2","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","_this$score","CMIAttemptRecords","_super11","attempt_records_children","_this8","_super12","_lesson_status","_this$score2","_this9","_super13","_content","_location","_time3","content","location","checkValidFormat","regexPattern","allowEmptyString","checkValidRange","rangePattern","ranges","scorm12_regex","_initialized","_start_time","getTime","decimalRegex","_children2","_score_range","_invalid_error_code","_invalid_type_code","_invalid_range_code","_decimal_regex","_raw","_min","_max","CMIDecimal","_errorCode","_children3","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidRange","_version2","_launch_data","_comments","_comments_from_lms","CMICore","CMIObjectives","CMIInteractions","_this$core","_this$objectives","_this$interactions","_this$core2","CMIString4096","start_time","core_children","_student_id","_student_name","_lesson_location","_credit","_entry","_total_time","_lesson_mode","_exit","_session_time","_suspend_data","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","Util","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","_children4","_mastery_score","_max_time_allowed","_time_limit_action","_children5","_audio","_language","_speed","_text","CMISInteger","audio_range","speed_range","text_range","interactions_children","_id","_type","_weighting","_student_response","_result","_latency","correct_responses_children","_this$objectives2","_this$correct_respons","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","_id2","_id3","_pattern","_event","NAVEvent","throwTypeMismatchError","check2004ValidFormat","check2004ValidRange","learner_responses","learner","_completion_status","_completion_threshold","_learner_id","_learner_name","_mode","_progress_measure","_scaled_passing_score","_success_status","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","CMICommentsFromLMS","_this$learner_prefere","_this$comments_from_l","_this$comments_from_l2","CMICStatus","learner_id","learner_name","CMIString1000","progress_range","CMISStatus","CMIString64000","getSecondsAsISODuration","addTwoDurations","_audio_level","_delivery_speed","_audio_captioning","audio_level","CMILang","delivery_speed","audio_captioning","_timestamp","_learner_response","_description","CMILongIdentifier","timestamp","learner_response","description","CMILangString250","_success_status2","_completion_status2","_progress_measure2","_description2","_scaled","scaled_range","readOnlyAfterInit","_comment","_location2","_timestamp2","_readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","_this$nav","_this10","_super14","_request","request_valid","ADLNavRequestValid","_this$request_valid","_this11","_super15","_continue","_previous","_temp","_target","_temp2","_","previous","continue","LOG_LEVEL_NONE","101","201","202","203","301","401","402","403","404","405","0","102","103","104","111","112","113","122","123","132","133","142","143","351","391","406","407","408","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aar","abk","ave","afr","aka","amh","arg","ara","asm","ava","aym","aze","bak","bel","bul","bih","bis","bam","ben","tib","bod","bre","bos","cat","che","cha","cos","cre","cze","ces","chu","chv","wel","cym","dan","ger","deu","div","dzo","ewe","gre","ell","eng","epo","spa","est","baq","eus","per","fas","ful","fin","fij","fao","fre","fra","fry","gle","gla","glg","grn","guj","glv","hau","heb","hin","hmo","hrv","hat","hun","arm","hye","her","ina","ind","ile","ibo","iii","ipk","ido","ice","isl","ita","iku","jpn","jav","geo","kat","kon","kik","kua","kaz","kal","khm","kan","kor","kau","kas","kur","kom","cor","kir","lat","ltz","lug","lim","lin","lao","lit","lub","lav","mlg","mah","mao","mri","mac","mkd","mal","mon","mol","mar","may","msa","mlt","bur","mya","nau","nob","nde","nep","ndo","dut","nld","nno","nor","nbl","nya","oci","oji","orm","ori","oss","pan","pli","pol","pus","por","que","roh","run","rum","ron","rus","kin","san","srd","snd","sme","sag","slo","sin","slk","slv","smo","sna","som","alb","sqi","srp","ssw","sot","sun","swe","swa","tam","tel","tgk","tha","tir","tuk","tgl","tsn","ton","tur","tso","tat","twi","tah","uig","ukr","urd","uzb","ven","vie","vol","wln","wol","xho","yid","yor","zha","chi","zho","zul","CMIInteger","CMIIndex","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","true-false","choice","fill-in","long-fill-in","matching","performance","sequencing","likert","numeric","_Scorm2004API","_Scorm12API","_AICC","window","totalSeconds","hours","floor","SECONDS_PER_HOUR","dateObj","minutes","getUTCMinutes","getSeconds","msStr","countDecimals","toFixed","duration","remainder","designations","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","days","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_DAY"],"mappings":"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AClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\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 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 };\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 returnValue = this.getCMIValue(CMIElement);\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 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\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).\n 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 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 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) >=\n 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 || '') === '' &&\n 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.settings.lmsCommitUrl) {\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject,\n terminateCommit);\n } else {\n console.log('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.log(commitObject);\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.settings.lmsCommitUrl) {\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\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 console.log('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.log(commitObject);\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {\n check12ValidFormat,\n throwReadOnlyError,\n} from './scorm12_cmi';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst scorm12_error_codes = ErrorCodes.scorm12;\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(aicc_constants.comments_children,\n scorm12_error_codes.INVALID_SET_VALUE);\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: scorm12_error_codes.INVALID_SET_VALUE,\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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 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(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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(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: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\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 (check12ValidFormat(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 (check12ValidFormat(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(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: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 {ValidationError} from '../exceptions';\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 {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\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 ValidationError(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 * @return {boolean}\n */\nexport function checkValidRange(\n value: any, rangePattern: String, errorCode: number) {\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 ValidationError(errorCode);\n }\n } else {\n throw new ValidationError(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 */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\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 }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\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 ValidationError(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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range,\n this.#_invalid_range_code))) {\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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range,\n this.#_invalid_range_code))) {\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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range,\n this.#_invalid_range_code))) {\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 */\n constructor({children, errorCode}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.childArray = [];\n }\n\n #errorCode;\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 ValidationError(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 ValidationError(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 {ValidationError} 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 ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new ValidationError(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(value, regexPattern,\n scorm12_error_codes.TYPE_MISMATCH, allowEmptyString);\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(value, rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE, allowEmptyString);\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 });\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 (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\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 });\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 });\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 children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\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 });\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 {ValidationError} 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 ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\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(value, regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH, allowEmptyString);\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(value, rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE);\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 });\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 });\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 });\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 });\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 children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n\n this.#learner_response = learner_response;\n } else {\n throw new ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 });\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 },\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.CMIShortIdentifier,\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.CMIShortIdentifier,\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\n/**\n * Data Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n super(errorCode);\n this.#errorCode = errorCode;\n }\n\n #errorCode;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Trying to override the default Error message\n * @return {string}\n */\n get message() {\n return this.#errorCode + '';\n }\n}\n","import Scorm2004API from './Scorm2004API';\nimport Scorm12API from './Scorm12API';\nimport AICC from './AICC';\n\nwindow.Scorm12API = Scorm12API;\nwindow.Scorm2004API = Scorm2004API;\nwindow.AICC = AICC;\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"]} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/lodash.debounce/index.js","src/AICC.js","src/BaseAPI.js","src/Scorm12API.js","src/Scorm2004API.js","src/cmi/aicc_cmi.js","src/cmi/common.js","src/cmi/scorm12_cmi.js","src/cmi/scorm2004_cmi.js","src/constants/api_constants.js","src/constants/error_codes.js","src/constants/language_constants.js","src/constants/regex.js","src/constants/response_constants.js","src/exceptions.js","src/exports.js","src/utilities.js"],"names":["debounce","func","wait","options","invokeFunc","time","args","lastArgs","thisArg","lastThis","undefined","lastInvokeTime","result","apply","leadingEdge","timerId","setTimeout","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","clearTimeout","flush","debounced","isInvoking","arguments","this","TypeError","FUNC_ERROR_TEXT","toNumber","isObject","nativeMax","value","type","isObjectLike","isSymbol","objectToString","call","symbolTag","NAN","other","valueOf","replace","reTrim","isBinary","reIsBinary","test","reIsOctal","freeParseInt","slice","reIsBadHex","parseInt","freeGlobal","global","Object","freeSelf","self","root","Function","objectProto","prototype","toString","Math","max","min","Date","module","exports","_Scorm12API2","_interopRequireDefault","require","_aicc_cmi","_scorm12_cmi","AICC","settings","_this","_classCallCheck","finalSettings","_objectSpread","mastery_override","_super","cmi","CMI","nav","NAV","CMIElement","foundFirstIndex","newChild","_get","_getPrototypeOf","stringMatches","CMIEvaluationCommentsObject","CMITriesObject","CMIAttemptRecordsObject","newAPI","Scorm12API","_common","_exceptions","_error_codes2","_api_constants","_utilities","_lodash","global_constants","APIConstants","scorm12_error_codes","ErrorCodes","scorm12","BaseAPI","error_codes","_timeout","set","writable","_error_codes","_settings","autocommit","autocommitSeconds","asyncCommit","sendBeaconCommit","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","selfReportSessionTime","alwaysSendTotalTime","responseHandler","xhr","JSON","parse","responseText","hasOwnProperty","status","SCORM_TRUE","errorCode","SCORM_FALSE","_defineProperty","constructor","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","_classPrivateFieldSet","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","isInitialized","throwSCORMError","_classPrivateFieldGet","INITIALIZED","isTerminated","TERMINATED","setStartTime","STATE_INITIALIZED","processListeners","apiLog","LOG_LEVEL_INFO","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","storeData","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","commitCallback","String","STORE_BEFORE_INIT","STORE_AFTER_TERM","setCMIValue","e","ValidationError","message","console","error","GENERAL","scheduleCommit","clearScheduledCommit","COMMIT_BEFORE_INIT","COMMIT_AFTER_TERM","LOG_LEVEL_DEBUG","CMIErrorCode","getLmsErrorMessageDetails","beforeInitError","afterTermError","isNotInitialized","functionName","logMessage","messageLevel","formatMessage","LOG_LEVEL_WARNING","warn","info","debug","log","messageString","fillChars","length","i","j","str","tester","match","refObject","attribute","getOwnPropertyDescriptor","getPrototypeOf","_errorNumber","_detail","Error","_CMIElement","_value","methodName","scorm2004","structure","split","invalidErrorMessage","concat","invalidErrorCode","UNDEFINED_DATA_MODEL","substr","_isTargetValid","READ_ONLY_ELEMENT","_checkObjectHasProperty","validateCorrectResponse","CMIArray","index","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","_ret","v","removeIndex","findIndex","obj","splice","_typeof","_this2","_ret2","filter","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","substring","indexOf","errorNumber","success","_calculateTotalTime","json","testPattern","a","c","a_pattern","c_match","a_match","a_num","Number","c_num","_this3","int_pattern","obj_pattern","keys","map","key","sort","_ref","_ref2","_ref3","_slicedToArray","_ref4","forEach","element","loadFromJSON","unflatten","startingData","currentCMIElement","stringify","renderCMIToJSONString","_terminateCommit","url","params","immediate","api","process","genericError","blob","headers","Array","Blob","join","navigator","sendBeacon","httpReq","XMLHttpRequest","open","onload","setRequestHeader","send","when","ScheduledCommit","API","_API","_cancelled","_timeout2","_callback","wrapper","bind","commit","_BaseAPI2","Utilities","_interopRequireWildcard","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","CMIObjectivesObject","CMIInteractionsCorrectResponsesObject","CMIInteractionsObjectivesObject","CMIInteractionsObject","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","_this$startingData","_this$startingData$cm","_this$startingData$cm2","commitObject","renderCommitCMI","processHttpRequest","_scorm2004_cmi","_response_constants","_language_constants","_regex","scorm2004_constants","scorm2004_error_codes","correct_responses","Responses","correct","scorm2004_regex","Regex","Scorm2004API","_version","_assertThisInitialized","correct_response","current_index","found","count","_count","adl","ADL","Initialize","Terminate","lmsTerminate","GetValue","SetValue","Commit","GetLastError","GetErrorString","GetDiagnostic","request","parts","interaction","interactions","checkDuplicateChoiceResponse","response_type","checkValidResponseType","GENERAL_SET_FAILURE","DEPENDENCY_NOT_ESTABLISHED","CMICommentsObject","interaction_type","nodes","delimiter","checkCorrectResponseValue","interaction_count","response","pattern","pattern_index","limit","duplicate","checkDuplicatedPattern","formatRegex","RegExp","format","removeCorrectResponsePrefixes","delimiter2","values","matches","format2","TYPE_MISMATCH","unique","node","seenOrder","seenCase","seenLang","prefixRegex","langMatches","CMILangcr","lang","ValidLanguages","toLowerCase","_this$startingData$ad","_this$startingData$ad2","mode","completion_threshold","progress_measure","completion_status","scaled_passing_score","scaled","success_status","navRequest","encodeURIComponent","Scorm12CMI","aicc_constants","aicc","aicc_regex","cmi_children","student_preference","AICCStudentPreferences","AICCCMIStudentData","student_demographics","CMIStudentDemographics","evaluation","CMIEvaluation","paths","CMIPaths","_this$student_prefere","_this$student_data","_this$student_demogra","_this$evaluation","_this$paths","jsonString","suspend_data","launch_data","comments","comments_from_lms","objectives","_super2","CMIEvaluationComments","_this$comments","BaseCMI","_super3","comments_children","INVALID_SET_VALUE","_super4","student_preference_children","_lesson_type","_text_color","_text_location","_text_size","_video","windows","children","_this$windows","lesson_type","check12ValidFormat","CMIString256","text_color","text_location","text_size","video","audio","language","speed","text","CMIStudentPreference","_this4","_super5","student_data_children","_tries_during_lesson","tries","CMITries","_this$tries","tries_during_lesson","throwReadOnlyError","max_time_allowed","time_limit_action","CMIStudentData","_this5","_super6","_children","student_demographics_children","_city","_class","_company","_country","_experience","_familiar_name","_instructor_name","_title","_native_language","_state","_street_address","_telephone","_years_experience","city","clazz","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","class","_super7","paths_children","CMIPathsObject","_this6","_super8","_location_id","_date","_time","_status","_why_left","_time_in_element","location_id","date","CMITime","CMIStatus2","why_left","time_in_element","_super9","tries_children","_this7","_super10","_status2","_time2","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","_this$score","CMIAttemptRecords","_super11","attempt_records_children","_this8","_super12","_lesson_status","_this$score2","_this9","_super13","_content","_location","_time3","content","location","checkValidFormat","regexPattern","allowEmptyString","checkValidRange","rangePattern","ranges","scorm12_regex","_initialized","_start_time","getTime","decimalRegex","_children2","_score_range","_invalid_error_code","_invalid_type_code","_invalid_range_code","_decimal_regex","_raw","_min","_max","CMIDecimal","_errorCode","_children3","throwWriteOnlyError","WRITE_ONLY_ELEMENT","throwInvalidValueError","check12ValidRange","_version2","_launch_data","_comments","_comments_from_lms","CMICore","CMIObjectives","CMIInteractions","_this$core","_this$objectives","_this$interactions","_this$core2","CMIString4096","start_time","core_children","_student_id","_student_name","_lesson_location","_credit","_entry","_total_time","_lesson_mode","_exit","_session_time","_suspend_data","student_id","student_name","lesson_location","CMIStatus","entry","exit","CMIExit","session_time","CMITimespan","sessionTime","startTime","seconds","Util","getSecondsAsHHMMSS","addHHMMSSTimeStrings","objectives_children","_children4","_mastery_score","_max_time_allowed","_time_limit_action","_children5","_audio","_language","_speed","_text","CMISInteger","audio_range","speed_range","text_range","interactions_children","_id","_type","_weighting","_student_response","_result","_latency","correct_responses_children","_this$objectives2","_this$correct_respons","id","CMIIdentifier","CMIType","weighting","weighting_range","student_response","CMIFeedback","CMIResult","latency","_id2","_id3","_pattern","_event","NAVEvent","throwTypeMismatchError","check2004ValidFormat","check2004ValidRange","learner_responses","learner","_completion_status","_completion_threshold","_learner_id","_learner_name","_mode","_progress_measure","_scaled_passing_score","_success_status","learner_preference","CMILearnerPreference","Scorm2004CMIScore","comments_from_learner","CMICommentsFromLearner","CMICommentsFromLMS","_this$learner_prefere","_this$comments_from_l","_this$comments_from_l2","CMICStatus","learner_id","learner_name","CMIString1000","progress_range","CMISStatus","CMIString64000","getSecondsAsISODuration","addTwoDurations","_audio_level","_delivery_speed","_audio_captioning","audio_level","CMILang","delivery_speed","audio_captioning","_timestamp","_learner_response","_description","CMILongIdentifier","timestamp","learner_response","description","CMILangString250","_success_status2","_completion_status2","_progress_measure2","_description2","_scaled","scaled_range","readOnlyAfterInit","_comment","_location2","_timestamp2","_readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","_this$nav","_this10","_super14","_request","request_valid","ADLNavRequestValid","_this$request_valid","_this11","_super15","_continue","_previous","_temp","_target","_temp2","_","previous","continue","LOG_LEVEL_NONE","101","201","202","203","301","401","402","403","404","405","0","102","103","104","111","112","113","122","123","132","133","142","143","351","391","406","407","408","INITIALIZATION_FAILED","TERMINATION_FAILURE","ARGUMENT_ERROR","GENERAL_GET_FAILURE","GENERAL_COMMIT_FAILURE","UNIMPLEMENTED_ELEMENT","MULTIPLE_TERMINATIONS","aa","ab","ae","af","ak","am","an","ar","as","av","ay","az","ba","be","bg","bh","bi","bm","bn","bo","br","bs","ca","ce","ch","co","cr","cs","cu","cv","cy","da","de","dv","dz","ee","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","gv","ha","he","hi","ho","hr","ht","hu","hy","hz","ia","ie","ig","ii","ik","io","is","it","iu","ja","jv","ka","kg","ki","kj","kk","kl","km","kn","ko","kr","ks","ku","kv","kw","ky","la","lb","lg","li","ln","lo","lt","lu","lv","mg","mh","mi","mk","ml","mn","mo","mr","ms","mt","my","na","nb","nd","ne","ng","nl","nn","no","nr","nv","ny","oc","oj","om","or","os","pa","pi","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","sd","se","sg","sh","si","sk","sl","sm","sn","so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tn","to","tr","ts","tt","tw","ty","ug","uk","ur","uz","ve","vi","vo","wa","wo","xh","yi","yo","za","zh","zu","aar","abk","ave","afr","aka","amh","arg","ara","asm","ava","aym","aze","bak","bel","bul","bih","bis","bam","ben","tib","bod","bre","bos","cat","che","cha","cos","cre","cze","ces","chu","chv","wel","cym","dan","ger","deu","div","dzo","ewe","gre","ell","eng","epo","spa","est","baq","eus","per","fas","ful","fin","fij","fao","fre","fra","fry","gle","gla","glg","grn","guj","glv","hau","heb","hin","hmo","hrv","hat","hun","arm","hye","her","ina","ind","ile","ibo","iii","ipk","ido","ice","isl","ita","iku","jpn","jav","geo","kat","kon","kik","kua","kaz","kal","khm","kan","kor","kau","kas","kur","kom","cor","kir","lat","ltz","lug","lim","lin","lao","lit","lub","lav","mlg","mah","mao","mri","mac","mkd","mal","mon","mol","mar","may","msa","mlt","bur","mya","nau","nob","nde","nep","ndo","dut","nld","nno","nor","nbl","nya","oci","oji","orm","ori","oss","pan","pli","pol","pus","por","que","roh","run","rum","ron","rus","kin","san","srd","snd","sme","sag","slo","sin","slk","slv","smo","sna","som","alb","sqi","srp","ssw","sot","sun","swe","swa","tam","tel","tgk","tha","tir","tuk","tgl","tsn","ton","tur","tso","tat","twi","tah","uig","ukr","urd","uzb","ven","vie","vol","wln","wol","xho","yid","yor","zha","chi","zho","zul","CMIInteger","CMIIndex","CMIString200","CMIString4000","CMILangString250cr","CMIShortIdentifier","CMIIndexStore","NAVBoolean","NAVTarget","true-false","choice","fill-in","long-fill-in","matching","performance","sequencing","likert","numeric","_Scorm2004API","_Scorm12API","_AICC","window","totalSeconds","hours","floor","SECONDS_PER_HOUR","dateObj","minutes","getUTCMinutes","getSeconds","msStr","countDecimals","toFixed","duration","remainder","designations","sign","current_seconds","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","exec","years","days","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","SECONDS_PER_SECOND","SECONDS_PER_MINUTE","SECONDS_PER_DAY"],"mappings":"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AClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAAMC,GAAM,KAClEC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\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 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 };\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 returnValue = this.getCMIValue(CMIElement);\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 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\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).\n 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 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 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) >=\n 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 || '') === '' &&\n 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.settings.lmsCommitUrl) {\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\n return this.processHttpRequest(this.settings.lmsCommitUrl, commitObject,\n terminateCommit);\n } else {\n console.log('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.log(commitObject);\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.settings.lmsCommitUrl) {\n if (this.apiLogLevel === global_constants.LOG_LEVEL_DEBUG) {\n console.debug('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.debug(commitObject);\n }\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 console.log('Commit (terminated: ' +\n (terminateCommit ? 'yes' : 'no') + '): ');\n console.log(commitObject);\n return global_constants.SCORM_TRUE;\n }\n }\n}\n","import * as Scorm12CMI from './scorm12_cmi';\nimport {BaseCMI, CMIArray, CMIScore} from './common';\nimport APIConstants from '../constants/api_constants';\nimport Regex from '../constants/regex';\nimport ErrorCodes from '../constants/error_codes';\nimport {\n check12ValidFormat,\n throwReadOnlyError,\n} from './scorm12_cmi';\n\nconst aicc_constants = APIConstants.aicc;\nconst aicc_regex = Regex.aicc;\nconst scorm12_error_codes = ErrorCodes.scorm12;\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(aicc_constants.comments_children,\n scorm12_error_codes.INVALID_SET_VALUE);\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: scorm12_error_codes.INVALID_SET_VALUE,\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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 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(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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(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: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\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 (check12ValidFormat(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 (check12ValidFormat(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(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: scorm12_error_codes.INVALID_SET_VALUE,\n invalidTypeCode: scorm12_error_codes.TYPE_MISMATCH,\n invalidRangeCode: scorm12_error_codes.VALUE_OUT_OF_RANGE,\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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 (check12ValidFormat(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 {ValidationError} from '../exceptions';\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 {boolean} allowEmptyString\n * @return {boolean}\n */\nexport function checkValidFormat(\n value: String,\n regexPattern: String,\n errorCode: number,\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 ValidationError(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 * @return {boolean}\n */\nexport function checkValidRange(\n value: any, rangePattern: String, errorCode: number) {\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 ValidationError(errorCode);\n }\n } else {\n throw new ValidationError(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 */\n constructor(\n {\n score_children,\n score_range,\n max,\n invalidErrorCode,\n invalidTypeCode,\n invalidRangeCode,\n decimalRegex,\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 }\n\n #_children;\n #_score_range;\n #_invalid_error_code;\n #_invalid_type_code;\n #_invalid_range_code;\n #_decimal_regex;\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 ValidationError(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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(raw, this.#_score_range,\n this.#_invalid_range_code))) {\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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(min, this.#_score_range,\n this.#_invalid_range_code))) {\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,\n this.#_invalid_type_code) &&\n (!this.#_score_range ||\n checkValidRange(max, this.#_score_range,\n this.#_invalid_range_code))) {\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 */\n constructor({children, errorCode}) {\n super();\n this.#_children = children;\n this.#errorCode = errorCode;\n this.childArray = [];\n }\n\n #errorCode;\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 ValidationError(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 ValidationError(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 {ValidationError} 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 ValidationError(scorm12_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nexport function throwWriteOnlyError() {\n throw new ValidationError(scorm12_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Invalid Set error\n */\nfunction throwInvalidValueError() {\n throw new ValidationError(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(value, regexPattern,\n scorm12_error_codes.TYPE_MISMATCH, allowEmptyString);\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(value, rangePattern,\n scorm12_error_codes.VALUE_OUT_OF_RANGE, allowEmptyString);\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 });\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 (check12ValidFormat(lesson_status, scorm12_regex.CMIStatus)) {\n this.#lesson_status = lesson_status;\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 });\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 });\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 children: scorm12_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm12_error_codes.INVALID_SET_VALUE,\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 });\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 {ValidationError} 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 ValidationError(scorm2004_error_codes.READ_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Write Only error\n */\nfunction throwWriteOnlyError() {\n throw new ValidationError(scorm2004_error_codes.WRITE_ONLY_ELEMENT);\n}\n\n/**\n * Helper method for throwing Type Mismatch error\n */\nfunction throwTypeMismatchError() {\n throw new ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\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(value, regexPattern,\n scorm2004_error_codes.TYPE_MISMATCH, allowEmptyString);\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(value, rangePattern,\n scorm2004_error_codes.VALUE_OUT_OF_RANGE);\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 });\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 });\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 });\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 });\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 children: scorm2004_constants.objectives_children,\n });\n this.correct_responses = new CMIArray({\n errorCode: scorm2004_error_codes.READ_ONLY_ELEMENT,\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);\n }\n\n this.#learner_response = learner_response;\n } else {\n throw new ValidationError(scorm2004_error_codes.TYPE_MISMATCH);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 throw new ValidationError(\n scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\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 });\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 },\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.CMIShortIdentifier,\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.CMIShortIdentifier,\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\n/**\n * Data Validation Exception\n */\nexport class ValidationError extends Error {\n /**\n * Constructor to take in an error message and code\n * @param {number} errorCode\n */\n constructor(errorCode: number) {\n super(errorCode);\n this.#errorCode = errorCode;\n }\n\n #errorCode;\n\n /**\n * Getter for #errorCode\n * @return {number}\n */\n get errorCode() {\n return this.#errorCode;\n }\n\n /**\n * Trying to override the default Error message\n * @return {string}\n */\n get message() {\n return this.#errorCode + '';\n }\n}\n","import Scorm2004API from './Scorm2004API';\nimport Scorm12API from './Scorm12API';\nimport AICC from './AICC';\n\nwindow.Scorm12API = Scorm12API;\nwindow.Scorm2004API = Scorm2004API;\nwindow.AICC = AICC;\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"]} \ No newline at end of file diff --git a/dist/scorm-again.min.js b/dist/scorm-again.min.js index ceaa815..4e7037a 100644 --- a/dist/scorm-again.min.js +++ b/dist/scorm-again.min.js @@ -4,21 +4,21 @@ function debounce(e,t,r){function o(t){var r=s,o=v;return s=v=void 0,O=t,j=e.app }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],2:[function(require,module,exports){ -"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function _objectSpread(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,s=new Array(t);r0&&this.throwSCORMError(s.errorCode),r=void 0!==s&&s.result?s.result:global_constants.SCORM_FALSE,t&&(this.lastErrorCode=0),r=global_constants.SCORM_TRUE,this.processListeners(e)}return this.apiLog(e,null,"returned: "+r,global_constants.LOG_LEVEL_INFO),this.clearSCORMError(r),r}},{key:"getValue",value:function(e,t,r){var s;return this.checkState(t,_classPrivateFieldGet(this,_error_codes).RETRIEVE_BEFORE_INIT,_classPrivateFieldGet(this,_error_codes).RETRIEVE_AFTER_TERM)&&(t&&(this.lastErrorCode=0),s=this.getCMIValue(r),this.processListeners(e,r)),this.apiLog(e,r,": returned: "+s,global_constants.LOG_LEVEL_INFO),this.clearSCORMError(s),s}},{key:"setValue",value:function(e,t,r,s,o){void 0!==o&&(o=String(o));var i=global_constants.SCORM_FALSE;if(this.checkState(r,_classPrivateFieldGet(this,_error_codes).STORE_BEFORE_INIT,_classPrivateFieldGet(this,_error_codes).STORE_AFTER_TERM)){r&&(this.lastErrorCode=0);try{i=this.setCMIValue(s,o)}catch(e){e instanceof _exceptions.ValidationError?(this.lastErrorCode=e.errorCode,i=global_constants.SCORM_FALSE):(e.message?console.error(e.message):console.error(e),this.throwSCORMError(_classPrivateFieldGet(this,_error_codes).GENERAL))}this.processListeners(e,s,o)}return void 0===i&&(i=global_constants.SCORM_FALSE),"0"===String(this.lastErrorCode)&&this.settings.autocommit&&!_classPrivateFieldGet(this,_timeout)&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,s,": "+o+": result: "+i,global_constants.LOG_LEVEL_INFO),this.clearSCORMError(i),i}},{key:"commit",value:function(e,t){this.clearScheduledCommit();var r=global_constants.SCORM_FALSE;if(this.checkState(t,_classPrivateFieldGet(this,_error_codes).COMMIT_BEFORE_INIT,_classPrivateFieldGet(this,_error_codes).COMMIT_AFTER_TERM)){var s=this.storeData(!1);!this.settings.sendBeaconCommit&&!this.settings.asyncCommit&&s.errorCode&&s.errorCode>0&&this.throwSCORMError(s.errorCode),r=void 0!==s&&s.result?s.result:global_constants.SCORM_FALSE,this.apiLog(e,"HttpRequest"," Result: "+r,global_constants.LOG_LEVEL_DEBUG),t&&(this.lastErrorCode=0),this.processListeners(e)}return this.apiLog(e,null,"returned: "+r,global_constants.LOG_LEVEL_INFO),this.clearSCORMError(r),r}},{key:"getLastError",value:function(e){var t=String(this.lastErrorCode);return this.processListeners(e),this.apiLog(e,null,"returned: "+t,global_constants.LOG_LEVEL_INFO),t}},{key:"getErrorString",value:function(e,t){var r="";return null!==t&&""!==t&&(r=this.getLmsErrorMessageDetails(t),this.processListeners(e)),this.apiLog(e,null,"returned: "+r,global_constants.LOG_LEVEL_INFO),r}},{key:"getDiagnostic",value:function(e,t){var r="";return null!==t&&""!==t&&(r=this.getLmsErrorMessageDetails(t,!0),this.processListeners(e)),this.apiLog(e,null,"returned: "+r,global_constants.LOG_LEVEL_INFO),r}},{key:"checkState",value:function(e,t,r){return this.isNotInitialized()?(this.throwSCORMError(t),!1):!e||!this.isTerminated()||(this.throwSCORMError(r),!1)}},{key:"apiLog",value:function(e,t,r,s){if(r=this.formatMessage(e,t,r),s>=this.apiLogLevel)switch(s){case global_constants.LOG_LEVEL_ERROR:console.error(r);break;case global_constants.LOG_LEVEL_WARNING:console.warn(r);break;case global_constants.LOG_LEVEL_INFO:console.info(r);break;case global_constants.LOG_LEVEL_DEBUG:console.debug?console.debug(r):console.log(r)}}},{key:"formatMessage",value:function(e,t,r){var s="";s+=e;for(var o=20-s.length,i=0;i1&&(n=e.replace(i+".","")),this.listenerArray.push({functionName:i,CMIElement:n,callback:t}),this.apiLog("on",i,"Added event listener: ".concat(this.listenerArray.length),global_constants.LOG_LEVEL_INFO)}}},{key:"off",value:function(e,t){var r=this;if(t)for(var s=e.split(" "),o=0;o1&&(a=e.replace(n+".",""));var l=r.listenerArray.findIndex(function(e){return e.functionName===n&&e.CMIElement===a&&e.callback===t});-1!==l&&(r.listenerArray.splice(l,1),r.apiLog("off",n,"Removed event listener: ".concat(r.listenerArray.length),global_constants.LOG_LEVEL_INFO))}(o);if("object"===_typeof(i))return i.v}}},{key:"clear",value:function(e){for(var t=this,r=e.split(" "),s=0;s1&&(n=e.replace(i+".","")),t.listenerArray=t.listenerArray.filter(function(e){return e.functionName!==i&&e.CMIElement!==n})}(s);if("object"===_typeof(o))return o.v}}},{key:"processListeners",value:function(e,t,r){this.apiLog(e,t,r);for(var s=0;sc?1:0});var a;n.forEach(function(e){a={},a[e[0]]=e[1],s.loadFromJSON((0,_utilities.unflatten)(a),t)})}},{key:"loadFromJSON",value:function(e,t){if(!this.isNotInitialized())return void console.error("loadFromJSON can only be called before the call to lmsInitialize.");t=void 0!==t?t:"cmi",this.startingData=e;for(var r in e)if({}.hasOwnProperty.call(e,r)&&e[r]){var s=(t?t+".":"")+r,o=e[r];if(o.childArray)for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],s=this,o=function(e,t,r,o){var i,n={result:global_constants.SCORM_FALSE,errorCode:o.GENERAL};if(r.sendBeaconCommit)try{var a,l={type:r.commitRequestDataType};a=t instanceof Array?new Blob([t.join("&")],l):new Blob([JSON.stringify(t)],l),i={},navigator.sendBeacon(e,a)?(i.result=global_constants.SCORM_TRUE,i.errorCode=0):(i.result=global_constants.SCORM_FALSE,i.errorCode=101)}catch(e){return console.error(e),s.processListeners("CommitError"),n}else{var c=new XMLHttpRequest;c.open("POST",e,r.asyncCommit),r.asyncCommit&&(c.onload=function(e){i="function"==typeof r.responseHandler?r.responseHandler(c):JSON.parse(c.responseText)});try{if(t instanceof Array?(c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(t.join("&"))):(c.setRequestHeader("Content-Type",r.commitRequestDataType),c.send(JSON.stringify(t))),r.asyncCommit)return i={},i.result=global_constants.SCORM_TRUE,i.errorCode=0,s.processListeners("CommitSuccess"),i;i="function"==typeof r.responseHandler?r.responseHandler(c):JSON.parse(c.responseText)}catch(e){return console.error(e),s.processListeners("CommitError"),n}}return void 0===i?(s.processListeners("CommitError"),n):(!0===i.result||i.result===global_constants.SCORM_TRUE?s.processListeners("CommitSuccess"):s.processListeners("CommitError"),i)};if(void 0!==_lodash.default){var i=(0,_lodash.default)(o,500);return i(e,t,this.settings,this.error_codes),r&&i.flush(),{result:global_constants.SCORM_TRUE,errorCode:0}}return o(e,t,this.settings,this.error_codes)}},{key:"scheduleCommit",value:function(e,t){_classPrivateFieldSet(this,_timeout,new ScheduledCommit(this,e,t)),this.apiLog("scheduleCommit","","scheduled",global_constants.LOG_LEVEL_DEBUG)}},{key:"clearScheduledCommit",value:function(){_classPrivateFieldGet(this,_timeout)&&(_classPrivateFieldGet(this,_timeout).cancel(),_classPrivateFieldSet(this,_timeout,null),this.apiLog("clearScheduledCommit","","cleared",global_constants.LOG_LEVEL_DEBUG))}}]),e}();exports.default=BaseAPI;var _API=new WeakMap,_cancelled=new WeakMap,_timeout2=new WeakMap,_callback=new WeakMap,ScheduledCommit=function(){function e(t,r,s){_classCallCheck(this,e),_API.set(this,{writable:!0,value:void 0}),_cancelled.set(this,{writable:!0,value:!1}),_timeout2.set(this,{writable:!0,value:void 0}),_callback.set(this,{writable:!0,value:void 0}),_classPrivateFieldSet(this,_API,t),_classPrivateFieldSet(this,_timeout2,setTimeout(this.wrapper.bind(this),r)),_classPrivateFieldSet(this,_callback,s)}return _createClass(e,[{key:"cancel",value:function(){_classPrivateFieldSet(this,_cancelled,!0),_classPrivateFieldGet(this,_timeout2)&&clearTimeout(_classPrivateFieldGet(this,_timeout2))}},{key:"wrapper",value:function(){_classPrivateFieldGet(this,_cancelled)||_classPrivateFieldGet(this,_API).commit(_classPrivateFieldGet(this,_callback))}}]),e}(); },{"./cmi/common":7,"./constants/api_constants":10,"./constants/error_codes":11,"./exceptions":15,"./utilities":17,"lodash.debounce":1}],4:[function(require,module,exports){ -"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var n=o?Object.getOwnPropertyDescriptor(e,i):null;n&&(n.get||n.set)?Object.defineProperty(r,i,n):r[i]=e[i]}return r.default=e,t&&t.set(e,r),r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function _objectSpread(e){for(var t=1;t=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed");else if("browse"===this.cmi.core.lesson_mode){var r,o,i;""===((null===(r=this.startingData)||void 0===r?void 0:null===(o=r.cmi)||void 0===o?void 0:null===(i=o.core)||void 0===i?void 0:i.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed")}}var n=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.settings.lmsCommitUrl?(this.apiLogLevel===global_constants.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(n)),this.processHttpRequest(this.settings.lmsCommitUrl,n,e)):(console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(n),global_constants.SCORM_TRUE)}}]),t}(_BaseAPI2.default);exports.default=Scorm12API; +"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var n=o?Object.getOwnPropertyDescriptor(e,i):null;n&&(n.get||n.set)?Object.defineProperty(r,i,n):r[i]=e[i]}return r.default=e,t&&t.set(e,r),r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,o)}return r}function _objectSpread(e){for(var t=1;t=parseFloat(this.cmi.student_data.mastery_score)?this.cmi.core.lesson_status="passed":this.cmi.core.lesson_status="failed");else if("browse"===this.cmi.core.lesson_mode){var r,o,i;""===((null===(r=this.startingData)||void 0===r?void 0:null===(o=r.cmi)||void 0===o?void 0:null===(i=o.core)||void 0===i?void 0:i.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed")}}var n=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);return this.settings.lmsCommitUrl?(this.apiLogLevel===global_constants.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(n)),this.processHttpRequest(this.settings.lmsCommitUrl,n,e)):(console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(n),global_constants.SCORM_TRUE)}}]),t}(_BaseAPI2.default);exports.default=Scorm12API; },{"./BaseAPI":3,"./cmi/scorm12_cmi":8,"./constants/api_constants":10,"./constants/error_codes":11,"./utilities":17}],5:[function(require,module,exports){ -"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var r={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=s?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}return r.default=e,t&&t.set(e,r),r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,s)}return r}function _objectSpread(e){for(var t=1;t0&&s.length<=e.max?this.checkCorrectResponseValue(r,s,t):s.length>e.max&&this.throwSCORMError(scorm2004_error_codes.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 s=0;s1)Number(t[0])>Number(t[1])&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);else if(""!==t[i]&&s.unique)for(var l=0;l0&&void 0===_language_constants.default[c.toLowerCase()]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH)}s=!0;break;case"case_matters":s||t||r||"true"!==i[3]&&"false"!==i[3]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH),r=!0;break;case"order_matters":r||s||t||"true"!==i[3]&&"false"!==i[3]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH),t=!0}e=e.substr(i[1].length),i=e.match(o)}return e}},{key:"replaceWithAnotherScormAPI",value:function(e){this.cmi=e.cmi,this.adl=e.adl}},{key:"renderCommitCMI",value:function(e){var t=this.renderCMIToJSONObject();e&&(t.cmi.total_time=this.cmi.getCurrentTotalTime());var r=[],s=Utilities.flatten(t);switch(this.settings.dataCommitFormat){case"flattened":return Utilities.flatten(t);case"params":for(var o in s)({}).hasOwnProperty.call(s,o)&&r.push("".concat(o,"=").concat(s[o]));return r;case"json":default:return t}}},{key:"storeData",value:function(e){var t,r,s;e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.progress_measure>=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 o=!1;this.adl.nav.request!==(null===(t=this.startingData)||void 0===t?void 0:null===(r=t.adl)||void 0===r?void 0:null===(s=r.nav)||void 0===s?void 0:s.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),o=!0);var i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);if(this.settings.lmsCommitUrl){this.apiLogLevel===global_constants.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i));var n=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);return o&&void 0!==n.navRequest&&""!==n.navRequest&&Function('"use strict";(() => { '.concat(n.navRequest," })()"))(),n}return console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(i),global_constants.SCORM_TRUE}}]),t}(_BaseAPI2.default);exports.default=Scorm2004API; +"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var r={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=s?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}return r.default=e,t&&t.set(e,r),r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,s)}return r}function _objectSpread(e){for(var t=1;t0&&s.length<=e.max?this.checkCorrectResponseValue(r,s,t):s.length>e.max&&this.throwSCORMError(scorm2004_error_codes.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 s=0;s1)Number(t[0])>Number(t[1])&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH);else if(""!==t[i]&&s.unique)for(var l=0;l0&&void 0===_language_constants.default[c.toLowerCase()]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH)}s=!0;break;case"case_matters":s||t||r||"true"!==i[3]&&"false"!==i[3]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH),r=!0;break;case"order_matters":r||s||t||"true"!==i[3]&&"false"!==i[3]&&this.throwSCORMError(scorm2004_error_codes.TYPE_MISMATCH),t=!0}e=e.substr(i[1].length),i=e.match(o)}return e}},{key:"replaceWithAnotherScormAPI",value:function(e){this.cmi=e.cmi,this.adl=e.adl}},{key:"renderCommitCMI",value:function(e){var t=this.renderCMIToJSONObject();e&&(t.cmi.total_time=this.cmi.getCurrentTotalTime());var r=[],s=Utilities.flatten(t);switch(this.settings.dataCommitFormat){case"flattened":return Utilities.flatten(t);case"params":for(var o in s)({}).hasOwnProperty.call(s,o)&&r.push("".concat(o,"=").concat(s[o]));return r;case"json":default:return t}}},{key:"storeData",value:function(e){var t,r,s;e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.progress_measure>=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 o=!1;this.adl.nav.request!==(null===(t=this.startingData)||void 0===t?void 0:null===(r=t.adl)||void 0===r?void 0:null===(s=r.nav)||void 0===s?void 0:s.request)&&"_none_"!==this.adl.nav.request&&(this.adl.nav.request=encodeURIComponent(this.adl.nav.request),o=!0);var i=this.renderCommitCMI(e||this.settings.alwaysSendTotalTime);if(this.settings.lmsCommitUrl){this.apiLogLevel===global_constants.LOG_LEVEL_DEBUG&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(i));var n=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);return o&&void 0!==n.navRequest&&""!==n.navRequest&&Function('"use strict";(() => { '.concat(n.navRequest," })()"))(),n}return console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(i),global_constants.SCORM_TRUE}}]),t}(_BaseAPI2.default);exports.default=Scorm2004API; },{"./BaseAPI":3,"./cmi/scorm2004_cmi":9,"./constants/api_constants":10,"./constants/error_codes":11,"./constants/language_constants":12,"./constants/regex":13,"./constants/response_constants":14,"./utilities":17}],6:[function(require,module,exports){ -"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var i={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var a=r?Object.getOwnPropertyDescriptor(e,s):null;a&&(a.get||a.set)?Object.defineProperty(i,s,a):i[s]=e[s]}return i.default=e,t&&t.set(e,i),i}function _classPrivateFieldSet(e,t,i){var r=t.get(e);if(!r)throw new TypeError("attempted to set private field on non-instance");if(r.set)r.set.call(e,i);else{if(!r.writable)throw new TypeError("attempted to set read only private field");r.value=i}return i}function _classPrivateFieldGet(e,t){var i=t.get(e);if(!i)throw new TypeError("attempted to get private field on non-instance");return i.get?i.get.call(e):i.value}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var i=0;i=r[0]){if("*"===r[1]||e<=r[1])return!0;throw new _exceptions.ValidationError(i)}throw new _exceptions.ValidationError(i)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkValidFormat=checkValidFormat,exports.checkValidRange=checkValidRange,exports.CMIArray=exports.CMIScore=exports.BaseCMI=void 0;var _api_constants=_interopRequireDefault(require("../constants/api_constants")),_error_codes=_interopRequireDefault(require("../constants/error_codes")),_exceptions=require("../exceptions"),_regex=_interopRequireDefault(require("../constants/regex")),scorm12_constants=_api_constants.default.scorm12,scorm12_regex=_regex.default.scorm12,scorm12_error_codes=_error_codes.default.scorm12,_initialized=new WeakMap,_start_time=new WeakMap,BaseCMI=function(){function e(){if(_classCallCheck(this,e),_defineProperty(this,"jsonString",!1),_initialized.set(this,{writable:!0,value:!1}),_start_time.set(this,{writable:!0,value:void 0}),(this instanceof e?this.constructor:void 0)===e)throw new TypeError("Cannot construct BaseCMI instances directly")}return _createClass(e,[{key:"initialized",get:function(){return _classPrivateFieldGet(this,_initialized)}},{key:"start_time",get:function(){return _classPrivateFieldGet(this,_start_time)}},{key:"initialize",value:function(){_classPrivateFieldSet(this,_initialized,!0)}},{key:"setStartTime",value:function(){_classPrivateFieldSet(this,_start_time,(new Date).getTime())}}]),e}();exports.BaseCMI=BaseCMI;var _children2=new WeakMap,_score_range=new WeakMap,_invalid_error_code=new WeakMap,_invalid_type_code=new WeakMap,_invalid_range_code=new WeakMap,_decimal_regex=new WeakMap,_raw=new WeakMap,_min=new WeakMap,_max=new WeakMap,CMIScore=function(e){function t(e){var r,a=e.score_children,n=e.score_range,s=e.max,o=e.invalidErrorCode,l=e.invalidTypeCode,c=e.invalidRangeCode,_=e.decimalRegex;return _classCallCheck(this,t),r=i.call(this),_children2.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_score_range.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_error_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_type_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_range_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_decimal_regex.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_raw.set(_assertThisInitialized(r),{writable:!0,value:""}),_min.set(_assertThisInitialized(r),{writable:!0,value:""}),_max.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(r),_children2,a||scorm12_constants.score_children),_classPrivateFieldSet(_assertThisInitialized(r),_score_range,!!n&&scorm12_regex.score_range),_classPrivateFieldSet(_assertThisInitialized(r),_max,s||""===s?s:"100"),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_error_code,o||scorm12_error_codes.INVALID_SET_VALUE),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_type_code,l||scorm12_error_codes.TYPE_MISMATCH),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_range_code,c||scorm12_error_codes.VALUE_OUT_OF_RANGE),_classPrivateFieldSet(_assertThisInitialized(r),_decimal_regex,_||scorm12_regex.CMIDecimal),r}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"_children",get:function(){return _classPrivateFieldGet(this,_children2)},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_invalid_error_code))}},{key:"raw",get:function(){return _classPrivateFieldGet(this,_raw)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_raw,e)}},{key:"min",get:function(){return _classPrivateFieldGet(this,_min)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_min,e)}},{key:"max",get:function(){return _classPrivateFieldGet(this,_max)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_max,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),t}(BaseCMI);exports.CMIScore=CMIScore;var _errorCode=new WeakMap,_children3=new WeakMap,CMIArray=function(e){function t(e){var r,a=e.children,n=e.errorCode;return _classCallCheck(this,t),r=i.call(this),_errorCode.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_children3.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(r),_children3,a),_classPrivateFieldSet(_assertThisInitialized(r),_errorCode,n),r.childArray=[],r}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"_children",get:function(){return _classPrivateFieldGet(this,_children3)},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_errorCode))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_errorCode))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t=r[0]){if("*"===r[1]||e<=r[1])return!0;throw new _exceptions.ValidationError(i)}throw new _exceptions.ValidationError(i)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkValidFormat=checkValidFormat,exports.checkValidRange=checkValidRange,exports.CMIArray=exports.CMIScore=exports.BaseCMI=void 0;var _api_constants=_interopRequireDefault(require("../constants/api_constants")),_error_codes=_interopRequireDefault(require("../constants/error_codes")),_exceptions=require("../exceptions"),_regex=_interopRequireDefault(require("../constants/regex")),scorm12_constants=_api_constants.default.scorm12,scorm12_regex=_regex.default.scorm12,scorm12_error_codes=_error_codes.default.scorm12,_initialized=new WeakMap,_start_time=new WeakMap,BaseCMI=function(){function e(){if(_classCallCheck(this,e),_defineProperty(this,"jsonString",!1),_initialized.set(this,{writable:!0,value:!1}),_start_time.set(this,{writable:!0,value:void 0}),(this instanceof e?this.constructor:void 0)===e)throw new TypeError("Cannot construct BaseCMI instances directly")}return _createClass(e,[{key:"initialized",get:function(){return _classPrivateFieldGet(this,_initialized)}},{key:"start_time",get:function(){return _classPrivateFieldGet(this,_start_time)}},{key:"initialize",value:function(){_classPrivateFieldSet(this,_initialized,!0)}},{key:"setStartTime",value:function(){_classPrivateFieldSet(this,_start_time,(new Date).getTime())}}]),e}();exports.BaseCMI=BaseCMI;var _children2=new WeakMap,_score_range=new WeakMap,_invalid_error_code=new WeakMap,_invalid_type_code=new WeakMap,_invalid_range_code=new WeakMap,_decimal_regex=new WeakMap,_raw=new WeakMap,_min=new WeakMap,_max=new WeakMap,CMIScore=function(e){function t(e){var r,a=e.score_children,n=e.score_range,s=e.max,o=e.invalidErrorCode,l=e.invalidTypeCode,c=e.invalidRangeCode,_=e.decimalRegex;return _classCallCheck(this,t),r=i.call(this),_children2.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_score_range.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_error_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_type_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_invalid_range_code.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_decimal_regex.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_raw.set(_assertThisInitialized(r),{writable:!0,value:""}),_min.set(_assertThisInitialized(r),{writable:!0,value:""}),_max.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(r),_children2,a||scorm12_constants.score_children),_classPrivateFieldSet(_assertThisInitialized(r),_score_range,!!n&&scorm12_regex.score_range),_classPrivateFieldSet(_assertThisInitialized(r),_max,s||""===s?s:"100"),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_error_code,o||scorm12_error_codes.INVALID_SET_VALUE),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_type_code,l||scorm12_error_codes.TYPE_MISMATCH),_classPrivateFieldSet(_assertThisInitialized(r),_invalid_range_code,c||scorm12_error_codes.VALUE_OUT_OF_RANGE),_classPrivateFieldSet(_assertThisInitialized(r),_decimal_regex,_||scorm12_regex.CMIDecimal),r}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"_children",get:function(){return _classPrivateFieldGet(this,_children2)},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_invalid_error_code))}},{key:"raw",get:function(){return _classPrivateFieldGet(this,_raw)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_raw,e)}},{key:"min",get:function(){return _classPrivateFieldGet(this,_min)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_min,e)}},{key:"max",get:function(){return _classPrivateFieldGet(this,_max)},set:function(e){!checkValidFormat(e,_classPrivateFieldGet(this,_decimal_regex),_classPrivateFieldGet(this,_invalid_type_code))||_classPrivateFieldGet(this,_score_range)&&!checkValidRange(e,_classPrivateFieldGet(this,_score_range),_classPrivateFieldGet(this,_invalid_range_code))||_classPrivateFieldSet(this,_max,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}}]),t}(BaseCMI);exports.CMIScore=CMIScore;var _errorCode=new WeakMap,_children3=new WeakMap,CMIArray=function(e){function t(e){var r,a=e.children,n=e.errorCode;return _classCallCheck(this,t),r=i.call(this),_errorCode.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_children3.set(_assertThisInitialized(r),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(r),_children3,a),_classPrivateFieldSet(_assertThisInitialized(r),_errorCode,n),r.childArray=[],r}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"_children",get:function(){return _classPrivateFieldGet(this,_children3)},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_errorCode))}},{key:"_count",get:function(){return this.childArray.length},set:function(e){throw new _exceptions.ValidationError(_classPrivateFieldGet(this,_errorCode))}},{key:"toJSON",value:function(){this.jsonString=!0;for(var e={},t=0;t0&&t.length<=i.max))throw new _exceptions.ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);for(var r=new RegExp(i.format),s=0;s0&&void 0!==arguments[0]&&arguments[0];return _classCallCheck(this,t),e=i.call(this),_comment.set(_assertThisInitialized(e),{writable:!0,value:""}),_location2.set(_assertThisInitialized(e),{writable:!0,value:""}),_timestamp2.set(_assertThisInitialized(e),{writable:!0,value:""}),_readOnlyAfterInit.set(_assertThisInitialized(e),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(e),_comment,""),_classPrivateFieldSet(_assertThisInitialized(e),_location2,""),_classPrivateFieldSet(_assertThisInitialized(e),_timestamp2,""),_classPrivateFieldSet(_assertThisInitialized(e),_readOnlyAfterInit,r),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"comment",get:function(){return _classPrivateFieldGet(this,_comment)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMILangString4000,!0)&&_classPrivateFieldSet(this,_comment,e)}},{key:"location",get:function(){return _classPrivateFieldGet(this,_location2)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMIString250)&&_classPrivateFieldSet(this,_location2,e)}},{key:"timestamp",get:function(){return _classPrivateFieldGet(this,_timestamp2)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMITime)&&_classPrivateFieldSet(this,_timestamp2,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={comment:this.comment,location:this.location,timestamp:this.timestamp};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMICommentsObject=CMICommentsObject;var _id3=new WeakMap,CMIInteractionsObjectivesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_id3.set(_assertThisInitialized(e),{writable:!0,value:""}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"id",get:function(){return _classPrivateFieldGet(this,_id3)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMILongIdentifier)&&_classPrivateFieldSet(this,_id3,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={id:this.id};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMIInteractionsObjectivesObject=CMIInteractionsObjectivesObject;var _pattern=new WeakMap,CMIInteractionsCorrectResponsesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_pattern.set(_assertThisInitialized(e),{writable:!0,value:""}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"pattern",get:function(){return _classPrivateFieldGet(this,_pattern)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMIFeedback)&&_classPrivateFieldSet(this,_pattern,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={pattern:this.pattern};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMIInteractionsCorrectResponsesObject=CMIInteractionsCorrectResponsesObject;var ADL=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),e.nav=new ADLNav,e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"initialize",value:function(){var e;_get(_getPrototypeOf(t.prototype),"initialize",this).call(this),null===(e=this.nav)||void 0===e||e.initialize()}},{key:"toJSON",value:function(){this.jsonString=!0;var e={nav:this.nav};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.ADL=ADL;var _request=new WeakMap,ADLNav=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_request.set(_assertThisInitialized(e),{writable:!0,value:"_none_"}),e.request_valid=new ADLNavRequestValid,e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"initialize",value:function(){var e;_get(_getPrototypeOf(t.prototype),"initialize",this).call(this),null===(e=this.request_valid)||void 0===e||e.initialize()}},{key:"request",get:function(){return _classPrivateFieldGet(this,_request)},set:function(e){check2004ValidFormat(e,scorm2004_regex.NAVEvent)&&_classPrivateFieldSet(this,_request,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={request:this.request};return delete this.jsonString,e}}]),t}(_common.BaseCMI),_continue=new WeakMap,_previous=new WeakMap,ADLNavRequestValid=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_continue.set(_assertThisInitialized(e),{writable:!0,value:"unknown"}),_previous.set(_assertThisInitialized(e),{writable:!0,value:"unknown"}),_defineProperty(_assertThisInitialized(e),"choice",function e(){_classCallCheck(this,e),_defineProperty(this,"_isTargetValid",function(e){return"unknown"})}),_defineProperty(_assertThisInitialized(e),"jump",function e(){_classCallCheck(this,e),_defineProperty(this,"_isTargetValid",function(e){return"unknown"})}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"continue",get:function(){return _classPrivateFieldGet(this,_continue)},set:function(e){throwReadOnlyError()}},{key:"previous",get:function(){return _classPrivateFieldGet(this,_previous)},set:function(e){throwReadOnlyError()}},{key:"toJSON",value:function(){this.jsonString=!0;var e={previous:this.previous,continue:this.continue};return delete this.jsonString,e}}]),t}(_common.BaseCMI); +"use strict";function _typeof(e){"@babel/helpers - typeof";return(_typeof="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 _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return _getRequireWildcardCache=function(){return e},e}function _interopRequireWildcard(e){if(e&&e.__esModule)return e;if(null===e||"object"!==_typeof(e)&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache();if(t&&t.has(e))return t.get(e);var i={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if(Object.prototype.hasOwnProperty.call(e,s)){var n=r?Object.getOwnPropertyDescriptor(e,s):null;n&&(n.get||n.set)?Object.defineProperty(i,s,n):i[s]=e[s]}return i.default=e,t&&t.set(e,i),i}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _defineProperty(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var i=0;i0&&t.length<=i.max))throw new _exceptions.ValidationError(scorm2004_error_codes.GENERAL_SET_FAILURE);for(var r=new RegExp(i.format),s=0;s0&&void 0!==arguments[0]&&arguments[0];return _classCallCheck(this,t),e=i.call(this),_comment.set(_assertThisInitialized(e),{writable:!0,value:""}),_location2.set(_assertThisInitialized(e),{writable:!0,value:""}),_timestamp2.set(_assertThisInitialized(e),{writable:!0,value:""}),_readOnlyAfterInit.set(_assertThisInitialized(e),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(e),_comment,""),_classPrivateFieldSet(_assertThisInitialized(e),_location2,""),_classPrivateFieldSet(_assertThisInitialized(e),_timestamp2,""),_classPrivateFieldSet(_assertThisInitialized(e),_readOnlyAfterInit,r),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"comment",get:function(){return _classPrivateFieldGet(this,_comment)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMILangString4000,!0)&&_classPrivateFieldSet(this,_comment,e)}},{key:"location",get:function(){return _classPrivateFieldGet(this,_location2)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMIString250)&&_classPrivateFieldSet(this,_location2,e)}},{key:"timestamp",get:function(){return _classPrivateFieldGet(this,_timestamp2)},set:function(e){this.initialized&&_classPrivateFieldGet(this,_readOnlyAfterInit)?throwReadOnlyError():check2004ValidFormat(e,scorm2004_regex.CMITime)&&_classPrivateFieldSet(this,_timestamp2,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={comment:this.comment,location:this.location,timestamp:this.timestamp};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMICommentsObject=CMICommentsObject;var _id3=new WeakMap,CMIInteractionsObjectivesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_id3.set(_assertThisInitialized(e),{writable:!0,value:""}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"id",get:function(){return _classPrivateFieldGet(this,_id3)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMILongIdentifier)&&_classPrivateFieldSet(this,_id3,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={id:this.id};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMIInteractionsObjectivesObject=CMIInteractionsObjectivesObject;var _pattern=new WeakMap,CMIInteractionsCorrectResponsesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_pattern.set(_assertThisInitialized(e),{writable:!0,value:""}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"pattern",get:function(){return _classPrivateFieldGet(this,_pattern)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMIFeedback)&&_classPrivateFieldSet(this,_pattern,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={pattern:this.pattern};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.CMIInteractionsCorrectResponsesObject=CMIInteractionsCorrectResponsesObject;var ADL=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),e.nav=new ADLNav,e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"initialize",value:function(){var e;_get(_getPrototypeOf(t.prototype),"initialize",this).call(this),null===(e=this.nav)||void 0===e||e.initialize()}},{key:"toJSON",value:function(){this.jsonString=!0;var e={nav:this.nav};return delete this.jsonString,e}}]),t}(_common.BaseCMI);exports.ADL=ADL;var _request=new WeakMap,ADLNav=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_request.set(_assertThisInitialized(e),{writable:!0,value:"_none_"}),e.request_valid=new ADLNavRequestValid,e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"initialize",value:function(){var e;_get(_getPrototypeOf(t.prototype),"initialize",this).call(this),null===(e=this.request_valid)||void 0===e||e.initialize()}},{key:"request",get:function(){return _classPrivateFieldGet(this,_request)},set:function(e){check2004ValidFormat(e,scorm2004_regex.NAVEvent)&&_classPrivateFieldSet(this,_request,e)}},{key:"toJSON",value:function(){this.jsonString=!0;var e={request:this.request};return delete this.jsonString,e}}]),t}(_common.BaseCMI),_continue=new WeakMap,_previous=new WeakMap,ADLNavRequestValid=function(e){function t(){var e;return _classCallCheck(this,t),e=i.call(this),_continue.set(_assertThisInitialized(e),{writable:!0,value:"unknown"}),_previous.set(_assertThisInitialized(e),{writable:!0,value:"unknown"}),_defineProperty(_assertThisInitialized(e),"choice",function e(){_classCallCheck(this,e),_defineProperty(this,"_isTargetValid",function(e){return"unknown"})}),_defineProperty(_assertThisInitialized(e),"jump",function e(){_classCallCheck(this,e),_defineProperty(this,"_isTargetValid",function(e){return"unknown"})}),e}_inherits(t,e);var i=_createSuper(t);return _createClass(t,[{key:"continue",get:function(){return _classPrivateFieldGet(this,_continue)},set:function(e){throwReadOnlyError()}},{key:"previous",get:function(){return _classPrivateFieldGet(this,_previous)},set:function(e){throwReadOnlyError()}},{key:"toJSON",value:function(){this.jsonString=!0;var e={previous:this.previous,continue:this.continue};return delete this.jsonString,e}}]),t}(_common.BaseCMI); },{"../constants/api_constants":10,"../constants/error_codes":11,"../constants/regex":13,"../constants/response_constants":14,"../exceptions":15,"../utilities":17,"./common":7}],10:[function(require,module,exports){ "use strict";function ownKeys(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);a&&(i=i.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,i)}return t}function _objectSpread(e){for(var a=1;a