From 635dd3bed14e1f6c8425a23fdf987d8bf2ed0542 Mon Sep 17 00:00:00 2001 From: Jonathan Putney Date: Thu, 6 Feb 2020 17:36:46 +0000 Subject: [PATCH] [skip ci] - Updating Dist and Docs --- dist/scorm-again.js | 16 ++++++++-------- dist/scorm-again.js.map | 2 +- dist/scorm-again.min.js | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dist/scorm-again.js b/dist/scorm-again.js index 43145dd..4424f95 100644 --- a/dist/scorm-again.js +++ b/dist/scorm-again.js @@ -14,7 +14,7 @@ var _scorm12_cmi = require("./cmi/scorm12_cmi"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -1208,7 +1208,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -1604,7 +1604,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -2276,7 +2276,7 @@ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = privateMap.get(receiver); if (!descriptor) { throw new TypeError("attempted to set private field on non-instance"); } if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } return value; } @@ -3859,7 +3859,7 @@ var _regex = _interopRequireDefault(require("../constants/regex")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } @@ -4343,7 +4343,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -6136,7 +6136,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -9373,7 +9373,7 @@ Object.defineProperty(exports, "__esModule", { }); exports.ValidationError = void 0; -function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } diff --git a/dist/scorm-again.js.map b/dist/scorm-again.js.map index f9c1766..8fffa8d 100644 --- a/dist/scorm-again.js.map +++ b/dist/scorm-again.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.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":["_Scorm12API2","_interopRequireDefault","require","_aicc_cmi","_scorm12_cmi","AICC","settings","_this","_classCallCheck","this","finalSettings","_objectSpread","mastery_override","_possibleConstructorReturn","_getPrototypeOf","call","cmi","CMI","nav","NAV","CMIElement","value","foundFirstIndex","newChild","_get","prototype","stringMatches","CMIEvaluationCommentsObject","CMITriesObject","CMIAttemptRecordsObject","newAPI","Scorm12API","_common","_exceptions","_error_codes2","_api_constants","_utilities","global_constants","APIConstants","global","scorm12_error_codes","ErrorCodes","scorm12","BaseAPI","error_codes","_timeout","set","writable","_error_codes","_settings","autocommit","autocommitSeconds","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","_defineProperty","constructor","TypeError","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","_classPrivateFieldSet","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","SCORM_FALSE","isInitialized","throwSCORMError","_classPrivateFieldGet","INITIALIZED","isTerminated","TERMINATED","STATE_INITIALIZED","SCORM_TRUE","processListeners","apiLog","LOG_LEVEL_INFO","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","result","storeData","errorCode","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","undefined","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","Object","hasOwnProperty","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","parseInt","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","replace","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","errorNumber","success","_calculateTotalTime","json","loadFromJSON","unflatten","startingData","key","currentCMIElement","JSON","stringify","parse","renderCMIToJSONString","_terminateCommit","url","params","genericError","httpReq","XMLHttpRequest","open","Array","setRequestHeader","send","join","responseText","when","ScheduledCommit","cancel","API","_API","_cancelled","_timeout2","setTimeout","wrapper","bind","clearTimeout","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","Number","interaction","interactions","type","interaction_type","interaction_count","response","pattern","GENERAL_SET_FAILURE","response_type","nodes","delimiter","max","checkCorrectResponseValue","DEPENDENCY_NOT_ESTABLISHED","CMICommentsObject","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","Function","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","_this2","CMIEvaluationComments","_this$comments","BaseCMI","comments_children","INVALID_SET_VALUE","_this3","student_preference_children","_lesson_type","_text_color","_text_location","_text_size","_video","windows","children","_this$windows","audio","language","lesson_type","speed","text","text_color","text_location","text_size","video","check12ValidFormat","CMIString256","CMIStudentPreference","_this4","student_data_children","_tries_during_lesson","tries","CMITries","_this$tries","max_time_allowed","time_limit_action","tries_during_lesson","throwReadOnlyError","CMIStudentData","_this5","_children","student_demographics_children","_city","_class","_company","_country","_experience","_familiar_name","_instructor_name","_title","_native_language","_state","_street_address","_telephone","_years_experience","city","class","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","clazz","paths_children","CMIPathsObject","_this6","_location_id","_date","_time","_status","_why_left","_time_in_element","location_id","date","time","status","why_left","time_in_element","CMITime","CMIStatus2","tries_children","_this7","_status2","_time2","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","_this$score","CMIAttemptRecords","attempt_records_children","_this8","_lesson_status","_this$score2","_this9","_content","_location","_time3","content","location","checkValidFormat","regexPattern","allowEmptyString","checkValidRange","rangePattern","ranges","scorm12_regex","_initialized","_ref","decimalRegex","_children2","_score_range","_invalid_error_code","_invalid_type_code","_invalid_range_code","_decimal_regex","_raw","_min","_max","CMIDecimal","min","_ref2","_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","core_children","_student_id","_student_name","_lesson_location","_credit","_entry","_total_time","_lesson_mode","_exit","_session_time","_suspend_data","addHHMMSSTimeStrings","CMITimespan","student_id","student_name","lesson_location","entry","exit","session_time","CMIStatus","CMIExit","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","weighting","student_response","latency","CMIIdentifier","CMIType","weighting_range","CMIFeedback","CMIResult","_id2","_id3","_pattern","_event","NAVEvent","throwTypeMismatchError","check2004ValidFormat","check2004ValidRange","Util","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","addTwoDurations","learner_id","learner_name","CMICStatus","CMIString1000","progress_range","CMISStatus","CMIString64000","_audio_level","_delivery_speed","_audio_captioning","audio_level","delivery_speed","audio_captioning","CMILang","_timestamp","_learner_response","_description","timestamp","learner_response","description","CMILongIdentifier","CMILangString250","_success_status2","_completion_status2","_progress_measure2","_description2","_scaled","scaled_range","readOnlyAfterInit","arguments","_comment","_location2","_timestamp2","_readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","_this$nav","_this10","_request","request_valid","ADLNavRequestValid","_this$request_valid","_this11","_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","other","_Scorm2004API","_Scorm12API","_AICC","window","getSecondsAsHHMMSS","totalSeconds","hours","Math","floor","SECONDS_PER_HOUR","dateObj","Date","minutes","getUTCMinutes","seconds","getSeconds","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","designations","forEach","_slicedToArray","sign","current_seconds","indexOf","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","_ref3","exec","_ref4","years","months","days","now","anchor","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","getHours","setMinutes","getMinutes","setSeconds","milliseconds","setMilliseconds","getMilliseconds","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","toString","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,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,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOl/B,IAAO,MAAOm/B,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,gBAGlD3uB;;q0BCzEf,IAAMnT,UA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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 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = 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 {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: 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);\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 (result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = 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.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 }\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 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 const CMIElementsMatch = listener.CMIElement === CMIElement;\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 this.loadFromJSON(unflatten(json), CMIElement);\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 * @return {object}\n */\n processHttpRequest(url: String, params) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': this.#error_codes.GENERAL,\n };\n\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, false);\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 this.settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n } catch (e) {\n return genericError;\n }\n\n try {\n return JSON.parse(httpReq.responseText);\n } catch (e) {\n return genericError;\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n */\n scheduleCommit(when: number) {\n this.#timeout = new ScheduledCommit(this, when);\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\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n */\n constructor(API: any, when: number) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\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();\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', false);\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', 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\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 } 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', 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 (!interaction.type) {\n this.throwSCORMError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n const interaction_type = interaction.type;\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 const response_type = correct_responses[interaction_type];\n if (response_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 } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction_type);\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 * 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_type = interaction.type;\n const interaction_count = interaction.correct_responses._count;\n if (interaction_type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode === 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 const response_type = correct_responses[interaction_type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\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 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\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);\n // check if this is a sequencing call, and then call the necessary JS\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\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\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 * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\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';\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)) {\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();\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 *\n * @return {string}\n */\n getCurrentTotalTime() {\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n this.#session_time,\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.jsonString) ? throwWriteOnlyError() : 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, 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 return Util.addTwoDurations(\n this.#total_time,\n this.#session_time,\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 (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\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 (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\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 (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\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 (typeof this.type === 'undefined') {\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 } 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 (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\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 (check2004ValidFormat(description, scorm2004_regex.CMILangString250, true)) {\n this.#description = description;\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 (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\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 (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\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 (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 #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 (check2004ValidFormat(description, scorm2004_regex.CMILangString250, true)) {\n this.#description = description;\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, 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]{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|wrong|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 const now = new Date();\n const anchor = new Date(now);\n anchor.setFullYear(anchor.getFullYear() + Number(years || 0));\n anchor.setMonth(anchor.getMonth() + Number(months || 0));\n anchor.setDate(anchor.getDate() + Number(days || 0));\n anchor.setHours(anchor.getHours() + Number(hours || 0));\n anchor.setMinutes(anchor.getMinutes() + Number(minutes || 0));\n anchor.setSeconds(anchor.getSeconds() + Number(seconds || 0));\n if (seconds && countDecimals(String(seconds)) > 0) {\n const milliseconds = Number(Number(seconds) % 1).toFixed(6) * 1000.0;\n anchor.setMilliseconds(anchor.getMilliseconds() + milliseconds);\n }\n return ((anchor * 1.0) - now) / 1000.0;\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","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":["_Scorm12API2","_interopRequireDefault","require","_aicc_cmi","_scorm12_cmi","AICC","settings","_this","_classCallCheck","this","finalSettings","_objectSpread","mastery_override","_possibleConstructorReturn","_getPrototypeOf","call","cmi","CMI","nav","NAV","CMIElement","value","foundFirstIndex","newChild","_get","prototype","stringMatches","CMIEvaluationCommentsObject","CMITriesObject","CMIAttemptRecordsObject","newAPI","Scorm12API","_common","_exceptions","_error_codes2","_api_constants","_utilities","global_constants","APIConstants","global","scorm12_error_codes","ErrorCodes","scorm12","BaseAPI","error_codes","_timeout","set","writable","_error_codes","_settings","autocommit","autocommitSeconds","lmsCommitUrl","dataCommitFormat","commitRequestDataType","autoProgress","logLevel","LOG_LEVEL_ERROR","_defineProperty","constructor","TypeError","currentState","STATE_NOT_INITIALIZED","lastErrorCode","listenerArray","_classPrivateFieldSet","apiLogLevel","callbackName","initializeMessage","terminationMessage","returnValue","SCORM_FALSE","isInitialized","throwSCORMError","_classPrivateFieldGet","INITIALIZED","isTerminated","TERMINATED","STATE_INITIALIZED","SCORM_TRUE","processListeners","apiLog","LOG_LEVEL_INFO","clearSCORMError","checkTerminated","checkState","TERMINATION_BEFORE_INIT","MULTIPLE_TERMINATION","STATE_TERMINATED","result","storeData","errorCode","RETRIEVE_BEFORE_INIT","RETRIEVE_AFTER_TERM","getCMIValue","undefined","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","Object","hasOwnProperty","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","parseInt","isNaN","item","childArray","getChildElement","initialized","initialize","push","_foundFirstIndex","uninitializedErrorMessage","target","VALUE_NOT_INITIALIZED","CHILDREN_ERROR","COUNT_ERROR","listenerName","callback","listenerFunctions","listenerSplit","replace","listener","functionsMatch","listenerHasCMIElement","CMIElementsMatch","errorNumber","success","_calculateTotalTime","json","loadFromJSON","unflatten","startingData","key","currentCMIElement","JSON","stringify","parse","renderCMIToJSONString","_terminateCommit","url","params","genericError","httpReq","XMLHttpRequest","open","Array","setRequestHeader","send","join","responseText","when","ScheduledCommit","cancel","API","_API","_cancelled","_timeout2","setTimeout","wrapper","bind","clearTimeout","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","Number","interaction","interactions","type","interaction_type","interaction_count","response","pattern","GENERAL_SET_FAILURE","response_type","nodes","delimiter","max","checkCorrectResponseValue","DEPENDENCY_NOT_ESTABLISHED","CMICommentsObject","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","Function","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","_this2","CMIEvaluationComments","_this$comments","BaseCMI","comments_children","INVALID_SET_VALUE","_this3","student_preference_children","_lesson_type","_text_color","_text_location","_text_size","_video","windows","children","_this$windows","audio","language","lesson_type","speed","text","text_color","text_location","text_size","video","check12ValidFormat","CMIString256","CMIStudentPreference","_this4","student_data_children","_tries_during_lesson","tries","CMITries","_this$tries","max_time_allowed","time_limit_action","tries_during_lesson","throwReadOnlyError","CMIStudentData","_this5","_children","student_demographics_children","_city","_class","_company","_country","_experience","_familiar_name","_instructor_name","_title","_native_language","_state","_street_address","_telephone","_years_experience","city","class","company","country","experience","familiar_name","instructor_name","title","native_language","state","street_address","telephone","years_experience","clazz","paths_children","CMIPathsObject","_this6","_location_id","_date","_time","_status","_why_left","_time_in_element","location_id","date","time","status","why_left","time_in_element","CMITime","CMIStatus2","tries_children","_this7","_status2","_time2","CMIScore","score_children","score_range","invalidTypeCode","invalidRangeCode","VALUE_OUT_OF_RANGE","_this$score","CMIAttemptRecords","attempt_records_children","_this8","_lesson_status","_this$score2","_this9","_content","_location","_time3","content","location","checkValidFormat","regexPattern","allowEmptyString","checkValidRange","rangePattern","ranges","scorm12_regex","_initialized","_ref","decimalRegex","_children2","_score_range","_invalid_error_code","_invalid_type_code","_invalid_range_code","_decimal_regex","_raw","_min","_max","CMIDecimal","min","_ref2","_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","core_children","_student_id","_student_name","_lesson_location","_credit","_entry","_total_time","_lesson_mode","_exit","_session_time","_suspend_data","addHHMMSSTimeStrings","CMITimespan","student_id","student_name","lesson_location","entry","exit","session_time","CMIStatus","CMIExit","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","weighting","student_response","latency","CMIIdentifier","CMIType","weighting_range","CMIFeedback","CMIResult","_id2","_id3","_pattern","_event","NAVEvent","throwTypeMismatchError","check2004ValidFormat","check2004ValidRange","Util","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","addTwoDurations","learner_id","learner_name","CMICStatus","CMIString1000","progress_range","CMISStatus","CMIString64000","_audio_level","_delivery_speed","_audio_captioning","audio_level","delivery_speed","audio_captioning","CMILang","_timestamp","_learner_response","_description","timestamp","learner_response","description","CMILongIdentifier","CMILangString250","_success_status2","_completion_status2","_progress_measure2","_description2","_scaled","scaled_range","readOnlyAfterInit","arguments","_comment","_location2","_timestamp2","_readOnlyAfterInit","comment","CMILangString4000","CMIString250","ADLNav","_this$nav","_this10","_request","request_valid","ADLNavRequestValid","_this$request_valid","_this11","_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","other","_Scorm2004API","_Scorm12API","_AICC","window","getSecondsAsHHMMSS","totalSeconds","hours","Math","floor","SECONDS_PER_HOUR","dateObj","Date","minutes","getUTCMinutes","seconds","getSeconds","msStr","countDecimals","toFixed","getSecondsAsISODuration","duration","remainder","designations","forEach","_slicedToArray","sign","current_seconds","indexOf","getTimeAsSeconds","timeString","timeRegex","getDurationAsSeconds","durationRegex","_ref3","exec","_ref4","years","months","days","now","anchor","setFullYear","getFullYear","setMonth","getMonth","setDate","getDate","setHours","getHours","setMinutes","getMinutes","setSeconds","milliseconds","setMilliseconds","getMilliseconds","first","second","data","recurse","cur","prop","isArray","l","isEmpty","p","regex","m","num","toString","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,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,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAAOC,IAAO,MAC/DC,IAAO,MAAOl/B,IAAO,MAAOm/B,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,gBAGlD3uB;;q0BCzEf,IAAMnT,UA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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 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = 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 {boolean} checkTerminated\n * @param {string} CMIElement\n * @param {*} value\n * @return {string}\n */\n setValue(\n callbackName: 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);\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 (result.errorCode && result.errorCode > 0) {\n this.throwSCORMError(result.errorCode);\n }\n returnValue = 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.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 }\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 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 const CMIElementsMatch = listener.CMIElement === CMIElement;\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 this.loadFromJSON(unflatten(json), CMIElement);\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 * @return {object}\n */\n processHttpRequest(url: String, params) {\n const genericError = {\n 'result': global_constants.SCORM_FALSE,\n 'errorCode': this.#error_codes.GENERAL,\n };\n\n const httpReq = new XMLHttpRequest();\n httpReq.open('POST', url, false);\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 this.settings.commitRequestDataType);\n httpReq.send(JSON.stringify(params));\n }\n } catch (e) {\n return genericError;\n }\n\n try {\n return JSON.parse(httpReq.responseText);\n } catch (e) {\n return genericError;\n }\n }\n\n /**\n * Throws a SCORM error\n *\n * @param {number} when - the number of milliseconds to wait before committing\n */\n scheduleCommit(when: number) {\n this.#timeout = new ScheduledCommit(this, when);\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\n /**\n * Constructor for ScheduledCommit\n * @param {BaseAPI} API\n * @param {number} when\n */\n constructor(API: any, when: number) {\n this.#API = API;\n this.#timeout = setTimeout(this.wrapper.bind(this), when);\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();\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', false);\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', 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\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 } 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', 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 (!interaction.type) {\n this.throwSCORMError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);\n } else {\n const interaction_type = interaction.type;\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 const response_type = correct_responses[interaction_type];\n if (response_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 } else {\n this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,\n 'Incorrect Response Type: ' + interaction_type);\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 * 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_type = interaction.type;\n const interaction_count = interaction.correct_responses._count;\n if (interaction_type === 'choice') {\n for (let i = 0; i < interaction_count && this.lastErrorCode === 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 const response_type = correct_responses[interaction_type];\n if (typeof response_type.limit === 'undefined' || interaction_count <=\n response_type.limit) {\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 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\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);\n // check if this is a sequencing call, and then call the necessary JS\n if (navRequest && result.navRequest !== undefined &&\n result.navRequest !== '') {\n Function(`\"use strict\";(() => { ${result.navRequest} })()`)();\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\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 * Called when the API has been initialized after the CMI has been created\n */\n initialize() {\n this.#initialized = true;\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';\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)) {\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();\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 *\n * @return {string}\n */\n getCurrentTotalTime() {\n return Utilities.addHHMMSSTimeStrings(\n this.#total_time,\n this.#session_time,\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.jsonString) ? throwWriteOnlyError() : 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, 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 return Util.addTwoDurations(\n this.#total_time,\n this.#session_time,\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 (check2004ValidFormat(type, scorm2004_regex.CMIType)) {\n this.#type = type;\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 (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {\n this.#timestamp = timestamp;\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 (check2004ValidFormat(weighting, scorm2004_regex.CMIDecimal)) {\n this.#weighting = weighting;\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 (typeof this.type === 'undefined') {\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 } 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 (check2004ValidFormat(latency, scorm2004_regex.CMITimespan)) {\n this.#latency = latency;\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 (check2004ValidFormat(description, scorm2004_regex.CMILangString250, true)) {\n this.#description = description;\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 (check2004ValidFormat(success_status, scorm2004_regex.CMISStatus)) {\n this.#success_status = success_status;\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 (check2004ValidFormat(completion_status, scorm2004_regex.CMICStatus)) {\n this.#completion_status = completion_status;\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 (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 #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 (check2004ValidFormat(description, scorm2004_regex.CMILangString250, true)) {\n this.#description = description;\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, 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]{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|wrong|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 const now = new Date();\n const anchor = new Date(now);\n anchor.setFullYear(anchor.getFullYear() + Number(years || 0));\n anchor.setMonth(anchor.getMonth() + Number(months || 0));\n anchor.setDate(anchor.getDate() + Number(days || 0));\n anchor.setHours(anchor.getHours() + Number(hours || 0));\n anchor.setMinutes(anchor.getMinutes() + Number(minutes || 0));\n anchor.setSeconds(anchor.getSeconds() + Number(seconds || 0));\n if (seconds && countDecimals(String(seconds)) > 0) {\n const milliseconds = Number(Number(seconds) % 1).toFixed(6) * 1000.0;\n anchor.setMilliseconds(anchor.getMilliseconds() + milliseconds);\n }\n return ((anchor * 1.0) - now) / 1000.0;\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 9b2cf1e..def591d 100644 --- a/dist/scorm-again.min.js +++ b/dist/scorm-again.min.js @@ -1,19 +1,19 @@ (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;i0&&this.throwSCORMError(s.errorCode),r=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){void 0!==s&&(s=String(s));var o=global_constants.SCORM_FALSE;if(this.checkState(t,_classPrivateFieldGet(this,_error_codes).STORE_BEFORE_INIT,_classPrivateFieldGet(this,_error_codes).STORE_AFTER_TERM)){t&&(this.lastErrorCode=0);try{o=this.setCMIValue(r,s)}catch(e){e instanceof _exceptions.ValidationError?(this.lastErrorCode=e.errorCode,o=global_constants.SCORM_FALSE):(e.message?console.error(e.message):console.error(e),this.throwSCORMError(_classPrivateFieldGet(this,_error_codes).GENERAL))}this.processListeners(e,r,s)}return void 0===o&&(o=global_constants.SCORM_FALSE),"0"===String(this.lastErrorCode)&&this.settings.autocommit&&!_classPrivateFieldGet(this,_timeout)&&this.scheduleCommit(1e3*this.settings.autocommitSeconds),this.apiLog(e,r,": "+s+": result: "+o,global_constants.LOG_LEVEL_INFO),this.clearSCORMError(o),o}},{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);s.errorCode&&s.errorCode>0&&this.throwSCORMError(s.errorCode),r=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&&(a=e.replace(i+".","")),this.listenerArray.push({functionName:i,CMIElement:a,callback:t})}}},{key:"processListeners",value:function(e,t,r){for(var s=0;s=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,i,o;""===((null===(r=this.startingData)||void 0===r?void 0:null===(i=r.cmi)||void 0===i?void 0:null===(o=i.core)||void 0===o?void 0:o.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed")}}var n=this.renderCommitCMI(e);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)):(console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(n),global_constants.SCORM_TRUE)}}]),t}(_BaseAPI2.default);exports.default=Scorm12API; +"use strict";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={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var n=i?Object.getOwnPropertyDescriptor(e,o):null;n&&(n.get||n.set)?Object.defineProperty(r,o,n):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 _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 ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,i)}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,i,o;""===((null===(r=this.startingData)||void 0===r?void 0:null===(i=r.cmi)||void 0===i?void 0:null===(o=i.core)||void 0===o?void 0:o.lesson_status)||"")&&"not attempted"===t&&(this.cmi.core.lesson_status="browsed")}}var n=this.renderCommitCMI(e);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)):(console.log("Commit (terminated: "+(e?"yes":"no")+"): "),console.log(n),global_constants.SCORM_TRUE)}}]),t}(_BaseAPI2.default);exports.default=Scorm12API; },{"./BaseAPI":2,"./cmi/scorm12_cmi":7,"./constants/api_constants":9,"./constants/error_codes":10,"./utilities":16}],4:[function(require,module,exports){ -"use strict";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 _typeof(e){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 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&&m.length<=_.max?this.checkCorrectResponseValue(c,m,t):m.length>_.max&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}else this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Incorrect Response Type: "+c)}else this.throwSCORMError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);0===this.lastErrorCode&&(s=new _scorm2004_cmi.CMIInteractionsCorrectResponsesObject)}else r&&this.stringMatches(e,"cmi\\.interactions\\.\\d\\.objectives\\.\\d")?s=new _scorm2004_cmi.CMIInteractionsObjectivesObject:!r&&this.stringMatches(e,"cmi\\.interactions\\.\\d")?s=new _scorm2004_cmi.CMIInteractionsObject:this.stringMatches(e,"cmi\\.comments_from_learner\\.\\d")?s=new _scorm2004_cmi.CMICommentsObject:this.stringMatches(e,"cmi\\.comments_from_lms\\.\\d")&&(s=new _scorm2004_cmi.CMICommentsObject(!0));return s}},{key:"validateCorrectResponse",value:function(e,t){var r=e.split("."),s=Number(r[2]),o=Number(r[4]),i=this.cmi.interactions.childArray[s],n=i.type,c=i.correct_responses._count;if("choice"===n)for(var a=0;a0&&_.length<=u.max?this.checkCorrectResponseValue(n,_,t):_.length>u.max&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long"),0===this.lastErrorCode&&(!u.duplicate||!this.checkDuplicatedPattern(i.correct_responses,o,t))||0===this.lastErrorCode&&""===t||0===this.lastErrorCode&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Already Exists")}else this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached")}},{key:"getCMIValue",value:function(e){return this._commonGetCMIValue("GetValue",!0,e)}},{key:"getLmsErrorMessageDetails",value:function(e,t){var r="",s="";return e=String(e),scorm2004_constants.error_descriptions[e]&&(r=scorm2004_constants.error_descriptions[e].basicMessage,s=scorm2004_constants.error_descriptions[e].detailMessage),t?s:r}},{key:"checkCorrectResponseValue",value:function(e,t,r){for(var s=correct_responses[e],o=new RegExp(s.format),i=0;i1)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);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);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}},{key:"version",get:function(){return _classPrivateFieldGet(this,_version)}}]),t}(_BaseAPI2.default);exports.default=Scorm2004API;var _version=new WeakMap; +"use strict";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 _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 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&&m.length<=_.max?this.checkCorrectResponseValue(c,m,t):m.length>_.max&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long")}else this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Incorrect Response Type: "+c)}else this.throwSCORMError(scorm2004_error_codes.DEPENDENCY_NOT_ESTABLISHED);0===this.lastErrorCode&&(s=new _scorm2004_cmi.CMIInteractionsCorrectResponsesObject)}else r&&this.stringMatches(e,"cmi\\.interactions\\.\\d\\.objectives\\.\\d")?s=new _scorm2004_cmi.CMIInteractionsObjectivesObject:!r&&this.stringMatches(e,"cmi\\.interactions\\.\\d")?s=new _scorm2004_cmi.CMIInteractionsObject:this.stringMatches(e,"cmi\\.comments_from_learner\\.\\d")?s=new _scorm2004_cmi.CMICommentsObject:this.stringMatches(e,"cmi\\.comments_from_lms\\.\\d")&&(s=new _scorm2004_cmi.CMICommentsObject(!0));return s}},{key:"validateCorrectResponse",value:function(e,t){var r=e.split("."),s=Number(r[2]),o=Number(r[4]),i=this.cmi.interactions.childArray[s],n=i.type,c=i.correct_responses._count;if("choice"===n)for(var a=0;a0&&_.length<=u.max?this.checkCorrectResponseValue(n,_,t):_.length>u.max&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long"),0===this.lastErrorCode&&(!u.duplicate||!this.checkDuplicatedPattern(i.correct_responses,o,t))||0===this.lastErrorCode&&""===t||0===this.lastErrorCode&&this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Pattern Already Exists")}else this.throwSCORMError(scorm2004_error_codes.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached")}},{key:"getCMIValue",value:function(e){return this._commonGetCMIValue("GetValue",!0,e)}},{key:"getLmsErrorMessageDetails",value:function(e,t){var r="",s="";return e=String(e),scorm2004_constants.error_descriptions[e]&&(r=scorm2004_constants.error_descriptions[e].basicMessage,s=scorm2004_constants.error_descriptions[e].detailMessage),t?s:r}},{key:"checkCorrectResponseValue",value:function(e,t,r){for(var s=correct_responses[e],o=new RegExp(s.format),i=0;i1)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);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);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}},{key:"version",get:function(){return _classPrivateFieldGet(this,_version)}}]),t}(_BaseAPI2.default);exports.default=Scorm2004API;var _version=new WeakMap; },{"./BaseAPI":2,"./cmi/scorm2004_cmi":8,"./constants/api_constants":9,"./constants/error_codes":10,"./constants/language_constants":11,"./constants/regex":12,"./constants/response_constants":13,"./utilities":16}],5:[function(require,module,exports){ -"use strict";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={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var n=s?Object.getOwnPropertyDescriptor(e,r):null;n&&(n.get||n.set)?Object.defineProperty(i,r,n):i[r]=e[r]}return i.default=e,t&&t.set(e,i),i}function _typeof(e){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 _classPrivateFieldSet(e,t,i){var s=t.get(e);if(!s)throw new TypeError("attempted to set private field on non-instance");if(s.set)s.set.call(e,i);else{if(!s.writable)throw new TypeError("attempted to set read only private field");s.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,BaseCMI=function(){function e(){if(_classCallCheck(this,e),_defineProperty(this,"jsonString",!1),_initialized.set(this,{writable:!0,value:!1}),(this instanceof e?this.constructor:void 0)===e)throw new TypeError("Cannot construct BaseCMI instances directly")}return _createClass(e,[{key:"initialize",value:function(){_classPrivateFieldSet(this,_initialized,!0)}},{key:"initialized",get:function(){return _classPrivateFieldGet(this,_initialized)}}]),e}();exports.BaseCMI=BaseCMI;var _initialized=new WeakMap,CMIScore=function(e){function t(e){var i,r=e.score_children,a=e.score_range,s=e.max,n=e.invalidErrorCode,o=e.invalidTypeCode,l=e.invalidRangeCode,_=e.decimalRegex;return _classCallCheck(this,t),i=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_children2.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_score_range.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_error_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_type_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_range_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_decimal_regex.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_raw.set(_assertThisInitialized(i),{writable:!0,value:""}),_min.set(_assertThisInitialized(i),{writable:!0,value:""}),_max.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(i),_children2,r||scorm12_constants.score_children),_classPrivateFieldSet(_assertThisInitialized(i),_score_range,!!a&&scorm12_regex.score_range),_classPrivateFieldSet(_assertThisInitialized(i),_max,s||""===s?s:"100"),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_error_code,n||scorm12_error_codes.INVALID_SET_VALUE),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_type_code,o||scorm12_error_codes.TYPE_MISMATCH),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_range_code,l||scorm12_error_codes.VALUE_OUT_OF_RANGE),_classPrivateFieldSet(_assertThisInitialized(i),_decimal_regex,_||scorm12_regex.CMIDecimal),i}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}},{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)}}]),t}(BaseCMI);exports.CMIScore=CMIScore;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,CMIArray=function(e){function t(e){var i,r=e.children,a=e.errorCode;return _classCallCheck(this,t),i=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_errorCode.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_children3.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(i),_children3,r),_classPrivateFieldSet(_assertThisInitialized(i),_errorCode,a),i.childArray=[],i}return _inherits(t,e),_createClass(t,[{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,BaseCMI=function(){function e(){if(_classCallCheck(this,e),_defineProperty(this,"jsonString",!1),_initialized.set(this,{writable:!0,value:!1}),(this instanceof e?this.constructor:void 0)===e)throw new TypeError("Cannot construct BaseCMI instances directly")}return _createClass(e,[{key:"initialize",value:function(){_classPrivateFieldSet(this,_initialized,!0)}},{key:"initialized",get:function(){return _classPrivateFieldGet(this,_initialized)}}]),e}();exports.BaseCMI=BaseCMI;var _initialized=new WeakMap,CMIScore=function(e){function t(e){var i,r=e.score_children,a=e.score_range,s=e.max,n=e.invalidErrorCode,o=e.invalidTypeCode,l=e.invalidRangeCode,_=e.decimalRegex;return _classCallCheck(this,t),i=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_children2.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_score_range.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_error_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_type_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_invalid_range_code.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_decimal_regex.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_raw.set(_assertThisInitialized(i),{writable:!0,value:""}),_min.set(_assertThisInitialized(i),{writable:!0,value:""}),_max.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(i),_children2,r||scorm12_constants.score_children),_classPrivateFieldSet(_assertThisInitialized(i),_score_range,!!a&&scorm12_regex.score_range),_classPrivateFieldSet(_assertThisInitialized(i),_max,s||""===s?s:"100"),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_error_code,n||scorm12_error_codes.INVALID_SET_VALUE),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_type_code,o||scorm12_error_codes.TYPE_MISMATCH),_classPrivateFieldSet(_assertThisInitialized(i),_invalid_range_code,l||scorm12_error_codes.VALUE_OUT_OF_RANGE),_classPrivateFieldSet(_assertThisInitialized(i),_decimal_regex,_||scorm12_regex.CMIDecimal),i}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={raw:this.raw,min:this.min,max:this.max};return delete this.jsonString,e}},{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)}}]),t}(BaseCMI);exports.CMIScore=CMIScore;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,CMIArray=function(e){function t(e){var i,r=e.children,a=e.errorCode;return _classCallCheck(this,t),i=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_errorCode.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_children3.set(_assertThisInitialized(i),{writable:!0,value:void 0}),_classPrivateFieldSet(_assertThisInitialized(i),_children3,r),_classPrivateFieldSet(_assertThisInitialized(i),_errorCode,a),i.childArray=[],i}return _inherits(t,e),_createClass(t,[{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=_possibleConstructorReturn(this,_getPrototypeOf(t).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,i),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={comment:this.comment,location:this.location,timestamp:this.timestamp};return delete this.jsonString,e}},{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)}}]),t}(_common.BaseCMI);exports.CMICommentsObject=CMICommentsObject;var _comment=new WeakMap,_location2=new WeakMap,_timestamp2=new WeakMap,_readOnlyAfterInit=new WeakMap,CMIInteractionsObjectivesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_id3.set(_assertThisInitialized(e),{writable:!0,value:""}),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={id:this.id};return delete this.jsonString,e}},{key:"id",get:function(){return _classPrivateFieldGet(this,_id3)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMILongIdentifier)&&_classPrivateFieldSet(this,_id3,e)}}]),t}(_common.BaseCMI);exports.CMIInteractionsObjectivesObject=CMIInteractionsObjectivesObject;var _id3=new WeakMap,CMIInteractionsCorrectResponsesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_pattern.set(_assertThisInitialized(e),{writable:!0,value:""}),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={pattern:this.pattern};return delete this.jsonString,e}},{key:"pattern",get:function(){return _classPrivateFieldGet(this,_pattern)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMIFeedback)&&_classPrivateFieldSet(this,_pattern,e)}}]),t}(_common.BaseCMI);exports.CMIInteractionsCorrectResponsesObject=CMIInteractionsCorrectResponsesObject;var _pattern=new WeakMap,ADL=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),e.nav=new ADLNav,e}return _inherits(t,e),_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 ADLNav=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_request.set(_assertThisInitialized(e),{writable:!0,value:"_none_"}),e.request_valid=new ADLNavRequestValid,e}return _inherits(t,e),_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:"toJSON",value:function(){this.jsonString=!0;var e={request:this.request};return delete this.jsonString,e}},{key:"request",get:function(){return _classPrivateFieldGet(this,_request)},set:function(e){check2004ValidFormat(e,scorm2004_regex.NAVEvent)&&_classPrivateFieldSet(this,_request,e)}}]),t}(_common.BaseCMI),_request=new WeakMap,ADLNavRequestValid=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).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}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={previous:this.previous,continue:this.continue};return delete this.jsonString,e}},{key:"continue",get:function(){return _classPrivateFieldGet(this,_continue)},set:function(e){throwReadOnlyError()}},{key:"previous",get:function(){return _classPrivateFieldGet(this,_previous)},set:function(e){throwReadOnlyError()}}]),t}(_common.BaseCMI),_continue=new WeakMap,_previous=new WeakMap; +"use strict";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 _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 _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=_possibleConstructorReturn(this,_getPrototypeOf(t).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,i),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={comment:this.comment,location:this.location,timestamp:this.timestamp};return delete this.jsonString,e}},{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)}}]),t}(_common.BaseCMI);exports.CMICommentsObject=CMICommentsObject;var _comment=new WeakMap,_location2=new WeakMap,_timestamp2=new WeakMap,_readOnlyAfterInit=new WeakMap,CMIInteractionsObjectivesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_id3.set(_assertThisInitialized(e),{writable:!0,value:""}),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={id:this.id};return delete this.jsonString,e}},{key:"id",get:function(){return _classPrivateFieldGet(this,_id3)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMILongIdentifier)&&_classPrivateFieldSet(this,_id3,e)}}]),t}(_common.BaseCMI);exports.CMIInteractionsObjectivesObject=CMIInteractionsObjectivesObject;var _id3=new WeakMap,CMIInteractionsCorrectResponsesObject=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_pattern.set(_assertThisInitialized(e),{writable:!0,value:""}),e}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={pattern:this.pattern};return delete this.jsonString,e}},{key:"pattern",get:function(){return _classPrivateFieldGet(this,_pattern)},set:function(e){check2004ValidFormat(e,scorm2004_regex.CMIFeedback)&&_classPrivateFieldSet(this,_pattern,e)}}]),t}(_common.BaseCMI);exports.CMIInteractionsCorrectResponsesObject=CMIInteractionsCorrectResponsesObject;var _pattern=new WeakMap,ADL=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),e.nav=new ADLNav,e}return _inherits(t,e),_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 ADLNav=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).call(this)),_request.set(_assertThisInitialized(e),{writable:!0,value:"_none_"}),e.request_valid=new ADLNavRequestValid,e}return _inherits(t,e),_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:"toJSON",value:function(){this.jsonString=!0;var e={request:this.request};return delete this.jsonString,e}},{key:"request",get:function(){return _classPrivateFieldGet(this,_request)},set:function(e){check2004ValidFormat(e,scorm2004_regex.NAVEvent)&&_classPrivateFieldSet(this,_request,e)}}]),t}(_common.BaseCMI),_request=new WeakMap,ADLNavRequestValid=function(e){function t(){var e;return _classCallCheck(this,t),e=_possibleConstructorReturn(this,_getPrototypeOf(t).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}return _inherits(t,e),_createClass(t,[{key:"toJSON",value:function(){this.jsonString=!0;var e={previous:this.previous,continue:this.continue};return delete this.jsonString,e}},{key:"continue",get:function(){return _classPrivateFieldGet(this,_continue)},set:function(e){throwReadOnlyError()}},{key:"previous",get:function(){return _classPrivateFieldGet(this,_previous)},set:function(e){throwReadOnlyError()}}]),t}(_common.BaseCMI),_continue=new WeakMap,_previous=new WeakMap; },{"../constants/api_constants":9,"../constants/error_codes":10,"../constants/regex":12,"../constants/response_constants":13,"../exceptions":14,"../utilities":16,"./common":6}],9:[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